2004年 12月 12日

ua.indexOf("MSIE") != -1 ?

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

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

code をクライアント側で着色

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

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

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

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

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

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

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

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

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

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

Audioscrobbler で他人のやつ混ざる

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

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

2004年 12月 11日

Album 画像のポップアップ

ポップアップしてみた画像

INTO THE WORLD :: ネタメモ とか見て、あーポップアップさせてーとか思って Javascript でポップアップさせてみた。

でかい画像と小さい画像を XHTML でどう関連付けるか考えたりするのが面倒なので全部でかい画像になってます。ブラウザにリサイズをまかせてます。小さい画像が汚いのはそのせいです。

IE だけ CSS の扱いがおかしいのでダメです。でも Opera と IE の区別がわからんので放置です。IE 知りません。

リサイズイン (っていうの?) ズームインするようにしてみた。リサイズアウト (ってい(ry) ズームアウトもやろうとしたけど Interval の競合?か何かでバグるのでやめた。ブラウザ判定を素直に UserAgent でやるようにした。偽装している人は偽装しているリスクみたいなものがわかっている人だからいいかと思った。MSIE が含まれている場合は処理しない。ただし、Opera が含まれている場合は処理をする。Opera が含まれている場合は画面の描画リフレッシュがおかしいので style.overflow をいちいち更新してる。っていう感じ。

2004年 12月 10日

cron & Namazu

昨日の cron メールにまた Killed が含まれて (HTML に変換する Ruby スクリプトで) いて、今日の cron メールが来なかった (この時点で謎すぎ)。さらに NMZ.lock2 が残っていた。NMZ.lock2 を削除して手動で cron tab に設定してあるスクリプトを実行してみると、とりあえず成功。まぁ……と予測しつつ一番新しいセクションのタイトル (must) を検索してみるとそのキーワードを全く含んでいないセクションがヒットする。前に起きた検索結果がズレるようなやつと全く同じ現象……仕方ないのでインデックスファイルを全部削除して mknmz やりなおした。何が原因かが全く解らない。

2004年 12月 09日

CSS3 日本語訳

ウェブスタンダードの研究

一部発見したのでメモっとく。

2004年 12月 04日

DNA checksum

DNA をデジタル化して CD か何かに記録するサービスとかやったら面白そうなのに。どっかの研究所で。

ある意味究極の個人情報だから色々めんどくさそ。

むしろ、何かこう、適当にサンプル与えるとどんどんデジタル化する機械って作れないのかな。

XML の属性の名前空間

ここ最近気になっていたのでちゃんと解消しておこう。基礎が出来てなきゃダメダメ。

まず重要なのは、属性にはデフォルトネームスペースが適用されないのにされると勘違いしていたこと。属性と要素では属する partition が違う。接頭辞がない属性がよくある (たとえば XHTML とか) せいで完全に勘違い。

同じように見える属性でも厳密には違う場合が存在する。見た目的には接頭辞がついている属性と、付いていない属性では差がある。

<f:foo xmlns:f="http://example.com/foo">
<f:far attr="ex"/>
<b:baz xmlns:b="http://example.com/baz">
<b:bar f:attr="ex"/>
</b:baz>
</f:foo>

この例で attr="ex"f:attr="ex" は属している名前空間は同じにも関わらず展開すると異なる。これも partition の違い。

partition には三つあって、一つは全ての要素が属するとこ。あとは属性の属する partition で、一つはグローバルな属性が属する (上の例では f:attr) とこ、もう一つは要素ごとの別々な属性が属する (上の例で attr) とこ。かなーりややこしい!

partition の種類は三つ。一つは要素が属する partition で、これは特に問題にならないでそのまんま。属性は残りの二つのどちらかに属するんだけどこれが面倒くさい。違いは名前空間にグローバルかローカルか。接頭辞をつける属性は名前空間にグローバル。接頭辞をつけない属性は要素名を経由する (ローカル)。たぶんこれは展開された名前とかを見るとわかりやすいと思う。

<f:far attr="ex"/> の attr="ex"
{http://example.com/foo}far@attr
f:far に属している attr という感じ。 far を経由して認識 (っていうのかな) される。
<b:bar f:attr="ex"/> の f:attr="ex"
{http://example.com/foo}@attr
b:bar は関係なく、名前空間 URI がそのまま属性の名前にくっつく

接頭辞をそのまま名前空間の URI に置き換える (ようは展開することなんだけど) だけでだいぶイメージしやすいと思う。

一般的な XML では (XHTML とかじゃなくて) 普通接頭辞をつけることになりそう? この辺わかってない。むしろ要素ごとに別々の意味をもつ要素を定義できるかっつうとできないような。

バカすぎるスペルミスを修正。

気になっていたことを一つ試したのでメモ。<f:foo f:attr="a1" attr="a2"/> としたときエラーになるか、ということと、実際 XPath からはどちらにもアクセスできるのかということ。結果的にはエラーにならないし、XPath からはどちらにもアクセスできる。f:foo/@f:attr = 'a1', f:foo/@attr = 'a2'

XML Schema についてで なぜ属性宣言を避けるべきか ってのがあった。これは XML 名前空間の partition を理解していればひっかかりにくい (ひっかかっても直ぐに気付ける) とこだなぁ。

:first-letter & :hover on Gecko

404 : :first-letter と動的擬似クラス

そんなわけでそういう修正をしてみた。

#content .section h2:first-letter {
color: #09f;
}
#content .section h2 a:hover:after {
content: "";
line-height: 0;
}

空文字でも効果があるみたい。ようは content の指定でスタイルの指定しなおし (?) が働けばいいらしい。

line-height: 0 は何か知らないけど高さが変わって、後続するやつが全部ピコピコするのをなくすため。

関係ないけど擬似ずっと模擬って読んでいた。アフォすぎ!

CSS を RDF で

なんていうか頭が悪いネタですよ。css.rdf, この RDF をそれっぽく XHTML