Ruby会議2009 #2 (2009/07/18)

まとめと感想

  • 朝早いからか,部屋が分かれるからか,ちょっと少なめな感じ
  • 一橋記念会議場は都合により10分遅れ
    • まさか来ていない?
  • 無線LANの繋がりにくいので,iPhone がうらやましい感じ
  • Reject会議は体調の都合により不参加.非常に残念....
  • RegionalRubyKaigi会議では,高橋会長とかくたにさんの,Ruby会議への熱い思いを感じました.
  • Ruby はフェアで」と言うのが,ここんところ周りで起こってた言語論争の答えじゃないかと思った.
    • Ruby を楽しんで,そして愛そう!
  • 1.9 への移行を急いだ方がいいな,Rails アプリの.
  • 今週中にるりまのMLに参加しよう.
    • 手伝えそうなことは何でも手伝うべきだな.Ruby 好きだし.
  • コミュニティーアピールは時間切れ.漫才師の道は険しい.

Ruby 1.8 のゆくえ

  • 卜部さん @ Trans New Technology
  • 2010 には Yugui さんが Commit 数 1位の予定
past
  • 1.X.0
    • trunk から start
      • 安定したら branch を切る
      • 1.8.1 から branch 化
  • 1.8.6
    • Maintainer が Kirk Haines @ Engine Yard に
      • 1.8.7 が incompatible だと思われた関係で,1.8.7 を使いたくなかった人が多かった
      • 「1.8.6 のメンテナンスができない@卜部」と ruby-core に出したら,俺がやると言われた
        • performance が改善されるかも?それも含めて包括的にやっていく
        • MBARI patch のパッチが入るかも?
          • 海洋調査ロボット用の組み込み用 Ruby 用の
        • Threads patch が入るかも
          • inline assembler で早くなるかも?
recent
  • 1.8.7
    • バグが減らない
future
  • 1.8.8dev
    • Stable as stable API
      • No incompatible changes
    • 1.8 の機能としては一応の完成としている
    • 今後は 1.9 への移行が必要
      • 1.8 で 1.9 のコードが parse error にならないような感じにしたい
  • 1.8.9 ?
    • 1.8.9 はでない
      • 1.9 を使いましょう
  • Other branches
    • 1.8.5 -> Abondaned
    • 1.8.6 -> Maintainanced
    • 1.8.7 -> いつまでメンテナンスすべきか?
    • 1.8.8 -> まだ出てない

Ruby 1.9.2 ロードマップ

  • Yugui @ scaleout さん
    • 会場でリリースできればいいなぁ,と思ってたけど,emobile の関係上,リリースが間に合わなかった
  • 1.9.1
    • p243 をあとでリリース
  • 1.9.2
    • PR1 をあとでリリース
      • snapshot
    • お試しください
Schedule
  • 1.9.2
    • Aug, 25 -> PR2
    • Sep, 25 -> RC1
    • Oct, 25 -> RC2
    • Nov, 25 -> RC3
    • Dec, 25 -> Release
  • 1.9.1
    • Oct, ? -> pXXX
    • Jan, ? -> 1.9.1-final
Functions
  • Socket
    • ark session で
  • Time
    • 古い時刻も表現可能
  • BigDecimal + Rational
    • 互換性の向上
  • BOM
    • open("file.txt", "UTF-16-bom")
      • Byte Order を見ることができるようになる
  • 地味
    • 安定していると言うこと
    • 1.9 系統は stable as stable API
  • 1.9.2 is better 1.9.1
Issues
  • 地雷
    • dl
      • i386 convention しか考えてないの,Itanuim で動かないの
      • いろいろ難しい
  • ripper
    • Ruby の parser がライブラリになりました
      • でもまだバグ有り
  • tk
  • irb
    • irb 立ち上げて help と打つと例外が発生する
      • 近いうちに直す
  • 1.9.1 is stable as 1.8.0
  • ライブラリがまだない
    • 移植をすぐに開始してください!
    • 1.8 との非互換性はない
      • ほとんど
  • compat-version
    • libraries の path は 1.9.1
      • 1.9.1 と API 互換という意味
  • 1.9 の TEENY は Python の MINOR
  • Perl 5 -> Perl 6 に比べると互換性があります!
  • incompatible libraries
    • parse tree を使っている
  • 1.9.1 から Doxygen から Document 作れる
    • Document 用 Patch 募集中
  • M17N
    • offset
      • "あいう"[0] -> "あ"
        • 昔は "あいう"[0] -> (integer)
        • -Kn 使えば OK
    • C API
      • 内部 API が変わっている
    • rb_str_new ではなくて rb_usascii_str_new とか
      • Encoding をセットする必要がある
      • pg adapter
        • ちゃんと Encoding をつけてくれる が,まだ Patch が入っていない
      • mysql / sqlite とか
        • ちゃんと対応してね
Others
  • 1.9 は使えるか?
    • scripting は?
      • OK
    • Rails
      • Asakusa.rb のおかげで動くが?
        • yugui.jp がまだ1.9 になってない
  • ruby-debugger
    • 内部構造を知らないとダメなので,難しい
  • 1.9.3 ?
    • 地味に
Conclusion
  • 1.9 は?
    • 1.8 よりいい
  • 1.9.2 は
    • Good
  • 移植を始めましょう

Q&A of 1.8 and 1.9

  • Debian で 1.9.0 なのは?
    • 手違い.鋭意メンテナンス中
  • UTF-8-BOM
    • サポートしてる.正気じゃないらしいが
  • Proc の中の Const の中の Lookup が変更されたのは?
    • Matz がそう実装したから
    • 変更したい場合はささださんへ
  • 1.8 で 1.9 の拡張ライブラリAPI で足りてないのがあるんだけど
    • 入れ忘れ?
    • 1.8.7/1.8.8 には入ってる
  • みなさんが Ruby を変えられます

p--不満は Patch に変えてください

  • 1.8 で 1.9 の新しい文法を parse できるようにするには?例えば鬼車とか?
    • がんばります@卜部さん
      • 動かないけど読み込めるところまでは行きたい
  • 1.8.6 の Performance Issue が 1.8.7/1.8.8 に入ることは?
    • 1.8.6 だけに入れるのは大反対 by matz
      • あとで調整されるようだ
  • 1.9 の標準ライブラリに入れる入れないの判断は?
    • コミュニティの合意によるが,原則として入れない方向
  • FFI は?
    • dl と被るので,FFI の上に dl を再実装したいが人手が足りない
  • 1.8.9 が出たら?
    • 出る予定がないのでわからない

Ruby リファレンスマニュアル刷新計画 2009 夏

  • 第3段階継続中
    • 組み込みライブラリ,標準ライブラリのメソッドエントリを全て記述する
      • ソースコードを見て,返り値を包括的に調べて書く
      • ただ質に関しては気にしなくても,とにかく書いてあることが重要
  • 進捗
    • まだまだある感じです
    • やる気を出した人が多いと進む
  • 現状分析
    • 新しいライブラリが追加されているので,活動の勢いが足りない
  • 企画部屋@2007/07/17)で決まったこと
    • ライセンス
      • CC 3.0 BY
    • 今後の予定
      • 12月 or 1.9.2 にあわせて,何か公開
      • ruby-lang.org で公開
  • 手伝って欲しいこと
    • すぐにできること
      • るりまの ML に参加すること
    • 頑張れば出来ること
      • Redmine のるりまプロジェクトに参加すること
    • レビューアが足りない
      • 文法がわかれば,マニュアルを書いて欲しい
  • 青木さん登場
    • ごめんなさい
      • 立ち上げてまったく活動できてなかったので
    • 久しぶりすぎてびっくりしたこと多数
      • ふつパイラを書いてました!
      • なので,リファレンスマニュアルに復帰します!
    • 1.8 だけに絞る
    • 1.9 で無くなるものは対象外
    • 対象ライブラリを削る
      • tk
      • socket
      • rexml
      • opensosal?
      • Kersys?

Rubyist Magazine が出来るまで

  • ささださん
    • 30分喋っていいって言われたのに 10分しかない
  • 制作フロー
    • 記事が決まると担当者がアサイ
    • 記事の著者と QuickML で連絡し合っている
    • Hiki
  • 詳細な編集規則がある
  • ぜひ一度ご覧ください
    • 読みふけること間違いなし
  • これから
    • 記事の再利用
    • 簡単なリリース
    • 有料化や wiki の利用
  • るびまの記事を書きませんか?

コミュニティーアピール

  • けっこうぐだぐだしました.いい経験でした.

CHANGE by matz

  • 基調講演
  • 国際化しました
    • 各国の方々が集まってきました
  • オバマのまねではない
  • Ruby 羅針盤
    • われわれがどこにいるのか?
    • 2009年 日本
  • コンピュータ黄金時代
    • Rubyが注目される時代
    • Lisp 大好き,一部を除いて
  • アイデンティティ
    • matz の
      • Ruby の作者」
        • だから顔パス
      • 言語オタク
        • Pから始まっても愛してる
      • プログラム
      • 文筆家
      • 更新しないブロガー
      • ついったー
  • 我々はどこを向いているのか?
    • アティチュード
    • 感謝
      • Ruby でものづくり大賞受賞しました
      • Ruby に貢献して,使って,報告してくれた,多くの人々に
  • 酸っぱいブドウ
    • Firefox 落ちる
    • 結局は好みの問題だと言った次の日に反論を言う
      • 自己正当化,真実から目を背ける
        • Ruby はそれを推奨しません
        • Ruby には欠点があることを認める
          • 変な言い訳しない
  • 割れ窓
    • 壊れた Windows,ではなく
    • 割れ窓理論
      • 割れた窓を放置すると,待ち全体がスラム化してしまう
      • 逆に直すと,スラムがなくなる
    • 変化しない言語は面白くない
    • できる範囲内でバグを直し続けます
  • 責任
    • 鉛筆削るナイフを父親にもらって,学校に持って行った
      • ナイフは危ないけど,信頼を得て責任を感じるので,人としてしっかりする的な
    • いろんなことが出来る言語は危ない
      • いろんなことができるからこそ,使う人を信頼して責任を感じてやってもらっている
  • 原則
    • フェアである
    • 自己責任
    • 信頼する
      • matz がこうあって欲しい,自分がこうありたいという思い
  • matz の作業環境
    • Emacs
    • Subversion
    • StGIT(Stacked GIT)
      • VCS on top of Git
      • Patch Stacking
      • ただ一つ欠点は,Python で書かれていること
      • 未公開スタック
        • 27スタック
        • ほとんどは実験
        • いくつか紹介
  • complex_literal
  • true_division
    • 1/2 -> 有理数 1/2
      • 2/1 -> 2 に正規化するには必須
    • 互換性問題大
  • as_conv
    • 明示的な変換 to_a
    • 暗黙的な変換 to_ary / to_hash
    • これを
      • 明示的な変換 as_XXX
      • 暗黙的な変換 to_XXX
  • math_error_check
    • Math関数が例外を返す
      • NaN を返さない
    • Math 関数以外は
  • o1_bitmap_marking
    • あとでセッションがある
  • nloop
    • 多重ループメソッド
nloop(3,3,3) {|i,j,k|
  p [i,j,k]
}
  • str_index_offset
    • Bug?
  • sym_gc
    • シンボルを回収するGC
      • シンボルはGCされないので
    • GCが遅くなる
  • private_ivar
  • block_local_vars_eq
    • 「:=」で代入した変数はブロックローカル
  • module_as_trait
    • module + module
    • 2つモジュールを合成した新しいモジュールを生成
  • open_class_override
    • 関すのオーバーライドで,前のを super で呼び出せる
  • keyword_args
    • メソッド定義でキーワード
  • lvar_propagated
    • ローカル変数のスコープ
    • 呼ばれたときにブロックローカルであれば,勝手にスコープ更新
まとめ
  • フェアである
  • 自己責任
  • 信頼する
  • 感謝
  • 継続する
Q&A
  • Enumarator に join を入れたときにテストしなかったという話は?
    • 手元ではテストしましたよ

Lightning Talk #2

  • RoRしか印象に残ってない.
    • ある意味成功なのか失敗なのか・・・・

Ruby C10K: Hight Performance Networking - a case study with EM-Ruby

  • Ilya Grigorik @igrigorik
  • http://bit.ly/ruby-c10k
  • EM-Proxy + Examples
  • C10K
  • EventMachine
  • Benchmarks + Misc
  • Rails はスケールしないわけじゃない
  • PostRank
    • LoadBalancer -> Nginx -> AppServer
  • 1995-2000までは 100 req/s が限界
  • Not Application Bottleneck
    • -> I/O + Kernel Bottleneck
  • multithreads 化するために fork すれば?
    • Linux の fork が遅いから,fork すればいいってものじゃない
  • non-blocking I/O の場合は non-linear に悪くなっていく
  • Eventmachine Reactor
    • C++ core
    • API がいいらしい
    • screencast 見てみよう
    • HTTP Request で reposense が返るまで待たずに,次のコードを実行し,返ってきたらブロック内部を実行する感じ
  • n seconds later / every n seconds / deferred / tec.
  • Stagin Enverinment Fail
    • Production Enverinment と異なってしまう
  • Benchmarking Proxy
    • EM を使って Proxy にする
    • アクセスを記録して,stating などで試す仕組み
    • Ex) Port-Forwarding
      • データを変更せずにそのままログに吐くなど
    • Ex) Port-Forwarding + Alter
      • 結果を変更して返す
    • Duplex HTTP for benchmarking or monitoring
      • github から clonse したら即実行できる
  • Hacking SMTP:Whitelisting
    • Ruby のコードで Whitelist を検証できる
      • EM-Proxy であれば,なんでも Proxy することが可能
  • Beanstalkd + EM-proxy
    • Beanstalkd Math
      • in memory の work queue
      • scheduling / priority
    • em-proxy を使って MySQL に書き出すようにしてみた
      • さきの queue を MySQL へ,それ以外を Beanstalkd に書き出すようにしたら,95% 以上 MySQL にいった
      • 定期バッチで Beanstalkd へ書き戻し
    • 2500 client で余裕があった 1core/1processor -> 5000req/s
      • 2cores なら C10K に対応できる
  • 普通の Web サーバなら thin がおすすめ (EM ベース)
  • 2core ならどう分散させる?
    • 複数の proxy (多段 proxy)を使って振り分けるのがいいらしい?
  • on_data はどのタイミングで呼ばれる?
    • データがあるときに呼ばれます.socket に.
    • 4kbytes + 200kbytes な request なら,最初の 4kbytes が来たときに動くから,自分で buffering しないとだめ
  • MySQL が bottleneck にならない?
    • MySQL をチューニングしているので大丈夫
      • trix_commit をかなりパフォーマンスよりにしている
  • 安定してるか?
    • 最初はダメだった <- buffering ありだった
    • いまでは buffering なし(一部を除く) で安定稼働中
  • 多段で前方が詰まると mongrel とか thin が待ちにならないか?
    • half-proxy / half-nginx, half-proxy / half-thin とかにすればいいけど,プロセス数が増えるからどうかなという感じ
  • 全てが state machine にならない?
    • ならない.全ての response が必要になるわけなじゃいから,全てが state machine になることはない
    • パケットを分割して・・・・(追えなかった)

Reigonal RubyKaigi 会議@企画部屋

  • かくたにさんが熱かった
    • 小さくてもいいから,Regional RubyKaigi もっと頻繁にやるべきだと感じた.
      • 運営大変そうですが....