NULL::something

Login via flickr, はてな, TypeKey.

2004-12-01

CSS/Ruby

スキャナ&パーサーだけで力尽きた…… racc css.y

ホントはアクション部分も少し書いたんだけど、どうも上手くいかないので削除って、とりあえず分離させておくことにしてみた。パーサーから構文木作るところって普通はどういう風に実装するだろう。再帰定義の部分で汚くなっちゃうんだよなぁ。スーパー簡単なサンプルが欲しい……

あーあと、Invalid なものが突っ込まれたとき、その部分を無視してパースを続ける、っていうのはどうやって書くんだろう。謎ががががが。

Inserted at 2004-12-01T02:30:15+09:00

パースエラーは error に還元される。だから、右辺の正しい場所に error を置いとけば無視できると。CSS の ruleset を処理中にパースエラーが起きたら ruleset : error とか書いておけばそこを飛ばして次のやつを探す?みたいな? 適当にやってみよう。

Inserted at 2004-12-01T03:19:37+09:00

error トークン書くと on_error 呼ばれないのか。なんかどういう風にエラーを処理するのかわからん。

Inserted at 2004-12-01T17:34:37+09:00

Trackback URI: http://lowreal.net/logs/2004/12/01/1.trackback

Namazu

なんだか今度は Done までいかずに死んだらしくインデックスが壊れた (?) らしい。新しいファイルが追加されてなかった。インデックス削除したらなおった。

正確には追加されてるみたいなんだけど、検索すると別の文書がヒットする。ポインタ (?) がズレてる感じ。二回目だ……

Trackback URI: http://lowreal.net/logs/2004/12/01/2.trackback

2004-12-02

CSS/Ruby

思いつきでごにょったら Ruby のオブジェクトとして再現できた。めでたしめでたし。んでごちゃってみたけど用途すくな。読み込むだけだからなぁ……

Trackback URI: http://lowreal.net/logs/2004/12/02/1.trackback

2004-12-03

REXML の謎。

何だか知らないけど 文字列から Source をそれっぽくやるハック が XREA の鯖上ではできない。uninitialized constant REXML::Parsers::TreeParser というエラーが出てしまう。ローカルだと上手くいくんだけどなぁ……意味わからん。なんでだろう?

ってまさかと思ったら site_ruby に新しい rexml が入ってた。めんどくさ……

Inserted at 2004-12-03T02:06:22+09:00

build メソッドを Ruby デフォルトについてくるほう (の document.rb) に書き換えた。動いてるもより。これで view-image でファイルリストも RDF として渡すように。RDF to XHTML が汚いけど仕方ない。しばらくやりたくない。

Inserted at 2004-12-03T02:38:46+09:00

Trackback URI: http://lowreal.net/logs/2004/12/03/1.trackback

syrup16g DVD?

syrup16g DVD発売 - daimas の日記

チョーキモチイイ?

ライブとか全然いけないから、DVD とか嬉しい。

Trackback URI: http://lowreal.net/logs/2004/12/03/2.trackback

Ruby における elsif

Ruby の elsif が嫌い。elsif 書くなら case & when 使う。なんか elsif ってソースのバランスが変。

if a =~ /foo/
    # do
elsif a =~ /bar/
    # do
elsif a =~ /baz/
    # do
end
case
when a =~ /foo/
    # do
when a =~ /bar/
    # do
when a =~ /baz/
    # do
end

Trackback URI: http://lowreal.net/logs/2004/12/03/3.trackback

夢。6時間と学校

笑っていいとも見てたら寝てて、気付いたら6時。

変な夢を見た。茶色い変態でデブなおっさん。バレーボールが得意で厳つい数学教師。校庭に入る口実を作るためにソフトボールを投げ込む生徒。途中で海を見た気がする。あんまり覚えてない。

Trackback URI: http://lowreal.net/logs/2004/12/03/4.trackback

2004-12-04

DNA checksum

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

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

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

Trackback URI: http://lowreal.net/logs/2004/12/04/1.trackback

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) とこ。かなーりややこしい!

Inserted at 2004-12-19T14:41:00+09:00

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 に置き換える (ようは展開することなんだけど) だけでだいぶイメージしやすいと思う。

Inserted at 2004-12-19T14:41:08+09:00

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

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

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

Inserted at 2004-12-04T13:45:16+09:00

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

Inserted at 2004-12-05T17:40:39+09:00

Comments (2)

哀's image
哀 says:
pertition ではなく partition ですね。inform (知らせる) という動詞を意識していると infomation というありがちな typo を避けられるように、part (部分) という単語を意識しているといいかもしれません。
2004-12-04T11:41:34+09:00
cho45(砂糖)'s image
cho45(砂糖) says:
げー。普通に間違ってる! ..orz
2004-12-04T13:26:50+09:00

Trackback URI: http://lowreal.net/logs/2004/12/04/2.trackback

: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 は何か知らないけど高さが変わって、後続するやつが全部ピコピコするのをなくすため。

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

Trackback URI: http://lowreal.net/logs/2004/12/04/3.trackback

CSSRDF

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

Trackback URI: http://lowreal.net/logs/2004/12/04/4.trackback

2004-12-05

延長コード

先日駅で延長コードだけひっかけられて持っていかれたので、仕方なく新しいのを買おうと思った。近くで売ってそうなところを見てみた。唯一あったとこ (ツタヤ) で 760 円だった。ぼったくりだろコレ。オス・メスプラグがそれぞれ 100円 & コード 1m で 760 円もいくわけない……ついでに今まで使っていたやつは前に買ったヘッドフォン (3k ぐらい) についてきたやつ。コードが 760 円もしたら笑える。

Trackback URI: http://lowreal.net/logs/2004/12/05/1.trackback

xyzzy で前の行のインデントを保持して改行する。

C-RET 前の行でしたあとは、前の行の空白を保持してインデントする。

C-RET (C-j) で前の行のインデントを保持して改行はできるんだけど、タブとスペースが混じっている場合スペースがタブに変わっちゃうのが微妙に困る。 (自分だけで使うなら全く困らないけど、タブ幅が違う環境に持っていくと困る)

; 前の行の空白状態を保持するように。
(defun indent-relative ()
    (interactive "*")
    (delete-horizontal-spaces)
    (insert (save-excursion
                (goto-bol)
                (skip-chars-backward " \t\n")
                (goto-bol)
                (looking-at "^[ \t]*")
                (buffer-substring (match-beginning 0) (match-end 0)))))

cmds.l に定義されている indent-relative() を .xyzzy か siteinit.l で再定義。弊害あるかもしれない。

Trackback URI: http://lowreal.net/logs/2004/12/05/2.trackback

xyzzy ruby-mode

改変版のほうを使っているんだけど、indent-current-buffer とかでインデントしたとき異様に遅い (カーソルが動くのが見える) ……こういうものなのかな。部分的に一括してインデントしたいときは Mark & indent-region してみてる。むー。

てか .lc 消して試してみたら同じ速度だなぁ……バイトコンパイル効いてない?

Inserted at 2004-12-05T22:56:43+09:00

再ダンプしてなかった。 .lc 消したらむしろありえない。

Inserted at 2004-12-05T22:56:49+09:00

Trackback URI: http://lowreal.net/logs/2004/12/05/3.trackback

2004-12-06

期末テスト

実は既に今年度の授業が全て終了 (3学期は授業がない) して、期末テスト2日分が終わっていたりするわけだけど、期末テストの期間に入ると、既に休みに入った気分になって微妙に困る。あーむしろ英語ライティングで脅されてる (謎) のに何もやらずに試験に臨むとかアホすぎる。そういえば中間でうけそびれたやつって期末でとらないとヤバイんジャマイカ……

いろいろなことがぼーっとしてるせいで遅れてる。遅れてる。願書請求とかやってなかったとか。あぶねー。12月なのに過去もやってねー。

あー XML 名前空間とか試験にでませんか。でも XML 全般が出るなら XML Schema とか、既に古いけど健在な DTD ももっとちゃんとやっとくべきじゃないか。いや待てよ、XSLT もまだしらない要素とか、知っていても使ったことがない要素があるな。そういえば RDF のクラスのヒエラルキーとか理解できてないな。あーこれ冬休み中にやっとく鹿。って、いやだから受験科目じゃありませんから! 残念。

Trackback URI: http://lowreal.net/logs/2004/12/06/1.trackback

Programming Language Io

ちょっと触った感じではいい感じ。ソースがそこそこ綺麗に書ける。大規模になったときはわからないけども。全部オブジェクト、と考えていいのかな。以下 Io (プロトタイプベース) と Ruby (クラスベース) と ECMAScript (プロトタイプベース) のコード片を比べてみる。

foo := Object clone
foo test := method(x,
    x
)

write(foo test("test"))
foo = Object.clone

def foo.test(x)
    x
end

print(foo.test("test"))
foo = new Object;
foo.test = function (x) {
    return x;
};

WScript.Echo(foo.test("test"));

ECMAScript は標準出力の方法を定めていないので、ここでは WSH の cscript から実行していることにしてみる。

パッと見た感じ殆ど同じ。Io の場合、スロットに新しく代入するときは := (=setSlot) で = (=updateSlot) は既に存在するスロットを更新する。updateSlot はチェインを辿って見つけたスロットに代入し、該当するスロットがなければ例外になる。と思う。setSlot はレシーバに新しいスロットを作る。ついでに、Io のトップレベルで使われる関数のように見えるものもメソッドで、このメソッドのレシーバは見えない Lobby というもの。全てメッセージ。素敵だ。Ruby も関数のように見えるものは self を省略しただけ。ただ、Io の場合は他の言語では制御構造に見えるものもメッセージ。if とか for とか while も Lobby のメソッド。素敵すぎ!

上のやつは違うみたいだ。Lobby の proto には Object が入ってるから実際には Object に定義されてるメソッドみたい。リファレンスにも getSlot とかは Object に書いてある。

Inserted at 2004-12-07T14:58:32+09:00

Ruby はクラスベースだからホントは比べにくいと思うけど、とりあえず特異メソッド定義としてみる。特異メソッドは属するところがそのオブジェクト自身になる (普通のメソッドはそのオブジェクトのクラスに属してる) からちょっとプロトタイプっぽい。foo.clone で特異メソッドも引き継げるしね。

ECMAScipt はソレっぽい。ECMAScript の = は常にレシーバにスロットを作るっぽい。自動的にチェインを辿って該当するスロットに代入する方法はないぽい?

関係ないけど、Io のインタプリタを ck から実行すると、実行が終わったあとに全ての出力がクリアされちゃう。ついでに起動するときになんか表示してる半透明ウィンドウが全部フラッシュする。

放り込んだらそのまま動くとか書いてあったので、Linux Binaries をダウンロードして XREA にうぷろーど&実行権限付与。んで適当に foo.io とか作って実行権限とかやってみたけど必要なライブラリが足りないといわれて動かなかった。無念。

ムカツクから鯖上で build できんのかとやってみたけどリソース制限にひっかかって無理だった。もうめんどい。適当にローカルで弄ってよう。

Inserted at 2004-12-06T14:01:47+09:00

って。ああああああ。新しい鯖だと動く。 s101 で ioServer を動かしてみたらできた。何も苦労せずにできた。泣けるよ。ひどく泣けるよ。

Inserted at 2004-12-06T14:11:32+09:00

正規表現が標準で使えないのは痛すぎる。やばすぎる。

Inserted at 2004-12-06T17:02:41+09:00

Trackback URI: http://lowreal.net/logs/2004/12/06/2.trackback

2004-12-07

xyzzy io-mode

io-mode.zip, io-mode.l

簡単そうなので作ってみる。殆ど c-mode のパクりなわけだけど……結局インデントレベル計算するところしか作ってないわけで、そしてそれも括弧しか使わない Io では数えるだけなわけで的な。とはいえアフォだからかなり詰ったんですけども orz

ioServer の Regex て何か変じゃありませんか。nextMatch と firstMatch が全く同じ挙動名気がする。つーかマニュアル書くなら効果的なサンプルと一緒に書いて欲しいなって思う。戻り値も書いてないこと多すぎ。むしろ最初から String replace に正規表現とれるようにしれと。正規表現がデフォで使えないとかキツすぎて死にます。

io-mode readme, iolanguage

Inserted at 2004-12-10T05:22:25+09:00

Trackback URI: http://lowreal.net/logs/2004/12/07/1.trackback

iolanguage 引数のデフォルト値

リファレンスを見た限りではメソッドの引数を省略したときの値を指定できないっぽい。ようは可変長変数を使うんだと思うんだけど、これまた長い。んなわけで適当にマクロ化するメソッドを定義しとく。もしかしたらこんなことやらないでももっといい方法があるかもしれない。

/*
    pos     : 引数の位置
    name    : 代入されるスロットのキー (勝手に初期化)
    default : デフォルトの値
 */
Object opt := method(pos, name, default,
    if (sender doString("thisMessage argAt(" .. pos .. ")")) then (
        sender doString(name .. " := sender doMessage(thisMessage argAt(" .. pos .. "))")
    ) else (
        sender setSlot(name, default)
    )
)

んで以下のように使う。

List join := method(
    opt(0, "sep", "")
    ret := ""
    self foreach(index, value,
        ret = ret .. value
        if (index < self count - 1) then (
            ret = ret .. sep
        )
    )
    ret
)
l := List clone push("aaa") push("bbb") push("ccc")
l join(", ") print //=> "aaa, bbb, ccc"
l join print //=> "aaabbbccc"

Ruby の Array#join っぽいことをしてみる。 String join というメソッドがあるけど何かこのメソッドは位置がおかしいし、セパレータを引数にとれない。っぽい というのはデフォルト引数が "" きめうちだから。Io に $, がないから (なくていい) ってことです。あーあと再帰的に join してないや。to_s メソッドとかないからその辺もやってないし。ようは List の中身が String 以外だと例外はきますよと。

Inserted at 2004-12-07T16:49:14+09:00

どうでもいいけど if を書くときに thenelse を使うのは構造的違和感がある。でも可読性はこっちのほうがいいし、case がないうえに if の引数として書く場合 elseif が書けないからどっちにしろ書くことにはなるんだけど。if の引数に全部書くほうはワンライナー向けかしら。

Trackback URI: http://lowreal.net/logs/2004/12/07/2.trackback

iolanguage Directory items

何で Directory が ioServer なのかはとりあえず置いておいて、Directory items が File しか返さない。Returns a list object containing File and Directory objects ですよ。*1 いや英文解釈が間違っているのかもしれないとか思いつつしかし常識的に考えて (まぁたしかに Directory も File ではあるけど) Directory を File として返さないだろうとか、むしろ File としてしか返さなくて File にタイプを識別するメソッドがなかったら使えないよねって思ったから File にそんなメソッドあるのかなって思ったらなかった。そういや File Primitive にはファイルの更新時間を取得するメソッドもない気が。つまるところ今のデフォルトの Io では blosxom クローンは作れないっぽい。

てか Regexp, Directory を IoVM の Primitive に……

参照リソース

  1. Directory

Trackback URI: http://lowreal.net/logs/2004/12/07/3.trackback

iolanguage メソッドの引数の評価

素朴な疑問にひっかかった。if とか else もメソッドで、引数にメッセージをとるけど、何でこの引数は評価されずに渡されるんだろう。ちょっと解りにくいから実際にコードを書いてみる。

if (Nil) then (
    "not print" print
) else (
    "print" print
)

この場合もちろん not print は出力されないし、それが願う動作。しかしながら "not print" print も引数だから、メソッドに渡される前に評価されて not print と出力されるんじゃないかと悩んだ。というか正確に言えば if をユーザから定義するときに評価されてしまってハマった。以下にハマったコードを示す

myif := method(test,
    ifObj := Object clone
    ifObj test := test
    ifObj do (
        mythen := method(msg,
            if (test, sender doMessage(thisMessage argAt(0)))
            self
        )

        myelse := method(msg,
            if (test isNil, sender doMessage(thisMessage argAt(0)))
            self
        )
    )
)

myif (Nil) mythen (
    "nil" print
) myelse (
    "aaa" print
)

これは予想に反して nilnilaaa と出力される。引数が渡される前に評価されしまっているからだ。リファレンス見ててもよくわからないので、適当に書き直していたらできた。書き直した結果を書いてみる。

myif := method(test,
    ifObj := Object clone
    ifObj test := test
    ifObj do (
        mythen := method(
            if (test, sender doMessage(thisMessage argAt(0)))
            self
        )

        myelse := method(
            if (test isNil, sender doMessage(thisMessage argAt(0)))
            self
        )
    )
)

何が変わったかっていうと method の仮引数を書かないようにしただけ。仮引数を書くと評価されてしまうらしい。微妙な罠。プログラミングガイドに明記してもいいじゃん! とはいえこれを踏まえてから読み直すと The thisMessage slot that is preset (see next section) in locals can be used to access the unevaluated argument messages. と書かれていて*2 (強調はされていない) 頭がよければ thisMessage スロットには未評価なメッセージが入っていて、仮引数を書かなくても呼び出せる。もしかして仮引数を書かなければメッセージは評価されないんじゃないか、なんて推論できる (苦しい) かもしれないけど、俺には無理!

参照リソース

  1. Io Programming Guide

Trackback URI: http://lowreal.net/logs/2004/12/07/4.trackback

2004-12-08

iolanguage case-when

飽きるまで Io。

case がないので作ってみる。

簡単なとこばっかやりすぎな気が。super とかの使いどころがわからない。正規表現が微妙な時点で実用性がうっすいんですけど……組み込んで初めて力発揮しそうな。すくなくとも CGI 作るのにはアドオンが弱すぎ。

メッセージ書かない (何もしないと意図する) とエラーになって使えないのでコメンツアウト。邪魔なだけ。

Inserted at 2004-12-08T19:32:56+09:00

Trackback URI: http://lowreal.net/logs/2004/12/08/1.trackback

iolanguage

むー。長く書けば書くほど何やってるか分からなくなるなぁ。Lisp に似てる。なんていうか、コメントが必要な言語だ……

Trackback URI: http://lowreal.net/logs/2004/12/08/2.trackback

2004-12-09

似たようなのは似たように

似たようなバイト配列が同じぐらいの数値になるハッシュ関数がなんとなく欲しいけどどうやればいいかサッパリわからねー。最終的にやりたいことはある文字列から自動的にカラーコードを生成されることなんだけど、まぁそれ自体が目的で何かに使うってわけじゃないわけですけれど……

似たような、っていう条件をとれば 既存の MD5 とかのハッシュ関数使えば超簡単に実装できる。むしろ実装っていうほどのものじゃなくなる。一行で終る。"#%06x" % (Digest::MD5.hexdigest(str).to_i(16) >> 104)

似ている っつうのが抽象的っつうかなんつーか……面倒だからいいか。

Inserted at 2004-12-09T01:34:42+09:00

Trackback URI: http://lowreal.net/logs/2004/12/09/1.trackback

CSS3 日本語訳

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

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

Trackback URI: http://lowreal.net/logs/2004/12/09/2.trackback

2004-12-10

MUST

やらなければならないことが多すぎだけれど、やらなければいけないことは何時もやりたくないことだ。つまり、さっきまでやりたかったこともやらなければならないことになったらやる気がなくなる。そしてぎりぎりでやる。卒業文集とか完全に忘れてた。卒業できるかわからない (わらい?) のに書いておくとは不思議。

ヒーローが現れるべき状況だけれど実際現れない。脇役さえまだ出てきていない。エキストラが見え隠れするぐらい。

  • ヒーロー
  • 想像力
  • あこがれ

Trackback URI: http://lowreal.net/logs/2004/12/10/1.trackback

cron & Namazu

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

Trackback URI: http://lowreal.net/logs/2004/12/10/2.trackback

Ruby の式展開が好き

"foo#{bar}baz"'foo'+bar+'baz' も同じで、 '+..+'#{..} になっただけなのに何か凄く便利。書きやすいのもあるし、文字列の纏まりがちゃんと引用符で纏まってるのがカッコイイ。

Trackback URI: http://lowreal.net/logs/2004/12/10/3.trackback

2004-12-11

Album 画像のポップアップ

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

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

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

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

リサイズイン (っていうの?)

Inserted at 2004-12-12T00:33:26+09:00

ズームイン

Inserted at 2004-12-12T00:33:36+09:00

するようにしてみた。リサイズアウト (ってい(ry)

Inserted at 2004-12-12T00:34:11+09:00

ズームアウト

Inserted at 2004-12-12T00:34:23+09:00

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

Inserted at 2004-12-12T00:25:36+09:00

Trackback URI: http://lowreal.net/logs/2004/12/11/1.trackback

新宿

赤本とスピーカー買いに新宿へ。赤本の値段を 1200 円だと思っていたので困った。

それはいいとして、新宿みたいな人が無駄に多いところは歩くだけでめちゃくちゃ疲れる。歩くのが遅いくせに道をふさいで歩いてるとかはしょっちゅうなわけだけど、まぁとにかくドコにいてもタバコかしょんべんの臭いしかしないというナニ。歩きタバコでもしてるのかと思って回りを見回してもパッっと見吸ってる人がいない。町に染み付いたにおいなのかなんなのか。

Trackback URI: http://lowreal.net/logs/2004/12/11/2.trackback

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

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

Trackback URI: http://lowreal.net/logs/2004/12/12/1.trackback

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

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

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

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

Inserted at 2004-12-12T03:05:35+09:00

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

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

Inserted at 2004-12-12T03:42:25+09:00

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

Inserted at 2004-12-12T05:33:42+09:00

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

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

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

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

Inserted at 2004-12-14T13:54:12+09:00

Trackback URI: http://lowreal.net/logs/2004/12/12/2.trackback

Audioscrobbler で他人のやつ混ざる

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

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

Trackback URI: http://lowreal.net/logs/2004/12/12/3.trackback

2004-12-13

リファラスパム

リファラスパム多すぎ。

それとカオナシの声が頭から離れないのを誰か助けてください。

Trackback URI: http://lowreal.net/logs/2004/12/13/1.trackback

2004-12-14

コードに色をつける bookmarkletcode coloring bookmarklet

コードに色づけ 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 対策 (コピペなので) を削除。

Inserted at 2004-12-14T03:39:24+09:00

Coloring Only tested on Firefox1.0 and Opera 7

  1. Launch bookmarklet
  2. Click text node you want coloring
  3. Input syntax using for coloring

Now support ECMAScript, Ruby, Lisp, XML, CSS, PHP, Io and Perl syntaxes. But I don't know Perl syntax (esp. symbolic reference etc...) well.

Clicked node must not includes child elements. (In this case, prompt won't be shown.)

Trackback URI: http://lowreal.net/logs/2004/12/14/1.trackback

寝すぎでも寝よう

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

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

Trackback URI: http://lowreal.net/logs/2004/12/14/2.trackback

Trackback URIUI

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

Trackback URI: http://lowreal.net/logs/2004/12/14/3.trackback

デジャヴ

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

Trackback URI: http://lowreal.net/logs/2004/12/14/4.trackback

www.pillows.gr.jp

なんか CSS 使ってます!みたいなデザインになった。でもなんかちょっと……

Trackback URI: http://lowreal.net/logs/2004/12/14/5.trackback

2004-12-15

夢・温泉めぐり

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

Trackback URI: http://lowreal.net/logs/2004/12/15/1.trackback

Album 画像のポプアプの続き

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

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

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

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

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

Trackback URI: http://lowreal.net/logs/2004/12/15/2.trackback

2004-12-16

夢。葬儀屋

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

Trackback URI: http://lowreal.net/logs/2004/12/16/1.trackback

クリスマス風に

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

Comments (2)

イソムラ's image
イソムラ says:
今年のクリスマスは青が流行ってるらしいですよ。緑立場なし。
2004-12-16T16:04:33+09:00
cho45(砂糖)'s image
cho45(砂糖) says:
うは。てか作ってみて PC 離れて、もっかい見たときなんか後悔しましたけどね。とりあえず作ったからには 25 まではこれで行きますけど!
2004-12-16T18:11:54+09:00

Trackback URI: http://lowreal.net/logs/2004/12/16/2.trackback

2004-12-17

Namazu Cron

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

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

わかんねーw

Trackback URI: http://lowreal.net/logs/2004/12/17/1.trackback

Album 画像のぽぷあぷの続き IE

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

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

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

Trackback URI: http://lowreal.net/logs/2004/12/17/2.trackback

2004-12-18

ジャケ買い?。

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

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

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

Comments (2)

イソムラ's image
イソムラ says:
Recover イイですねぇ。Evanescence とか半ジャケ買いしてました。Garbage とか PJ Harvey とか微妙に趣味が被ったり被らなかったり(Alanis Morissette は左下の赤いのが横顔だと気付くまでは好きだったなぁ)(炎か何かだと思ってました)。"Lost in Translation" はいつも雑貨屋で見かけて気になるものの手には取らず、とかの状態です。 こういうのって意外に需要あるんですかね。たまに(よく?)ウェブログのサイドバー的位置にお勧めの CD とか掲載してるところ見かけますし。ただ単にアマゾンアソシエイト目的でないことを祈るばかりですが。
2004-12-18T02:36:19+09:00
cho45(砂糖)'s image
cho45(砂糖) says:
アマゾンアサマシエイトやりてーw ってか blog サイトのお勧めの欄って全く目に入らないのは脳内補完か何かですか。 今あるのは殆ど kyo さんのヤツ (何) からウホって感じのを突っ込んだりしました。みんなカッコよすぎ。Jimmy Eat World がうんちゃらで今めっちゃ欲しいです。 ジャケット一覧化してあるページがいっぱい欲しい。
2004-12-18T02:54:33+09:00

Trackback URI: http://lowreal.net/logs/2004/12/18/1.trackback

ART-SCHOOL スカーレット

これって結構スルメだなぁ。なんか最近になってやっとうおみたいなとこを感じるようになった。

Trackback URI: http://lowreal.net/logs/2004/12/18/2.trackback

コメントの XML

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

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

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

Trackback URI: http://lowreal.net/logs/2004/12/18/3.trackback

2004-12-19

Amazon

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

Trackback URI: http://lowreal.net/logs/2004/12/19/1.trackback

生活 of winter vacation

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

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

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

Trackback URI: http://lowreal.net/logs/2004/12/19/2.trackback

アート & ASIAN (ry

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

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

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

Trackback URI: http://lowreal.net/logs/2004/12/19/3.trackback

冬における夏

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

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

Trackback URI: http://lowreal.net/logs/2004/12/19/4.trackback

2004-12-21

Jackets 15

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

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

Trackback URI: http://lowreal.net/logs/2004/12/21/1.trackback

田臥 || 五十嵐

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

Trackback URI: http://lowreal.net/logs/2004/12/21/2.trackback

2004-12-22

結果ツリーフラグメント

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

変数バインドエレメント (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"/> とかやると文字列に変換されるので同じように見えるだけか。この場合前者の方が変換がなくてほんの少し高速かな。

Inserted at 2004-12-22T12:32:47+09:00

Trackback URI: http://lowreal.net/logs/2004/12/22/1.trackback

XPath の紛らわしさ

XPathXPath という名前だけでも誤解を招く。Path というだけにディレクトリパスとかを連想する。まぁ、ディレクトリパスとは類似点が多い。UNIX ファイルシステムにおけるルートディレクトリ (名前ナシ) と、ルートノード (展開された名前ナシ) とか、それに省略