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