section/@datetime が存在しなくても問題ないようにしよう。そうすれば tDiary のデータをもっとスマートに移行できる。ただ、tDiary のデータを XML にするのがひどく面倒くさいけれど……
せっかく tDiary とほぼ同じデータ構成なのだから、できれば完全にこちらにデータを移したい。
section/@datetime がなくても問題がないようにしてみた。といっても XSLT ファイルを修正しただけ。しかも表示しないようにするとか、そういう……
section/@datetime が存在しなくても問題ないようにしよう。そうすれば tDiary のデータをもっとスマートに移行できる。ただ、tDiary のデータを XML にするのがひどく面倒くさいけれど……
せっかく tDiary とほぼ同じデータ構成なのだから、できれば完全にこちらにデータを移したい。
section/@datetime がなくても問題がないようにしてみた。といっても XSLT ファイルを修正しただけ。しかも表示しないようにするとか、そういう……
学校の補習(のような夏期講習)が終わってやることが無い。むはー
現国は面白いけど眠い。弁証法(ヘーゲル):(+ テーゼ(正・定立) ←矛盾・背反・撞着→ アンチテーゼ(反・反定立)) -アウフヘーベン(止揚)-> ジンテーゼ(合・正反合)……ってかコレって覚えるべきなんだろうか……
title="AAAA
BBBB" と書いたとき、IE ではちゃんと改行されるのに、Gecko だと文字化けする。
サイト全体を XML データをもとにして XSL 変換したほうが楽っぽいなぁ。辞書とか、ヘッダ・フッタとかの共通部分を完全に一箇所にまとめられるし、XSLT っつうちゃんと仕様の決まってるやつをテンプレートとして使うから他人が構造を見ても (まずないけど) 理解しやすいし。
とりあえずそれっぽい XML データを変換する XSLT を書いてみた。んでも XML データがどうしても脳内 DTD なわけで……ただ単に簡略化した XHTML のほうがいいだろうか。でも h 要素使ってるテンプレ側で h1 要素を固定した場合、データに直接 h1, h2 と書いてしまうと面倒くさいので。し……どうやって変換すればいいだろう。っていっても現状 PHP にクエリ突っ込むような形しかないけど……
どくりょ。どっちも面白いでぃすよ。
涼宮シリーズは何か妙に面白い。割と安心して読めるしねぇ。てか主人公の名前は意地でも出さない気ですか。
ネームスペース関連でめんどくさいことが……。共通化した XSL ファイルの中で本文を変換したりとか、共通部分を出力するテンプレートとか書いているのだけれど、デフォルトネームスペースの違うほかのフレーバーファイルでそれをインクルードして、その共通化されたテンプレートを適用すると、ネームスペースが新たにコピーされてしまう。本文を出力しているやつはかなりアドホックな対応<xsl:text disable-output-escaping="yes">&lt;</xsl:text> のようなのを書いて直接タグ作ってやるっちゅうローテクな方法。で見ないことにしてきたけれど、abbr 要素簡略化やらにそのアドホックな方法を適用すると非常に醜い。
共通化した XSL ファイルでデフォルトネームスペースをなくせばいいかと思いきや、それでも xmlns="" という属性が付いてしまう。どうしたらよいやら……
フレーバーごとに別の共通 XSL ファイルを作るのが(全く同じことを繰り返すのでスマートではないが)一番単純明快だよなぁ。それ以外に今のところ解決方法を思い浮かばない。ただ、Atom のように、ちゃんとネームスペースを宣言した中で呼び出す限りは問題ないので、RSS のフレーバーだけ同じことを書き直すことになる。うーむ。
とりあえず RSS のやつだけほぼ同じのをコピペ。RSS の場合は footnote の出力を変えなきゃいけないから、まぁいいかもしれない。どっちにしろ同じのを何度も書くのは好きじゃないけど……
W3CDTF のようにタイムゾーンを表記した日付表示を見たときちょっと悩んだことがある。はて、この日付は UTC +09:00 されたものなんだろうか、それとも -09:00 すると UTC になるということなんだろうか、と。書いててバカバカしいすぎる……どっちも同じことですけどね! 俺の脳みそは処理できないんですよ! 文章にしてみると自分でもいかにバカかっつのがよくわかるんですが、頭で考えてるとカオスってきます。数字に弱いっつうか、なんていうか……頭わるっorz
関係ないんですけど、UTC って Coordinated Universal Time ですよね? なんで CUT じゃないんですか。切るからですか? Universal Time, Coordinated だったりしますか?
isbn:N-NNNN-NNNN-N より urn:isbn:N-NNNN-NNNN-N ですよね。そうですよね。じゃあ ASIN の簡略化はどうするよ? っていう。そうか、ASIN の簡略化なんてしなけりゃOKだ。
テスト:mew mew
tDiary やめてこっちへ。とりあえず /nulog/ でアクセスされたときは、/d/latest に飛ばしてます。
これからやろうと思うことを適当に書いておく。
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 でうぷろーど。素敵。
え? これ (@towerrecords.co.jp) って何……? ってかソニック入ってるよ? これってフリスロと同じやつなのかな。ってかフリスロって廃盤だったんだ? つーか第二期シロップって何。
Bulkfeeds がこの日記の RSS をパースできてないみたい。何故だろう。FEED Validator だと Valid なんだけどなぁ……
xmllint っていうツール使うと、改行やらインデントのない XML を綺麗にできる。このツールどこで入れたか知らないけど(というか cygwin からでしかないけど)自分の環境では既に入ってた。たぶん libxml2 を入れれば勝手に入ると思う。
これはちゃんと実装されているので安心して使えるかとー。例えばテキストノード内ではインデントしないとか、そんな感じ。
xmllint --format input-filename > output-filename
latest.xsl.rdf という形から latest.rdf.xsl という形に変更。こっちのほうがいいっすね。
tDiary のデータを移行するのはやめることにしよう。
XML がデータだと脳内 DTD でも XSLT でてきとーに変換できるのになぁ……
ディレクトリどう作ろう……現在の 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 要素も不完全。むむむー。細かいのが多くなると突然ダルくなる。
今の実装だと「カテゴリごとの 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 で (それ以上のことはしない) 振り分けてあげる。
xsl:number で似たようなことができることに気が付いた。これで footnote がちゃんと実装できる。
<xsl:number level="any" from="d:day" format="*1"/> のようにすればよかった。ふっとノートXSLT の仕様書にそのまんまのが載っている。俺はアフォか。
でもまだリンクを実装してない。面倒くさいから。見通しがたったら後になってもできるじゃん?
; 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 で囲ってる……そうしないとインデントされてしまうから……
http://test.lowreal.net/d/taglibro.php/latest
今のところ、月別と日別は一個のファイルだけを直接 xslt に渡して処理(たぶん日別は変えると思う……)最新とカテゴリは必要データを dom で結合させてから xslt に渡す。ただ、カテゴリは全部処理しないと意味ないので全部結合してる(駄目)
blosxom っぽい url が使えます。/2004/07 /web/2004 /2004/var /latest.rss. でも個別ページと月別はフレーバー未実装。
つかもうちょいソースを綺麗にしたい……switch が多くて汚い。
書き直した。ある程度関数にして分離したので、前より格段と綺麗に。でも行数は変わってない(むしろ増えてる)
でもこれでカテゴリごとの latest を実装できた。つまり /latest /web/latest /latest.rdf /web/latest.rdf /latest/web.rdf (推奨しないけど) が使える。
[http://test.lowreal.net/d/taglibro.php/latest]
今のところ、月別と日別は一個のファイルだけを直接 xslt に渡して処理(たぶん日別は変えると思う……)最新とカテゴリは必要データを dom で結合させてから xslt に渡す。ただ、カテゴリは全部処理しないと意味ないので全部結合してる(駄目)
blosxom っぽい url が使えます。/2004/07 /web/2004 /2004/var /latest.rss. でも個別ページと月別はフレーバー未実装。
つかもうちょいソースを綺麗にしたい……switch が多くて汚い。
書き直した。ある程度関数にして分離したので、前より格段と綺麗に。でも行数は変わってない(むしろ増えてる)
でもこれでカテゴリごとの latest を実装できた。つまり /latest /web/latest /latest.rdf /web/latest.rdf /latest/web.rdf (推奨しないけど) が使える。
ホストを取得できてない。トラックバックの excerpt も記録されてない。
excerpt はスペルミスですた。
文字コード変換がうまくいってない mb_convert(ry なんですけど、どうすりゃいいでしょう。invalid token とかになっちまいますよ。困った。微 XSS 脆弱性。
今度は r が効かなくなった。叩いたら直った。駄目だ。
いろいろやってることが全部上手くいってない。駄目だ。
例えばあの子は透明少女ー
固有名詞をエス化するのって何か好きじゃないな……大文字で初めてそのまま書いてやる。
今となっては Japan だろうが「にっぽん」だろうが特に悩まないで同じ国を思い浮かべられるけど、何かやっぱジャパンて不思議だよなぁ。
しょぼいプレイヤー(とはいえ値段にかかわらず、プラスチックでできてるの)は静電気やらに弱い。最初に使ってたプレイヤーはなんていうか、静電気発生すると音量が爆音になったり、速さが変わったり(もちろん音も)してうんこ。今のはそんなに気にならないけど、かばんに入れておくとプチプチとノイズが入る(だから常にポケットの中)
たぶん本体を金属で作れば大丈夫だと思うんだけども…… mp3 player で一番高い部品はメモリだろうなぁ。ハードディスクプレイヤーのほうが安いってなぁ……
しょぼいプレイヤー(とはいえ値段にかかわらず、プラスチックでできてるの)は静電気やらに弱い。最初に使ってたプレイヤーはなんていうか、静電気発生すると音量が爆音になったり、速さが変わったり(もちろん音も)してうんこ。今のはそんなに気にならないけど、かばんに入れておくとプチプチとノイズが入る(だから常にポケットの中)
たぶん本体を金属で作れば大丈夫だと思うんだけども…… mp3 player で一番高い部品はメモリだろうなぁ。ハードディスクプレイヤーのほうが安いってなぁ……
(global-set-key #\M-C '(lambda () (interactive) (insert (code-char 582)))) (global-set-key #\M-c '(lambda () (interactive) (insert (code-char 614)))) (global-set-key #\M-G '(lambda () (interactive) (insert (code-char 600)))) (global-set-key #\M-g '(lambda () (interactive) (insert (code-char 632)))) (global-set-key #\M-H '(lambda () (interactive) (insert (code-char 550)))) (global-set-key #\M-h '(lambda () (interactive) (insert (code-char 566)))) (global-set-key #\M-J '(lambda () (interactive) (insert (code-char 556)))) (global-set-key #\M-j '(lambda () (interactive) (insert (code-char 572)))) (global-set-key #\M-S '(lambda () (interactive) (insert (code-char 606)))) (global-set-key #\M-s '(lambda () (interactive) (insert (code-char 638)))) (global-set-key #\M-U '(lambda () (interactive) (insert (code-char 605)))) (global-set-key #\M-u '(lambda () (interactive) (insert (code-char 637))))
こっちが正しい orz. 大文字小文字区別するっつうの。アフォな俺。
(global-set-key #\M-C '(lambda () (interactive) (insert (code-char 582)))) (global-set-key #\M-c '(lambda () (interactive) (insert (code-char 614)))) (global-set-key #\M-G '(lambda () (interactive) (insert (code-char 600)))) (global-set-key #\M-g '(lambda () (interactive) (insert (code-char 632)))) (global-set-key #\M-H '(lambda () (interactive) (insert (code-char 550)))) (global-set-key #\M-h '(lambda () (interactive) (insert (code-char 566)))) (global-set-key #\M-J '(lambda () (interactive) (insert (code-char 556)))) (global-set-key #\M-j '(lambda () (interactive) (insert (code-char 572)))) (global-set-key #\M-S '(lambda () (interactive) (insert (code-char 606)))) (global-set-key #\M-s '(lambda () (interactive) (insert (code-char 638)))) (global-set-key #\M-U '(lambda () (interactive) (insert (code-char 605)))) (global-set-key #\M-u '(lambda () (interactive) (insert (code-char 637))))
こっちが正しい orz. 大文字小文字区別するっつうの。アフォな俺。