東京 tDiary 会議 01
東京 tDiary 会議 01 のご提案のお知らせに「ruby1.9対応」や「testable_tdiary」というキーワードが書かれているのを読んで、これは参加せざるを得ないと思った。 1年前の Ruby1.9.0で tDiary を動かそうとしてたときのパッチをベースにしていただいているので、その辺の方針を聞いてみたかったのも理由のひとつ。 開発者の方の声を聞けたので、とても勉強になった。 会議の内容は、 hsbt さんの議事録で読める。hsbt++
参加していちばん感じたことは、大げさに言うと「tDiary は利用者への愛にあふれている」こと。 何かを決めるときの判断が、「プアなレンタルサーバでそれなりに動く」、「利用者に負担をかけない」ということに基づいていた。 たとえば、 index.rb の --encoding オプションを付ける案はなし、とか、 tdiary.conf にマジックコメントを付けてもらうことを期待しないとか、素の Ruby だけで core は動くようにしている、とか。
まだまだやるべきことは多いので、少しでもお手伝いしよう。 認証方式はどういう風に組み込めばいいかなぁ。まずは rack を読んで勉強してみるか。
以下は、hsbtさんの議事録とかぶらないところだけメモ。
ruby1.9 への対応
- index.rb と update.rb は利用者が修正するので、 --encoding オプションを付与する案はなし。
- ソースコード (*.rb) にマジックコメントを埋め込む。文字コードは utf-8 。
- プラグインにはマジックコメントを書かない。
- eval するときにエンコーディング指定できる。
- → エンコーディングの指定は eval 時ではなく、 eval に渡す文字列を読み込んだ時かも。
- tdiary.conf は古いバージョンの内容がそのまま使われることが多い。
- 利用者にマジックコメントを追加してもらうのはNG。
- ファイルを読み込むときにエンコーディングを指定する。
1.8 と 1.9 の両対応について
- 現パッチ (compatible.rb) は1.8をベースにして1.9にも対応。
- 極力、 ruby1.8 対応のソースコードを変更せずに動くことを狙っていた。
- String が Enumerable でなくなったので、 ruby1.9 では String#map などが使えない。
- String#metond_missing で受け取り、 each_line.__send__ へと変換している。
- 1.9 をベースにする場合、 str.map を str.each_line{}.map へ置き換える必要がある。
- プラグインを含めて置き換えるのは困難なので、当面は現パッチをベースに作業する。
国際化
- ACCEPT_LANGUAGE ヘッダの値に応じて @lang が変わるようにしたい。
認証
- 例えば、コメント欄に OpenID の認証を使う。
- 複数の認証方式が切り替えられるようにしたい。
- HTTP 認証以外だとセッション管理が必要になる。
- セッションを取得するために CGI オブジェクトを前提としてもよいか?
- index.rbとupdate.rbの違いは認証の有無。