Suche senden
Hochladen
Closures and methodMissing are real
•
3 gefällt mir
•
5,338 views
Takahiro Sugiura
Folgen
Technologie
Melden
Teilen
Melden
Teilen
1 von 42
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Groovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjug
kyon mm
YAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaX
Kazuyuki Todo
そんな装備で大丈夫か?
そんな装備で大丈夫か?
2celeb
こんにちはGroovy
こんにちはGroovy
irof N
Hacking Ruby with Python
Hacking Ruby with Python
Taisuke Yamada
技術ドキュメントで難しい英文に出会ったら
技術ドキュメントで難しい英文に出会ったら
Wataru Terada
プログラミング・パラダイム
プログラミング・パラダイム
Yusuke Matsushita
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
parrotstudio
Empfohlen
Groovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjug
kyon mm
YAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaX
Kazuyuki Todo
そんな装備で大丈夫か?
そんな装備で大丈夫か?
2celeb
こんにちはGroovy
こんにちはGroovy
irof N
Hacking Ruby with Python
Hacking Ruby with Python
Taisuke Yamada
技術ドキュメントで難しい英文に出会ったら
技術ドキュメントで難しい英文に出会ったら
Wataru Terada
プログラミング・パラダイム
プログラミング・パラダイム
Yusuke Matsushita
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
parrotstudio
道具を磨き続ける
道具を磨き続ける
Takuya Fujimura
Javaな人が今すぐ使えるG*
Javaな人が今すぐ使えるG*
irof N
Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法
yhara
Smalltalk との比較で深まる Citrine の理解
Smalltalk との比較で深まる Citrine の理解
TAKANO Mitsuhiro
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011
Hiro Yoshioka
Goでこれどうやるの? 入門
Goでこれどうやるの? 入門
zaru sakuraba
Programming camp 2010 debug hacks
Programming camp 2010 debug hacks
Hiro Yoshioka
神戸Rustの会 #1 LT - I'm lazy rust programmer
神戸Rustの会 #1 LT - I'm lazy rust programmer
Hattori Hideo
塹壕戦から揚陸艇強襲上陸まで (2012/03/17 pyfes)
塹壕戦から揚陸艇強襲上陸まで (2012/03/17 pyfes)
natsu_bm
20120822_dstn技術交流会_すぐに使えるsdkアダプタ開発
20120822_dstn技術交流会_すぐに使えるsdkアダプタ開発
dstn
JavaScript非同期処理 入門
JavaScript非同期処理 入門
Ishibashi Ryosuke
PHP-ML で手書き数字認識
PHP-ML で手書き数字認識
y-uti
ここがすごい! なぞとPHP5.3
ここがすごい! なぞとPHP5.3
Takuya Sato
Go言語オーバービュー201507
Go言語オーバービュー201507
エンジニア勉強会 エスキュービズム
プログラミング技法特論第5回
プログラミング技法特論第5回
guest61bed5f
Shortcodin
Shortcodin
Ken Ogura
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!
Oda Shinsuke
ジャパネットQB GPars
ジャパネットQB GPars
Takahiro Sugiura
GContractsの基礎
GContractsの基礎
Takahiro Sugiura
Introduction to Spock
Introduction to Spock
Takahiro Sugiura
Vert.x.tari.tari
Vert.x.tari.tari
Takahiro Sugiura
GroovyからAnime
GroovyからAnime
Takahiro Sugiura
Weitere ähnliche Inhalte
Was ist angesagt?
道具を磨き続ける
道具を磨き続ける
Takuya Fujimura
Javaな人が今すぐ使えるG*
Javaな人が今すぐ使えるG*
irof N
Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法
yhara
Smalltalk との比較で深まる Citrine の理解
Smalltalk との比較で深まる Citrine の理解
TAKANO Mitsuhiro
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011
Hiro Yoshioka
Goでこれどうやるの? 入門
Goでこれどうやるの? 入門
zaru sakuraba
Programming camp 2010 debug hacks
Programming camp 2010 debug hacks
Hiro Yoshioka
神戸Rustの会 #1 LT - I'm lazy rust programmer
神戸Rustの会 #1 LT - I'm lazy rust programmer
Hattori Hideo
塹壕戦から揚陸艇強襲上陸まで (2012/03/17 pyfes)
塹壕戦から揚陸艇強襲上陸まで (2012/03/17 pyfes)
natsu_bm
20120822_dstn技術交流会_すぐに使えるsdkアダプタ開発
20120822_dstn技術交流会_すぐに使えるsdkアダプタ開発
dstn
JavaScript非同期処理 入門
JavaScript非同期処理 入門
Ishibashi Ryosuke
PHP-ML で手書き数字認識
PHP-ML で手書き数字認識
y-uti
ここがすごい! なぞとPHP5.3
ここがすごい! なぞとPHP5.3
Takuya Sato
Go言語オーバービュー201507
Go言語オーバービュー201507
エンジニア勉強会 エスキュービズム
プログラミング技法特論第5回
プログラミング技法特論第5回
guest61bed5f
Shortcodin
Shortcodin
Ken Ogura
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!
Oda Shinsuke
Was ist angesagt?
(17)
道具を磨き続ける
道具を磨き続ける
Javaな人が今すぐ使えるG*
Javaな人が今すぐ使えるG*
Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法
Smalltalk との比較で深まる Citrine の理解
Smalltalk との比較で深まる Citrine の理解
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011
Goでこれどうやるの? 入門
Goでこれどうやるの? 入門
Programming camp 2010 debug hacks
Programming camp 2010 debug hacks
神戸Rustの会 #1 LT - I'm lazy rust programmer
神戸Rustの会 #1 LT - I'm lazy rust programmer
塹壕戦から揚陸艇強襲上陸まで (2012/03/17 pyfes)
塹壕戦から揚陸艇強襲上陸まで (2012/03/17 pyfes)
20120822_dstn技術交流会_すぐに使えるsdkアダプタ開発
20120822_dstn技術交流会_すぐに使えるsdkアダプタ開発
JavaScript非同期処理 入門
JavaScript非同期処理 入門
PHP-ML で手書き数字認識
PHP-ML で手書き数字認識
ここがすごい! なぞとPHP5.3
ここがすごい! なぞとPHP5.3
Go言語オーバービュー201507
Go言語オーバービュー201507
プログラミング技法特論第5回
プログラミング技法特論第5回
Shortcodin
Shortcodin
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!
Andere mochten auch
ジャパネットQB GPars
ジャパネットQB GPars
Takahiro Sugiura
GContractsの基礎
GContractsの基礎
Takahiro Sugiura
Introduction to Spock
Introduction to Spock
Takahiro Sugiura
Vert.x.tari.tari
Vert.x.tari.tari
Takahiro Sugiura
GroovyからAnime
GroovyからAnime
Takahiro Sugiura
Goos 001
Goos 001
Yuki Akamatsu
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Takahiro Sugiura
Andere mochten auch
(7)
ジャパネットQB GPars
ジャパネットQB GPars
GContractsの基礎
GContractsの基礎
Introduction to Spock
Introduction to Spock
Vert.x.tari.tari
Vert.x.tari.tari
GroovyからAnime
GroovyからAnime
Goos 001
Goos 001
Groovyしたり RPしなかったり あとは時々布教活動したり
Groovyしたり RPしなかったり あとは時々布教活動したり
Ähnlich wie Closures and methodMissing are real
今日から始める Go言語 と appengine
今日から始める Go言語 と appengine
a know
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Akira Inoue
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
Shoken Fujisaki
テーマ制作時の疑問とノンプログラマーにも優しいテーマを考える
テーマ制作時の疑問とノンプログラマーにも優しいテーマを考える
Tsuyoshi.
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Koichi Sasada
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
mametter
TechDo Goハンズオン#3
TechDo Goハンズオン#3
privatemy
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
Masahito Zembutsu
Easy scripting in Go
Easy scripting in Go
naoty_bot
PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話
侑弥 濱田
Play meetup-2-dev-best-practices
Play meetup-2-dev-best-practices
k4200
YAPC::Asia2015
YAPC::Asia2015
Masaru Hoshino
[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1
MinGeun Park
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
Takuma Morikawa
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
gree_tech
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」
nishikawa_makoto7
【Qp08】ざびたん2リリース報告lt 20111022
【Qp08】ざびたん2リリース報告lt 20111022
Seiichiro Ishida
ぼくのがんがえたふつうのぎじゅつしゃ
ぼくのがんがえたふつうのぎじゅつしゃ
Masakazu Muraoka
PyCon APAC 2013 Web Secure Coding
PyCon APAC 2013 Web Secure Coding
Gouji Ochiai
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
Ähnlich wie Closures and methodMissing are real
(20)
今日から始める Go言語 と appengine
今日から始める Go言語 と appengine
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
テーマ制作時の疑問とノンプログラマーにも優しいテーマを考える
テーマ制作時の疑問とノンプログラマーにも優しいテーマを考える
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
TechDo Goハンズオン#3
TechDo Goハンズオン#3
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
Easy scripting in Go
Easy scripting in Go
PHP7をDockerで動かしたという話
PHP7をDockerで動かしたという話
Play meetup-2-dev-best-practices
Play meetup-2-dev-best-practices
YAPC::Asia2015
YAPC::Asia2015
[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」
【Qp08】ざびたん2リリース報告lt 20111022
【Qp08】ざびたん2リリース報告lt 20111022
ぼくのがんがえたふつうのぎじゅつしゃ
ぼくのがんがえたふつうのぎじゅつしゃ
PyCon APAC 2013 Web Secure Coding
PyCon APAC 2013 Web Secure Coding
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Kürzlich hochgeladen
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
Atomu Hidaka
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
Shota Ito
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
osamut
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
furutsuka
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
Kürzlich hochgeladen
(9)
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
Closures and methodMissing are real
1.
Closures and methodMissing
are real G* ワークショップ Z 札幌 2014 2014/09/27
2.
日本語で言うと
3.
クロージャも、 methodMissing も、あるんだよ
G* ワークショップ Z 札幌 2014 2014/09/27
4.
背景を付けると、
5.
クロージャも、 methodMissing も、あるんだよ
G* ワークショップ Z 札幌 2014 2014/09/27
6.
お前誰よ • 名前:杉浦孝博
• twitter : @touchez_du_bois • 夜のお仕事: 深夜アニメ普及活動 提督業(艦隊これくしょん)
7.
It's not important,
but... (余談ですが)
8.
Do you know
the DSL? (DSLをご存じですか?)
9.
DSL • Domain
Specific Languageの略。 • 特定の領域(ドメイン)の問題を解決する ための言語。 • 専用のパーサーを作る「外部DSL」と、 プログラミング言語を利用する「内部 DSL」、といった分け方ができる。
10.
内部DSLの例 • GrailsでSpring
Beanの登録。 // grails-app/conf/spring/resources.groovy ! import my.company.MyBeanImpl ! beans = { myBean(MyBeanImpl) { someProperty = 42 otherProperty = "blue" } }
11.
GroovyでDSL • Builder
• Category • Operator overloading • Command chains • Closure • Meta programming • AST Transformer ...
12.
Let’s make a
DSL! (DSLを作ってみよう!)
13.
お題 • VoiceText
Web API (β版) • https://cloud.voicetext.jp/webapi • 音声合成VoiceTextを簡単に使うことが できるWeb API • このWeb APIを叩くためのDSLを作っ てみる。
14.
お題 • こんな感じのAPI
curl "https://api.voicetext.jp/v1/tts" -o "test.wav" -u "YOUR_API_KEY:" -d "text=おはようございます" -d "speaker=hikari"
15.
お題 • パラメータ
text 合成するテキスト。エンコーディングはUTF-8。 Unicodeで200文字以内。 speaker 話者名 emotion 感情カテゴリ emotion_level 感情レベル pitch 音の高低 speed 話す速度 volume 音量
16.
VoiceText4J • @makingさん作のJava版ライブラリ
• https://github.com/making/voicetext4j/ • 大いに参考にさせていただきました。
17.
VoiceText4J import am.ik.voicetext4j.*;
! System.setProperty("voicetext.apikey", “API_KEY"); ! EmotionalSpeaker.HIKARI.ready() .pitch(105) .speed(105) .speak("おはようございます");
18.
I made a
DSL. (DSLを作ってみた)
19.
こんな感じ import org.jggug.magica.voicetext4g.VoiceTextFactory
import org.jggug.magica.voicetext4g.config.Speaker ! def voiceText = VoiceTextFactory.create("YOUR_API_KEY") ! voiceText.speak { speaker Speaker.HIKARI pitch 105 speed 105 "おはようございます" }
20.
Demo. (でも)
21.
デモのソース import org.jggug.magica.voicetext4g.VoiceTextFactory
import org.jggug.magica.voicetext4g.config.Speaker ! def voiceText = VoiceTextFactory.create("YOUR_API_KEY") ! voiceText.speak { speaker Speaker.SHOW "どうも、奥さん、知ってるでしょ〜、大泉洋でございます。おい、パイ食わねえか?" }
22.
Points (ポイント)
23.
クロージャを使う voiceText .speaker(Speaker.HIKARI)
.pitch(105) .speed(105) .speak("おはようございます") ! ↓ ! voiceText.speak { speaker Speaker.HIKARI pitch 105 speed 105 "おはようございます" }
24.
メソッド呼び出しのカッコ省略 voiceText.speak( {
speaker(Speaker.HIKARI) pitch(105) speed(105) "おはようございます" }) ! ↓ ! voiceText.speak { speaker Speaker.HIKARI pitch 105 speed 105 "おはようございます" }
25.
return 省略 voiceText.speak
{ speaker Speaker.HIKARI pitch 105 speed 105 return "おはようございます" } ! ↓ ! voiceText.speak { speaker Speaker.HIKARI pitch 105 speed 105 "おはようございます" }
26.
クロージャの戻り値 def speak(Closure
c) { def text = c() // クロージャの戻り値の型がStringかGString以外の場合、 // 何もしない if (!(text instanceof String || text instanceof GString)) { return } ! // Web APIを叩き、音声を再生 }
27.
設定用のメソッド • VoiceTextクラスに、speakerやpitch
等の設定用メソッドは定義しない。 • 設定用のクラス(Config)のオブジェクト をメンバ変数に持つ。 class VoiceText { Config config def speak(Closure c) { } }
28.
delegateを変更 class VoiceText
{ Config config def speak(Closure c) { c.delegate = this def text = c() } }
29.
methodMissing class VoiceText
{ Config config def speak(Closure c) { c.delegate = this def text = c() } def methodMissing(String name, args) { config."${name}" = args[0] } }
30.
To wrap up
(まとめ)
31.
まとめ • クロージャやmethodMissingなどを使
うことで、自分だけのDSL(DSLっぽい もの)が作れる。 • オレオレDSLで差を付けよう!
32.
Get back on
topic (閑話休題)
33.
2014 秋アニメ オススメ
34.
35.
PSYCHO-PASS 2
36.
37.
棺のチャイカ 第2期 AVENGING
BATTLE
38.
39.
selector spread WIXOSS
40.
41.
蟲師 続章
42.
ご清聴 ありがとう ございました。
Jetzt herunterladen