RubyKaigi2008に参加してきた#2

つくばは遠いなぁ,と言うのが会場の印象.いやいい会場だったんですけどね.いかんせん自宅から遠かったなぁと.

2日目のキーワードは,「Ruby 物産展」「Mac 万能説」.

##本日は朝の諸注意は飛ばされた

##Ruby Extended Library Howto

  • 拡張ライブラリとは
    • C/C++で書かれ組み込まれるライブラリ
  • 遅さ順
1.uptp(10) { |x| puts x }
for i in 1..10; puts i; end
for(i=0; i<10; i++){
  rb_funcall(rb_stdout, rb_intern("puts"), 1, INT2FIX(i));
}
  • 情報源
    • README.EXT(.ja)
    • RHG / Web版など
  • 1次情報
    • ruby.h / intern.h / rubyio.h / rubysig.h / version.h / st.h
  • 配布
    • setup.rb / Gem / Binary
  • extrails
    • 拡張ライブラリのひな形が作れる
    • この中に作法のひな形が書かれている
    • せっかく C++ の勉強などしているので,一つ作ってみよう
  • 使いどころを考える

##さらに仕事に使う Ruby

  • 業務中の割り込みが発生する時がある
    • 顧客との連絡ツール
    • Hiki
    • 顧客・案件毎に Hiki を立てて,Reverse Proxy でアクセスする
    • 案件管理
    • Redmine
    • 伝票管理
    • Kagemai
    • ワークフローにフィットした
    • 依頼 -> 見積 -> 受注 -> 検収 -> 請求
  • Non-RSS Web -> created RSS -> RSS Reader
    • Mechanize / Hpricot / Fastladder

##erb を偲んで

  • MVC = オブジェクト群の相対的な関係
  • コードとテンプレート
    • 独立しているが無関係ではない
  • View とは
    • View オブジェクト
    • ベンハムのコマ

##matz を説得する方法

  • 不満があるという前提
  • そうすると matz を説得する必要がある
  • YARV の例
    • Ruby は遅い -> 説得理由は速度なのでわかりやすい
  • バグレポートは通りやすい
  • 新機能・機能変更
    • 動機や解決策は適切かどうか
    • Perl が採用しているか
    • まともなサンプルが重要
    • 重要性と説得力あるサンプルを見つけよう

##リファレンスマニュアル 2008 初夏

  • 刷新計画の概要
    • メソッドカバー率 : 52% 程度
    • 組み込みライブラリ : 97.2%
  • これからの予定
    • 来年までにカバー率を上げたい
    • ライセンスを変更したい
    • CC に変える

マニュアル作りに参加してみたいなとは思ってたんで,これを契機に参加してみるかな.

##Ruby と MacOS X の未来

  • DTrace support
  • Ruby/Cocoa
    • Ruby/Object-C Bridge / C bridge
  • RubyCocoa 良すぎ
    • ProxyClass を経由して,Object-C Class にアクセスしている
    • Create / Forwards Message / Convert / Exception
  • MacRuby
    • Object-C ランタイム上の Ruby
    • Apple が開発
    • かなり使い勝手が良さそう
    • Mac 買うべきか・・・・

帰りの電車で同僚といかに Mac を買うかについて話していた気がする.ローンさえ終われば....

##REST 信者から見た Ruby on Rails 2.0

  • Ruby and Rails
  • REST と Ruby について
    • 2002 から議論されていて仲良し
  • REST と Rails も仲良し
  • 抽象化レベル
    • Architectural Style は HTTP/URI などの Architecture をさらに抽象化したもの
  • リソース指向アーキテクチャ(ROA)
    • Addressability (アドレス可能性)
    • Statelessness (ステートレス性)
    • Connectedness (接続性)
    • A Uniform Interface (統一インターフェイス)
    • A > C > U >>>>>>>>>>>>>> S
  • Addressability
    • データリソースとして提供できるとき,アドレス可能
    • リソース内の(見せたい)情報毎に URI を割り当てる
    • URI 駆動開発
    • URI の設計 -> URI の実装
    • ex) ブログ
    • 設計
/entries            -> list
/entries/{entry_id} -> entry resource
  • 実装
map.resources :entries
  • すばらしいがコードの構造に依存しがち
  • URI は設計目標であって実装結果ではない
  • Connectedness
    • 現在のページ == アプリケーション状態
    • ページのナビジェーションによって,アプリケーション状態が遷移する
    • ハイパーメディアの設計 == リソースとリンクの設計
    • リンクの実装
    • url_for / link_to
    • リンクの意味を意識できればもっといい
    • rel attribute も正確に反映される方が良い
  • まとめ
    • Rails は RESTful

##Real-World Enterprise Ruby

  • IT サービスプロバイダー = SIer
  • 顧客に納得してもらうために
    • 教育体制・技術支援体制の確立
    • 開発標準への取り組み
    • 保守・運用フェーズでのサポート
  • Java は大きい
  • Ruby は物産品

##Development and scaling iKnow!

  • 現在 20万 User
  • 12 カ国
  • Develop -> Freeze -> QA -> Release
  • Env.
    • Nginx
    • Ubuntu
    • MySQL 5.1
    • Rails 2.0
  • 60000 upload /day
  • migration = 474
  • Past
    • NGINX+Rails + MySQL Master + MySQL Slave on VMware
    • Next DB mem upgrade to 12GB
  • Now
    • NFS
    • MySQL Master + MySQL Slave + Legacy Database
    • faster disks :: important!
    • 8 cpu cores
    • 16GB RAM :: important!
  • Future
    • Add App-server
    • memcached
    • DB Sharding
  • Problems
    • ActiveRecord
    • sum は limit を使わない ( ある意味当たり前だが,ARでは設定できる)
    • has_many
    • count = COUNT(*)
    • length
    • モデルを全部メモリ上にロードしているため,メモリ食い過ぎ
    • size 使おうね
  • OpenID
    • 15% が OPenID 使っている
    • 同時リクエストで Rails のリソースを食いつぶされないように
    • Timeout を設定する
timeout(5) do
  methods....
end
  • ファイルシステム
    • ext3
    • テンポラリファイルは1ディレクトリ 32000
    • xfs
    • 30000 以上可能
  • 最大の問題
    • Heavy SQL
  • Kwala
    • 継続インテグレーションツール

##Inside Tabelog’s Backend

  • 13台構成
  • mongrel について
    • メモリ使用量
    • 15 Proces -> 4日~5日 で 8GB を食いつぶす
    • 再起動 cron でまわす
    • 少しずつ落として再起動している
    • ただ毎日のように deploy
    • メモリ使用量が急激に増加したら要チェック
    • 安定性
    • 過負荷・メモリ食いつぶしたときに落ちる
    • パフォーマンス
    • 50 access / sec
    • 平均 0.2 sec でさばいている
    • DB:レンダリング比は 3:2
  • スケールアウトについて
    • セッションの共有
    • DB格納で解決
    • 分散アクセス
    • AR はDBは1つのみ
    • Plugin
    • Magic Multi-Connections
    • Connection はりすぎ
      • Table の数だけはってる
    • ActsAsReadonlyable
    • 導入が簡単 find(.. :readonly => false) で master に行く
    • フェイルオーバー
    • 同時接続数
      • 全ての slave に接続するので,slave が増えると大変
  • パフォーマンスについて
    • routes
    • ほとんど使っていない
    • routes は特にかく遅い
    • create_url という自作メソッドを使っている
    • cache
    • memcached
    • DB へのクエリ
    • バッチ生成のhtml
    • テンプレートはキャッシュしていない
    • QueryCache on MySQL
    • Query
    • include は避ける
    • メモリ大食い
    • 一覧系画面では重い
    • paginate は劇重
    • 件数 -> ID一覧 -> 画面表示用テーブル
    • AoR 2007 で解説中
    • session
    • memcached に変更予定
  • まとめ
    • 地味に広告が重い

##Jpmobile

  • 日本の携帯市場は独自の進化を遂げている
    • バッドノウハウの蓄積
  • 機能
    • キャリア判別
    • 基本的な処理
    • テンプレート切り替え(View)
    • キャリア毎にも分けられる
    • xxxx_mobile_au.html.erb
    • xxxx_mobiel_docomo.html.erb
    • 位置情報
    • 緯度・経度も取得できる
    • 簡単ログイン
    • 機種固有・契約者固有情報もとれる
    • IP アドレス帯域と検証しなければ
    • IPアドレス検証
    • 携帯キャリアからのIPアドレスのみを許可
    • セッションIDの不可
    • trans_sid
    • ディスプレイ情報の取得
    • 絵文字の相互変換
    • mobile_filter

##Building a Scalable Startup with Ruby

  • TuneCore
    • Artist -> TuneCore -> mp3 -> iTune Music Store -> Money -> TuneCore -> Artiust
  • Environment

    • Front End
    • Rails/MySQL
    • 1 Database
    • Fragmented Cache
    • Uploads via Merb
    • Back End
    • Audio transcoder
    • Write metadata file
    • Upload to the store
    • Ruby + OpenSource transcode codec
    • XML with Java
    • 8種類の店舗に
    • Front End <-> Back End
    • Message Queue
    • キューのやりとり
    • キューのメッセージは YAML
    • Amazon が管理してくれる
    • Amazon EC2 が配布サーバ
    • 配布サーバがメッセージキューから仕事をもらう
    • キューによるサーバ起動が行われている?
    • Backend なので常時起動している必要はなく,キューが来たら

      起動して処理を開始すればいい.

    • Storage

    • Amazon S3

    • EC2 への転送は無料

##Rails 症候群の研究

  • ログ書き忘れ orz
  • ようするに protected をなくそうぜ,と言う話.

##感想 いや~,みんな Ruby への愛にあふれた熱い戦いを見せてくれました.YAPC でもそうだけど,こういう場は言語に対する熱意にあふれていますね.愛を熱く語れる日は来るだろうか....

 
comments powered by Disqus