『G*ワークショップ「Vert.x+JavaOne+Groovy2.0なG*」 #jggug』に参加してきた
勉強会でも殆ど聞かない
Groovyの勉強会あります!
どこで情報収集すればいいかわからない?
ここにカレンダーが!
JGGUG イベントカレンダー
告知が足りない?
勉強会カレンダーにも載ってるし、
こくちーずでGroovy、Grailsタグもある。
Facebookのグループも、MLもあるよ。
2012/10/26に行われたG*ワークショップ「Vert.x+JavaOne+Groovy2.0なG*」 #jggugに参加しました。
そのレポートです。
G*なJavaOne報告2012秋 〜サンフランシスコの風に吹かれて〜 @gantawitter
Rasberry Pi
Rasberry Piが一番盛り上がった。
落ちるところが・・・
Design Patterns in Groovy
写経してみる。
- Cascade
- method chaining Tarditional way
class Mailer { def to(addr) { println 'to ...' } def from(addr) { println 'from ...' } def sub(subject) { println 'sub ...' } def body(msg) { println 'body ...' } def send() { println 'send ...' } } // Tarditional way Mailer mailer =new Mailer() mailer.to('sameone@example.com') mailer.from('sender@example.com') mailer.sub('build fixed') mailer.body('...message...') mailer.send()
to ... from ... sub ... body ... send ...
-
- method chaining
class Mailer { def to(addr) { println 'to ...'; this } def from(addr) { println 'from ...'; this } def sub(subject) { println 'sub ...'; this } def body(msg) { println 'body ...'; this } def send() { println 'send ...'; this } } // Chaining new Mailer() .to('sameone@example.com') .from('sender@example.com') .sub('build fixed') .body('...message...') .send()
to ... from ... sub ... body ... send ...
return this のreturnが省略されてる。
参考:return省略のルール
-
- fluency
class Mailer { def to(addr) { println 'to ...' } def from(addr) { println 'from ...' } def sub(subject) { println 'sub ...' } def body(msg) { println 'body ...' } def static send(block) { Mailer mailer = new Mailer() mailer.with block println 'send...' } } Mailer.send { to 'sameone@example.com' from 'sender@example.com' sub 'build fixed' body '...message...' }
to ... from ... sub ... body ... send...
こういう流暢なコード書けないな。。。
えっ?輝彩滑刀の流法と呼べ?
Intercept, cache, and invoke pattern
class Person { def activities = ['Football', 'Tennis'] def methodMissing(String name, args) { println "interceptiong $name" if (name.startsWith('play')) { def activity = name.split('play')[1] if (activities.contains(activity)) { def impl = { Object[] tehArgs -> println "I like playing $activity" } getMetaClass()."$name" = impl return impl(args) } throw new MissingMethodException(name, this.calss, args) } } } Person sam = new Person() sam.playTennis() sam.playTennis() sam.playTennis() sam.playTennis() sam.playFootball() sam.playFootball()
interceptiong playTennis ・・・1回目でキャッシュされてないのでこのメッセージがでる I like playing Tennis・・・・・・2回目以降はキャシュされてるので、「interceptiong〜」のメッセージはでない I like playing Tennis I like playing Tennis I like playing Tennis interceptiong playFootball・・・・1回目のFootballなので、このメッセージがでる I like playing Football I like playing Football
methodMissingは、プログラミングGROOVYには書いてあるけど、Webだとるびまに起稿した@uehajさんの記事か?
methodMissing と invokeMethod
この辺はJavaOneの動画も見てみよう。
ScirptBowl
Scala vs JRuby vs clojure vs Groovy
去年はGroovyの優勝。
今年は、Scalaの指笛部隊によって優勝をかっさらわれた。
JavaOneに行くGroovyistは指笛を覚えるように。
非同期したり イベント駆動したり 〜Vert.xのちょっとした話〜 @touchez_du_bois
前回できなかった。今回もあまりいい状態ではないのですが・・・
モヤッとしたら、Tweetで質問してくれれば、答えます。
本題(アニメネタ)
余談(Vert.x)
Vart.xの読み方は、「バーテックス」
-
- C10K問題とは、
http://www.hyuki.com/yukiwiki/wiki.cgi?TheC10kProblem
- 有名なフレームワークだとNode.js
- G*界隈だと
- Gretty
- 満を持して登場したのがVert.x
- すべてノンブロッキング
- JVM上で動作
- 多言語対応
- Java
- Groovy
- JavaScript
- CoffeeScript
- Ruby
- Python、
- Scala(今後対応予定)
- Clojure(今後対応予定)
Cloujure、Scalaは現在でも、classファイルにすれば使用可能
- Vert.x、Verticle、JVMの関係
Vert.xのインスタンス:Verticle=1:N
JVM:Verticle=1:1
あってる??
資料公開されたら確認しよう。。。
- Verticle同士はイベントバスを通じて通信
- 複数のVerticleがイベントバスを通じて連携
- 共有マップ、共有セットは同じVert.x内でのみ共有可能
- ワーカーVerticleは処理をブロックしてもよい
- イベントループ
- マルチ・リアクター・パターン
- HelloWorld
- ソース
vertx.createHttpServer().requestHandler { request -> request.response.end(""" <html> <body> <h1>Hello, World!</h1> </body> </html> """) }.listen(8080, 'localhost')
- 変数vertx、変数requestは、vert.xにより自動バインドされる
- Groovyだとimport文もいらないんだ。
GroovyでVert.x - 1. インストールとHello, World!の 「"vertx"って?」のところ
-
- 実行方法
$ vertx run HelloWorld.groovy
- Vert.xのドキュメントは充実。Mybetabookで絶賛翻訳中。
ここにリンク貼らないんとたどりつけない気がする。
jggug - 日本Grails/Groovyユーザーグループ
モヤモヤ
@touchez_du_bois さん、資料どこで公開されてますか〜〜
公開されました
Groovy 2.0の新機能 〜疾きこと@CompileStaticのごとし〜 @uehaj
AST変換
静的Groovy
- @TypeChecked
- @CopmileStatic
タイポが多い僕としては、@TypeCheckedをつけたほうがいいのか?
メソッド名の誤りに対する指摘なら、IntelliJ IDEAの補完に任せたほうがよさそうな気もする。
http://grails.org/products/ggts
IntelliJ IDEAは12からGroovy2.0サポート。
まだEPA版の状態なので、Groovy2.0は使えない。
NetBeansはどうだっけ?
Groovy++ と静的Groovy
- @TypedアノテーションからGroovy2.0の@TypeChecked 静的型チェック、@CompileStatic 静的コンパイルへ
- ただし、ソースの継続性はない
- mixedモードコンパイル、末尾最適化、traitsなどは未対応
- きょんさんが実装すると聞いて
性能
Groovy++って早かったんだな
JVM言語BOFベンチマーク20120402
でも、Groovy++がんばってたんだよなー。Groovy2.0だとどうなるだろう。
それじゃだめじゃんw indy
懇親会でJRubyはindy対応版の方が早く、indyにうまく対応してると聞いた。
Groovyも今後のindy対応での速度Upに期待
ライブラリ強化
- 初期値無しinject
お世話になるかな?
- Matcher#matchesPartially()
バリデーションチェック以外で使用用途を募集中。
http://yamkazu.hatenablog.com/entry/2012/07/06/153541
- takeWhile{}、dropWhile{}
はじめにfalse、trueになった以降の要素を、それ以降の値は問わずに取り出す
資料の図がすごいわかりやすいから、資料を見た方がいい。
モジュール化
拡張モジュールは「カスタム拡張メソッド」を提供できる
AdventCalendarやGhelloのようなイベントで使う黒魔術的なものが増えたということか。(違
Groovyの今後
2012年の残りでGroovy2.1、2013年もGroovy3.0への進化は続く。
@gantawitter さん、@touchez_du_bois さん、@uehaj さん 発表ありがとうございました。
レポートにお礼をこめて。
座席表
やっちまったい・・・編集権つけるの忘れた。
終了間際に、追加したけど・・・
新しい人増えて、右側が分からず。良かったら、編集してください。
[twitter:@uehaj]
[twitter:@tikeda123]
[twitter:@nobusue]
[twitter:@earu]
[twitter:@gantawitter]
[twitter:@bopperjp]
[twitter:@toby55kij]
[twitter:@kimukou2628]
[twitter:@anonaka]
[twitter:@kimza]
[twitter:@yamap_55]
[twitter:@_y_u_]
[twitter:@kazuchika]
[twitter:@literalice]
[twitter:@shinyaa31]
[twitter:@touchez_du_bois]
[twitter:@yamkazu]
[twitter:@nyankofinish]
[twitter:@tkdysk]
[twitter:@ykmc09_dev]
[twitter:@hiranasu]
[twitter:@yotama]
[twitter:@yamadamasaki]
[twitter:@nemo_kaz]
[twitter:@jin_kojima]
[twitter:@tetsuonatom]
[twitter:@grimrose]
[twitter:@mike_neck]
[twitter:@_siosio_]
[twitter:@kazkawamura]
[twitter:@orange_clover]
[twitter:@ecaze]
[twitter:@kaminami]
[twitter:@tyama]
[twitter:@kiy0taka]
[twitter:@mkawax]
[twitter:@tamatamatamata]
[twitter:@notexy]
[twitter:@nobeans]
[twitter:@geek_duck]
[twitter:@kaakaa_hoe_prog]
[twitter:@KanSAKAMOTO]
[twitter:@kazuyoshihayase]
[twitter:@kara_d]
[twitter:@tetsurokitahara]
[twitter:@foobardam]