rubykaigi2009 presentation slide
DESCRIPTION
Our tDiary's policy and strategies to support Ruby 1.9 and our future plan.TRANSCRIPT
![Page 1: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/1.jpg)
tDiary の Ruby1.9 対応の過程と今後のロードマップ
柴田 博志 (tDiary.org)
SHIBATA Hiroshi (tDiary.org)
Our tDiary's policy and strategies to support Ruby 1.9 and our future plan.
12009年7月19日日曜日
![Page 2: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/2.jpg)
自己紹介
22009年7月19日日曜日
![Page 3: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/3.jpg)
• SHIBATA Hiroshi a.k.a hsbt (hsbt.org)
• ソフトウェアエンジニア
• 1981年生まれ 北海道在住
32009年7月19日日曜日
![Page 4: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/4.jpg)
Rubyとの関わり
• 高専4年の時の応用数学で id:gotoken から教えてもらう
• tDiary を使い始めて主にWeb関連のライブラリを使い始める
42009年7月19日日曜日
![Page 5: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/5.jpg)
• Administrator of developer team for tDiary.org
52009年7月19日日曜日
![Page 6: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/6.jpg)
RubyKaigi2009テーマ「変わる/変える」
62009年7月19日日曜日
![Page 7: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/7.jpg)
よろしくお願いします。
72009年7月19日日曜日
![Page 8: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/8.jpg)
Agenda
• まずはじめに
• tDiary-2.3.2リリース計画(Ruby 1.9 サポート)
• Ruby 1.9 対応の詳細
• tDiary-2.3.3~ future
82009年7月19日日曜日
![Page 9: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/9.jpg)
まずはじめに
92009年7月19日日曜日
![Page 10: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/10.jpg)
tDiary使ってる人いますか?
102009年7月19日日曜日
![Page 11: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/11.jpg)
tDiary
112009年7月19日日曜日
![Page 12: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/12.jpg)
tDiaryと言えば…
122009年7月19日日曜日
![Page 13: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/13.jpg)
tDiary
• feed reader でコメントスパムが(ry
• tDiaryのソースコードは読まない方が(ry
• テストコードがない典型的レガシーコー(ry
132009年7月19日日曜日
![Page 14: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/14.jpg)
tDiary
• Tsukkomi oriented Diary system
• before Railsから開発継続中(25年計画)
• Rubyと共に成長
• レンタルサーバーにRubyを入れさせる作戦
142009年7月19日日曜日
![Page 15: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/15.jpg)
tDiaryはRubyと共に成長
152009年7月19日日曜日
![Page 16: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/16.jpg)
2009/01/30Ruby 1.9 Release!
162009年7月19日日曜日
![Page 17: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/17.jpg)
Ruby 1.9使ってる人いますか?
172009年7月19日日曜日
![Page 18: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/18.jpg)
RubyKaigi2009テーマ「変わる/変える」
182009年7月19日日曜日
![Page 19: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/19.jpg)
「変える」tDiary による Ruby
1.9 普及作戦
192009年7月19日日曜日
![Page 20: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/20.jpg)
tDiary によるRuby 1.9 普及作戦
• Ruby 1.9はいつかは使わなければならない
• tDiaryをRuby 1.9普及のキラーアプリにする
• とりあえず動くからRubyを1.9にバージョンアップしてしまう
202009年7月19日日曜日
![Page 21: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/21.jpg)
Agenda
• まずはじめに
• tDiary-2.3.2リリース計画(Ruby 1.9 サポート)
• Ruby 1.9 対応の詳細
• tDiary-2.3.3~ future
212009年7月19日日曜日
![Page 22: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/22.jpg)
tDiary-2.3.2リリース計画
(Ruby 1.9 サポート)
222009年7月19日日曜日
![Page 23: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/23.jpg)
とりあえず動かしてみる
232009年7月19日日曜日
![Page 24: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/24.jpg)
orz242009年7月19日日曜日
![Page 25: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/25.jpg)
でもやるんだよby kakutani
252009年7月19日日曜日
![Page 26: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/26.jpg)
とりあえず何から始めたものか…
262009年7月19日日曜日
![Page 27: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/27.jpg)
まずは計画272009年7月19日日曜日
![Page 28: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/28.jpg)
2008年12月神奈川県某所
282009年7月19日日曜日
![Page 29: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/29.jpg)
作戦会議292009年7月19日日曜日
![Page 30: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/30.jpg)
Ruby 1.9 での主な対応
•過去バージョンとの非互換部分
•文字エンコーディングの変更
302009年7月19日日曜日
![Page 31: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/31.jpg)
Ruby 1.9 対応計画
•1.8と1.9に存在する様々な非互換をどうするか
•magic comment をどうするか
312009年7月19日日曜日
![Page 32: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/32.jpg)
Ruby 1.9対応計画
•ruby 実行時の --encodingどうするか
•エンコーディング周りの細かい修正どうするか
322009年7月19日日曜日
![Page 33: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/33.jpg)
Agenda
• まずはじめに
• tDiary-2.3.2リリース計画(Ruby 1.9 サポート)
• Ruby 1.9 対応の詳細
• tDiary-2.3.3~ future
332009年7月19日日曜日
![Page 34: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/34.jpg)
Ruby 1.9 対応の詳細
342009年7月19日日曜日
![Page 35: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/35.jpg)
その1
互換性対応(core/misc/lib/compatible.rb)
352009年7月19日日曜日
![Page 36: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/36.jpg)
compatible.rb
• プロトタイプは machu さんが作成
• 1.8と1.9との非互換を吸収
• for 1.9: String.each_line, String.to_a ...
• for 1.8: String.force_encoding, String.bytesize ...
362009年7月19日日曜日
![Page 37: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/37.jpg)
その2
マジコメる(magic comment ru)
372009年7月19日日曜日
![Page 38: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/38.jpg)
マジコメる
•*.rb の1行目に文字エンコーディングを明示
•shebang が使われているものは2行目
382009年7月19日日曜日
![Page 39: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/39.jpg)
お題
1行目に任意の文字列を挿入するワンライナーを書きなさい
392009年7月19日日曜日
![Page 40: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/40.jpg)
gsed -i "1s/.*/# -\*- coding: utf-8; -\*-\n&/" **/*.rb
sed を使うんだ!
402009年7月19日日曜日
![Page 41: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/41.jpg)
その3
ruby --encoding=utf-8
412009年7月19日日曜日
![Page 42: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/42.jpg)
ruby --encoding=utf-8
• ruby 実行時に --encoding オプションをつけることでエンコーディングを強制できる
• tDiaryの場合だとindex.rbやupdate.rbのshebangに追加
• ユーザーに優しく無いので意識しなくても動くようにする
422009年7月19日日曜日
![Page 43: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/43.jpg)
その4
外部エンコーディングの指定
432009年7月19日日曜日
![Page 44: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/44.jpg)
外部エンコーディングの指定
•最初はopen( file, ‘r:utf-8’) を使っていた
•Ruby 1.8.6 だと使えない技
•却下442009年7月19日日曜日
![Page 45: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/45.jpg)
Encoding::default_external = ‘UTF-8’
default_externalを使うんだ!
452009年7月19日日曜日
![Page 46: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/46.jpg)
関係者連絡
RUBY_VERSIONは使わない
462009年7月19日日曜日
![Page 47: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/47.jpg)
その他細かい修正
472009年7月19日日曜日
![Page 48: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/48.jpg)
細かい修正• cgi.cookies が ASCII-8BIT と認識されるので
encodingを個別に指定する
• ブロックをつけない map は Enumerator を返すようになったので to_a する
• get の第二引数が nil 許容しなくなったので何らかの値を指定
482009年7月19日日曜日
![Page 49: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/49.jpg)
ここまで対応すると…
492009年7月19日日曜日
![Page 50: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/50.jpg)
ひとまず動作確認完了
502009年7月19日日曜日
![Page 51: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/51.jpg)
ところが…
512009年7月19日日曜日
![Page 52: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/52.jpg)
eval実行時にSecurityError
522009年7月19日日曜日
![Page 53: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/53.jpg)
eval実行時にSecurityError
532009年7月19日日曜日
![Page 54: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/54.jpg)
[BUG]だった• $SAFE= 1の時のevalに[BUG]
• 直るまでこんな感じで対応
542009年7月19日日曜日
![Page 55: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/55.jpg)
ruby-1.9.1p129 で bug fix
552009年7月19日日曜日
![Page 56: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/56.jpg)
老師曰く• Ruby の [BUG] を踏んだら喜びなさい
• Ruby の [BUG] を踏むようになってから一人前のアプリケーション
• ただのレガ(ry
562009年7月19日日曜日
![Page 57: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/57.jpg)
2009/05/08tDiary-2.3.2 リリース
572009年7月19日日曜日
![Page 58: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/58.jpg)
めでたしめでたし
582009年7月19日日曜日
![Page 59: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/59.jpg)
hsbt.org
592009年7月19日日曜日
![Page 60: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/60.jpg)
Agenda
• まずはじめに
• tDiary-2.3.2リリース計画(Ruby 1.9 サポート)
• Ruby 1.9 対応の詳細
• tDiary-2.3.3~ future
602009年7月19日日曜日
![Page 61: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/61.jpg)
「変わる」tDiary-2.3.3~ future
612009年7月19日日曜日
![Page 62: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/62.jpg)
tDiary-2.3.3~ future
• testing frameworkの採用
• rspec
• cucumber
• CGIからRackへの載せ替え
• 機能追加と不具合修正
622009年7月19日日曜日
![Page 63: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/63.jpg)
testing framework
• 老師(マイケル・C・フェザーズ)曰く:
• 自信を持って変更ができない• 燃料: rspecとcucumber
「テストが無いコードはレガシーコード」
632009年7月19日日曜日
![Page 64: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/64.jpg)
rspec
•pluginの挙動をテスト
•contribの成果をcoreにマージ予定
642009年7月19日日曜日
![Page 65: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/65.jpg)
cucumber
•シナリオをテスト•testable_tdiary の成果をマージ済
652009年7月19日日曜日
![Page 66: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/66.jpg)
testable_tdiary!!
662009年7月19日日曜日
![Page 67: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/67.jpg)
おさらい
672009年7月19日日曜日
![Page 68: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/68.jpg)
SapporoRubyKaigi01
682009年7月19日日曜日
![Page 69: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/69.jpg)
詳しくは…
• 札幌tDiary会議01の角谷さんのスライドを参照
• http://kakutani.com/20081025.html#p01
692009年7月19日日曜日
![Page 70: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/70.jpg)
testable_tdiary のマージ
702009年7月19日日曜日
![Page 71: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/71.jpg)
githubで作業中
http://github.com/hsbt/tdiary/tree/testable_merge
712009年7月19日日曜日
![Page 72: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/72.jpg)
作業ステータス
•script/server (pure webrick)
•rackup -s webrick tdiary.ru
•cucumber -l ja features
•一部のシナリオのみ動く
722009年7月19日日曜日
![Page 73: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/73.jpg)
tDiary会議報告
732009年7月19日日曜日
![Page 74: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/74.jpg)
夢のある世界tDiary cgi.rb
webrick
rack
cgi.rb
webrick
passenger
742009年7月19日日曜日
![Page 75: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/75.jpg)
ユーザー/コミッタの声• cacheフォルダにcacheじゃないデータがある
• XMLRPCが動かないまま放置されている
• mod_ruby怪しいからfcgiを取り込みたい
• Ruby 1.9 で動かすと微妙に遅い
752009年7月19日日曜日
![Page 76: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/76.jpg)
僕らの道のりはまだまだ長い
762009年7月19日日曜日
![Page 77: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/77.jpg)
まとめ
772009年7月19日日曜日
![Page 78: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/78.jpg)
まとめ• tDiaryはRubyと共に成長しています
• 「変える」: tDiaryがRuby1.9に対応したので皆さん使いましょう
• 「変わる」: tDiaryは2.3.3でレガシーコードから卒業します
782009年7月19日日曜日
![Page 79: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/79.jpg)
ご静聴ありがとうございました
792009年7月19日日曜日
![Page 80: RubyKaigi2009 Presentation Slide](https://reader033.vdocument.in/reader033/viewer/2022060109/5555a920d8b42afe5d8b468b/html5/thumbnails/80.jpg)
Q&A
802009年7月19日日曜日