RubyKaigi2009 三日目メモ
いよいよ最終日。スタッフのみなさま、本当におつかれさまでした。
そして、今年もありがとうございました。 <(_ _)>
ソケットライブラリの改善
- 今の Socket ライブラリは大クラス主義が認識されてない頃の設計かも
- だから今回は TCPServer ではなく、Socket に集めた
- でも使う側的には分かりにくくね?っていう質問もあった
- デザインデシジョン
- inspect 可能 = 意味がオブジェクト内で決まるということ
- 何をオブジェクトすべきかにもつながってくる
RubyGems の落とし穴
- Web に転がっている事例として reliable-msg が登場した
- そして自分のブログ (^^;
- そして irc には MDD..
- 処方箋
- 複数バージョンの gem は混ぜない
- GEM_HOME で完全に分けるとか?
- .gemrc に追加するといいかかも
- --format-executable
Ruby製アプリを配布する n 個の方法
- 最近は Ruby の仕様を書いているとのこと
- わからなかったら隣のひと (まつもとさん) に聞くらしいw
- デスクトップアプリの配布
- RubyScript2Exe (03-07)
- Exerb (02-09)
- クロスコンパイルできる
- require を書きかえてる
- Ocra (09-)
- Crate (08-)
- sqlite3 に Ruby のファイルをつっこんで、実行ファイル 1つ
- Zip
- Rails でデスクトップアプリ
- Ramaze や Sinatra でもできる
- zip it
- HTML と JavaScript でけっこう柔軟にかける
- が、port が覚えられなくなる
- RubyStation
- port の管理は?
- RubyStation が適当にランダムにあててる
- アクセス制御
- 127.0.0.1 以外から蹴る?
- でも家庭内 LAN で使いたいよね
- RubyStation で設定可能なインターフェースを提供するのが正解かな
tDiary の Ruby 1.9 対応の過程と今後のロードマップ
- 1.9 対応
- 過去バージョンとの非互換部分
- 文字エンコーディングの変更
- compatible.rb
- for 1.9: String.each_line、String.to_a
- for 1.8: String.force_encoding、String.byte_size
- 意外とほかのアプリでも require するだけで 1.9 対応できるかも
- File.open(FILE__NAME, 'r:UTF-8')
- 細かいこと
- その他
- cache フォルダに cache じゃないデータがある
- 消すと不幸なことにw
Haml と Sass
%div{ :class => "block"} %div.block .block
- ふつうに Ruby が評価される
- eruby でありがちなタグのなかにタグが入るようなことがない
- ちなみに end をつけると Syntax エラーw
- メソッドチェーンするときに限って end をつけられる
- Sass
- ロゴが変なのは作者のセンス
- CSS はすべてのルールがフラット
- Sass だとインデントで構造化できる
- ! ではじまるのが変数
- color = !base_color-#666 みたく、演算もできる
get install haml haml --rails path/to/rails_app
- デザイナとの協業は?
- 困難
- html2haml コマンドがある
- css2sass もある (変換精度はあまり期待しないほうがいい)
- ページ単位での段階的な移行も可能
- :ugly オプション
- 指定するとパフォーマンスはよくなるが、インデントがつかなくなる
- パフォーマンスの劣化は 20% くらい。
Erubis 徹底解説
- Erubis は高機能かつ拡張性が高い
- 設計が美しい
- Enhancer 機能追加のためのモジュール
- include / extend するだけ
- コマンドラインからも指定できる
- <%=== %> でデバッグプリント
- eRuby の (に関連した) 問題点とその解決策
- binding を使うとローカル変数がローカルでなくなってしまう
- ERB の解決策: Struct を使う方法@Seki3のブログ
- Erubis の解決策: Binding のかわりに Hash を使う
- 余分な改行
- 式と文で挙動を変えるだけで対応
- 同じに見えるけど、実はちがうものと認識することが重要
- テンプレートシステムの将来
- テンプレートは一種のメソッド、コンテキストデータは引数とみなせる
- テンプレートにも仮引数宣言が可能になったらいいな..
- Django のテンプレートには継承がある
- eruby の仕様的には parse (構文解析) まではしていない
- ゆえにブロックの認識が難しい (ほかの if の end とかと被る)
- だから merb では、記号をつけて拡張している
- ERB も Erubis も時代遅れ
- しょせんテキストプロセッサなので、テンプレートエンジンとしての機能が貧弱
- そこで、高速高機能なテンプレートエンジン、Tenjin
- いいらしい?