RubyKaigi2009 二日目メモ

初日の晩にはしごして少し飲み過ぎましたが、今日もしっかり朝から会議。
今年は 3日間のゆったり構成ですが、毎日少しずつ開始時間が早くなっていくという罠。


以下、昨日と同じく自分用メモ。
# スポンサーセッションではなく裏番組のほうが笑いが多かったみたい.. orz

1/60 秒で Ruby (Ruby でゲームを作ったら)

  • ゲーム作りに使ったライブラリ
  • 1.9 には GC::Profiler あり
    • オブジェクト数に比例して GC による停止時間も増加
    • 10万オブジェクトに対して 10msec くらい
    • インクリメンタル GC、誰かつくって
  • 配布方法
    • Windows には .exe にするのに Exerb
    • Mac には、適当に app にまとめる

Ruby における生産性を高める開発環境を考察する by ujihisa

静的コード解析統合環境の試作

  • 日立で、PaaS、RoR 開発、学習環境サービスの提供を検討中
    • ORM、Reek、Roodi、Flog、Saikuro、Flay を利用した静的コード解析サービス付き
  • チェック内容
    • ORM: コーディングルールに従っているかを評価
    • Reek: Code Smell の検知
    • Roodi: デザインに関する問題を警告
    • Flog: 代入、分岐、呼出を分析することでコードの複雑度評価
    • Saikuro: McCable
    • Flay: 構造的類似性の評価、コピペ探し
  • 類似ツール
    • Metric_fu
    • 同じく上記 OSS ツールを使用してレポート出力(html)
    • CSS を似せているが、基本的には各結果をそのまま載せているだけ
  • 日立のと何がちがうかと言うと、結果を一度集めて分析しているかどうかくらい
  • Q&A
    • Q: Rubyならではの苦労、知見など
    • A: ちょっといい例が浮かばない。Rubyならではのチェックルールが現状限られている感じなので増やしたいというのはある
    • Q: 日立ソフトさんが作られて、実際に使われてるのでしょうか
    • A: 一部のプロジェクトでは使われていて、評価しているという状況
    • Q: 感触は
    • A: 個人の意見だが: JavaにしろRubyにしろ、プロジェクトによってはこういうツールは有用だし、逆に有用性が低くなる場合もある。大規模プロジェクトに対しては有効性が高いのでは。
    • Q: C++だとメモリ周りが嬉しいんだけど、RubyだとDSL関係をチェックしてくれると嬉しい気がするんだけど
    • A: 検討します?

Keynote

  • Ruby 羅針盤
    • われわれはどこにいてどこに向かっているのか?
    • 現代は The Programming Golden Age
    • 正しい技術を選んで、正しく評価できる時代のさきがけ
  • Twitter@yukihiro_matz
    • はじめたらしい
  • 酸っぱいブドウ
    • 自己正当化、真実から目を背ける
  • 割れ窓 Broken Window
    • バグを放置しておくとスラム化
    • OSS は生きていることが魅力、枯れた / 変化しないソフトウェアは面白くない?
  • 責任
    • 責任を与えて信頼、より多くの成功
    • 下にあわせるよりも、上の生産性の最大化
    • Ruby は正論の通じる言語」 by yugui
    • 「バグ連発するとコミット権とりあげるよ」と言われたらしいw
  • StGit (Stacked Git)
  • 未公開スタック (パッチ) が 27 個ある
    • 互換性の問題がある、かつ必要なのか分からないのでフィードバックがほしいそうな
    • 1/2 -> 有理数 1/2
    • 今までの割り算との互換性に問題
    • 明示的な変換 (to_a) と 暗黙的な変換 (to_ary)
    • as と to のどっちがどっちだがわからなくなる罠
    • Math 関数が NaN ではなく、例外を返す
    • ほかの言語では例外が多い
    • 省略
    • 以下みたいに n 重ループが書ける
 nloop(3,3,3) {|i,j,k|
   p [i,j,k]
 }
a = "foo"
a[3] = x # "foox"  1.9 だと
    • シンボルを回収する GC
    • 100万個シンボルをつくると遅くなる..
    • GC 自体も遅くなるという欠点
    • スーパークラスと共有しないインスタンス変数
    • @_foo で private
    • けっこうこの書き方を使っている既存プログラムがある
    • := で代入した変数はブロックローカル
    • ブロックパラメータでの宣言が不要になるが、美的感覚的には微妙
    • module + module で新しいモジュールを生成
    • その時点の機能をコピーなので、あとからオープンクラスで機能を追加しても反映されない
    • メソッド再定義でオーバーライド
    • 古いものを super で呼べちゃう
    • アスペクト指向のベースとなる
    • メソッド定義でキーワード引数
    • ブロックのあとで変数を使うと勝手にスコープを拡張してくれる
    • キモいと言われたw

Lightning Talks

Decimal
  • 標準添付の BigDecimal をつくりかえた
  • Bignum の再利用することでシンプルかつ、パフォーマンスも数倍に
Morumotto
  • Visual Authentication
  • 主要OS、主要キャリアに対応
Enphase Energy
ギャルゲー
  • Romantic Ruby で略して RoR
arduino.rb
  • 手元でボタンを押してスライドのページ送り
rubyrep
初心者のためのグラフィックライブラリ
  • Ruby/SDL はちょーめんどいので、BASIC みたいに簡単に
  • Ruby/SDL をラップ、OpenGL もラップ
  • 近日公開予定
Ruby でネットワーク運用
  • 監視だけなら汎用ツールでよいが、外部の死活監視と連携するなら作り込み
    • 最初に想定しきれない、変化する、受け入れる、ならば Ruby
  • 数千、数万台
    • 処理プロセスのマルチスレッド化
  • テストの自動化重要
    • rspec 日本語ラブ
Ruby によるお手軽 CDN
daemon-kit
ActiveLDAP
  • 今日 1.1 0 リリース
  • LDAP の木構造のデータを Ruby で扱えるようにするもの
  • 直感的な API # AR ライク

スポンサーセッション

The Samurai Ruby
  • 省略..
携帯ポータル
  • 最近の @nifty には 40強の携帯サイト
    • 仕様変更あたりまえ
    • 機種依存あたりまえ
    • ターゲット層と使われ方
    • スピード勝負
  • 垂直統合型
    • サイト単位に機能を追加
  • 水平統合型
    • 機能単位でリソースを用意し、その API をたたく
  • これまでは垂直統合型
    • 言語自体もちがう、ミドルウェアもちがう
    • 運用も大変
  • これから水平分業で柔軟なシステムを目指す
    • 基本 RoR、jmobile
    • firemobilesimulator
    • redmine
    • コーディング規約 (shugo3)
実践投入 Rails
  • 大人の事情で書けなかったこと (プロジェクトの規模感とか) を紹介
    • とある業界の最大手、世界中でかなり知られている
    • そこの人事管理システム (10万人以上)
    • 既存運用中のシステムがある... が、大炎上、そして億単位の赤字
    • 既存システムは untutchable、カラムひとつ追加で1人月!?
  • 既存システムと Rails の共存
    • これまでと基盤が違うし実績の面で最初は相当渋られた -> がんばって説得
    • 既存システムの DB を利用するので、Rail に乗れない
      • 1. sarogate_key ではなく、natural_key
      • 2. composit primary key
      • 3. 既存システムとRails 部分で別ログインになるのは嫌だったのでセッション機構を自作
  • 作ることが目的ではなく、日々使い続けてもらうことが目的
    • 健全に運用できることに Rails の価値あり
Media Technology Lab
  • RoR ベースで 8つの携帯サイト
    • 全体で月間 6000万弱 PV
    • データ転送量 4TB
  • 構成
    • Rails のバージョンいろいろ
    • httpd もいろいろだが、今はPassenger に寄せているところ
    • サーバ運用が楽だし、パフォーマンス (mongrel より 2割くらい速い)
    • Ruby Enterprise Edition も使ってる
  • Xen の上で Rails
    • php は CPU を食う、ruby はメモリを食う
    • 複数 AP サーバでうまく共存できた
  • H/W Spec
    • 16GB
    • 2x Quad Core Xeon
  • VM Spec
    • 1GB メモリ
    • 10GB Disk
    • 8cpuコア available
    • これで 13 VM くらい動く (ぎりぎり)
  • 1つの VM あたりの mongrel process
    • 10 process /1GB mem VM
    • 24 process / 2GB mem VM
  • TIPS
    • my.conf で遅い SQL をロギング
    • Log rotation、copytruncate が重要
    • Xen で使ってるときは mongrel が swap しないように気をつけるべし
    • Monit
C と Ruby とその間
  • Ruby と C
    • 直感的、柔軟 <=> 高速な動作
    • 似てない、だから補完して仲良く
  • groonga API
    • 高速な全文検索エンジン、C で実装
    • ActiveGroonga # AR 風の API
    • Ruby / groonga # Ruby からのアクセス
  • milter manager (迷惑メール対応)
    • 直感的な設定方法、柔軟な動作変更、そして高速であってほしい
    • Ruby インタプリタ埋め込み
オープンソース開発
  • SKIP Wiki
    • 近日 1.0 公開
    • 三菱UFJインフォメーションテクノロジ SonicGarden (TIS 社内ベンチャー) と永和の3社で開発
  • オンライン 4日、オフライン 1日で開発
楽天 (ROMA)
  • 都合によりデモできなくなりました.. orz
  • Rails と CakePHP でベンチ
    • 200 req/sec あたりから応答スピードがさがる
    • CPU 使用率は ruby のほうが低い (ファイルI/O が少ないのが system が低い)
  • 起動プロセス数の最適値
    • キャッシュ等のために 500 MB 程度が空き容量になるようにチューニング
  • DB の応答性能
    • テーブル分割 => model に手を入れて吸収
    • KVS でキャッシュ (ROMA、memcached)
  • Apache + passenger graceful 問題
    • apache のログローテートのため graceful 処理を行うと apache が起動しない
    • ファイルのリネームで passenger の spawn も同じファイルをみていたのでデッドロック
    • ログローテートに rotatelogs を利用して解決