Ruby会議2010 一日目
ちょっと一日目と二日目行ってみたのでメモ
Conflicts and Resolutions in Ruby and Rails
Jeremyさんによる基調講演が急遽中止になったようで、Ruby 1.9.2とRails 3.0に関する質問みたいなセッション。Ruby 1.9.2については28日に話すのでメインはrails 3.0。
参加者はAkira Matsudaさん、Masayoshi Takahashiさん、Yehuda Katzさん、tenderloveさん、あとmatzさんとLeonald Chinさんが翻訳を担当していた。tenderloveさんはRubyとRailsの両方のコミッタで、Yehuda KatzさんはRailsのコミッタ。
Rails3.0はコンポーネント化が進んでactive controllerなどがRailsの一部というよりも、普通のライブラリのように独立して使用できるとのこと。ただし、active recordにはまだ不十分らしい。
コミュ二ティの問題として日本語のメーリングリストと英語のメーリングリストの2種類があるため、英語ネイティブな人が議論についていきにくいという話がでていた。
jpmobile on Rails 3 の作り方
スピーカはShin-ichiro OGAWAさん。
携帯Webサービス開発用のフレームワークjpmobileの紹介。
jpmobileのやっていることとして
- 文字コード変換
- 絵文字変換
- セッション管理
- ビューの選択
- リンク生成の補助
がある。
文字コード変換はdocomo/au/softbankでそれぞれHTMLやXHTML、メールの文字コードが別々なのでそこら辺をうまく変換している。絵文字変換もキャリアで異なるコードポイントを変換している。
セッションの管理は古いdocomoがクッキーを使えないため、GETやPOSTのパラメタにセッションIDを自動的に付加している
ビューの選択はキャリアごとビューのテンプレートを別々にしておくと、自動的に選択してくれるという機能。リンク生成の補助はGPS機能を利用する場合の仕様がキャリアごとに異なるのでその部分を生成してくれる。
後半は、ビューの選択などの機能はRailsの機能をフックしているんだけども、その部分をどうやって開発しているかという話。まあ、Railsのコード読みたくないね、みたいな。たぶん保守性は高いんだろうけど、読むのにコツが必要なんだろう。
User Experience for Library Designers
スピーカはgeemusさん。行くのが遅れたのでさっぱりついていけなかった。
リアルタイムウェブができるまで
スピーカはNew BambooのMakoto Inoueさん。内容はWebSocketサービスPusherの紹介
まずはWebSocketの紹介。Cometとか擬似的にpush型通信ができるけど、更新が頻繁にある場合はうまくいかないのでWebSocketいいよねという話。ただ、現状ドラフト段階なので仕様が変化することがあるらしい。また、現状動くのはsafari,chrome,firefoxのベータ版でIEは動かない。ので、web-socket-jsを利用してflashでエミュレートとかやっているみたい。でもiphoneだと利用できないけど。
WebSocketのライブラリ/フレームワークとしては以下のものがある。
- node.js (JavaScript)
- eventmachine (以下Ruby)
- rev-websocket
- cramp
- あと2つぐらいあったような
選ぶときは最新の仕様に対応しているかどうかとか、フレームワークorライブラリとかパフォーマンスとかで選ぼうとのこと。
われわれは、GCをX倍遅くできる
まずは現行のCRubyのGCについて。CRubyのGCのアルゴリズムはMark&Sweep方式。で、保守的GC。エアオブジェクト->エア老人問題の比喩は面白い。もうちょっと待てば200歳の大台を超えたけど。
で、今回LazySweepを実装したという話。これはmark & sweep時に実行アプリが止まってしまうのでmarkだけして、アロケーション時に必要ならばsweepするという手法。この話は2年前から言っていた話なんだけど、2008年commitしたけどrevertして、2009年は忘れてたらしい。ということで現状trunkにコミットされたけども、ruby1.9.2には入っていない
デモとしてkaboomの紹介。わざわざゲーム形式にしているのがすばらしい。2度目ぐらい?のデモはなんだか速くなっていないんじゃみたいな気がしたけど。
今後どうするという辺りからは、結構ついていけなかった。
Rubyで作るDSLの基礎
スピーカはYasuko Ohbaさん。あまり技術的な話というよりかは、どうやってカッコよくDSLを書くかというような話。でも、コードの読みやすさという点では重要かな。
君のクラスの最高の偽物
スピーカはShugo Maedaさん。Rubyにclassboxを実装したという話。
Rubyは既存のクラスにメソッドを追加したり上書きしたりできる。これは便利なんだけどもグローバルに反映されちゃって、requireした他のライブラリとメソッド名がコンフリクトすると変な動作しちゃうという問題がある。これを防ぐためにメソッド追加/上書きのスコープを制限するclassboxという機能を追加したとのこと。
Kernel#module_overlayというメソッドを作って、
module_overlay(klass, module)
とやるとklassにmoduleのメソッドを追加/上書きするという仕様。
実装方法は、Ruby内部のcrefという構造体を用いる。この構造体はクラスのネスト構造を保持しており、実行時の情報ではなく静的な情報を保持しているのでここにハッシュを作って入れようみたいな話だったかな。パッチはこちら
質疑応答では、メソッド探索によるオーバーヘッドがあるのではという質問があったのだけども、メソッドキャッシュがあるので繰り返し呼ぶ分には問題ないみたい。