RubyKaigi2009 二日目メモ
初日の晩にはしごして少し飲み過ぎましたが、今日もしっかり朝から会議。
今年は 3日間のゆったり構成ですが、毎日少しずつ開始時間が早くなっていくという罠。
以下、昨日と同じく自分用メモ。
# スポンサーセッションではなく裏番組のほうが笑いが多かったみたい.. orz
Ruby における生産性を高める開発環境を考察する by ujihisa
静的コード解析統合環境の試作
- 日立で、PaaS、RoR 開発、学習環境サービスの提供を検討中
- ORM、Reek、Roodi、Flog、Saikuro、Flay を利用した静的コード解析サービス付き
- チェック内容
- ORM: コーディングルールに従っているかを評価
- Reek: Code Smell の検知
- Roodi: デザインに関する問題を警告
- Flog: 代入、分岐、呼出を分析することでコードの複雑度評価
- Saikuro: McCable
- Flay: 構造的類似性の評価、コピペ探し
- 類似ツール
- 日立のと何がちがうかと言うと、結果を一度集めて分析しているかどうかくらい
- 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)
- Git をバックエンドに使ったバージョン管理システム
- Python で書かれている...w
- 未公開スタック (パッチ) が 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 を利用して解決