Seasar Conference 2009 Autumnに行ってきました。 今回は、ひがやすをさんのGoogle App Engine,Google Web ToolKit,slim3のお話と、 Blogopolisのお話を聞いてきました。
GAE,slim3,BigTable周りは前回とあんまり内容が変わってないように感じましたが、 Google Web Toolkitは、中身がそういう風になってるんだーと大変勉強になりました。 Blogopolisはマジで激ヤバというか。すごすぎる。。。
昔はDIとかS2Daoとかの話が聞きたくて行ってたのに、
業務でS2使うようになってから逆にそういうセッションに出なくなるっていうw
以下、セッション毎の詳細です。
-- slim3入門
- slim3
- APP Engineで使える機能だけ使って
- simple & less is more
- less is more
- パレートの法則
- 機能を絞っていくと2割くらいの実装で8割くらい実現可
- パレートの法則→less is more
- プログラマにとっての道具
- テストをすること
- TDDの1番最初のステップは自分がクライアントになったつもりでテストすること
- slim3の一番の特徴はTDDのサポート
- HOT Reloading
- TDDで一番大切なのはリズム。ノって開発している時は生産性が高い
- タイプセーフクエリ
- デモ
- libのjarを手動でパス通す。
- web.xml
- slim3.rootPackageをいじる
- Jetty
- GoogleはJettyらしい。本番も。
- カスタマイズで省略が容易だから。
- Tomcatは基本一枚岩でカスタマイズしずらい。
- build.xml(コントローラ)
- Test
- テストクラスのstartメソッドでブラウザからのリクエストをエミュレート。
- getDestinationPathでレスポンス先を取得
- slim3でのテスト
- IDEでテスト→緑になったら→ブラウザで確認
- Webアプリを作るなら常に見えるように
- build.xml(VIEWが要らないコントローラ)
- gen-controller-without-view。JSPが要らない場合は作らない
- basePath
- データをストアしてredirectで自分に返す時など
- build.xml(モデル)
- gem-model
- モデルのテストケース+daoを自動生成
- テスト
- startの前にparam(”content”, ”hello”)でリクエストパラメータがセットされる
- count(モデル.class)とか便利なのが追加されてる
- コントローラでデータをストア
- Datastore Viewer
- データがどうはいっているかチェックできる
- 会場内でGWT使ったことある人は全体の5パーセントくらい
- 既存のAjaxアプリの問題点
- どこがエラーか教えてくれない
- リファクタリングがつらい
- GWT使えばGmailみたいの書ける
- 個人的にちょっとついていけてないところ
- web.xml(GWTのリクエストを受ける用)
- warの中にある
- サーブレット:GWTServiceServlet
- *.s3gwtがURLパターン
- New GWT Module
- New View Module
- モジュールは複数作る
- 一個のモジュールは入力→確認→登録 とか
- モジュール+エントリポイント+HTML
- New HTML Page
- main/main.nocache.js
- こいつから実際のモジュールがが起動される
- main/main.nocache.js
- 起動
- GWTのHostedモードの画面
- 本番ではJavaScriptだけど、このモードはJavaがそのまま動いてるので、
- ブレークポイント入れたらちゃんと止まる
- JSとJavaが同じように動く
- GWTのHostedモードの画面
- GWTの根本
- JSNI(JavaScript Native Interface)
- こいつでJavaScriptにアクセスする
- Javaのコードの中に↓のようにJSを記述(/*- この中 -*/)
- JSNI(JavaScript Native Interface)
public native void sayHello(String Hello) /*-{
alert(hello);
}-*/
- compile/browseってやるとJSが生成されて実ブラウザで稼動
- MD5でハッシュ化された文字列.htmlが生成される
- プロジェクト右クリックでGWTコンパイル
- 難読化のオプションをはずすと、生成されるJSが見やすくなる
- iframeのソースを使ってロードされる
- WindowオブジェクトとかDocとかはフレームに対する親がどうのこうのとか・・・
- あんまよく分からなかったですw
- nocache.js
- なんかポーリングしててOKになったらイニットとか
- ここもあんまよく分からなかったですw
- サーバーサイドとの連携
private EchoServiceAsync echoService =
GWT.create(EchoService.class)
<src path="client">
<src path="shared">
↑これで読みにいってくれる
- BigTable
- できる事
- Get,Put,Delete,Prefix scan,Range scan
- ソートされてるから、このキーからこのキーはここですよー的なイメージ
- PrefixとRangeはインデックス用
- Transactionは1行を制御するのみ
- その行の最後のタイムスタンプをみて~
- できる事
- GFSにストアされるけれども
- DataStoreサービス
Parent:aaa
Parent:aaa/Child:bbb
Parent:aaa/Child:bbb/Grandchild:ccc
Parent:xxx
Parent:xxx/Child:yyy
- Index
- キー以外にアクセスするときはここにアクセスしてから
- Kind(テーブル名)でのスキャン
select * from GrandChild
Child
Child
GrandChild これ
GrandChild これ
Parent
Parent
- 言ってみればテーブルフルスキャン
- Single property index
- あるKindのあるプロパティはこんな値
Select * from Parent nam = 10 and age =20
Kind Property Value
Parent age 20これ
Parent age 10
Parent nam 20
Parent age 10
Parent nam 10これ
Parent age 10
- AND条件ならパラレルで動いて、後からマージされる
- イコール条件じゃないとSinglePropertyは使えない
- Composit inex
- プロパティが複数個以上
- XMLで、このプロパティがXX以上、このプロパティはxx以下とかを指定
- デプロイしたタイミングで(?)INDEXを作ってくれる(結構重い)
- DataStoreの制約
- イコールじゃないフィルタは1個のプロパティだけ
- 使えるのは<,<=, ==, >=, > だけ
- INとかORは使えない。
- 数字でなんとか以上とかなんとか以下を使うのは厳しい
- ジョインはできない
- 集合関数とかは用意されていない
- じゃあどうするの?
- 今までRDBMSにやらせてたことを、アプリで書くだけだ。
- 複数以上とか以下とかでてきたら?
- 1つだけ使ってクエリ投げて
- メモリ上でもう一つのプロパティはフィルタリングする
- この辺はDaoで隠蔽しちゃって、
- 呼び出し側からは気づかれないようにしちゃえ。。
- ORを使いたくなったら?
- クエリを2回投げてマージ。(addAllってメソッドで)
- イコールのフィルタとorder byがあるときは?
- フィルタで絞ってから、ソートは自分で(sortメソッド)
- ジョイン
- クエリを2回に分けて、最初に駆動表。返ってきたキーを元にして~
- nested loop的な処理に自前で。
- とにかく1回1回なげて、アプリ側でなんとかしろっちゅうことですね。。
- イコールじゃないフィルタは1個のプロパティだけ
- DataStoreは1000件しか扱えない
- キーだけを取るやつ(?)は1000件以上でもいいらしい。
-- Blogopolisの裏側
- Google検索があらゆる分野でイケてるのか?
- 特定分野に的を定めて新たな価値創造
- blog
- RSS購読者
- ブックマーク
- タグ
- 上記をを組み合わせて最適なものを
- TopHatenerで得たものを元にして
- Blogopolis
- ソーシャルデータを活用したブログ検索システム
- 3次元の中に都市があるイメージ
- ビルの面積がブクマの数
- ズームアウトすると人気のヤツがチェックできて、
- ズームインすると細かい分野の細かいとこまでチェックできる
- ななめにすれば高さで購読者数がチェックできる。GIGAZINEとか。
- 屋根に画像をアップしたりして遊べたりもする。
- 運用状況
- 4つのCPUを3台の仮想マシン
- Webサーバ(Apache)1台,APサーバ(Tomcat)2台,DB(MySQL)1台,集計(Solr)1台
- ActionScriptがすごい行数になっている
- ブログ数23万
- 記事数30万
- DBダンプ9GB
- クローラ
- TopHatenerと同じなので省略
- クラスタ
- ブクマ数と同時にタグも。
- タグは人手でつけてるので下手なやつより精度高かったりする
- 階層型と非階層型
- 非階層
- K-means法。あらかじめクラスタの個数きめて分類
- トーナメント的な図に
- 階層
- 3D
- キャッシュ
- フレームワーク
- 今後
- 検索よりも探索に近い→検索にもっと力を入れていく。
- 時系列で。ビルができて衰退していく様子とかw
-- LT
- モテル 小原さん
- 1時間でNetBeansでAndroidでHello World happy ryoさん
- GAE/J入門書 栗原さん
- 本の宣伝
- Javaの入門書 木村さん
- 本の宣伝
- 自分も持ってますが、この本いいですよね。
じゃんけん大会
- GAE/J本とセンスが欲しかったけど何ももらえず。。
- 3冊のGAE/J本に対して、N岡さんが最後の4人まで残りつつ 負けてしまった件w
-- Blogopolisに自分のブログもあって嬉しかったです↓
-- ちょいスタディ http://www.choistudy.jp ↑を開発されている方を紹介していただきました。 無料でIT系の勉強ができてしまいます。 秋は情報セキュリティスペシャリスト受けるので(3回目くらいですがw) 勉強するのに使わせていただきます!会社の新人にもやらせてみようかなと。