注意 これは間違ってるかもしれない。実際に実装を使って確かめたわけじゃない。今はめんどくさくて確かめたくないので覚書的なもの。

変数バインドエレメント (xsl:param, xsl:variable) では select でノードセット格納するときと、子要素にテンプレートを書いてごちゃるのとでは違うらしい。後者は結果ツリーフラグメント (Result Tree Fragment) になる。これはルートノードを含む。(select の場合でもルートノードを含むように選択すればルートノードは含まれる。例えば document() を単体で使えば必ずルートノードがノードセットの入る)

<xsl:variable name="foo" select="/bar"/>
<xsl:apply-templates select="$foo"/>
<xsl:variable name="foo">
<xsl:copy-of select="/bar"/>
</xsl:variable>
<xsl:apply-templates select="$foo"/>

前者の場合、ルートノードを含まないノードセットなので、無限ループに陥らずにちゃんとなる。後者の書き方によって $foo に格納されるのは結果ツリーフラグメントで、結果ツリーフラグメントはルートノードを含むので、(現在適用しているスタイルシートの match="/" にマッチして) 無限ループ。

結果ツリーフラグメントをノードセットと混同するとエラい目にあう。例えば Mozilla がクラッシュしたりとか。

  • 結果ツリーフラグメントは、結果ツリーの断片 (フラグメント) を表す。結果ツリーフラグメントは、ルートノードを1つだけ含むノード集合と同様に扱われる。
  • 変数バインドエレメントが select アトリビュートを持たず、コンテンツが空でない場合 (つまり、変数バインドエレメントが1つまたは複数の子ノードを持っている場合)、変数バインドエレメントのコンテンツが変数の値になる。変数バインドエレメントのコンテンツはテンプレートであり、このテンプレートをインスタンス化すると、変数の値が得られる。この値は結果ツリーフラグメントであり、このフラグメントはテンプレートをインスタンス化して生成した一連のノードを子に持つルートノードを1つだけを含むノード集合と同等である。

あっていれば xsl:param にノード集合を渡す。 はノード集合ではなく正確には結果ツリーフラグメントだ。まぁ扱い方的はあまり変わらないけれど……

ってことは <xsl:param name="ggg" select="'unke'"/><xsl:param name="ggg">unke</xsl:param> は違うんだ。実際これらを <xsl:value-of select="$ggg"/> とかやると文字列に変換されるので同じように見えるだけか。この場合前者の方が変換がなくてほんの少し高速かな。

  1. トップ
  2. web
  3. 結果ツリーフラグメント
  1. トップ
  2. xslt
  3. 結果ツリーフラグメント
  1. トップ
  2. xml
  3. 結果ツリーフラグメント

XPathXPath という名前だけでも誤解を招く。Path というだけにディレクトリパスとかを連想する。まぁ、ディレクトリパスとは類似点が多い。UNIX ファイルシステムにおけるルートディレクトリ (名前ナシ) と、ルートノード (展開された名前ナシ) とか、それに省略形による表記を使うとパット見ディレクトリを特定するためのディレクトリパスとなんら変わらない。‘/’ を区切りに使うのが紛らわしい。カレントディレクトリXSLT における カレントノード を混同しやすい。XPath にはカレントノードなんてものはない。コンテキストノード。

XPath は文字列とか数値も表現しえるので、ただたんにどっかのノードを特定する言語ではない。(とはいえ W3C 仕様書には XPath は、XML ドキュメントの一部をアドレッシングするための言語であり とか書いてあって紛らわしい)

だめだもう寝る。

  1. トップ
  2. xpath
  3. XPath の紛らわしさ
  1. トップ
  2. web
  3. XPath の紛らわしさ
  1. トップ
  2. xml
  3. XPath の紛らわしさ

IE (Gecko, Opera, etc) を無視するのと、音声ブラウザを無視するのはおなじ。

  1. トップ
  2. web
  3. IE

っていう感じでループさせて15枚セレクトを作ってみる。コメント書くのめっちゃ苦手だ(w

もうちょいページ自体どういう風にするかを考え中。

  1. トップ
  2. music
  3. Jackets 15
  1. トップ
  2. art
  3. Jackets 15

daimas の日記サンズを解雇になった田臥は、五十嵐くんに似てる気がするのだが間違ってる? ってのを、ミカン食ってるとき不意に見て鼻水でた。似てる。特にヒゲが。ヒゲ。

  1. トップ
  2. music
  3. 田臥 || 五十嵐

画像のナニがアレとかでと、規約読み直したらアソシエイト参加できそうジャマイカ的なので、amazon から画像ひっぱってるところ (現状 /jacket, /playing) はアソシエイト ID くっつけるようにしたので、そういうのウゼーよって人はてきとうにコピペすると良いと思います。謎すぎるなコレ。

  1. トップ
  2. web
  3. Amazon

正確にはまだ試験休みなのはいいとして、ここ数日ずっとハイテンション。ちょっと怖い。ずっとは続かない。

とにかく想像力を失くさないようにしようと思う。とりもどせない。既にあんまり無いところが厳しい! 経験的想像力 (?) は外をもっと歩いたり、憂鬱さの沢山味わわないとダメだから難しい。早く気付くべきだね。想像力について。

去年の自分のサイトを見てみたら今よりもっとすごく糞だった。おととしの見たらヤバすぎた。しかも XHTML とか、その他関連技術が自分の中である程度マトモになりはじめたのは今年だった。なんかもう学び始めてから二・三年たっている気がする。この一年はすごく長かったみたいだ。それと日記に書く文章が無駄に長くなったりもしてる。過去の日記とか読むのは微妙に辛い (わらい) けど面白いもんだ。ウェブに公開しちゃうと自分で捨てちゃったやつまで残っていて笑える。消してくれ!とか思う。どうでもいいな。

  1. トップ
  2. life
  3. 生活 of winter vacation

狂人日記 とか、ネット上にも載ってる各種インタビューとかで木下氏が ASIAN KUNG-FU GENERATION がどうとかっていう話が結構出てきて微妙に驚いた。意外だった。むしろ嫌いな系統だと思ってた。

どうでもよすぎてセクション切るか迷ったけど一応記録。

あーあと、LOST IN THE AIR っていうアルバムが出るらしくて楽しみだ。でも二月は永遠に来て欲しくないな。

  1. トップ
  2. music
  3. アート & ASIAN (ry

冬に想像する夏は素敵だと思う。その、夏の中にいるときとは違って、木の緑色だったり、いろんなもんの青さだったり、その他キラキラしたものしか浮かばないからいい。まーようは夏が涼しければいいんです。だよね?

つまりこういう幸せな世の中 (こう表現しざるをえないっていうかそうしないとアレ) では冬が一番素敵な季節なんですよ。秋とか春とか夏は花粉症 (ブタクサ, 杉, イネ) もあるしねー。

  1. トップ
  2. life
  3. 冬における夏
  1. トップ
  2. imagination
  3. 冬における夏

#blosxom にてちょっと kyo さん と話していて、うんちゃら (いきさつ説明するのが面倒になった) いろいろカコイイジャケを見せてもらったりしてみて、カコイイジャケ紹介する blog とかないの?とか。んでとりあえず自分用にアレなのを作ってみるかって感じ。かなぁ。

ジャケ買い? 自分持ってないっつうか聞いたことないのもあるけど、ジャケット見るのはタダっつうかカッコイイジャケットは晒しといたほうがいいんジャマイカって感じで (むしろ教えてもらったのとかメモっとくためなんだけども) とりあえず作ってみた。中間ファイルは普通に XML。 追加するスクリプトが汚すぎ (とりあえず動け的) なのでそのうち直したい。直したい。いつ?

ちなみにヤバ気なのは This May Be the Year I Disappear / Recover, Green Mind / Dinosaur Jr., フェイクファー / スピッツ。女の子ばっかですねとか言わない。

  1. トップ
  2. music
  3. ジャケ買い?。
  1. トップ
  2. web
  3. ジャケ買い?。

最初の頃だいぶ適当でここら辺の考えが甘かったわけで、オリジナルを保持することを考えなきゃなぁとか思った。今のところホワイトスペースで段落の区切りになっているけど、やっぱ一行ずつ l 要素とかソレっぽいのでマークアップして突っ込んだほうがいい。XHTML にするときは <span class="l">一行分</span> みたいにして display: block な感じ。むーできればはやくやったほうがいいだろうなぁ……

  1. 本体の XSLT の修正。
  2. 現在の XML を l 使う形式に変換する XSLT の作成・検証
  3. スクリプトの若干の修正

ついでに URL にもリンク晴れるようにしたほうがいいか。使えるタグ制限とか上手くできないかなぁ。

  1. トップ
  2. web
  3. コメントの XML

前回 (2004-12-01) と全く同じ。

  1. Cron のメールが来ない。
  2. 前日のメールには Killed が含まれてる (でも見る限り Namazu ではなくて、変換している Ruby スクリプトが殺されてる)
  3. NMZ.lock2 が残っている。
  4. NMZ.lock2 を削除して mknmz すると検索結果がズレる。
  5. インデックスファイル全削除で対処。
  • なぜ Kill されるのか。
  • なぜ NMZ.lock2 が残るのか。
  • なぜ検索結果がズレるのか。

わかんねーw

  1. トップ
  2. web
  3. Namazu Cron

IE でもぐにゅーんってなるようにした。情報はでない。高さが auto だから計算できない。その代わり title 属性は削除しない。

とりあえず Gecko と IE で動いて、Opera で確認したらダメ。仕方ないのでブラウザ振り分けコードがいっぱいちらばってる。うぜー

問題点は position: relative なのに、元の位置で大きさが反映されちゃうことだったわけ (後続する要素がズレる) なので、相殺 margin 仕掛けて解決した。relative である限りは margin しかけようが何しようがいいはず (たぶん) だけど、Opera (7.6 preview) だと崩れましたみたいな。

  1. トップ
  2. web
  3. Album 画像のぽぷあぷの続き IE
  1. トップ
  2. music
  3. Album 画像のぽぷあぷの続き IE

村。人たくさん。復讐。「何であっちには誰もいないんだ?」。葬儀屋。学校。階段。スキー。

  1. トップ
  2. self
  3. 夢。葬儀屋

デフォルトスタイルシートをクリスマス風に。クリスマスだから何だっつう勢いプラス赤と緑かpgrみたいな……

  1. トップ
  2. web
  3. クリスマス風に

病院の中の温泉。海の中の温泉。ボーイ。話すのが遅い。小学生。写真。制服。小説を書く体育教師。

  1. トップ
  2. self
  3. 夢・温泉めぐり

アルバム画像の下にアルバムの情報を表示するようになった

opacity とか使ってる。IE はそもそも無理ですよ。Opera は特に対策しなくてもそのままいけたっぽい。

かなり微妙と思われるのは、ブラウザデフォルトのツールチップを消すために title 属性とかを DOM から消しちゃってるところ。そういう系ブラウザが Javascript をどの程度解釈するかよくわからないけど、もしかしたら結構アレすぎるんじゃないかとか思ったりもする。どうなんだろ。

ブラウザのツールチップを消す方法が他に思いつかないんだよなぁ……stopPropagation とかでもしかしたら?とか思ったらできなかった。切ない。

前回に続き例の画像のジャケットがアートなのはアートのジャケットは全体的に好きっつうかかっこいから。それ関係で amazon に Requiem for Innocence のジャケット画像 (が中でも一番好き) がないのがすげーアレなんですけど。

  1. トップ
  2. web
  3. Album 画像のポプアプの続き
  1. トップ
  2. music
  3. Album 画像のポプアプの続き

コードに色づけ Firefox でしか試してません。Opera ではもしかしたら動くかもしれないけれど、IE では絶対動きません。コアな部分 (つまりコードをマークアップするとこ) はブラウザにあんまり依存しないみたいなので、ブックマークレット化する部分をクロスブラウザすれば OK だけど面倒臭い。

  1. ブックマークレット起動
  2. 色づけしたいテキストをクリック (カーソルが I ビームになるとこ)
  3. プロンプトに使用するシンタックスを入力。

ECMAScript, Ruby, Lisp, XML, CSS, PHP, Io, Perl が適当に色づけ可能だと思うけど Perl はよく知らないし、Lisp はそもそもキーワード的なものがないので微妙。Javascript も JScript も ActionScript でも ECMAScript のスーパーセットである限りは ECMAScript でそこそこ色づけできるはず。HTMLXML でソレっぽくなるはず。

このスクリプトは少なくともコード部だけは独立してマークアップされてる必要があります。

<p>ほげほげ</p>
<pre>code</pre>
<span>code</span>
<code>code</code>
<p class="foo">code</p>

上のは OK. 下のは NG

<p>ほげ<em>ほげ</em>うげ
code</p>

子要素を持った要素は無理 (テキストノードに兄弟要素があるとダメ) ってことっす。

巨大なコードをやると死ぬかも。でも俺は謝らない。

Opera で一応動くように修正。リンクに %22 とか含まないようにしたのと、中途半端な IE 対策 (コピペなので) を削除。

  1. トップ
  2. prog
  3. コードに色をつける bookmarkletcode coloring bookmarklet
  1. トップ
  2. web
  3. コードに色をつける bookmarkletcode coloring bookmarklet

昨日は12時ぐらいから18時ぐらいまで寝てた。日の光が気持ちよすぎた。それだけ寝てもまだ眠い。やりたくないことが多いときは眠くなる。現実逃避。

夢。見た夢。書こうと思ってたのに忘れてた。そして忘れた。そんなにいい夢じゃなかった。

  1. トップ
  2. life
  3. 寝すぎでも寝よう

Trackback URI がコピーしやすい用に Trackback URI (本体のほう) をクリックするとプロンプトに URI 表示するようにしてみた。まぁ Trackback 自体殆ど来ないし、来まくっても困るんですけど……コメントとか削除するシステム作ってないので手動削除だし。

  1. トップ
  2. web
  3. Trackback URI の UI
  1. トップ
  2. prog
  3. Trackback URI の UI

SWAN SONG (ART-SCHOOL) を聞いてて音量あげようとおもってキーボードに手を伸ばしたときにデジャヴ。部屋は机の上の蛍光灯だけ。もう眠い。でも寝たらネタが思いつかない。ネタ?

  1. トップ
  2. life
  3. デジャヴ

UA 文字列を Javascript から得るにあたり検索をかけてみたのだけど、UA 文字列にある文字列 (eg. “MSIE”) があるか調べるときに String.prototype.indexOf の結果が -1 であるかを調べているのが多かった。これはやっぱ String.prototype.match だと遅いとかそういう問題があるからなのだろうか……なんかダサいので今回自分は String.prototype.match を使ったけど、どうなんだろ。

if (navigator.userAgent.indexOf("MSIE") != -1)
// do something for MSIE
if (navigator.userAgent.match(/MSIE/))
// do something for MSIE

さらに && とか使おうとすると演算子の優先順位 (よく忘れる) とか考えることになって面倒臭い……

  1. トップ
  2. prog
  3. ua.indexOf("MSIE") != -1 ?
  1. トップ
  2. web
  3. ua.indexOf("MSIE") != -1 ?

pre に現れるコードを Javascript で着色 (Javascript でやってるのはマークアップ) してみる。重い?

少し前からこれがやってみたかったので class 属性に使用してる言語を書いていたりした。言語ごとにトークンを使いわけたようと思ってたわけだけど、実際そこまでやるのってどうなのよ、とか思い始めた。そのうちやってみて、いけそうだったら採用してみよう。

現状でもかなり重い気が……長くとれるトークンを増やせば (ループ量が減って) 軽くなるかもしれないけど微妙。実際一文字ずつループまわしてるからなぁ。やりすぎか。

Ruby と ECMAScript は別のトークンテーブル使うようにしてみた。別にパースしてるわけじゃない (スキャンだけ) なので微妙にアレな状況が既にいくつか思いつくわけですが……例えば式展開の引数で括ってるクオーテーションつかっちゃうとかが絶対おかしくなる。

それとループ回数を減らすために /[a-z][a-z0-9]*/i は identifer ってことにしてスキップしてる。

Lisp と XML もすっごい適当に加えた。

サンプル 重いので移した。

正規表現はブラウザ毎の違いが殆どない気もする。気付いてないだけかもしれないけど。

FF で右クリックから View Selection Source すると内部 DOM の内容もソースとして出てくるのが役に立った……

そもそもスキャナの実装が激しく間違ってたので修正。根本的な部分を変えたのでバグがあるかもしれない。

  1. トップ
  2. prog
  3. code をクライアント側で着色
  1. トップ
  2. web
  3. code をクライアント側で着色

Audioscrobbler で最近 Recent Tracks に聞いてない曲が混ざることがある。バンプ が車輪の唄のシングルカットしてたなんてそもそも知らないのに、それのカップリングのやつが Recent Tracks に混ざっていたりする。

無作為に混ざっているわけじゃないらしく?同じアーティスト聞いてると混ざるみたい?

  1. トップ
  2. web
  3. Audioscrobbler で他人のやつ混ざる