2006-06-11 (Sunday) [長年日記]
■ Rubyカンファレンス2006 2日目
うーむ.昨日より開演が15分遅いと油断していたら,結局15分遅れてしまった. 何やってんだ.オレ.
個人的な感想とゆーか,出来事は明日の日記にまとめとこうと思う.今日はレ ポート的な内容を中心に書いておきます.
げ.W-ZERO3でIP reachableになるためにUSBのケーブルをもってきたつもりだったが,かばんに入ってない...どうやら忘れたらしい...凹む...レポートの内容はあとでアップすることになりそう.
■ Ruby anywhere 〜 Ruby普及のためにアプリケーションができること - ただただし
まずはたださんのお話.ボクが聞いたのは途中からですけど.
- 携帯
- 対応した当時,たださんは携帯を持っていないのに対応
- いつでも書きたいときに書けることが重要
- 会場の写真
- テーマ
- 300種類以上
- CSS資産の活用
- Blog, Wiki, はてな, ゆびとま, MyWikiなど
- 普通の人重要
- 当時
- Rubyが使えるレンタルサーバが少なかった
- 関連書籍も少ない
- CGIといえばPerl, CGI≒Perl
- Rubyの知名度が低い
Rubyの普及
- 場所を増やす
- 魅力的なアプリケーション
- → 使いたくなる
- → 多くの管理者がインストール
- → ウマー
- Easy to Install
- Ruby以外はいらない
- ERBはRubyに含まれていなかった
- ERbLightを同梱
- Ruby 1.8からはRubyの添付ライブラリとなっている
- 急に露出度を増やす
- tDiary.Net 2002年〜
- '一気に'数百人 → 目立つ
- 実際に多くの人が使っていなくても,多くの人が使っていると錯覚
- 他の日記やブログのサービスの制約などに不満があるユーザも取り込む
- tDiary.Net 2002年〜
- 簡単にかけるプラグイン
- 簡単
- 問題点
- TDiary::Pluginのインスタンスにinstance_evalされるだけ
- → 定義の上書きなどが簡単にされてしまう...
- ファイルの読み込み順序はファイル名の順番に依存
- → 00_hoge.rbなんていうダサイファイル名に...
結果
- Rubyを学ぶためのプラットフォームとしても紹介された
- Rubyの普及によい循環
- 場所が増える
- 露出が増える
- プログラマが増える
- アプリケーションが増える
- 利用者が増える
まとめ
- 普及はよいこと
- 場所を増やそう
- 人を増やそう
Rails
- 人を増やす戦略がうまい
- Javaの10倍の生産性とか
- 使える場所はまだまだ少ない
- all-in-one packageなどの努力はされている
- 普及を促すアプリケーションの登場が待ち遠しい
- 誰か作って...
質疑応答
- $SAFE=4で安心なの?
- 当時,セキュアなものにするにはコストが高かった
- 今なら別の方法もある
- ユーザを多く収容しているtDiaryでパスワードを忘れたときにワンタイムURLなどを発行して,有効なパスワードを知らせるなどの機能が欲しい
- 手間をかけたくなかったのでBasic認証を利用
- Basic認証は普通の人は抵抗がありますよね
- そうですね.これからのアプリケーションは考えるべきこと
- Rubyは広まった?
- ほとんどのレンタルサーバにインストールされるようになった
- 希望していたくらいには広まった
■ dRubyをもう一度 - 関将俊
咳さんのdRubyについての発表です.
- 今日はAgileの人じゃない
ERB
- eRubyの実装
- Rubyを文書に埋め込む
- Rails
- ERBも普及
dRuby
- Ruby限定分散オブジェクト
- 起源
- '98 shttpsrv (httpd)でservletやerbの拡張
- shttpsrv + servlet 同士が通信しあうアプリケーション
- shttpsrvとはいえ,クライアントじゃん
- shttpsrvを真似た実装で分散オブジェクトの実装
- 要求ごとにThreadを作る部分などが似ている
- 200行くらいで実装
- Rubyすげぇ
実験
- ふたつのirb
- Hashを公開
- Hashの内容をやりとり
Mac OS X
- irb --simple-prompt --noreadline
- Mac OS X だと--noreadlineしないとスレッドがスイッチしない
| Marshal | |
| dumpable | pass by value |
| undumpable | pass by references |
Rubyによる特徴
- IDLが不要 -> 型に依存せずにメソッドの呼び出し
- Threadの同期も動く
dRubyの使い方
- 配置と寿命
- プロセスより長寿なオブジェクトの扱い
- RWikiの場合
- オンメモリでOODBのようなオブジェクトをサーバに配置
- 再起動のときにしかLogを読まない
- 稼動しているときは書くだけ
- event drivenに便利
- GUI
- Web UI
- 遺言に苦労するなら死ななきゃいいじゃん
タプル型のデータベースとの関係
- Linda
- タプルとスペースによるデータの共有
- 待ち合わせなどもできる
- Rinda
- LindaのRubyの実装
- dRubyを使っている
- Ring
- RubyでいきなりRindaが使えるようにするための実装
- タプルスペースの位置を探したり,登録する
■ Amrita2の紹介 - 中島拓
essaさんによるAmrita2の紹介です.
1. What is Template?
- string vs structured document
- Amritaはstructured document
2. What is Template Engine?
- environment vs operator
- environment
- セキュリティ: 実行してしまうので,個々のテンプレートの検証が必要
- 対策: 個々にエスケープなどを行う
- operator
- セキュリティ: エンジンのみを検証すればよい
- 対策: エンジンでエスケープを行えばよい
- environment
3. What is Amrita?
- Amrita
- Template: structured document
- Template Engine: operator
4. What is Amrita2?
- Amrita2
- Amrita (v 1.x) + environment (partial ERb template) + α
- HTMLからRubyスクリプトへのコンパイラ
- amrita:type属性はコンパイラオプションに相当
- Amrita2をRailsで使う
- テンプレートの記述が簡単になる
- コントローラが複雑になってしまう
- でもテストが簡単にできるようになる
- 開発状況
- ブログgem戦記で公開する予定
■ Perlの会社で使われるRubyの利用法とは!? - secondlife(舘野祐一)
gorouさんによるはてなでのRubyの使われ方を紹介です.
- はてなはPerlの会社?
- いろいろ使う
デプロイツール
- SwitchTower
- 現 Capistrano
- さまざまな処理が可能
- deploy, rollback, コマンドライン処理
- さまざまなバックエンドに対応
- CVS, Subversion, Darcsなど
- レシピはRubyのコード
- deployの手順
- Subversionでチェックアウト
- symlinkの張替え
- httpdなどの再起動
- → たいていのLLによるアプリケーションに対応可能
- Switch Towerの罠
- Rails由来のきたなさ
- standard.rbをカスタマイズ
- → hatena_receipe.rb ...
- 環境の切り替えで不都合
- production, develop, ...
- Switch Tower本体を改造して対応
- 同時命令
- 全部のhttpdとか同時に落とされると困る
- jitterみたいなことがしてぇ
- 同時命令のロールバック
- 一台だけ失敗した場合もすべての計算機で再試行
- Rails由来のきたなさ
サービスでRuby
- Perl
- mod_perl
- CPAN
- Rails
- fast_cgi, SCGI, mongrel
- RAA, Ruby Gems
はてなスクリーンショット
- 環境
- apache 2.2 + mod_proxy_balancer
- 静的: lighttpd
- 動的: mongrel
- DB: MySQL 5.0
- mongrelのサーバ
- 200,000 PV / week
- 120 SS / minute, 170,000 SS / day
- apache 2.2 + mod_proxy_balancer
スクリーンショットの撮影
- Linux
- khtml2png, gecko
- 安定しない
- 遅い
- Windows
- IE (Internet Explorer)コンポーネント
- 速い
- ただし,ブラウザクラッシャーを踏むと落ちるので,JavaScriptやActiveXは切る lol
- スクリーンショットはdRubyで共有
- dRuby最高
Rubyのオススメの勉強方法
- はてなダイアリー
- rubyキーワードできてくれる人たち
- id:ruby.*を使う
- rubyco...
- rubywo...
- はてなグループ
- クラス名やメソッド名がキーワードになる
- クリックして実際に使われている日記などにジャンプできるかも
- べ,便利?
- クラス名やメソッド名がキーワードになる
- RubyQuizや添削など
■ Rails in Production
ビジネスで使われているRailsについてです.司会は高橋さんです.
- コメンテータ
- moriqさん
- 西さん
- DHHさん
- Daveさん
- 舘野さん
- 前田さん
- artonさん
- 中島さん
- かずひこさん
大前潤(株式会社オープングルーヴ)
- FEEDBRINGER
- RSSリーダ
- 40,000 リクエスト / 日
- 二ヶ月前は 75,000 リクエスト / 日
- 環境
- Pentium 4 2.8GHz
- RAM 1GB
- x 1台
- load average 0.1 - 0.5
- mem_cachedも使用
- 巡回も同じマシン
- Active Record, REXMLの利用
瀧内元気(株式会社ドリコム)
- ドリコムとRuby on Rails
- 7時間で開発者をRailsに洗脳
- 社内コンテスト
- どうせなら,と社外も巻き込む
- Drecom Award on Rails
Drecom Career Search
- 300,000 PV / month
- ActiveHeartも利用
- デザイナはrhtmlを編集
rails2u.com
- 便利
- rails2u.com がダウンすると能率もダウン!
- これはひどい
- インクリメンタル検索のリファレンスを独自に作成
高木宏 - 株式会社イーサポート
- ActiveRecordを使ったバッチ処理が多い
WebLog
- 少人数のアクセス
- PVは気にしなくてよい
- 社内: 10人
- 社外: 200人
- ActiveHeartも利用
- ActiveRecordの日本語まわり
- メールでの日本語
- セッションの情報をURLにする(モバイル対応)
質疑応答
開発手順
- デザイナーを雇っていない会社も多い
- まずUIを中心に作り,後からモデルを作っていくことが多いみたい
Railsのイヤな部分
- ActiveRecord
- データのカラム名が予約語とバッティングしやすいこと
- id, class, type, method, displayなど
- データのカラム名が予約語とバッティングしやすいこと
- Loggerのオーバーライド
- Loggerが勝手にカスタマイズされている
- Loggerを継承し,RailsLoggerなどとしないのはなぜ?
- DHH: 問題として認識しているのでそのうち直す
- Logの色がついているのはなぜ? lol
オブジェクトかセッションIDか
- だいたいオブジェクトをそのまま整列化する
- 楽したい
- 整列化できないのがこわいときはセッションIDで管理する
最新情報は追っている?
- tracの更新情報をRSSリーダで購読
デザイナーとの強調できてます?
- デザイナーは雇っていない
- デザイナーはあまり関係ない lol
テストはどうしている?
- ブレークポイントなどを使うのは難しい
- メソッド単位のテストやログでがんばる
- たいていのバグはログでわかる
HTTPSでハマる?
- URLの生成まわりでハマることがある
- 解決するプラグインがある
FEEDBRINGERが重いのはRailsのせい?
- 問題はデータベースにある
- Railsは無罪
■ RailsによるWebアプリケーション開発・保守事例の紹介 - moriq(吉田和弘)
moriqさんによるRailsの開発事例の紹介です.
- ライド・オン・Railsという本を書いた
- 今月末くらいには発売
- テストの自動化は重要
- GUI, Excel
- 携帯電話向けサービス
- has_and_belongs_to_may(HABTM)を多用
- セッションの情報を含んだURLの生成
- blowfish + OpenSSL + Base64 + tr
- ActiveMailerは使わない
- 携帯電話にはRFCに準拠しないメールアドレスが存在
- character set
- 歴史的な理由でDBにはSJISを利用
- クォートや\などに問題がある
- mail: iso-2022-jp
- Ajax: UTF-8
- 歴史的な理由でDBにはSJISを利用
- 結論: UTF-8に統一したほうがいいみたい
■ ActiveRecordを詳しく - 西和則
くまくまーの西さんによるActiveRecordについての講演です.
序盤はCRUDの話でした.Rubyしか使ってなかった人たち向けの説明です. CRUDの話が終わったらActiveRecordを使った詳しい話でした.
With Scope - Scoped Access
- with_scope - テーブルの一部を隠す
- データベース操作でビューを作るような感覚
Member.with_scope
(:find => {:condition => "grade = 2"},
:create => {:grade => 2})
- findするときはwith_scopeの条件を加味
- createするときはwith_scopeの指定を優先
- ユーザの不正な入力にも対応できるんじゃない?
scoped_access
- ApplicationControllerのクラスメソッド
- モデルを引数にとってwith_scope
- スコープはスタックされ,すべてが加味される
- ActiveRecord.allow_concurrency = true にしないとスレッドセーフにならないらしい
Viewのかわり
- STI(Single Table Inheritance)では問題がある
- typeというカラムに依存してしまう
- 複数カラムの指定はムリ
- with_scopeを使えばよい
- クラス指定してインスタンス生成したい
- instatiate_classで生成クラスを指定
- FinderQuery
- 生成したSQLをみる
- サブクエリも簡単に表現できる
ごめ,最後の方の内容よくわからんかった. 一応,たしなみ程度にはRails使ってるんだがな.
■ One controller, many ins, many outs - David Heinemeier Hansson
DHHの発表です.当然のように英語でしたね. 比較的クリアな発音で聞き取りやすかったかな.
Discovering a world of Resources on Rails
うやむやな理解で申し訳ないけど, CRUDがもちっとHTTP上にうまくマッピングできね?って話だった.
- CRUD
- Simplistic
- Unfullfilling
- Unworthy
- Shameful
- Methods
| GET | POST | PUT | DELETE |
| find | create | update | destroy |
| select | insert | update | delete |
- URL
| POST | /people |
| GET | /people/1 |
| PUT | /people/1 |
| DELETE | /people/1 |
- Consistency
- Simplicity
- Discoverability
- Constraints are liberating
- ユーザがグループに所属するという操作を例にURLの考察
- Models
- Relations
- Event
- States
- mime type
- Accept
- Extention
- Content-type
- One more thing
- XMLで結果返したりWebのサービスっぽいこと
質疑応答
- WebDAVでアクセスできるの?
- 考えていることではある
- User-Agentなどによっても内容を切り替えたいんだけど
- 自分でやればできるよ
- 本がわかりづらいんだけど
- 次の版では改善するよ
- 認証はどうなるの?
- HTTP認証が使える
- Digest認証も追加するかも
- Pluginで実装できるよ
なんか,ところどころ不安なんだが,把握できた内容はこんくらい.
どれくらいすばらしい発表だったのかイマイチ理解できてません... CRUDのURLをフルにRESTを機能させて改善します,という発表に思えた. なわけで,正直,骨の部分はよくわからんかったね.
■ ライトニングトークス
締めはやっぱり,ライトニングトークス!!
BioRuby - 片山俊明
- ゲノム
- クマムシとか関係するらしい
- double helix の表示すげぇぇぇ
- GCTAの並びをMIDIファイルにすることもできるんだ
RubyCocoaで作るMacアプリケーション - 藤本尚邦
- Objective-C
- Ruby - RubyCocoa - Objective-C
- またすげー勢いでスライド飛ばしてるなぁwww
RubyによるHL7プロトコルライブラリ - 立川察理
- HL7R
- メッセージの処理やSOAPでWebサービスを展開することなどが目標
Ruby On Rails の Relative Path プラグイン - cuzic
- リンクを相対パスにするプラグイン
- レンタルサーバなどに便利
- リバースプロキシにも便利
- include RelativePathするだけ
Rails製CMS「Rubricks」 - 大西正太
- Rubyで作ったCMS
- 公式サイトのデモがすごい
わりと簡単rubyアプリをDebianへ - えとー
- PerlやPythonと比べ依存数が少ないのでDebianではまだまだ?
- 検索,コピペ,パクリなどが基本らしい
- try & error
- gemを使うとかtarを砕けばいいとか考えない!
Ruby on 風博士 - 須藤功平
- 風博士でRubyを使うときの注意点など
- ケータイ - HTTP - dRuby - Rabbit というすばらしい発表方法
なぜブロックは素晴らしいか -- RubyがLispでない理由 - Yugui
- ブロックのすばらしさ
- loop構文
- Enumerableなどで使うブロック
- 待塊
- イベントのハンドラなどで使うブロック
- リソース管理
- ファイルやデータベースの処理で使うブロック
- loop構文
Ruby Reference Seeker for Emacsen - 大林一平
- EmacsでRubyのドキュメントの閲覧
- カーソルの位置のメソッドを動的に表示
- post-command-hookで実装
市川 宙「人工無能 ロイディ」
- UTFをnkfにかけてevalというバッドノウハウ...
インターネット物理モデル: または私はいかにして悩むのをやめ転がる玉を愛するようになったか - 江渡 浩一郎
- アドレスを表す8個の玉とデータを表す8個の玉をSpaceWarpみたいな装置で転がす
- 機器の制御にはDLLを使っている
- Win32 APIはVisual BasicのソースやC言語からインクルードするためのヘッダなどがあれば使える








