2008-02-11

一部の人には発表する前に見つかってしまいましたが、一年以上前にテストを始めて、しかも半年近く止まったままだった掲示板を復活、正式に公開することにしました(トップページからリンクを張った)。ここを読んでいる人は雑談の感想でも書いてやってください。まだいくつかいじるところがありますが、あとは動かしながら手を入れていくことにしました。おかしなところに気づいたらご指摘ください。

テスト中に覗いていた人はブラウザのキャッシュを一旦空にしたほうがいいかもしれません。一時期へんなヘッダを吐いていたので。

掲示板にはウェブ・フィード (RSS) が付きました。RSS アプリケーションについては疎いので、フィードに入れてあるデータの内容や形式についてもご意見いただければ。

一段落したらソースを公開する予定です。

CGI のテストをしていてキーッ!となったこと

その一、Firefox は RSS 1.0 の description 要素を、二重に解釈してマークアップしたコンテンツとして表示する。つまり、

<a href="http://example.com">サンプル</a>

上のようなテキストを(これはマークアップですらないことに注目)、

サンプル

のように表示する。そもそもこれは規格を逸脱しているし、こういうことをやるために content:encoding があるんじゃないの? 掲示板の投稿データはテキストなので、はじめは description にテキストとして配信しようとしていたのですが、この実装を見て仕方なく content:encoding に入れることに。content:encoding あんまり好きじゃないんですけど。Mozilla の中の人は仕様にうるさいものとばかり思ってたら、基本的なところでなぜこんなだらしない実装にしてあるんだろう。

その二、email.Utils モジュールの parsedate 関数はタイムゾーン指定を見ていない。

>>> from email.Utils import parsedate
>>> parsedate('Wed, 06 Feb 2008 01:30:15 GMT')
(2008, 2, 6, 1, 30, 15, 0, 1, -1)
>>> parsedate('Wed, 06 Feb 2008 10:30:15 +0900')
(2008, 2, 6, 10, 30, 15, 0, 1, -1)

このふたつはどちらも同じ時刻なんですが、タイムゾーンの指定を無視して時刻の数字しか見てない。そうならそうとドキュメントに書いておいてほしかった……。formatdate と可逆だとばかり思ってたので、更新時刻の処理がどうしても合わなくて数時間悩んだよ。