at posts/single.html

東京 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の違いは認証の有無。

関連する日記