読み終わりー。やばいねこれ。面白かった。内容的に成田良悟的世界のつながりみたいのがあって、「仕掛け」がちゃんと作ってあるから面白い。じわじわ気づき始めたところで丁度文中に真が出てくるからリズムが乱れないし、てきとーに読んでも混乱しない。いやーこれヒット
デュラララ!! / 成田良悟
PHP - apache_request_headers()PHP - apache_request_headers()
PHP で If-Modified-Since を取得したい。apache_request_headers() を使うみたいだけど、関数名に apache とついてる通り Apache モジュールとして動いていないとこの関数は使えない。自分はローカルテストするとき AnHTTPD+CGI版PHP なので普通のコーディングしてテストしようとするとエラーがでる。こりゃどうすりゃいいやら。環境変数には 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 ってファイルサイズ見てるんだなぁ? ファイルサイズ変えないとアップロードしてくれない。
msxsl | xmllintmsxsl | xmllint
サイト全体を XML + XSLT 化? の続き。ファイル名から判断して msxsl に突っ込むスクリプトを書く。具体的には index.html.xml というファイルがあったら 2html.xsl を使って index.html に出力するというもの。
書いたはいいとして、何故か実行するたびにエラーがでたりでなかったり……パイプの使い方を間違っているんだろうかとかなんとか思ったり思わなかったり。
xyzzy で CDATA 領域に -- が奇数個あるとそれ以降ファイルの最後までコメントとみなされて困る……
オンドゥル 先生
オンドゥル 先生, ダディャーナ先生. まじで笑たー
スタスタstst
マルチランゲージ。ネゴシエーションな風景multilanguage. the sight of negotiation
/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 がクラッシュしたりするので、一部やってない。つまり、言語指定したページでもリンク先は言語指定してないページになったりする。
まじもう最高に混沌ブレインなので今日はやめよう……ぶっちゃけ使わないし
RSS のカテゴリ別
Taglibro! のソースfontprogramo de `Taglibro!'
Index にソースへのリンクをはっといてみる。まだいくつか気に入らないところ (例えばモバイルエージェントの時の強制フレーバー上書きをすると、モバイルからデフォルトフレーバーが見れないとか) があるけど、やる気おきたらやろう。
一ヶ月~一年運用してみて、負荷がかかるようだったら無い知恵しぼってキャッシュを実装するか。まぁ 1000pt まで大丈夫だから(わらい)
やばい。日付変わったときにどうも間違って書いてしまう。day/@datetime なんて無いっつうの>俺
RSS と Atom の Content-Type ヘッダを変更
した (RSS1.0 = application/rdf+xml, Atom = application/atom+xml) のだけれど、これマトモに設定するとダウンロードになっちゃうんだよなぁ……まぁ分かってたことだから今まで text/xml で送ってたんだけど……なんでダウンロードしちゃうかなぁ。application だからだよなぁ。XML のときはパースしてくれりゃいいのに。せっかく xsl-stylesheet とか書いてるんだからさー
RSS の並び順の修正
RSS と Atom の並び順が新しい順じゃなかったのを修正。d:section も <xsl:sort select="@datetime" order="descending" /> でソートするようにした。この場合 position() だけでセクション位置を取得するとカオスるので last() - position() + 1 でOK。
検索
サイト全体を XML + XSLT 化?
少し前 に 現状 PHP にクエリ突っ込むような形しかないけど
とか書いてるけど、別にローカルで変換させてふつーの HTML を転送したっていいじゃん。っていうかそのほうがいいじゃん。
section/@datetime についてのメモ
section/@datetime が存在しなくても問題ないようにしよう。そうすれば tDiary のデータをもっとスマートに移行できる。ただ、tDiary のデータを XML にするのがひどく面倒くさいけれど……
せっかく tDiary とほぼ同じデータ構成なのだから、できれば完全にこちらにデータを移したい。
section/@datetime がなくても問題がないようにしてみた。といっても XSLT ファイルを修正しただけ。しかも表示しないようにするとか、そういう……
補習と自分と自分の気力
学校の補習(のような夏期講習)が終わってやることが無い。むはー
現国は面白いけど眠い。弁証法(ヘーゲル):(+ テーゼ(正・定立) ←矛盾・背反・撞着→ アンチテーゼ(反・反定立)) -アウフヘーベン(止揚)-> ジンテーゼ(合・正反合)……ってかコレって覚えるべきなんだろうか……
最近の夢
Gecko の title 属性での改行
title="AAAA&#xA;BBBB" と書いたとき、IE ではちゃんと改行されるのに、Gecko だと文字化けする。
サイト全体を XML + XSLT ?
サイト全体を XML データをもとにして XSL 変換したほうが楽っぽいなぁ。辞書とか、ヘッダ・フッタとかの共通部分を完全に一箇所にまとめられるし、XSLT っつうちゃんと仕様の決まってるやつをテンプレートとして使うから他人が構造を見ても (まずないけど) 理解しやすいし。
とりあえずそれっぽい XML データを変換する XSLT を書いてみた。んでも XML データがどうしても脳内 DTD なわけで……ただ単に簡略化した XHTML のほうがいいだろうか。でも h 要素使ってるテンプレ側で h1 要素を固定した場合、データに直接 h1, h2 と書いてしまうと面倒くさいので。し……どうやって変換すればいいだろう。っていっても現状 PHP にクエリ突っ込むような形しかないけど……
mew mew / 成田良悟, 涼宮ハルヒの消失 / 谷川流
どくりょ。どっちも面白いでぃすよ。
涼宮シリーズは何か妙に面白い。割と安心して読めるしねぇ。てか主人公の名前は意地でも出さない気ですか。
Namespace の問題
ネームスペース関連でめんどくさいことが……。共通化した XSL ファイルの中で本文を変換したりとか、共通部分を出力するテンプレートとか書いているのだけれど、デフォルトネームスペースの違うほかのフレーバーファイルでそれをインクルードして、その共通化されたテンプレートを適用すると、ネームスペースが新たにコピーされてしまう。本文を出力しているやつはかなりアドホックな対応<xsl:text disable-output-escaping="yes">&lt;</xsl:text> のようなのを書いて直接タグ作ってやるっちゅうローテクな方法。で見ないことにしてきたけれど、abbr 要素簡略化やらにそのアドホックな方法を適用すると非常に醜い。
共通化した XSL ファイルでデフォルトネームスペースをなくせばいいかと思いきや、それでも xmlns="" という属性が付いてしまう。どうしたらよいやら……
フレーバーごとに別の共通 XSL ファイルを作るのが(全く同じことを繰り返すのでスマートではないが)一番単純明快だよなぁ。それ以外に今のところ解決方法を思い浮かばない。ただ、Atom のように、ちゃんとネームスペースを宣言した中で呼び出す限りは問題ないので、RSS のフレーバーだけ同じことを書き直すことになる。うーむ。
とりあえず RSS のやつだけほぼ同じのをコピペ。RSS の場合は footnote の出力を変えなきゃいけないから、まぁいいかもしれない。どっちにしろ同じのを何度も書くのは好きじゃないけど……
若人の W3CDTF についての悩み
W3CDTF のようにタイムゾーンを表記した日付表示を見たときちょっと悩んだことがある。はて、この日付は UTC +09:00 されたものなんだろうか、それとも -09:00 すると UTC になるということなんだろうか、と。書いててバカバカしいすぎる……どっちも同じことですけどね! 俺の脳みそは処理できないんですよ! 文章にしてみると自分でもいかにバカかっつのがよくわかるんですが、頭で考えてるとカオスってきます。数字に弱いっつうか、なんていうか……頭わるっorz
関係ないんですけど、UTC って Coordinated Universal Time ですよね? なんで CUT じゃないんですか。切るからですか? Universal Time, Coordinated だったりしますか?
URN ISBN isbn:?
isbn:N-NNNN-NNNN-N より urn:isbn:N-NNNN-NNNN-N ですよね。そうですよね。じゃあ ASIN の簡略化はどうするよ? っていう。そうか、ASIN の簡略化なんてしなけりゃOKだ。
テスト:mew mew
Taglibro! への移行
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 でうぷろーど。素敵。
Delayedead / Syrup16g
え? これ (@towerrecords.co.jp) って何……? ってかソニック入ってるよ? これってフリスロと同じやつなのかな。ってかフリスロって廃盤だったんだ? つーか第二期シロップって何。
Bulkfeeds: RSS Error happened
Bulkfeeds がこの日記の RSS をパースできてないみたい。何故だろう。FEED Validator だと Valid なんだけどなぁ……
xmllint による XML の再インデント
xmllint っていうツール使うと、改行やらインデントのない XML を綺麗にできる。このツールどこで入れたか知らないけど(というか cygwin からでしかないけど)自分の環境では既に入ってた。たぶん libxml2 を入れれば勝手に入ると思う。
これはちゃんと実装されているので安心して使えるかとー。例えばテキストノード内ではインデントしないとか、そんな感じ。
xmllint --format input-filename > output-filename
まだまだやること
携帯2
携帯2
todo...
+flavor ファイル名変更
latest.xsl.rdf という形から latest.rdf.xsl という形に変更。こっちのほうがいいっすね。
xml とかデータ型とか
tDiary のデータを移行するのはやめることにしよう。
XML がデータだと脳内 DTD でも XSLT でてきとーに変換できるのになぁ……
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]
みたいに……
いや、これじゃダミだ。別のディレクトリに新しいの入れたほうが良いな。安全だし。
移行後のあれ
ディレクトリどう作ろう……現在の 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] みたいに……
いや、これじゃダミだ。別のディレクトリに新しいの入れたほうが良いな。安全だし。
文字コード
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
負荷率
負荷率
実装
今の実装だと「カテゴリごとの 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 ==
ある基準から見た自分の位置
xsl:number で似たようなことができることに気が付いた。これで footnote がちゃんと実装できる。
<xsl:number level="any" from="d:day" format="*1"/> のようにすればよかった。ふっとノートXSLT の仕様書にそのまんまのが載っている。俺はアフォか。
でもまだリンクを実装してない。面倒くさいから。見通しがたったら後になってもできるじゃん?