Submit Search
Closures and methodMissing are real
3 likes
5,342 views
Takahiro Sugiura
1 of 42
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
More Related Content
PDF
Groovyで学ぶプロセス代数 #jjug
kyon mm
PPTX
YAPC::ASIA 2012 LT GaiaX
Kazuyuki Todo
PPTX
そんな装備で大丈夫か?
2celeb
ODP
こんにちはGroovy
irof N
PDF
Hacking Ruby with Python
Taisuke Yamada
PPTX
技術ドキュメントで難しい英文に出会ったら
Wataru Terada
PDF
プログラミング・パラダイム
Yusuke Matsushita
PDF
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
parrotstudio
Groovyで学ぶプロセス代数 #jjug
kyon mm
YAPC::ASIA 2012 LT GaiaX
Kazuyuki Todo
そんな装備で大丈夫か?
2celeb
こんにちはGroovy
irof N
Hacking Ruby with Python
Taisuke Yamada
技術ドキュメントで難しい英文に出会ったら
Wataru Terada
プログラミング・パラダイム
Yusuke Matsushita
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
parrotstudio
What's hot
(17)
PDF
道具を磨き続ける
Takuya Fujimura
PDF
Javaな人が今すぐ使えるG*
irof N
PPT
Javascriptで無限ループを実現する5つの方法
yhara
PPT
Smalltalk との比較で深まる Citrine の理解
TAKANO Mitsuhiro
PDF
Debug Hacks at Security and Programming camp 2011
Hiro Yoshioka
PDF
Goでこれどうやるの? 入門
zaru sakuraba
PDF
Programming camp 2010 debug hacks
Hiro Yoshioka
PDF
神戸Rustの会 #1 LT - I'm lazy rust programmer
Hattori Hideo
PDF
塹壕戦から揚陸艇強襲上陸まで (2012/03/17 pyfes)
natsu_bm
PPTX
20120822_dstn技術交流会_すぐに使えるsdkアダプタ開発
dstn
PPTX
JavaScript非同期処理 入門
Ishibashi Ryosuke
PDF
PHP-ML で手書き数字認識
y-uti
PPTX
ここがすごい! なぞとPHP5.3
Takuya Sato
PDF
Go言語オーバービュー201507
エンジニア勉強会 エスキュービズム
PPTX
プログラミング技法特論第5回
guest61bed5f
ODP
Shortcodin
Ken Ogura
PPTX
仕事でも Groovy を使おう!
Oda Shinsuke
道具を磨き続ける
Takuya Fujimura
Javaな人が今すぐ使えるG*
irof N
Javascriptで無限ループを実現する5つの方法
yhara
Smalltalk との比較で深まる Citrine の理解
TAKANO Mitsuhiro
Debug Hacks at Security and Programming camp 2011
Hiro Yoshioka
Goでこれどうやるの? 入門
zaru sakuraba
Programming camp 2010 debug hacks
Hiro Yoshioka
神戸Rustの会 #1 LT - I'm lazy rust programmer
Hattori Hideo
塹壕戦から揚陸艇強襲上陸まで (2012/03/17 pyfes)
natsu_bm
20120822_dstn技術交流会_すぐに使えるsdkアダプタ開発
dstn
JavaScript非同期処理 入門
Ishibashi Ryosuke
PHP-ML で手書き数字認識
y-uti
ここがすごい! なぞとPHP5.3
Takuya Sato
Go言語オーバービュー201507
エンジニア勉強会 エスキュービズム
プログラミング技法特論第5回
guest61bed5f
Shortcodin
Ken Ogura
仕事でも Groovy を使おう!
Oda Shinsuke
Ad
Viewers also liked
(7)
PDF
ジャパネットQB GPars
Takahiro Sugiura
PDF
GContractsの基礎
Takahiro Sugiura
PDF
Introduction to Spock
Takahiro Sugiura
PDF
Vert.x.tari.tari
Takahiro Sugiura
PDF
GroovyからAnime
Takahiro Sugiura
PDF
Goos 001
Yuki Akamatsu
PDF
Groovyしたり RPしなかったり あとは時々布教活動したり
Takahiro Sugiura
ジャパネットQB GPars
Takahiro Sugiura
GContractsの基礎
Takahiro Sugiura
Introduction to Spock
Takahiro Sugiura
Vert.x.tari.tari
Takahiro Sugiura
GroovyからAnime
Takahiro Sugiura
Goos 001
Yuki Akamatsu
Groovyしたり RPしなかったり あとは時々布教活動したり
Takahiro Sugiura
Ad
Similar to Closures and methodMissing are real
(20)
PDF
今日から始める Go言語 と appengine
a know
PDF
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Akira Inoue
PDF
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
Shoken Fujisaki
PDF
テーマ制作時の疑問とノンプログラマーにも優しいテーマを考える
Tsuyoshi.
PDF
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Koichi Sasada
PDF
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
mametter
PDF
TechDo Goハンズオン#3
privatemy
PDF
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
Masahito Zembutsu
PDF
Easy scripting in Go
naoty_bot
PDF
PHP7をDockerで動かしたという話
侑弥 濱田
PDF
Play meetup-2-dev-best-practices
k4200
PDF
YAPC::Asia2015
Masaru Hoshino
PPTX
[141004] cedec 2014 참관기 & 강연 리뷰 #1
MinGeun Park
PDF
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
Takuma Morikawa
PPTX
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
gree_tech
PDF
議論を描く技術「ファシリテーショングラフィック」
nishikawa_makoto7
PDF
【Qp08】ざびたん2リリース報告lt 20111022
Seiichiro Ishida
KEY
ぼくのがんがえたふつうのぎじゅつしゃ
Masakazu Muraoka
PDF
PyCon APAC 2013 Web Secure Coding
Gouji Ochiai
PDF
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
今日から始める Go言語 と appengine
a know
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Akira Inoue
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
Shoken Fujisaki
テーマ制作時の疑問とノンプログラマーにも優しいテーマを考える
Tsuyoshi.
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Koichi Sasada
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
mametter
TechDo Goハンズオン#3
privatemy
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
Masahito Zembutsu
Easy scripting in Go
naoty_bot
PHP7をDockerで動かしたという話
侑弥 濱田
Play meetup-2-dev-best-practices
k4200
YAPC::Asia2015
Masaru Hoshino
[141004] cedec 2014 참관기 & 강연 리뷰 #1
MinGeun Park
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
Takuma Morikawa
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
gree_tech
議論を描く技術「ファシリテーショングラフィック」
nishikawa_makoto7
【Qp08】ざびたん2リリース報告lt 20111022
Seiichiro Ishida
ぼくのがんがえたふつうのぎじゅつしゃ
Masakazu Muraoka
PyCon APAC 2013 Web Secure Coding
Gouji Ochiai
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
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 秋アニメ オススメ
35.
PSYCHO-PASS 2
37.
棺のチャイカ 第2期 AVENGING
BATTLE
39.
selector spread WIXOSS
41.
蟲師 続章
42.
ご清聴 ありがとう ございました。
Download