Jump to navigation
行ってきました。
東京Ruby会議03
http://regional.rubykaigi.org/tokyo03
オラクル本社にて開催。まさかお仕事以外でオラクル本社にお邪魔するとは思わず、どうしてかなーと思ってたら、コミュニティとの接点も増やしていきたいとのこと。
手弁当でのイベントで、セッション内容・ホスピタリティともどもクオリティをあそこまで高く開催できるスタッフの運営能力の高さにとても驚いた。とても凄い。
@yuguiさん講演。プログラムを生成するプログラムのお話。Rubyのメタクラスの解説から始まり、実際のメタプログラミングのためのコーディングテクニックまで。
講義の最後の方に出された例は凄すぎて攻殻機動隊の世界はほんとうにあったんだ!という感じ。DRbで作られた別プロセスに、irbでリモートで繋ぎたい、んでメソッドを転送したいとか。だっけ?とにかく、DRbには攻性防壁が必要という結論(嘘)。
要するにクラス構造をメタメタレベルまで理解したときに、無限の大宇宙を表現できるコーディング能力が身につくという結論(超曲解)。
メタクラス構成については、かつてyuguiさん周りで↓のリンク先のような議論をしていて、脇で追っかけて見ていたのである程度は理解できてたけど、その知識を応用となるとなかなかですねぇ。
Ruby1.9 のクラスのメタ階層とかevil-rubyとか
http://yugui.jp/articles/798
Rubyのメタクラス階層について再び
http://yugui.jp/articles/803
あと、これはしらなかった。こうするんだね。こういうDSLって。
ハンズオンの時間。色々迷ったけど、個人的に良い感じのKVSを探しているので、MongoDBのハンズオンに参加。
これは@ursmさんのハンズオン。
MongoDBというKVSをRubyから使おうという内容。内容は@ursmさんがとても丁寧な資料を事前に作られていたので、省略。ここ見て下さい。→http://ursm.jp/mongo
感想としては高速だし、JSONを基本としたデータ構造でとても使いやすく、バランスが取れていてとても良さそうに見えた。結構実績も多いらしくて、NY TimesとかSourceForgeとか。あと、Rubyのデータマッパも充実しているところも気に入った。
面白いのが、DBのエンジンはC++なんだけど、DBとのインターフェースがJavaScriptで作られていて、それを経由してアクセスすること。Rubyから使う場合はデータマッパ使うんだろうけど、わかりやすいのはいいことだ。
いくつか質問してみた。回答間違えていたらすいませんが、ツッコミお願いします。
Q, 検索クエリに正規表現使えるとあったけど、使っちゃうと辛いの?
A, 前方一致ならインデックスが効いていれば速い。そうじゃないならやはり辛い。
Q, 三つのマッパーの違いは?(MongoMapper, Mongoid, MongoDoc)
A, 左から順に普及度が高い。右から順に尖ってる。
どれもサードパーティ製。公式のマッパーはできがあまり良くない。
Q, Rubyから送る場合データってどうシリアライズしてるんですか?
A, JSONだけど、厳密にはBISONで、どうたらこうたら(ごめんなさい私の記憶が飛んでます)
Q, 日本語も正規表現使えるの?
A, MongoDBコンパイル時にJSエンジンにUTF8使うようにスイッチ付ければ大丈夫
Q, トランザクション無いとあったけど、レコード単位では?
A, (ワークショップ時間切れにつき)ここ見て→http://www.mongodb.org/display/DOCS/Atomic+Operations
楽しかった−。
成瀬ゆいさんによる国際化の話。文字コードにまつわる超深い話。これは早く噂の「プログラマのための文字コード技術入門
」を読まねばと思った。
聞きながら昔のことを思い出しちまったよ的セッションとなった。
昔、CでWindows-31J(君がSJISと読んでいるモノは大抵Windows-31Jだ:本セッションより引用)をISO-2022-JPに変換するコードを書いていたときに泣きそうになったことを思い出した。
Solarisで動いていたバイナリをLinuxに移植したときに、当時のLinuxのiconv実装がショボ過ぎてピュアなSHIFT-JISにしか対応してなく、しょうがなくなんとかしたり。
あと、ある文字列をパースして、パースした部分の文字数(not バイト数)を数えるとかいうロジックを書かなきゃならんことになったんだけど、ISO-2022ならエスケープの両端を見れば数え方を決定できるのに、SJISははじめから見ないと分からんとかで泣いたことを思い出した。
とにかく、この講義を10年前に聞いておきたかった。。。
田中哲さん。プロセスの起動について、ユースケースの分析からAPI設計に至るまでの壮大な物語。UNIX, Windowsの間でポータビリティのあるプロセス起動についてのコードを書くためのAPIはどう設計すべきか的な。
資料は↓と同じかな?
http://www.a-k-r.org/pub/spawn-2009-04.pdf
fork()とexec()の間を取り持つやり方はOSによってはできないことも多々あり、そこをどう工夫するか。UNIX入門から始まり、プロセス起動の常道、落とし穴の説明、API設計。どれもとても面白い話でした。
オーム社さんが今度発売の情熱プログラマー ソフトウェア開発者の幸せな生き方
を限定3人に配布する!!という超絶太っ腹大サービスを実施!!
3人の選定方法は抽選かなにかわかんないけど、こういうのに当たる自信は皆無だから、参加することに意義がある的な感じで配布大会に参加してみた。すると、じゃんけん大会で配布する人を決めるとのこと。
で、じゃんけんに弱いはずの私が奇跡的にじゃんけんに勝ってしまい、そのまま頂いてしまった。

なんかTwitterのTLを見ていると入手が難しいらしい。貴重な書籍を頂けた事に感謝し、その恩に応えるために、本棚に放置されている何十冊とある積ん読の優先順位を繰り下げにして本書を読み、下手くそではあるが書評を書こうと思う。
情熱プログラマの端くれとして、他の情熱プログラマのために出来ることである。
ちなみに、日本Ruby会議2010のkeynoteは本書の著者でもあるかのChad Fowlerであることが、最後に日本Rubyの会会長から発表された。よく訓練されたRubyistには必読の書であることが確定された瞬間でもあった。
東京Ruby会議03
http://regional.rubykaigi.org/tokyo03
オラクル本社にて開催。まさかお仕事以外でオラクル本社にお邪魔するとは思わず、どうしてかなーと思ってたら、コミュニティとの接点も増やしていきたいとのこと。
手弁当でのイベントで、セッション内容・ホスピタリティともどもクオリティをあそこまで高く開催できるスタッフの運営能力の高さにとても驚いた。とても凄い。
メタプログラミング
@yuguiさん講演。プログラムを生成するプログラムのお話。Rubyのメタクラスの解説から始まり、実際のメタプログラミングのためのコーディングテクニックまで。
講義の最後の方に出された例は凄すぎて攻殻機動隊の世界はほんとうにあったんだ!という感じ。DRbで作られた別プロセスに、irbでリモートで繋ぎたい、んでメソッドを転送したいとか。だっけ?とにかく、DRbには攻性防壁が必要という結論(嘘)。
要するにクラス構造をメタメタレベルまで理解したときに、無限の大宇宙を表現できるコーディング能力が身につくという結論(超曲解)。
メタクラス構成については、かつてyuguiさん周りで↓のリンク先のような議論をしていて、脇で追っかけて見ていたのである程度は理解できてたけど、その知識を応用となるとなかなかですねぇ。
Ruby1.9 のクラスのメタ階層とかevil-rubyとか
http://yugui.jp/articles/798
Rubyのメタクラス階層について再び
http://yugui.jp/articles/803
あと、これはしらなかった。こうするんだね。こういうDSLって。
# ---- ライブラリのコード
module Foo
def a
p 'a'
end
end
def kero_with(&block)
o = Object.new.extend(Foo)
o.instance_eval(&block)
end
# ----- ユーザのコード
kero_with do
a # => "a"
end
module Foo
def a
p 'a'
end
end
def kero_with(&block)
o = Object.new.extend(Foo)
o.instance_eval(&block)
end
# ----- ユーザのコード
kero_with do
a # => "a"
end
RubyからMongoDBを使う
ハンズオンの時間。色々迷ったけど、個人的に良い感じのKVSを探しているので、MongoDBのハンズオンに参加。
これは@ursmさんのハンズオン。
MongoDBというKVSをRubyから使おうという内容。内容は@ursmさんがとても丁寧な資料を事前に作られていたので、省略。ここ見て下さい。→http://ursm.jp/mongo
感想としては高速だし、JSONを基本としたデータ構造でとても使いやすく、バランスが取れていてとても良さそうに見えた。結構実績も多いらしくて、NY TimesとかSourceForgeとか。あと、Rubyのデータマッパも充実しているところも気に入った。
面白いのが、DBのエンジンはC++なんだけど、DBとのインターフェースがJavaScriptで作られていて、それを経由してアクセスすること。Rubyから使う場合はデータマッパ使うんだろうけど、わかりやすいのはいいことだ。
いくつか質問してみた。回答間違えていたらすいませんが、ツッコミお願いします。
Q, 検索クエリに正規表現使えるとあったけど、使っちゃうと辛いの?
A, 前方一致ならインデックスが効いていれば速い。そうじゃないならやはり辛い。
Q, 三つのマッパーの違いは?(MongoMapper, Mongoid, MongoDoc)
A, 左から順に普及度が高い。右から順に尖ってる。
どれもサードパーティ製。公式のマッパーはできがあまり良くない。
Q, Rubyから送る場合データってどうシリアライズしてるんですか?
A, JSONだけど、厳密にはBISONで、どうたらこうたら(ごめんなさい私の記憶が飛んでます)
Q, 日本語も正規表現使えるの?
A, MongoDBコンパイル時にJSエンジンにUTF8使うようにスイッチ付ければ大丈夫
Q, トランザクション無いとあったけど、レコード単位では?
A, (ワークショップ時間切れにつき)ここ見て→http://www.mongodb.org/display/DOCS/Atomic+Operations
楽しかった−。
Reintroduction to Ruby M17N
成瀬ゆいさんによる国際化の話。文字コードにまつわる超深い話。これは早く噂の「プログラマのための文字コード技術入門
聞きながら昔のことを思い出しちまったよ的セッションとなった。
昔、CでWindows-31J(君がSJISと読んでいるモノは大抵Windows-31Jだ:本セッションより引用)をISO-2022-JPに変換するコードを書いていたときに泣きそうになったことを思い出した。
Solarisで動いていたバイナリをLinuxに移植したときに、当時のLinuxのiconv実装がショボ過ぎてピュアなSHIFT-JISにしか対応してなく、しょうがなくなんとかしたり。
あと、ある文字列をパースして、パースした部分の文字数(not バイト数)を数えるとかいうロジックを書かなきゃならんことになったんだけど、ISO-2022ならエスケープの両端を見れば数え方を決定できるのに、SJISははじめから見ないと分からんとかで泣いたことを思い出した。
とにかく、この講義を10年前に聞いておきたかった。。。
open3のはなし
田中哲さん。プロセスの起動について、ユースケースの分析からAPI設計に至るまでの壮大な物語。UNIX, Windowsの間でポータビリティのあるプロセス起動についてのコードを書くためのAPIはどう設計すべきか的な。
資料は↓と同じかな?
http://www.a-k-r.org/pub/spawn-2009-04.pdf
fork()とexec()の間を取り持つやり方はOSによってはできないことも多々あり、そこをどう工夫するか。UNIX入門から始まり、プロセス起動の常道、落とし穴の説明、API設計。どれもとても面白い話でした。
番外編「情熱プログラマー」配布
オーム社さんが今度発売の情熱プログラマー ソフトウェア開発者の幸せな生き方
3人の選定方法は抽選かなにかわかんないけど、こういうのに当たる自信は皆無だから、参加することに意義がある的な感じで配布大会に参加してみた。すると、じゃんけん大会で配布する人を決めるとのこと。
で、じゃんけんに弱いはずの私が奇跡的にじゃんけんに勝ってしまい、そのまま頂いてしまった。
なんかTwitterのTLを見ていると入手が難しいらしい。貴重な書籍を頂けた事に感謝し、その恩に応えるために、本棚に放置されている何十冊とある積ん読の優先順位を繰り下げにして本書を読み、下手くそではあるが書評を書こうと思う。
情熱プログラマの端くれとして、他の情熱プログラマのために出来ることである。
ちなみに、日本Ruby会議2010のkeynoteは本書の著者でもあるかのChad Fowlerであることが、最後に日本Rubyの会会長から発表された。よく訓練されたRubyistには必読の書であることが確定された瞬間でもあった。
TrackBack
トラックバック
このエントリにトラックバックはありません
このトラックバックURLを使ってこの記事にトラックバックを送ることができます。
もしあなたのブログがトラックバック送信に対応していない場合にはこちらのフォームからトラックバックを送信することができます。.
Comments
ursm wrote:
2010-03-01 01:28:41
takeshi wrote:
どうも、おつかれさまでした。
フォローありがとうございます。
MongoDBは内部の動きが見え易いのもいいですね。
> BSON の仕様書 (!) がありました。
これはすごい!こんな風になってるんですねーー。へー。
フォローありがとうございます。
MongoDBは内部の動きが見え易いのもいいですね。
> BSON の仕様書 (!) がありました。
これはすごい!こんな風になってるんですねーー。へー。
2010-03-01 01:41:09
> Q, Rubyから送る場合データってどうシリアライズしてるんですか?
BSON の仕様書 (!) がありました。
http://bsonspec.org/#/speci...
こんな感じで色々格納できるバイナリ形式として保持されています。Rubyドライバは gems/mongo-0.18.3/lib/mongo/util/bson_ruby.rb あたりで頑張ってバイナリにしています (mongo_ext はこの部分を拡張ライブラリにしているから速い)。