RubyConf2008 1日目
昨日到着組にはまだ会っていなかったので、twitter でウォッチしながらロビーで待機。kakutani さんと yhara さんに無事遭遇。ネームタグをゲットして、会期中は提供される朝食をいただきました。今日は日射しも強く汗ばむくらい。ko1 さんや卜部さん、レオさんに、高橋会長もいました。今回日本から来ているのは 11人ほどのようです。
そういえば、今年は mput の日記が... orz
その代わりに、卜部さんの twitter と freenode の #rubyconf.jp でのレオさんの実況中継がとっても助けになります。ほんとありがたいかぎりです。 <(_ _)>
# #rubyconf と #rubyconf.jp のログはとっておく。
そうこうするうちに、まつもとさんの keynote。
「Rubyが好き、Rubyを使う人が好き、みんなが好き。」
ここで部屋を分割。今年もまた 3トラック同時開催です。Room3 はほぼ終日 implementation 絡みで、YARV、Rubinius、JRuby、MacRuby、IronRuby、MagLev、そして implementation Summit と続きます。RubySpec の話もありますね。
とりあえず、自分は、Room1 と Room2 を中心に聞いてみました。
# レオさんは、Room3 が中心で、卜部さんは Room1,2 を行ったり来たりでした。
高速化のための概説的なセッションでした。今年は、分散とかスケールの話が多いみたいです (これを含めて 6セッションも!)。スレッドは遅いので、マルチスレッドでいろいろやるより、EventMachine でシングルスレッド化したほうが早い。でも、Heavy なものと Quick なリクエストが混在してるときはうまくいかない。Merb には defferd_actions なんてのもある? とか。
別な方法としては、メッセージング。DRb や Rinda の典型的な使い方を説明。"drb is so nice." って言ってました。Memcache や DBSlayer の話。そして Messaging queue として starling あたりもデモ。
最後の手段とて C 書くのもあり。Ruby-Inline で 4倍くらい速くなったみたいです。どこが重いのかは ruby-prof でみて最適化。あとは、メソッド call が重いとか、オブジェクト生成のコストをおさえるとか、Rails2.2 ではいった ActiveSupport の memorize の話とか。
JRuby や Ruby 1.9 の Fibers もいい感じなのでみておこう。
資料はこのあたりにあるみたい。
- Rails Envy - It's not the size of the app that matters, it's how you code it
Git のよさの説明。
-
- snapshot based
- lightweight branch
- distributed
- standard protocol
Git の応用例。
そしてようやく Grit の話。やっと Ruby のコードがでてきた。Grit は Git の DB を Ruby でごにょごにょするライブラリ。将来的には... gash というプロジェクト? で書き込み系、pure ruby な git デーモンや fetch クライアント。
Mack Framework という、ウェブアプリケーションフレームワークの紹介。その前に DRb や Rinda のお話。DRb やっぱりすごい!
Mack Framework では、
include Mack::Distributable
とかしておくと、裏で Rinda でサーバを探してクラス? を転送してくるらしい。Rails と似たようなことをがんばってやってるみたいです。でも、Routing とかも再実装してるのがなんだか悲しいような。
- A Distributed Ruby Web Application Framework ― Mack Framework
10gen プラットフォーム上では Ruby、Python、JavaScript が使えて、Rails もそのまま動くみたい。クラウドの話というか、10gen でつくった babble という APサーバと mongo という DBサーバのお話。LAMP と対比させたソフトウェアブロックはここ。
Wiki | Information For Developers
http://www.10gen.com/wiki/Information%20For%20Developers
babble は JRuby を使ってます。mongo はスキーマフリーのドキュメント指向データベースとのこと。トランザクションは未サポートだけど、comming soon と言ってました。
couchdb みたいなもの? かと思ったがよくわかってないので、あとで「クラウド向けデータベースの選択肢 − @IT」を読む。
アンファクタリングとは、シンプルなシステムを徐々に改良して自分にしかメンテナンスできないようにする行為。さすがにテストがないと、単に動かないコードを書いてるだけになってしまうかもしれないのでテストはちゃんと書きましょう(笑)
とりあえず、ネタ的なセッション。DRY を逆にやって、どんどんコードを読みづらくわかりにくくしていく...。会場からもアイデア募集。fred とか cheese なんて変数を足したりひいたり... (^^;
まずは権威ある例からスタート。JAXTA はテストしづらく、ドキュメントもよくないとのこと。で、Ruby でつくってみたらしい。
非同期で peer を発見し、YAML ベースのメッセージを非同期で送れます。
実装としてはつくってみましたーという感じで、プロトコルとかちゃんと考えられてるかはあまり説明がなかったです。(そこが一番重要な気もしますが。)
スレッド多用しているので、性能はいまひとつっぽい。
発表者はエジプトから来たそうです。 NeverBlockは、シングルスレッドのアプリケーションがI/Oでブロックするのを防ぐためのライブラリです。スレッドとイベント駆動で書いた例を説明。前者は遅くてスケールもしないけど、複雑さはあまりない。後者は、速くてスケールもするし、スレッドセーフとか考えなくてよいけど(シングルスレッドなので)、複雑...。
Neverblock は Fiber を使っています。Fiber は思いのままに pause したり resume できます。
f= Fiber.new do |x| y = Fiber.yield x z = Fiber.yield y a = 2 end puts f.resume(7) #=> 7 puts f.resume(6) #=> 6 puts f.resume(5) #=> 2 puts f.resume(7) #=> error
Neverblock は PostgresSQL と MySQL をサポートし(MySQLPlusドライバ経由)、Net/HTTP を並列に動かすこともできます。ActiveRecord 対応の NeverBlock アダプタで Rails も Thinサーバ上で並列実行できます。メモリ消費をおさえ、リクエストへの応答を高速化できるとのこと。
ようやくこれで、初日の公式セッションが終了。次は LT です。kakutani さんと takahashi 会長が登壇。笑いと涙の LT でした。
- RubyConf2008のLightning Talkでしゃべってきた14 - 角谷HTML化計画 (2008-11-06)
- 2008-11-07 - 思っているよりもずっとずっと人生は短い。 RubyConf2008のLTで、Yuguiさんとitojunさんについて話してきました
写真を撮ったので、勇姿はあとで載せます!
追記: 載せてみました。
そして RejectConf ほどの乱痴気騒ぎにはなってないものの、微妙な gdgd 感をかもしだしつつ、LT がエンドレスで進んでいます...。いまここ。