2004年 07月 28日

まだまだやること

Last-Modified ヘッダを吐いていないので吐かせるようにしなくては……ファイル走査した中で一番新しいファイルの日付が妥当かなぁ。

latest の場合だけ吐くように。

HEAD アクセスされたときは Last-Modified だけ出力して終了してる(つもり)

todo...

XSLT のほうにフレーバーつけるの忘れてた…… orz やらなきゃいけないけど、面倒臭い。

+flavor ファイル名変更

latest.xsl.rdf という形から latest.rdf.xsl という形に変更。こっちのほうがいいっすね。

2004年 07月 27日

文字コード

tDiary から php にトラックバック送信すると確実に文字化けしてしまう。しかもその文字化けのせいで xml が valid でなくなる。ホント困った。なんでちゃんと変換できないんだろう。

mb_language("uni");
mb_internal_encoding("UTF-8");
mb_convert_encoding(htmlspecialchars($name,  ENT_NOQUOTES), "UTF-8", "auto");

utf8 以外で送られてきたら絶対に化ける……はぁ。

mb_language("Japanese"); にしてなおる。何故だかは知らない。せっかくユニコード使ってるんだから、スクリプト側で言語設定なんてしたくないんだけど……
マルチバイト圏内はみんな悩むんだろうなぁ。韓国とか中国はどうなのよ。もっとめんどくさ系ですか。
そういや CJK で IC タグの規格を共通化とかなんとか。

今のところ php スクリプト自体は 500 行ぐらいのやつ。もともと php は xslt するためのトリガ程度にしか使う予定じゃなかったから妥当な長さ? データファイルは別のディレクトリに置いたほうがいいような気がしてきた。一個オプション導入してガガガガと書き換えるかー。でも面倒臭い。
日記のマークアップも超適当にやってきてしまったから、ちゃんとさせなければ。link 要素も不完全。むむむー。細かいのが多くなると突然ダルくなる。

memo

  • title 要素の充実
  • link 要素の充実
  • h1 要素の統一

負荷率

たかだか一ファイル読み込ませて変換してるだけにもかかわらず、負荷率ランキングで上位に食い込む。むむむー……

やっぱ xslt って結構重いもんなのかしら……

どこが CPU 食ってるかわっかんねーw dom 処理が食ってんのかしら。

負荷率

たかだか一ファイル読み込ませて変換してるだけにもかかわらず、負荷率ランキングで上位に食い込む。むむむー……
やっぱ xslt って結構重いもんなのかしら……
どこが CPU 食ってるかわっかんねーw dom 処理が食ってんのかしら。

2004年 07月 26日

実装

今の実装だと「カテゴリごとの latest」とかが作れない。いらないっちゃいらないけど、もうちょい汎用性を高くしたい。そうすればソースも綺麗になるはず。まじめに設計とかしたほうがいいんだけど、頭悪くてできない罠。設計って実装してるときよりつまらんし。

まず、今のところ変換に使う xsl ファイルの名前を完全に決めうちしてる。latest とか 日付別のときを完全に別に (switch) 処理してる。この辺もうちょい綺麗にしよう。速度落ちても、綺麗なほうがいい。読みにくいソース書いてると未来の自分が激しく困る。俺書いたの絶対覚えてないし。

latest は日付と考えるべし。ってことで /web/latest /web/2004 /web/2004/06 とかが形的に等価。category.xsl を作るんじゃなくて、year.xsl, month.xsl, latest.xsl をカテゴリに対応させるほうがいいな。よく考えればあたりまえだ……。/web とか / とかでアクセスされたときはどうしようか? 一覧だけ表示させて、カテゴリが指定されているときはそれをリンクパスに含めるだけでいいか。

param にカテゴリーが指定されていたら、そのカテゴリを含むセクションだけを抜き出して、されてなかったら全部表示。year.xsl が問題だ。一年分を読み込んで変換させるのはどれぐらいコストかかるだろう。

path info の最後の部分に /\..+?$/ があったら取り除いて、flavor にする。xsl 適用するまえに xsl ファイル名 + .flavor が存在するかを fileexists で調査。あったらそれを適用させて出力。なかったらデフォルト (XHTML とか) 適用させる。このとき設定ファイルに指定された flavor の content-type が指定されていたら、それを送信する。指定されてなかったらデフォルト (text/xml) 送る。ただし application/xhtml+xml の場合は馬鹿なブラウザのために特別に accept で (それ以上のことはしない) 振り分けてあげる。

if ==

== 使ってリテラルと変数を比較するときは、変数を右辺に置くべし……間違って = とかいても実行時エラーがでるから。でも癖で左においちゃうよなぁ。

2004年 07月 25日

xyzzy での xmldatetime, unix timestamp

; Unix-Timestamp
(global-set-key #\C-2
#'(lambda ()
(interactive)
(with-output-to-selected-buffer
(format t "~d" (- (get-universal-time) (encode-universal-time 0 0 9 1 1 1970))))))
; xml datetime
(global-set-key #\C-1
#'(lambda ()
(interactive)
(let (date)
(setq date (format-date-string "%Y-%m-%dT%H:%M:%S%Z"))
(insert (concat (substring date 0 -2) ":" (substring date -2)))))) ;%Z => "+0900" -> "+09:00"

これなしじゃ生きれない!

それと pre を使うときは CDATA で囲ってる……そうしないとインデントされてしまうから……