読み終わりー。やばいねこれ。面白かった。内容的に成田良悟的世界のつながりみたいのがあって、「仕掛け」がちゃんと作ってあるから面白い。じわじわ気づき始めたところで丁度文中に真が出てくるからリズムが乱れないし、てきとーに読んでも混乱しない。いやーこれヒット

  1. トップ
  2. book
  3. デュラララ!! / 成田良悟

PHP で If-Modified-Since を取得したい。apache_request_headers() を使うみたいだけど、関数名に apache とついてる通り Apache モジュールとして動いていないとこの関数は使えない。自分はローカルテストするとき AnHTTPD+CGIPHP なので普通のコーディングしてテストしようとするとエラーがでる。こりゃどうすりゃいいやら。環境変数には If-Modified-Since とか入ってないような……? CGI だと HTTP ヘッダが取得できないなんて話はないだろうし……わかんねー

とりあえず普通の CGI と同じように $_SERVER["HTTP_IF_MODIFIED_SINCE"] のようにしてみる……

AnHTTPD が環境変数渡してないってこともありえないこともない……?

header("HTTP/1.1 304 Not Modified"); では OK だけど header("Status: 304 Not Modified"); ではダメだった……何故だ。他のとこでステータスコード送るときは大丈夫っぽいのになぁ。

関係ないけど lftp ってファイルサイズ見てるんだなぁ? ファイルサイズ変えないとアップロードしてくれない。

  1. トップ
  2. prog
  3. PHP - apache_request_headers()PHP - apache_request_headers()

サイト全体を XML + XSLT 化? の続き。ファイル名から判断して msxsl に突っ込むスクリプトを書く。具体的には index.html.xml というファイルがあったら 2html.xsl を使って index.html に出力するというもの。

書いたはいいとして、何故か実行するたびにエラーがでたりでなかったり……パイプの使い方を間違っているんだろうかとかなんとか思ったり思わなかったり。

xyzzy で CDATA 領域に -- が奇数個あるとそれ以降ファイルの最後までコメントとみなされて困る……

  1. トップ
  2. web
  3. msxsl | xmllintmsxsl | xmllint

今日一日どういうスタイル書こうか考えていたけど、全く思いつかず……よく考えると特にテーマがあるってわけじゃないし、なんか根本的に間違っている気がしないでもない。

  1. トップ
  2. self
  3. スタスタstst

/latest /latest.ja /latest.rdf /latest.rdf.ja /latest.en.rdf のようなパスを全部受け入れるとしたら、どうやって言語部分とフレーバー部分を区別したらいいだろう? どう考えてもどっちがフレーバーでどっちが言語コードかなんてプログラム側には理解不能だから、設定として言語コードとして扱う文字列を設定する必要があると思うけど、ホントはもっとスマートな方法があるんじゃないかとかって考えたりもする。設定項目が多いのはうざったいし。まぁ Apache の mod_mime AddLanguage みたいになるんだろうけど。

XSLT 側で殆どやることになることに間違いない (そういうものだから!) 。大体カテゴリによるフィルタリングと同じようなことをするし。でも複数言語を対比させて表示させるのも面白いんじゃないか、とか思わなくもなかったりしたりとかしなかったりとかこれやろうとすると多分ひどく面倒くさい。動的に XSLT の条件部分の式が増えたりすると思うから。つか無理? できるとしたら latest.ja+en とかになるのかな。。面倒なのは latest の場合の表示だろうなぁ。latest の場合はスクリプト側にちょっと手を入れる必要がある。その言語(カテゴリ)が含まれていないセクションは無視して、最近の n 日分を表示しないといけないし、その分を考えてスクリプト側で合成する必要があるから。

つーか一番面倒くさそうなのは変換後の xml:lang だよなぁ。ルート要素をどうするとか、いろんなメッセージをどうするかとか。

と、実装方法だけ考える夏の日。気づいたら夜。昼寝る。夜寝る。朝寝る。私寝てる。いつも寝てる。夢を見る。桜がふる夢を見る。雨がふる夢を見る。落ち葉がふる夢を見る。雪がふる夢を見る。一年がすぎる夢をみる。一生がすぎる夢を見る。

セクションは常に表示すべきか。指定した言語で書かれていないとしても、他の言語へのポインタは書いておかないと「あるかどうか」さえわからないし。もしこうするなら、スクリプトの修正が無駄に終わったことになる。(つっても XPath 書き換えただけだけど)

なんかなんとなく結局実装中。んで頭カオス

大体やった。でも何故か PHP がクラッシュしたりするので、一部やってない。つまり、言語指定したページでもリンク先は言語指定してないページになったりする。

まじもう最高に混沌ブレインなので今日はやめよう……ぶっちゃけ使わないし

  1. トップ
  2. web
  3. マルチランゲージ。ネゴシエーションな風景multilanguage. the sight of negotiation
  1. トップ
  2. prog
  3. マルチランゲージ。ネゴシエーションな風景multilanguage. the sight of negotiation

Index にソースへのリンクをはっといてみる。まだいくつか気に入らないところ (例えばモバイルエージェントの時の強制フレーバー上書きをすると、モバイルからデフォルトフレーバーが見れないとか) があるけど、やる気おきたらやろう。

一ヶ月~一年運用してみて、負荷がかかるようだったら無い知恵しぼってキャッシュを実装するか。まぁ 1000pt まで大丈夫だから(わらい)

やばい。日付変わったときにどうも間違って書いてしまう。day/@datetime なんて無いっつうの>俺

  1. トップ
  2. prog
  3. Taglibro! のソースfontprogramo de `Taglibro!'

した (RSS1.0 = application/rdf+xml, Atom = application/atom+xml) のだけれど、これマトモに設定するとダウンロードになっちゃうんだよなぁ……まぁ分かってたことだから今まで text/xml で送ってたんだけど……なんでダウンロードしちゃうかなぁ。application だからだよなぁ。XML のときはパースしてくれりゃいいのに。せっかく xsl-stylesheet とか書いてるんだからさー

  1. トップ
  2. web
  3. RSS と Atom の Content-Type ヘッダを変更

RSS と Atom の並び順が新しい順じゃなかったのを修正。d:section も <xsl:sort select="@datetime" order="descending" /> でソートするようにした。この場合 position() だけでセクション位置を取得するとカオスるので last() - position() + 1 でOK。

  1. トップ
  2. web
  3. RSS の並び順の修正
  1. トップ
  2. prog
  3. RSS の並び順の修正

検索ってどうやってやろうかなぁーあれないと俺不便だよなーって考えてて思った。別に俺不便じゃないのよ。grep すればいいんだもん。あーそうか。あーそうか。んじゃグーグルに任せていいや。

  1. トップ
  2. web
  3. 検索

少し前現状 PHP にクエリ突っ込むような形しかないけど とか書いてるけど、別にローカルで変換させてふつーの HTML を転送したっていいじゃん。っていうかそのほうがいいじゃん。

  1. トップ
  2. web
  3. サイト全体を XML + XSLT 化?

section/@datetime が存在しなくても問題ないようにしよう。そうすれば tDiary のデータをもっとスマートに移行できる。ただ、tDiary のデータを XML にするのがひどく面倒くさいけれど……

せっかく tDiary とほぼ同じデータ構成なのだから、できれば完全にこちらにデータを移したい。

section/@datetime がなくても問題がないようにしてみた。といっても XSLT ファイルを修正しただけ。しかも表示しないようにするとか、そういう……

  1. トップ
  2. prog
  3. section/@datetime についてのメモ
  1. トップ
  2. web
  3. section/@datetime についてのメモ

学校の補習(のような夏期講習)が終わってやることが無い。むはー

現国は面白いけど眠い。弁証法(ヘーゲル):(+ テーゼ(正・定立) ←矛盾・背反・撞着→ アンチテーゼ(反・反定立)) -アウフヘーベン(止揚)-> ジンテーゼ(合・正反合)……ってかコレって覚えるべきなんだろうか……

  1. トップ
  2. self
  3. 補習と自分と自分の気力

寝てる時間のほうが長い勢いで寝てるので夢みまくりなんですけども、内容がいまいち覚えてないのと、覚えててもヤバすぎ(謎)

てか数日前の夢はなんかすごかった。(夢の中で)午前四時ぐらいに起きると全裸の女の子ですよ。涼しい朝の風と共に女の子ですよ。え? みたいな。あーでも神秘っつうかファンタジックっつうか透明少女だったのでまぁいいとしよう(謎)

  1. トップ
  2. self
  3. 最近の夢

サイト全体を XML データをもとにして XSL 変換したほうが楽っぽいなぁ。辞書とか、ヘッダ・フッタとかの共通部分を完全に一箇所にまとめられるし、XSLT っつうちゃんと仕様の決まってるやつをテンプレートとして使うから他人が構造を見ても (まずないけど) 理解しやすいし。

とりあえずそれっぽい XML データを変換する XSLT を書いてみた。んでも XML データがどうしても脳内 DTD なわけで……ただ単に簡略化した XHTML のほうがいいだろうか。でも h 要素使ってるテンプレ側で h1 要素を固定した場合、データに直接 h1, h2 と書いてしまうと面倒くさいので。し……どうやって変換すればいいだろう。っていっても現状 PHP にクエリ突っ込むような形しかないけど……

  1. トップ
  2. web
  3. サイト全体を XML + XSLT ?

どくりょ。どっちも面白いでぃすよ。

涼宮シリーズは何か妙に面白い。割と安心して読めるしねぇ。てか主人公の名前は意地でも出さない気ですか。

  1. トップ
  2. book
  3. mew mew / 成田良悟, 涼宮ハルヒの消失 / 谷川流

ネームスペース関連でめんどくさいことが……。共通化した XSL ファイルの中で本文を変換したりとか、共通部分を出力するテンプレートとか書いているのだけれど、デフォルトネームスペースの違うほかのフレーバーファイルでそれをインクルードして、その共通化されたテンプレートを適用すると、ネームスペースが新たにコピーされてしまう。本文を出力しているやつはかなりアドホックな対応<xsl:text disable-output-escaping="yes">&lt;</xsl:text> のようなのを書いて直接タグ作ってやるっちゅうローテクな方法。で見ないことにしてきたけれど、abbr 要素簡略化やらにそのアドホックな方法を適用すると非常に醜い。

共通化した XSL ファイルでデフォルトネームスペースをなくせばいいかと思いきや、それでも xmlns="" という属性が付いてしまう。どうしたらよいやら……

フレーバーごとに別の共通 XSL ファイルを作るのが(全く同じことを繰り返すのでスマートではないが)一番単純明快だよなぁ。それ以外に今のところ解決方法を思い浮かばない。ただ、Atom のように、ちゃんとネームスペースを宣言した中で呼び出す限りは問題ないので、RSS のフレーバーだけ同じことを書き直すことになる。うーむ。

とりあえず RSS のやつだけほぼ同じのをコピペRSS の場合は footnote の出力を変えなきゃいけないから、まぁいいかもしれない。どっちにしろ同じのを何度も書くのは好きじゃないけど……

  1. トップ
  2. web
  3. Namespace の問題

W3CDTF のようにタイムゾーンを表記した日付表示を見たときちょっと悩んだことがある。はて、この日付は UTC +09:00 されたものなんだろうか、それとも -09:00 すると UTC になるということなんだろうか、と。書いててバカバカしいすぎる……どっちも同じことですけどね! 俺の脳みそは処理できないんですよ! 文章にしてみると自分でもいかにバカかっつのがよくわかるんですが、頭で考えてるとカオスってきます。数字に弱いっつうか、なんていうか……頭わるっorz

関係ないんですけど、UTC って Coordinated Universal Time ですよね? なんで CUT じゃないんですか。切るからですか? Universal Time, Coordinated だったりしますか?

  1. トップ
  2. web
  3. 若人の W3CDTF についての悩み

isbn:N-NNNN-NNNN-N より urn:isbn:N-NNNN-NNNN-N ですよね。そうですよね。じゃあ ASIN の簡略化はどうするよ? っていう。そうか、ASIN の簡略化なんてしなけりゃOKだ。

テスト:mew mew

  1. トップ
  2. web
  3. URN ISBN isbn:?

tDiary やめてこっちへ。とりあえず /nulog/ でアクセスされたときは、/d/latest に飛ばしてます。

これからやろうと思うことを適当に書いておく。

  • lftp を使った ftp ミラーリングと便利機能 を見ながら、ローカルで編集してる日記をツーストロークぐらいで xyzzy から転送したい。(lisp の FTP クライアントは怖くて使いたくないので……)
  • もうちょいマシな CSS 書く。
  • 暑い。
open -u uid,pass lowreal.net
lcd /virtual/lowreal/public_html/null.lowreal.net/d/data
cd /public_html/null.lowreal.net/d/data
mirror -R -i '^[0-9]{6}\.xml$'
exit

のような lftp 用のスクリプトファイルを用意して

(defun lftp-mirror()
(interactive)
(save-buffer-dialog)
(execute-shell-command "lftp -f /virtual/lowreal/taglibro.lftp"))
(global-set-key '(#\C-c #\C-c) 'lftp-mirror)

を、.xyzzy に追記。C-c C-c でうぷろーど。素敵。

  1. トップ
  2. web
  3. Taglibro! への移行

え? これ (@towerrecords.co.jp) って何……? ってかソニック入ってるよ? これってフリスロと同じやつなのかな。ってかフリスロって廃盤だったんだ? つーか第二期シロップって何。

  1. トップ
  2. music
  3. Delayedead / Syrup16g

xmllint っていうツール使うと、改行やらインデントのない XML を綺麗にできる。このツールどこで入れたか知らないけど(というか cygwin からでしかないけど)自分の環境では既に入ってた。たぶん libxml2 を入れれば勝手に入ると思う。

これはちゃんと実装されているので安心して使えるかとー。例えばテキストノード内ではインデントしないとか、そんな感じ。

xmllint --format input-filename > output-filename

  1. トップ
  2. web
  3. xmllint による XML の再インデント

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

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

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

  1. トップ
  2. prog
  3. まだまだやること
  1. トップ
  2. web
  3. まだまだやること

とりあえず Shift_JIS で送るのが無難っぽいなーってことで可能な限り携帯向けは Shift_JIS で送ることにしよう。
モバイル向けのページで一番いい文書型はどれだろう? XHTML basic が一番かなぁ? それよりも HTML 4.01 で省略しまくりのほうが(転送量が減って)いいのかもしれない……でもいまさら 4.01 的なきもするしーあー。
4.01 使うなら valid の限りできるだけデータ減らす。head 要素(これも省略するけど)には title 以外いらない。まぁ書いてみるか……どうせ暇だし(違

  1. トップ
  2. web
  3. 携帯2

とりあえず Shift_JIS で送るのが無難っぽいなーってことで可能な限り携帯向けは Shift_JIS で送ることにしよう。

モバイル向けのページで一番いい文書型はどれだろう? XHTML basic が一番かなぁ? それよりも HTML 4.01 で省略しまくりのほうが(転送量が減って)いいのかもしれない……でもいまさら 4.01 的なきもするしーあー。

4.01 使うなら valid の限りできるだけデータ減らす。head 要素(これも省略するけど)には title 以外いらない。まぁ書いてみるか……どうせ暇だし(違

  1. トップ
  2. web
  3. 携帯2

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

  1. トップ
  2. prog
  3. todo...
  1. トップ
  2. web
  3. todo...

tDiary のデータを移行するのはやめることにしよう。
XML がデータだと脳内 DTD でも XSLT でてきとーに変換できるのになぁ……

  1. トップ
  2. web
  3. xml とかデータ型とか

tDiary のデータを移行するのはやめることにしよう。

XML がデータだと脳内 DTD でも XSLT でてきとーに変換できるのになぁ……

  1. トップ
  2. web
  3. xml とかデータ型とか

ディレクトリどう作ろう……現在の tDiary を oldlog にやっちまって、今まで使ってたリクエストがきたら mod_rewrite で飛ばしてやろうか。

RewriteEngine On
RewriteBase /
RewriteRule ^nulog/([0-9]{6,8})\.html$ oldlog/nph-index.rb?date=$1
RewriteRule ^nulog/([0-9]{6,8})$ oldlog/nph-index.rb?date=$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^nulog/(.*)$ nulog/taglibro.php/$1 [L,QSA]

みたいに……
いや、これじゃダミだ。別のディレクトリに新しいの入れたほうが良いな。安全だし。

  1. トップ
  2. web
  3. 移行後のあれ

ディレクトリどう作ろう……現在の tDiary を oldlog にやっちまって、今まで使ってたリクエストがきたら mod_rewrite で飛ばしてやろうか。

RewriteEngine On
RewriteBase /
RewriteRule ^nulog/([0-9]{6,8})\.html$ oldlog/nph-index.rb?date=$1
RewriteRule ^nulog/([0-9]{6,8})$ oldlog/nph-index.rb?date=$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^nulog/(.*)$ nulog/taglibro.php/$1 [L,QSA]

みたいに……

いや、これじゃダミだ。別のディレクトリに新しいの入れたほうが良いな。安全だし。

  1. トップ
  2. web
  3. 移行後のあれ

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 要素も不完全。むむむー。細かいのが多くなると突然ダルくなる。

  1. トップ
  2. prog
  3. 文字コード

i-mode は sjis しか読めないって本当ですか。本当でもどうでもいいっちゃどうでもいいんですけど。
携帯のブラウザは gzip 転送を実装してください。お願いします。あの噂の携帯は opera 積んでるから gzip イケるのかな。gzip 実装しないのって金儲けるためよね。さっさと定額制が浸透しないかなぁ……*1
スクリプトが gzip に対応する場合は Accept-Encoding ヘッダ見て、gzip 入ってたら圧縮してあげるんだっけ。

  1. トップ
  2. web
  3. 携帯へ送信

i-mode は sjis しか読めないって本当ですか。本当でもどうでもいいっちゃどうでもいいんですけど。

携帯のブラウザは gzip 転送を実装してください。お願いします。あの噂の携帯は opera 積んでるから gzip イケるのかな。gzip 実装しないのって金儲けるためよね。さっさと定額制が浸透しないかなぁ……((今のところ自分は携帯でネットなんて殆どしないけどね!))

スクリプトが gzip に対応する場合は Accept-Encoding ヘッダ見て、gzip 入ってたら圧縮してあげるんだっけ。

  1. トップ
  2. web
  3. 携帯へ送信

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

  1. トップ
  2. prog
  3. 負荷率

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

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

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

  1. トップ
  2. prog
  3. 負荷率

今の実装だと「カテゴリごとの 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 で (それ以上のことはしない) 振り分けてあげる。

  1. トップ
  2. prog
  3. 実装

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

  1. トップ
  2. prog
  3. if ==

xsl:number で似たようなことができることに気が付いた。これで footnote がちゃんと実装できる。

<xsl:number level="any" from="d:day" format="*1"/> のようにすればよかった。ふっとノートXSLT の仕様書にそのまんまのが載っている。俺はアフォか。

でもまだリンクを実装してない。面倒くさいから。見通しがたったら後になってもできるじゃん?

  1. トップ
  2. web
  3. ある基準から見た自分の位置