2006年 03月 13日

taglibro の今後の予定

たぶんやらないけど、やりたいことを書いとく。

  • まず libxml-ruby を捨てて REXML を使う。もともと libxml-ruby を使おうと思ったのは REXML が名前空間をまともに処理してないからだったんだけど、名前空間とかどうでもよくなった。んで、libxml-ruby は Pure Ruby じゃないのでいちいち環境間で面倒くさい。REXML は標準添付だからその辺は心配ない。できるだけ Pure Ruby じゃない外部ライブラリを使わないようにしたい。
  • ちゃんとライブラリ化する。
  • 公開できるようにする。
2006年 01月 08日

Accept によるネゴシエーション実装

Accept ヘッダによるコンテントネゴシエーションを実装した。昨日 UA による振り分けでごちゃったばっかりだけど、そいつらはコメントアウト。

とりあえず設定ファイルを用意しといて、Accept ヘッダをパースし、品質を割り当て、鯖側の設定値 (qs) と掛け合わせて一番大きいのを選ぶ。application/xhtml+xmltext/html が同じ優先値になった場合は text/html を選ぶようにしてある。これは IE*/* 送ってくる対策。Opera や Firefox は text/html の順位を少しさげてる (0.9) ので、application/xhtml+xml が選択される。

選択といっても flavor の切り替えなので問題があったりする。同じメディアタイプの flavor の扱いがアレ。コメント用 flavor (.comment) も application/xhtml+xml にしたいんだけど、これだと IE でダウンロードされてしまう。とりあえず XHTML 1.0 にして常に text/html で送信するように変えた。この辺は仕方ないというかなんというか……回避するには UA で判定してやる以外ない。flavor がメディアタイプの選択以外の役割を持っているのが悪いっちゃ悪いんだけど、他にいい方法が思いつかない。

2005年 12月 21日

このサイトの構築構造

全部 XML から XSLT プロセッサを通して XHTML やらなにやらを生成してる。日記部分は動的に、/about とかは静的に、それぞれ別のスクリプトが変換を担当している。日記は taglibro と呼ばれるスクリプト。静的リソースは名前のない build.rb というスクリプトが変換してる。build.rb は Makefile の類でもよさそうだけど、Ruby で書いておいたほうがなんでもできるのでいいや、みたいな。

common.xsl
サイト共通のテンプレートが書いてある。例えば head 要素内やつ。CSS とか、スクリプトを加えたいときはコレだけ編集してサイト全体を再変換させている。XHTML 用。
2html.xsl
静的リソースを変換するためのファイル。ソース XML はちょっとキモイんだけど、実用上問題ないのでいいや、みたいなヤッツケ的スタイルシート。だいぶ前に書いた。
logs/common.xsl
taglibro (日記) 用の共通部分。各種変数 (Content-type 非依存) なものがまとめて書いてある。flavor.(\w+).xsl から include されてる。
logs/flavor.xhtml.xsl
taglibro の XHTML 用テンプレート。

本当なら、taglibro は Accept ヘッダを解析してそれにあったやつを返すべきなんだけどめんどっちくて実装してない。これを実装すると IE に application/xhtml+xml を送らないようにする処理がなくせていいんだけど……(text/html を受け付けるなら flavor.html.xsl を読み込むようにする、flavor.html.xsl は flavor.xhtml.xsl なり、共通部分を分離した他の .xsl を include してやる、みたいな。)

2005年 12月 15日

最新記事のページめくり

ページめくりと書くとスカートめくりを想像しちゃうよね。

latest のページングを実装した。気が付いてみると簡単に実装できそうだったのでやっつけ。?page=n で数字が大きいほど過去のものを見れる。で、この場合、link 要素の prev, next の方向が悩ましい。?page=n の数字が増えるってことは普通「次のページに進む」ってことだけど、内容的には「過去のページに戻る」なんだよなぁ。前は prev だけ設定して「表示されていない最新の日」をリンクしていたけど、今は prev, next をそれぞれ「前のページ」「次のページ」にしてある。

どっちでもいいよ。

2005年 12月 13日

new Script()

コメント書き込みがちょいとできなくなります。

とりあえずスクリプトを入れ替えてみました。Ruby + libxml-ruby + ruby-xslt

結構重いっぽい。コメント・トラックバックは独断と偏見によりセクションごとに振り分けました。

  • Atom フィードしろよ。
  • コメントスパムのよさげな対策。

HEAD アクセスの対応(激しくめんどい