uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

Grails 3.0先取り!? Spring Boot入門ハンズオン

次回G*Workshopは、8/1 「Grails 3.0先取り!? Spring Boot入門ハンズオン」です。
ふるってのご参加をお待ちしております。



Grails 3.0先取り!? Spring Boot入門ハンズオン

申し込みはこちらから>
Grails 3.0先取り!? Spring Boot入門ハンズオン

予定の内容

Grailsの次期バージョン3.0でベースになることが予定されている、Spring界隈の新しいトレンド"Spring Boot"のハンズオンを通じて、Spring Bootのイメージを掴んでもらいたいと思います。内容は以下の通りです。

Spring Boot概要説明
Spring Bootを用いて簡単なアプリケーションを実際に作ってみる
(合計で約二時間弱)

Grails 2.x脆弱性情報(WEB-INF配下が読みとられる)

脆弱性情報のアナウンスがでています。

http://grails.1312388.n4.nabble.com/IMPORTANT-CVE-2014-0053-Information-Disclosure-in-Grails-applications-td4654254.html

http://cxsecurity.com/issue/WLB-2014020172

Grails 2.xのリソースプラグインのデフォルト値が問題があって、リソースプラグインを使っている場合(外してない場合)、WEB-INF配下のクラスファイル群などが第三者に読みとられてしまうという結構シリアスな問題です。2.3.6へのアップグレードもしくは設定変更で対処できるとのことです。
あてはまる方はご注意を。

まだ以下には出てませんね。

http://www.cvedetails.com/product/23317/Springsource-Grails.html?vendor_id=9664

(追加)
http://www.gopivotal.com/security/cve-2014-0053

「Groovyスクリプト100本斬り」回顧編

2010年のJGGUG合宿で、

企画Groovy: 「Groovyスクリプト100本斬り」
お題(公募中!)を事前に100個用意しておき、みんなでスクリプトを書きまくります。
詳細はこちら:http://www.jggug.org/Home/ibento-shiryoushuu/g100pon.pdf

というのがあったのですが(良い企画でしたね!)、結果がGoogle Docsでしか公開されておらず、HTMLの記事になってると良いかと思い再掲します。


番号お題提案者(Twitter ID)回答者(Twitter ID)回答へのリンク(GistのURL)
1HelloWorld(Java完全互換版)kazuchikakazuchikahttp://gist.github.com/618307
2リスト操作(基礎編:CRUD系操作とイテレーションkazuchikaKentaro_Araihttp://gist.github.com/619102
3リスト操作(上級編)kazuchika
4マップ操作(基礎編:CRUD系操作とイテレーションkazuchikaKentaro_Araihttp://gist.github.com/619116
5マップ操作(上級編)kazuchika
6範囲(Range)操作(基礎編:CRUD系操作とイテレーションkazuchikaKentaro_Araihttp://gist.github.com/619233
7範囲(Range)操作(上級編)kazuchika
8Groovy Ustream APInemo_kazikikkohttp://gist.github.com/619452
9Jakarta POI のGroovyサンプルnemo_kaznobeanshttp://gist.github.com/619324,
http://gist.github.com/619325

10Google Calendar API の Calendar ObjectのGroovy Wrapperサンプルnemo_kaz
11Twitter: stream APIを有効活用したサンプルnemo_kaz
12Twitter: OAuthの認証サンプルnemo_kaztomoakioshimahttp://gist.github.com/619818
13gmailからメールを受信するkompironbqxhttp://gist.github.com/619274
14twitterにつぶやくkompirokazuchikahttp://gist.github.com/619087
15Markdownの実装kompirotomoakioshimahttp://gist.github.com/619068
16wikiの実装kompiro
17テンプレートエンジンの実装kompiro
18単位変換kompirokijukyhttps://gist.github.com/1145165
19為替情報の取得kompironemo_kazhttp://gist.github.com/619226
20topコマンドの実装kompironemo_kazhttps://gist.github.com/711401
21正規表現:ファイルの拡張子を置換するmasanobuimaitomoakioshimahttp://gist.github.com/619042
22正規表現FQCNからクラス名を抜出すmasanobuimaimasanobuimaihttp://gist.github.com/621826
23ディレクトリを走査して特定のファイルを抽出masanobuimaitomoakioshimahttp://gist.github.com/619059
24grepmasanobuimaimasanobuimaihttp://gist.github.com/621842
25tail -fmasanobuimaikazuchikahttp://gist.github.com/619953
26文字列を分割してListに変換masanobuimainobusuehttp://gist.github.com/619000
27ファイル名の一括置換masanobuimaimasanobuimaihttp://gist.github.com/619348
28ファイル内の特定の文字列を一括置換masanobuimaimasanobuimaihttp://gist.github.com/619303
29growlみたいなの(あんのか?)masanobuimainobusuehttp://gist.github.com/619816
30ファイルのコピーmasanobuimaikazuchikahttp://gist.github.com/619010
31アプリケーションランチャ(quicksilverみたいやつ)nbqx
32文字コード判定nbqx, kanemukanemuhttp://gist.github.com/619125
33掲示板kanemukiy0takahttp://gist.github.com/713740
34メール送信kazuchika
35インライン要素を含むXMLの処理kanemu
36ファイルをドラッグ&ドロップできるウィンドウkanemumasanobuimaihttp://gist.github.com/619202
37GDKのコマンドラインビューアnobeansuehajhttp://gist.github.com/619360
38(定期的な)メールチェッカ(POP)nobeans
39JSONの読み書き。Grails無しでtoby55kijkanemuhttp://gist.github.com/619030
40XMLの読み書きを色んな方法でtoby55kijnobusuehttp://gist.github.com/619066
41スクリプトを実行するスクリプトtoby55kijnbqxhttp://gist.github.com/619331
42お手軽JMXビューアbikisukenobusuehttp://gist.github.com/619284
43zip圧縮・解凍bikisuketomoakioshimahttp://gist.github.com/619011
44DBとテーブル名を引数に実行すると、標準入力から読み取ったCSV/TSVデータを指定したテーブルにinsertするスクリプトuehajnobusuehttp://gist.github.com/619054
45日時の演算処理。例えば「現在時刻の3日と4時間後を求める」「特定の時刻間の時間数を求める」nobusuekazuchikahttp://gist.github.com/619359
46wc コマンドtouchez_du_boiskiy0takahttp://gist.github.com/619085
47クイックソートtouchez_du_boisfumokmmhttp://gist.github.com/211632
48find コマンドtouchez_du_bois
49閏年touchez_du_boisnobusuehttp://gist.github.com/619200
50回帰分析touchez_du_boisnobusuehttp://gist.github.com/619868
51KVSの操作(保存、取得)kimukou_26nobusuehttp://gist.github.com/619988
52XMLDB(existが一番簡単かな?)の操作kimukou_26kimukou_26http://gist.github.com/622392
53いろいろな型変換(toメソッド、キャスト、as)kazuchikatoby55kijhttp://gist.github.com/619996
54duck typingkazuchikakazuchikahttp://gist.github.com/619806
55マルチメソッド(動的ディスパッチ)kazuchikafumokmmhttp://gist.github.com/619899
56数値型(Javaとの相違点など)kazuchikatoby55kijhttp://gist.github.com/619061
57GStringが遅延評価ぽくなるケースkazuchikanobeanshttp://gist.github.com/619334
58StringクラスのGDKメソッドkazuchikatoby55kijhttp://gist.github.com/619851
59正規表現(基本編)kazuchikaikikkohttp://gist.github.com/619363
60fizzbuzzkazuchikanemo_kazhttp://gist.github.com/618993
61GroovyTestCaseと各種拡張assertメソッドkazuchikafumokmmhttp://gist.github.com/622492
62Groovy Truthのカスタマイズkazuchikauehajhttp://gist.github.com/619374
63演算子オーバーロードkazuchikaikikkohttp://gist.github.com/619990
64クロージャとdelegatekazuchikatouchez_du_boishttp://gist.github.com/620045
65何でも使えるぜGroovyなswitch-casekazuchikatoby55kijhttp://gist.github.com/619088
66Expando使用例kazuchikatoby55kijhttp://gist.github.com/619889
67実行中のクラス/メソッド名を取得kazuchikanemo_kazhttp://gist.github.com/619034
68curry/rcurry/ncurrykazuchikafumokmmhttp://gist.github.com/619285
69動的なメソッド追加kazuchikanbqxhttp://gist.github.com/619342
70存在しないメソッド/プロパティアクセスをフックkazuchikatoby55kijhttp://gist.github.com/619113
71ConfigSlurperkazuchikakimukou_26http://gist.github.com/622497
72テキストファイルの中身を行番号付きで表示kazuchikatomoakioshimahttp://gist.github.com/619026
73AntBuilderkazuchikakazuchikahttp://gist.github.com/619985
74日付の解析とフォーマットkazuchikanobusuehttp://gist.github.com/619111
75外部コマンドの起動と出力の取得等kazuchikamasanobuimaihttp://gist.github.com/619231
76環境変数取得kazuchikatomoakioshimahttp://gist.github.com/619036
77CliBuilderkazuchikanobusuehttp://gist.github.com/619094
78HTTPファイルアップロードkazuchikauehajhttp://gist.github.com/620451
79HTTP GET/POSTkazuchikamasanobuimaihttp://gist.github.com/619282
80webサーバ(Jetty)kazuchikakazuchikahttp://gist.github.com/619882
81HTTPBuilderkazuchika
82Base64 エンコード/デコードkazuchikakanemuhttp://gist.github.com/619064
83webスクレイピング(nekohtml)kazuchikauehajhttp://gist.github.com/619366
84HTML生成kazuchikafumokmmhttp://gist.github.com/619371
85ブラウザで任意のURLを表示(OS非依存)kazuchikatoby55kijhttp://gist.github.com/619019
86YAMLkazuchikamasanobuimaihttp://gist.github.com/619292
87SwingBuilderと@Bindableでモデル・ビュー連携kazuchikakiy0takahttp://gist.github.com/619208
88grocessing (groovy+processing.org)kazuchikakimukou_26http://gist.github.com/619434
89ExpectJkazuchikakazuchika
90JFreeChartでグラフ生成kazuchikakimukou_26http://gist.github.com/619747
91MongoDBkazuchikakimukou_26http://gist.github.com/619971
92TimeCategorykazuchikanobusuehttp://gist.github.com/619108
93トランプのシャッフルkazuchikafumokmmhttp://gist.github.com/619250
94超シンプルRSS/Atomリーダーkazuchikakiy0takahttp://gist.github.com/619381
95クラスパスの動的な変更kazuchikaikikkohttp://gist.github.com/619968
96jlineで行編集/補完/ヒストリ付きコマンドラインkazuchikakazuchikahttp://gist.github.com/619117
97形態素解析kazuchikatomoakioshimahttp://gist.github.com/619176
98DerbyでGroovySQLkazuchikanobusuehttp://gist.github.com/619005
99JavaとしてもGroovyとしても正当だが結果が異なるコードkazuchikatoby55kijhttp://gist.github.com/618998
100邪悪なGroovyコード(IOCCCのGroovy版)kazuchika

夏サミ2013「中堅SIerにおいて、
先進的なフルスタックフレームワークGrailsを全社的に普及推進してみた。」

デブサミSummer(夏サミ)にて発表します。

物語1:エンタープライズGrails
中堅SIerにおいて、
先進的なフルスタックフレームワークGrailsを全社的に普及推進してみた。

残席わずかとのことなので、ご興味のある方はお早めに是非どうぞ。
http://event.shoeisha.jp/detail/46/session/88/

HATEOASって何だ?

Grails 2.3のRest機能のドキュメントを読んでいたら、拡張の一つとして「8.1.7 Hypermedia as the Engine of Application State」というのが書いてあって、調べると面白かったので、この資料(REST: From GET to HATEOAS)を読んだだけでの、私の理解する限りのメモを記しておきます。

一言でいうと、HATEOASとは、Restfulパターンを拡張するアーキテクチャパターンで、Restful原則に対する追加的な制約。どういうものかというと、HTMLアプリの画面遷移を抽象化した、状態遷移を表現するRestful API(=Restful WebアプリのWebインターフェース)を設計するための具体的な方法論になってる。

もちろんGrailsに特化したものではなく、Restと同じレベルのWebアプリケーション一般概念でありRestを拡張する。すでにサポートするライブラリがいくつかあって、Spring FrameworkでもHATEOAS拡張をしている。Grailsのはそれをたぶんラッピングしている。

具体的には、

  • Restというのは言っても難しいよね
    • 単に何かを読み書きする、というアプリならいいかもしれない。GETとPUTとPOSTとDELETEでそれを読み書きする。
  • でも、一般にWebアプリケーションのサーバサイドというのは、そんなに単純じゃない。
  • 例えばeBayのようなオークションアプリをRestfulアプリとして定義するとしよう。こんな感じ。
    • 品物をウォッチリストに入れる
    • 売り主の評価をチェック
    • 売主の詳細を見る
    • 入札する。
  • これらを、正しい順序で呼び出す必要がある。ステートとそれぞれの選択肢、それらを合わせたフロー構造がありルールがある。これらはどこで定義されるべきか?
    • Restfulにせよ何にせよ、本来「Webアプリケーション」が定めるものの一部であるはず。
    • HTMLアプリとの比較で言うと、HTMLアプリの画面遷移は、利用者から見たアプリケーションの状態遷移を表現していて、リンクはそれぞれの状態で「何ができるか」を提示していた。
    • 同じことをRestでしようとしたとき、それらのステートとフローの構造をクライアントJavaScriptで記述されるアプリ中にハードコーディングで埋没させて定義して良いのだろうか?
    • だってそうだと、サーバサイドの独立性というものが無いよね。特定のクライアントと結合しないと動かないなら、Restサーバの利点が損耗する。
  • そこでHATEOASですよ
    • HATEOASでは、
      • まず、基本はRest
      • その上に、上の意味でのアプリの「状態」を表現するXMLないしJSON表現をアプリケーション固有のものとして定義
      • 個々の状態を表現するXML/JSONに、固有のMimeTypeを与える
      • その表現の中に、リンクが含まれている
      • リンクを辿ることが、アプリケーションの状態遷移である。
    • この場合、クライアントの役割は、HATEOASなAPIのブラウザになる。
    • 結果として状態遷移とフロー構造を外在化・明示化することになる
      • 結果として、Restful APIを介して、クライアントとサーバのより明確な構造的分離が達成できる

んで、来るべきGrails 2.3ではHATEOASなアプリを簡単に書けるようになるよ、と。
しかし、なんて読むんだろう。ハテオアス?

Web API: The Good Parts
Web API: The Good Parts
posted with amazlet at 16.05.19
水野 貴明
オライリージャパン
売り上げランキング: 38,557

Groovy基礎勉強会で発表してきました

@kyon_mmさんたちが企画した、Groovy基礎勉強会で発表してきました。
機会を頂きありがとうございました>kyonさん、スタッフの皆様、場所を提供頂いたオラクルのみなさん。

コンパイラ処理系としてのGroovyの中身」を覗いてみよう、というのが今回のテーマでした。
実際、今回しらべて、Groovyのステートマシンベースのコンパイルプロセスは、かなり判りやすいものだと思ったるのですが、それをストレートに解説してみた積りでしたが、どんなもんでしょう。


とまれ、発表者の皆様、聴講者の皆様、お疲れまでした。
70名近い参加者の方がいらして、緊張しましたが、個人的にはとても楽しめました。
なにしろ喋りたいことをしゃべったからな…。
コンパイラは楽しいよね〜!
懇親会とLTも激しく濃く(途中でぬけちゃいましてすみません)、おつかれさまでした。

以下、@kimukou2628さんによるまとめ。

以下、当日資料です。

G*ワークショップ 2013新春SP #jggug

G*Workshopが今週末開催されます。


http://kokucheese.com/event/index/68561/

いろいろと楽しい話が聞けると思いますので是非どうぞ。
私も、LTにて、Groovy 2.1.0の濃いところを話します。いや話したい。いや話せれば。がんばります。