2004年 11月 07日

ぬねぬねするリスト from 10x10

10x10 の右側のヌネヌネが面白いなぁとか思いつつ、なんでフラッシュなんだこのやろうとかなんとか考えてたので Javascript でヌネヌネの部分だけ再現した。んでそのスクリプト

ホントは 10x10 相当までやろうとしたけどめんどくなりましたとさ。めんどくさくなったってのはなんていうか Gecko でしか見てないっつうことで IE なんかもうめんどいのでいいです。誰か Strict 10x10 作ってくだs

とりあえず addEventListener のクロスブラウザ化したら動いた。

python を読み間違えてた

フィスオンって読んでた……ふぃすおん……ふぃすおん……python がもうちょっと苦手になりました。ふぃすおん って何か響きが好きだったのに。そもそも食わず嫌いなわけですけど。あーほら cygwin のインタプリタが何か変なので……

torrent 系のページ 見ていて スト2に出てくるのはバイソン って書いてあったから、もしかしてパイソンなのか!? 俺は壮大な(大げさ)勘違いをしていたのか!? とか思いつつ IRC で聞いて見たらそうだよって言われました。orz

2004年 11月 06日

Javascript.prototype

結局一番無難と思われる方法を使うことしてみる。

function Foo() {
}
Foo.prototype = new Array();
copy(Foo.prototype, {
unk : function () {}
});

copy() はオブジェクトのプロパティをコピーする関数。何か結局そこらのサンプルと同じなわけで、何を無駄なことをやっていたんだと……

2004年 10月 31日

Object.prototype にプロパティを追加する副作用

できるだけ追加しないほうがいいねっていう話。なぜなら、単純に連想配列としてオブジェクトを作っても prototype に追加したプロパティが列挙されちゃうわけで面倒くさいから。例えば Object.prototype.foo = function () {retrun this}; + var hash = {} のとき for (prop in hash) とかやると foo が出てきたりするわけですよ。うん。やめよう。

2004年 10月 30日

スクリプト使ううえで

まず絶対やらないのは body 以下にスクリプトを直接書くこと。つまり onclick とかの属性は書かない。ヘッダの <script type="text/javascript" src=""></script>を書くだけで完結するコードを書く。メッセージを表示させるための領域が欲しかったりしたら DOM で作る。上手くいかなかったら諦める。

2004年 10月 29日

現実逃避スクリプト

IE と Gecko 系とたぶん document.styleSheets がちゃんと実装されているブラウザで動くスタイルスウィッチャみたいなものを作ってみた。左下に表示させてみるテスツ。

いらない。

2004年 10月 28日

ECMAScript Object.prototype

昨日書いたのは間違いだったっぽい……

function Foo(len) {
this.length = len;
}
Foo.prototype = {
unk : function () {
alert("unk");
}
}
alert(Foo.prototype.constructor); //=> function Object() {}
Object.prototype.bar = function () {alert("bar")}
Array.prototype.baz = function () {alert("baz")}
Foo.prototype.constructor = Array;
alert(Foo.prototype.constructor); //=> function Array() {}
var ifoo = new Foo(3);
ifoo.unk(); //=> unk
ifoo.bar(); //=> bar
ifoo.baz(); //=> ifoo.baz is not a function

prototype のプロトタイプを辿っていくのがプロトタイプチェーンじゃないのか……それとも prorotype のプロトタイプというのを勘違いしているんだろうか……

2004年 10月 27日

Object.prototype

Object.prototype.foo = function () {alert(this);}
document.foo(); //=> [object HTMLDocument]
alert(document.documentElement.childNodes); //=> [object NodeList]
document.documentElement.childNodes.foo(); //=> Error: (snip).childNodes.foo is not a function.

なんでだろう? うーん全部のオブジェクトは Object オブジェクトの仲間(?)なんだよねぇ。 いや、なんで Object.prototype に設定すると他のオブジェクトから呼べるかよくわからないんだけど……プロトタイプ辿ったら Object.prototype にいきつくのかなぁと思いきや document.prototypeundefined だし……

Opera だと [object NodeList] が表示される。Gecko のバグなのかな。

あ、インスタンス化(?)されてるから document.prototype じゃなくて document.constructor.prototype か。それならわかる。いやいやわかんないけど。なんかイメージできない。prototype もオブジェクトであるからコンストラクタがあるはずで、さらには参照している prototype があるかもしれない的? document.constructor.prototype.constructor[object Object] だからたぶんそれであっているはず……

あぁ。インスタンスってのはやっぱクラスベースに使う用語なんだ……インスタンスとか言い出すと全部インスタンスだよなぁ……

2004年 10月 26日

理解力のなさ。

ECMAScript におけるオブジェクトは連想配列 (obj.propertyX == obj["propertyX"]) ってのは分かっていたつもりだったのに Object Initializer Object Initialiser って何だよとか思ってた。よく FF の拡張なんかで見る foobar : function () {} だけど、ちゃんと考えれば連想配列のモンスターバージョンの一部だった……形が変わって完全混乱ですよ。あぁ……

// 普通に見える連想配列
obj = { "key" : "val", "key2" : "val2" };
// 不思議定義に見える連想配列
obj = {
propertyX : "",
foo : function () {
// do foothing
},
bar : function () {
// do barthing
}
};

キーにダブルクオーテーションはあってもなくてもいいらしい。Identifier が指定されたときは StringLiteral に勝手に変換される。そんなわけでオブジェクトのメンバのリストを取得するのと連想配列を順番に取得するのに同じ for ( - in - ) が使えると……

2004年 10月 25日

Audioscrobbler Top Artists

now playing に Top Artists 表示してみる。データは Audioscrobbler からひっぱってくる。データの更新は今のところ手動。そんなに更新されないし。一日に一回 cron で動かしてもいいかもしれない。

Top Tracks も表示してみる。ごちゃごちゃしてきた。いらんかもしれない。

ちなみに何故か統計情報を XML やらテキストデータやらで取得できないので普通に正規表現で抜いてくることにしてみた。