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://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
「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) | |
---|---|---|---|---|---|
1 | HelloWorld(Java完全互換版) | kazuchika | kazuchika | http://gist.github.com/618307 | |
2 | リスト操作(基礎編:CRUD系操作とイテレーション) | kazuchika | Kentaro_Arai | http://gist.github.com/619102 | |
3 | リスト操作(上級編) | kazuchika | |||
4 | マップ操作(基礎編:CRUD系操作とイテレーション) | kazuchika | Kentaro_Arai | http://gist.github.com/619116 | |
5 | マップ操作(上級編) | kazuchika | |||
6 | 範囲(Range)操作(基礎編:CRUD系操作とイテレーション) | kazuchika | Kentaro_Arai | http://gist.github.com/619233 | |
7 | 範囲(Range)操作(上級編) | kazuchika | |||
8 | Groovy Ustream API | nemo_kaz | ikikko | http://gist.github.com/619452 | |
9 | Jakarta POI のGroovyサンプル | nemo_kaz | nobeans | http://gist.github.com/619324, http://gist.github.com/619325 | |
10 | Google Calendar API の Calendar ObjectのGroovy Wrapperサンプル | nemo_kaz | |||
11 | Twitter: stream APIを有効活用したサンプル | nemo_kaz | |||
12 | Twitter: OAuthの認証サンプル | nemo_kaz | tomoakioshima | http://gist.github.com/619818 | |
13 | gmailからメールを受信する | kompiro | nbqx | http://gist.github.com/619274 | |
14 | twitterにつぶやく | kompiro | kazuchika | http://gist.github.com/619087 | |
15 | Markdownの実装 | kompiro | tomoakioshima | http://gist.github.com/619068 | |
16 | wikiの実装 | kompiro | |||
17 | テンプレートエンジンの実装 | kompiro | |||
18 | 単位変換 | kompiro | kijuky | https://gist.github.com/1145165 | |
19 | 為替情報の取得 | kompiro | nemo_kaz | http://gist.github.com/619226 | |
20 | topコマンドの実装 | kompiro | nemo_kaz | https://gist.github.com/711401 | |
21 | 正規表現:ファイルの拡張子を置換する | masanobuimai | tomoakioshima | http://gist.github.com/619042 | |
22 | 正規表現:FQCNからクラス名を抜出す | masanobuimai | masanobuimai | http://gist.github.com/621826 | |
23 | ディレクトリを走査して特定のファイルを抽出 | masanobuimai | tomoakioshima | http://gist.github.com/619059 | |
24 | grep | masanobuimai | masanobuimai | http://gist.github.com/621842 | |
25 | tail -f | masanobuimai | kazuchika | http://gist.github.com/619953 | |
26 | 文字列を分割してListに変換 | masanobuimai | nobusue | http://gist.github.com/619000 | |
27 | ファイル名の一括置換 | masanobuimai | masanobuimai | http://gist.github.com/619348 | |
28 | ファイル内の特定の文字列を一括置換 | masanobuimai | masanobuimai | http://gist.github.com/619303 | |
29 | growlみたいなの(あんのか?) | masanobuimai | nobusue | http://gist.github.com/619816 | |
30 | ファイルのコピー | masanobuimai | kazuchika | http://gist.github.com/619010 | |
31 | アプリケーションランチャ(quicksilverみたいやつ) | nbqx | |||
32 | 文字コード判定 | nbqx, kanemu | kanemu | http://gist.github.com/619125 | |
33 | 掲示板 | kanemu | kiy0taka | http://gist.github.com/713740 | |
34 | メール送信 | kazuchika | |||
35 | インライン要素を含むXMLの処理 | kanemu | |||
36 | ファイルをドラッグ&ドロップできるウィンドウ | kanemu | masanobuimai | http://gist.github.com/619202 | |
37 | GDKのコマンドラインビューア | nobeans | uehaj | http://gist.github.com/619360 | |
38 | (定期的な)メールチェッカ(POP) | nobeans | |||
39 | JSONの読み書き。Grails無しで | toby55kij | kanemu | http://gist.github.com/619030 | |
40 | XMLの読み書きを色んな方法で | toby55kij | nobusue | http://gist.github.com/619066 | |
41 | スクリプトを実行するスクリプト | toby55kij | nbqx | http://gist.github.com/619331 | |
42 | お手軽JMXビューア | bikisuke | nobusue | http://gist.github.com/619284 | |
43 | zip圧縮・解凍 | bikisuke | tomoakioshima | http://gist.github.com/619011 | |
44 | DBとテーブル名を引数に実行すると、標準入力から読み取ったCSV/TSVデータを指定したテーブルにinsertするスクリプト | uehaj | nobusue | http://gist.github.com/619054 | |
45 | 日時の演算処理。例えば「現在時刻の3日と4時間後を求める」「特定の時刻間の時間数を求める」 | nobusue | kazuchika | http://gist.github.com/619359 | |
46 | wc コマンド | touchez_du_bois | kiy0taka | http://gist.github.com/619085 | |
47 | クイックソート | touchez_du_bois | fumokmm | http://gist.github.com/211632 | |
48 | find コマンド | touchez_du_bois | |||
49 | 閏年 | touchez_du_bois | nobusue | http://gist.github.com/619200 | |
50 | 回帰分析 | touchez_du_bois | nobusue | http://gist.github.com/619868 | |
51 | KVSの操作(保存、取得) | kimukou_26 | nobusue | http://gist.github.com/619988 | |
52 | XMLDB(existが一番簡単かな?)の操作 | kimukou_26 | kimukou_26 | http://gist.github.com/622392 | |
53 | いろいろな型変換(toメソッド、キャスト、as) | kazuchika | toby55kij | http://gist.github.com/619996 | |
54 | duck typing | kazuchika | kazuchika | http://gist.github.com/619806 | |
55 | マルチメソッド(動的ディスパッチ) | kazuchika | fumokmm | http://gist.github.com/619899 | |
56 | 数値型(Javaとの相違点など) | kazuchika | toby55kij | http://gist.github.com/619061 | |
57 | GStringが遅延評価ぽくなるケース | kazuchika | nobeans | http://gist.github.com/619334 | |
58 | StringクラスのGDKメソッド | kazuchika | toby55kij | http://gist.github.com/619851 | |
59 | 正規表現(基本編) | kazuchika | ikikko | http://gist.github.com/619363 | |
60 | fizzbuzz | kazuchika | nemo_kaz | http://gist.github.com/618993 | |
61 | GroovyTestCaseと各種拡張assertメソッド | kazuchika | fumokmm | http://gist.github.com/622492 | |
62 | Groovy Truthのカスタマイズ | kazuchika | uehaj | http://gist.github.com/619374 | |
63 | 演算子オーバーロード | kazuchika | ikikko | http://gist.github.com/619990 | |
64 | クロージャとdelegate | kazuchika | touchez_du_bois | http://gist.github.com/620045 | |
65 | 何でも使えるぜGroovyなswitch-case | kazuchika | toby55kij | http://gist.github.com/619088 | |
66 | Expando使用例 | kazuchika | toby55kij | http://gist.github.com/619889 | |
67 | 実行中のクラス/メソッド名を取得 | kazuchika | nemo_kaz | http://gist.github.com/619034 | |
68 | curry/rcurry/ncurry | kazuchika | fumokmm | http://gist.github.com/619285 | |
69 | 動的なメソッド追加 | kazuchika | nbqx | http://gist.github.com/619342 | |
70 | 存在しないメソッド/プロパティアクセスをフック | kazuchika | toby55kij | http://gist.github.com/619113 | |
71 | ConfigSlurper | kazuchika | kimukou_26 | http://gist.github.com/622497 | |
72 | テキストファイルの中身を行番号付きで表示 | kazuchika | tomoakioshima | http://gist.github.com/619026 | |
73 | AntBuilder | kazuchika | kazuchika | http://gist.github.com/619985 | |
74 | 日付の解析とフォーマット | kazuchika | nobusue | http://gist.github.com/619111 | |
75 | 外部コマンドの起動と出力の取得等 | kazuchika | masanobuimai | http://gist.github.com/619231 | |
76 | 環境変数取得 | kazuchika | tomoakioshima | http://gist.github.com/619036 | |
77 | CliBuilder | kazuchika | nobusue | http://gist.github.com/619094 | |
78 | HTTPファイルアップロード | kazuchika | uehaj | http://gist.github.com/620451 | |
79 | HTTP GET/POST | kazuchika | masanobuimai | http://gist.github.com/619282 | |
80 | webサーバ(Jetty) | kazuchika | kazuchika | http://gist.github.com/619882 | |
81 | HTTPBuilder | kazuchika | |||
82 | Base64 エンコード/デコード | kazuchika | kanemu | http://gist.github.com/619064 | |
83 | webスクレイピング(nekohtml) | kazuchika | uehaj | http://gist.github.com/619366 | |
84 | HTML生成 | kazuchika | fumokmm | http://gist.github.com/619371 | |
85 | ブラウザで任意のURLを表示(OS非依存) | kazuchika | toby55kij | http://gist.github.com/619019 | |
86 | YAML | kazuchika | masanobuimai | http://gist.github.com/619292 | |
87 | SwingBuilderと@Bindableでモデル・ビュー連携 | kazuchika | kiy0taka | http://gist.github.com/619208 | |
88 | grocessing (groovy+processing.org) | kazuchika | kimukou_26 | http://gist.github.com/619434 | |
89 | ExpectJ | kazuchika | kazuchika | ||
90 | JFreeChartでグラフ生成 | kazuchika | kimukou_26 | http://gist.github.com/619747 | |
91 | MongoDB | kazuchika | kimukou_26 | http://gist.github.com/619971 | |
92 | TimeCategory | kazuchika | nobusue | http://gist.github.com/619108 | |
93 | トランプのシャッフル | kazuchika | fumokmm | http://gist.github.com/619250 | |
94 | 超シンプルRSS/Atomリーダー | kazuchika | kiy0taka | http://gist.github.com/619381 | |
95 | クラスパスの動的な変更 | kazuchika | ikikko | http://gist.github.com/619968 | |
96 | jlineで行編集/補完/ヒストリ付きコマンドライン | kazuchika | kazuchika | http://gist.github.com/619117 | |
97 | 形態素解析 | kazuchika | tomoakioshima | http://gist.github.com/619176 | |
98 | DerbyでGroovySQL | kazuchika | nobusue | http://gist.github.com/619005 | |
99 | JavaとしてもGroovyとしても正当だが結果が異なるコード | kazuchika | toby55kij | http://gist.github.com/618998 | |
100 | 邪悪なGroovyコード(IOCCCのGroovy版) | kazuchika |
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ですよ
んで、来るべきGrails 2.3ではHATEOASなアプリを簡単に書けるようになるよ、と。
しかし、なんて読むんだろう。ハテオアス?
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の濃いところを話します。いや話したい。いや話せれば。がんばります。