2005年 10月 08日

pre, code の色づけ

Color code のリファクタリング (というほどでもない)

やっぱり遅いので処理を見直し。なんだけどあんまりできそうなところがなかった。ちゃんとプログラム書ける人が見ればありそうだけど。

StringScanner 内 scan メソッドの無駄処理。作ったときから気になってた部分。scan メソッドはかなりの回数が実行されるので改善すればそれなりに効果があるはず……だけどあんまり変わらなかった。

// #改善前 2回正規表現マッチさせてる
var m = this.string.substring(this.pos).search(regexp);
if (m == 0) {
m = this.string.substring(this.pos).match(regexp);
// #改善後 一発で
var m = regexp.exec(this.string.substring(this.pos));
if (m && m.index == 0) {

ECMAScript の仕様を読み直してみたら Regexp.prototype.exec はマッチした位置をちゃんと設定してくれるらしい。はやく気付けと。

このスクリプトで有利なのは Opera8.5。実行途中でもちゃんとスクロールが効くし、上から順番に色が変わっていくのがわかる (遅いマシンでもストレスを感じない)。ただし速度は最悪。対して Firefox や IE は速度は Opera の数倍だけど実行中完全にブラウザごと固まる。ブラクラ候補。

かかった時間を pre や code の title 属性に入れてみることにした。[Time-Spend:66ms] とか出るよね? Perl がもっとも遅い (例のページの Perl の部分が Opera では10秒近くかかる)。なぜなら正規表現の数が多いから。同じクラスのやつを一つの表現にまとめれば早くなるだろうけど可読性が最悪中の最悪になるので見送り。

XML と Io はそこそこはやい。これは両方とも正規表現の数があんまりないから。XML はそれに加えて /[^<>\s]+/ を OTHER として読み飛ばしているのでループ回数が減ってる。

つーか、こんなことしなくても普通に正規表現だけかけて置き換えすればいいじゃんって話な気がしてきた。だめだこれ。

2005年 10月 05日

Meta*Headphone-Girls の CSS

新しい CSS を適用。ATH-W1000 をイメージして赤っぽく。

今までの CSS は昔書いたやつの流用だったのでちゃんと書いた。

Opera8.5 がなんかやたらぶっとんだ計算をしていて困った。のりさんCSS_Hacks を教えてもらい、CSS3 media queries を使うことに。このハックはいずれ Opera 以外のブラウザで表示が乱れるハックなので使いたくなかったけど……

ath-w1000.css。ファイル名のとおり ATH-W1000 イメージです。なんか色合いがスキなので。

デザイン自体は学校の講義一個潰して集中して作ったからなんともいえない感じに……しかも広いほうの端末室 (謎) で作ってたから覗かれていたかもしれない。覗かれていたらバレるかもしれない。何かが。

ほんとは、、、、へっどふぉんした、、、おんなのこの、、、しゃしんが、、、、つかいたかった!!!! (この写真男の子だよね? 外人よくわからん) とりあえず、だれか撮って Creative Commons で公開してけれ

ヘッドフォン娘 で検索すると2位にランクされるようになった。Cool URI のおかげ?

2005年 09月 17日

URI? URI-reference?

IRC ネタ。RFC2396 ではフラグメントを含まないのが URI らしい (フラグメント含むのは URI 参照。なんで区別があるのかは知らん) のだけど、みんな (誰) が知っているとおり、HTML の a 要素 href 属性にはデータ型が URI にも関わらずフラグメント書いたりしちゃってるわけで、しかも XMLSchema の anyURI 型も例にフラグメント含めたやつを書いていたりしちゃってるわけで、てんで意味不明だよボケと突っ込みたいところだけど、その RFC2396 を RFC3986 が上書きした (今年の一月) らしく、ちゃんとフラグメントつけても URI って言えるみたいです。よかったよかった。

該当部分を抜粋する。

URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]

URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

ふぁっきん URI 参照。ちなみに RFC2396 には URI = foobar っていう項目はないみたいで、文章中に書いてあるみたいです。読むのめんどいから知らないけど。

XMLSchema の anyURI 型には以下のように書いてあるから (ややこしいけど) 問題にならないか。

anyURI represents a Uniform Resource Identifier Reference (URI). An anyURI value can be absolute or relative, and may have an optional fragment identifier (i.e., it may be a URI Reference).

2005年 07月 24日

BMP! BMP!

あるページをロードしたとき、画像が下から表示されてて、あーとか思ったら .bmp な画像でした。

なんだから分からんけど bmp な画像が含まれるページは不思議な気分だ。

2005年 07月 17日

Ajax Search, cloneNode の挙動

検索結果を表示させてみる

ホントは今まで中間ドキュメントとして吐いてた XML を利用する予定だったけど、どう考えてもソレを鯖側でソレっぽくしたほうが楽なので、?mode=ajax とかスクリプトに付け加えていたり。

そんなことはどうでもいい。これ Firefox でしか動かない。IE も Opera も cloneNode したやつを、appendChild するとエラーが出てしまう。同じような処理をしていて、同じドキュメント内のノードをクローンするときは大丈夫なので、別のドキュメントのノードを追加できないのかな……

DOM で操作なんて面倒くさくで死ぬ。XPath, XSLT が標準 Javascript で使えたらいいのに。

Safari でブラクラになるらしいので、KHTML もはじくように。何時かなおす!

!navigator.userAgent.match(/MSIE/) && !navigator.userAgent.match(/Opera/) && !navigator.userAgent.match(/KHTML/)

このスクリプトまじ使えねぇよ(w

cloneNode がダメなんじゃなくて、cloneNode(true) がダメ。自分で再帰的にやれと?

cloneNode は別のドキュメントのやつクローンして突っ込むって用途じゃないらしい。Gecko がバグ?なのかな。importNode 使うようにしたら IE 以外で動くように。

2005年 07月 10日

XML Master ツレ受験オフ

いくつかの感想はおそらく今書くと危険 (謎) なので、簡単なところを書いておけば、受けた人は全員合格していたし、みんなやる気があるのかないのか謎なてけとー状態だった。バナナのおかげよ?

試験問題は同じ日付・会場でも別の問題がでるようだった。出題頻度がかなり高いのは XML Schema。次に XSLTDTD と続く感じ? 終わるまで今何問中何問目をやっているかがどこに表示されているかわからなくてだいぶ時間を気にした……けど普通にやると2回全問やるぐらいの時間がある。

最終的に俺がいいてぇのは試験料がたけぇってことだよ!

XML Master についてもう少し書く。

複数選択可能な問題はチェックボックス、一つ選ぶ問題はラヂオボタンになっているのでぼーっとしてても選択し忘れは少ないと思う。ただ回答の部分が全てクリック対象になっちょる (<label><input type="checkbox" />DTD なんていらない</label> みたいに) のがちょっとやりにくい。「次へ」をクリックしようとして D を選択してしまうとかが怖い。

あと「資料」は常に手前表示にして欲しい……いちいち開くのがだるかった。しかも問題がホイールでスクロールできないし。使いにくい。

XPath の問題で、かなりカスな問題があった。5つの選択肢のうち、問題文の条件にあった3つを選べとかいうのだったけど、その5つのうち2つはそもそも XPath としてパースエラーなため「問題文の条件」の意味がない。ある意味ひっかけ?

眠いナ。そして学内 IRC を諦める。

SoftEther で HTTPS 偽装接続すれば抜けれるぜウヘヘヘ、とか聞いたのでごちゃっていたけど、そもそも学校の PC の管理者権限なんぞもっていないのでクライアントがインスコできないのでした。ノートをもっていくにしても活動する範囲に無線LANのアクセスポイントがない。ついでに無線LANカードもってない。

不自由ないんたーねっと!!

2005年 07月 07日

br br br

いくつかのブログツールや、掲示板がはく br br br が気持ち悪くて仕方ない……本質的に変わらないとはいえ <span class="l" /> とかならいいのになぁ。

いやむしろ、掲示板は、プログラムが投稿者の文章の意図を理解できない以上行を行としてマークアップするしかない (投稿者にマークアップさせるならともかく) から擬似 l 要素とかが限界なんだけど、ブログとか日記は人間がかくわけだしみたいな……

むーうまく言葉にできない。ブログも掲示板も投稿者だろハゲとかそういう話ではなくて……あーうんそうだなぁ、自分のサイト・自分の責任の及ぶ範囲にクソ構造の HTML を公開しておけるってのが好きじゃないのかもしれない。とはいえ全ての人に正しい、できるだけ詳細・正確な構造の HTML を望んでいるわけではなくて (もしそうならば掲示板のクソマークアップも不愉快に感じるはず) ……じゃあダレに望んでいるんだよと。しらねー。

せっかく dl - dt - dd なマークアップができるのに、わざわざ dt にあたる文章の先頭に記号をいれ、それに対応する dd にあたる文章を全角スペースでインデントさせちゃったりするのが好きじゃない。だって CSS の恩恵が受けられないじゃないか……

ついでに若干関係ないことを書くけど、MS Word とかでレポート書くのも気持ち悪い。引用部分が明示できていないような感じがする……

CDATA セクション内に ]]>

Studying XML -- second step -- [ エスケープ ] (via XML の CDATA 中では ]]> のエスケープが必要)で ]]> を書くときは ]]&gt; のようにエスケープすればよいみたいなことが書かれているけど、CDATA セクション内ではそもそも & の扱いもなくなる (CDATA セクション内では ]]> のみがマークアップとして扱われる。Within a CDATA section, only the CDEnd string is recognized as markup) ので意図した挙動 (]]> がアンエスケープ) にならない。

結論をいうと CDATA セクションに ]]> をそのまま含めることは不可能で、どうしても CDATA セクションを書きたいよぅって時は二つにわけないとダメ。すなわち <!CDATA[[]]]]><CDATA[[>]]> とするしかない。

2005年 07月 05日

ruby-xslt undefined reference to

何度やってもできない。わけわかんないです。-lxml2 -lxslt ついてますよ? /lib に libxslt.dll.a libxml2.dll.a とかありますよ?

つまり今うちの環境で動く XSLT on Ruby はないわけですか。Ruby で XML しちゃダメですか……

にぎやかな孤独。

ちなみに、こういうケースでは-lで指定せずに直接*.aファイルを一緒に指定するとうまくいくことがあります。裏技ですが。 とかいうのを見つけたのでやってみたら成功?した。

Makefile の OBJS の最後に /lib/libxml2.dll.a /lib/libxslt.dll.a を追記。

でもこれ tests/ 以下のやつ実行するとエラーでまくるんだけど……

-\ruby-xslt\tests>ruby test_parameters.rb
XPath error : Invalid expression
the first parameter ...
^
runtime error
Evaluating user parameter p1 failed
nil
test_parameters.rb:13:in `serve': cannot convert nil into String (TypeError)
from test_parameters.rb:13
-\ruby-xslt\tests>ruby test_functions.rb
Entity: line 1: parser error : Start tag expected, '<' not found
Float
^
Entity: line 1: parser error : Start tag expected, '<' not found
String
^
Entity: line 1: parser error : Start tag expected, '<' not found
string
^
Entity: line 1: parser error : Start tag expected, '<' not found
TrueClass
^
Entity: line 1: parser error : Start tag expected, '<' not found
Array
^
1 is a Float and becomes 1
'string' is a String and becomes string
true() is a TrueClass and becomes true
nodes are type Array and are passed through:
Hello, (1)
World!(2)
'

なんか parameters に渡すやつが XPath 式として評価されているようだからクオートしてみたらとりあえず動くけど、一度 xslt.serve したあと、parameters に新しく値をセットして xslt.serve しても xsl:param は更新されてない。正しい挙動? 違う気がするけど、いちいち xslt インスタンス作り直せってことなんだろうか?

function のほうはよくわからない。function からの返り値を XML として評価しているように見える。そのようだ。"<dummy>" +arg.class.to_s + "</dummy>" とかいう文字列を返してやると string( returned value ) みたい (これは xsl:value-of の効果=xsl:value-of は最終結果を string 関数に渡す) になる。おそらく node-set っぽいのを返したりできるようになってる?