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

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

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

  1. トップ
  2. prog
  3. Javascript.prototype

この日記を namazu 検索できるように試行錯誤。セクションごとに HTML を切り分けるスクリプトを書いて、インデックス作成。

テンプレート書くのが面倒だ。検索ページだけ統一感がないのはどう考えても変だよなぁ……それにたぶん XHTML は使えないだろうし。[Namazu-devel-ja 21] Re: [Namazu-users-ja]検索ページの妥当性について みたいなのをあるけど割と最近なので XREA では使えないっぽいし

mknmz で何時も躓く。てかホントにいつもだ……既存インデックスを全削除して mknmz 実行、続けてもう一度実行すると 存在するインデックスは古い形式です。今は対応していません とでる。

--template-dir= が効いてない。インデックスと同じディレクトリになる。いみふ

あー --template-dir を付けなければ 古い形式 はでない……全然わからない……どういう挙動なんだろう?

  1. トップ
  2. web
  3. Taglibro namazu

フリクリとかアレしてナニしてるんですけど、4話後半の入国管理局の画面に HTML (Invalid かつ TABLE レイアウト) が映し出されてる謎。

正直、今、僕、だいぶ、おかしいです。

  1. トップ
  2. life
  3. だいぶ死んでますけど

DOM からも abbr 要素使えないんだなぁ。abbr 要素自体は列挙されるけど childNodes の中身が常に空だ。abbr.getAttribute("title") は成功するけど中身が取得できないから DOM 的に abbr を acronym に置き換えてみようというのは無理くさい。abbr の扱いは MS がわざとやってるように思えて仕方ない。acronym 流行らそうと思ってやった。IE が市場一番だったら何でも良かった。今もまだ反省していない。

  1. トップ
  2. soft
  3. abbr IE
  1. トップ
  2. web
  3. abbr IE

userContent.css の文字コードは UTF-8 でないといけないらしい。少なくとも Shift_JIS じゃだめ。@charset "Shift_JIS" とかも無駄くさい。フォント指定で悩んだ。

  1. トップ
  2. soft
  3. userContent.css の文字コード

常に綺麗なサイト構造を考えたい。直感的でないナヴィゲーションや構造を省きたい。ユーザビリティ。

  1. トップ
  2. web
  3. サイト構造とか。子供のとき好きだった絵とか

親の話とか聞いているとだいぶ俺のアレと違っていたりするわけで、その中でも一番最初にアレだと思ったのは「迷子になったことがない」話。確かにアナウンスされるような迷子にはなっていないにしても、親の姿を完全に見失って迷子になったと不安になったことはあるわけで、そんなこと全く気付いていなかったりするんだなぁと。迷子になったとき冷や汗書くと同時に服の色思い出して目に集中しろと考えてた。自分が思うかぎり結構迷子(未遂)があった気がする……

  1. トップ
  2. self
  3. 気がつけば ママの姿は消えていた
  1. トップ
  2. life
  3. 気がつけば ママの姿は消えていた

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

  1. トップ
  2. prog
  3. Object.prototype にプロパティを追加する副作用

想像力を失くしてはいけない。想像力を失くしてはいけない。想像力を失くしてはいけない。想像力を失くしてはいけない。

  1. トップ
  2. life
  3. あらゆる
  1. トップ
  2. self
  3. あらゆる

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

  1. トップ
  2. web
  3. スクリプト使ううえで
  1. トップ
  2. prog
  3. スクリプト使ううえで

前回(2004-10-10)の全統記述私大を完全に忘れていて受けてないとかいうアフォなことをやったもんで、明日(全統マーク)も忘れそうな勢いだったのを中和しとかないとなぁと。tu-ka 勉強してない人がうける模試ってどういう意味があるんだろう。別に超受けたくねぇよっていう意味じゃないけど、やるなら平日に……

忘れずに行った! オレえらすぎ! そして出席番号をまた間違えた! 前回は届いたけど今回は校外だから届かないかも! 五水井!

  1. トップ
  2. life
  3. 忘れそう。模試について

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

いらない。

  1. トップ
  2. web
  3. 現実逃避スクリプト
  1. トップ
  2. prog
  3. 現実逃避スクリプト

寝るとき少し浅い眠りに入ってから深くなると思うのだけど、その浅い眠りのときに悪夢をよく見る。悪夢でなくとも布団に強く押し付けられる感覚にはよくなる。よく、というか毎日。一回そうなると「寝る→薄く起きる」を繰り返してなかなか眠れなくなる。回避方法としては直前まで音楽を聴いておくこととかぐらいしかない。スピーカーがデストローイ!なのでヘッドフォン……

  1. トップ
  2. self
  3. 悪夢が続く
  1. トップ
  2. life
  3. 悪夢が続く

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

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 のプロトタイプというのを勘違いしているんだろうか……

  1. トップ
  2. prog
  3. ECMAScript 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] だからたぶんそれであっているはず……

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

  1. トップ
  2. prog
  3. Object.prototype

Bookmarks Synchronizer で Links ページを半自動的に作ってみるテスツ。ただファイルサイズがでかすぎ (現時点で元の XML ファイルが 115kb) でそれを PHP で動的に変換してるからさぁ大変。

負荷ポインツが増えないことを祈りつつ……それとクライアントサイドスクリプト使っているから(昨日のやつはこれだ!)なんか大変だったら教えてください。

サイズでかくなりすぎたら favicon を同期とるのやめよう。埋め込み……

  1. トップ
  2. soft
  3. Links の微自動化
  1. トップ
  2. web
  3. Links の微自動化

ins, del, blockquote の属性の表示を DOM で行うようにしてみた。でもインライン ins, del には対応してなかったりする……CSS とどっちがいいだろう。スクリプトきっていたら表示されないし、ins や del は CSS でやっても IE 以外は困らないと思うけど、blockquote の cite はいちいちソース開いたりプロパティ開いたりするのが面倒だから DOM で生成したほうが有用に働くんじゃないかなぁと。

ins, del はやっぱ CSS にしとこうかな……インラインに対応するのめんどくさ。

  1. トップ
  2. web
  3. Script? CSS?

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 - ) が使えると……

  1. トップ
  2. self
  3. 理解力のなさ。
  1. トップ
  2. prog
  3. 理解力のなさ。

階段・歌・女の子一人と男一人・鼻づまり・点媚薬・食事・アイス

  1. トップ
  2. life

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

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

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

  1. トップ
  2. web
  3. Audioscrobbler Top Artists
  1. トップ
  2. music
  3. Audioscrobbler Top Artists
  1. トップ
  2. prog
  3. Audioscrobbler Top Artists

イテレータってのは Ruby の [1, 2, 3].each {|item| puts item } ですけど、ふと思いついたので ECMAScript (Javascript) でイテレータっぽいもの作ってみる。関数もオブジェクトも同じ(() つければ実行できる)らしいので(prototype 型 OOP とかむしろ OOP とかわかんねぇんですが)関数を引数に渡せばいいわけで(ry

function Array_each(func) {
for (var i = 0, len = this.length; i < len; i++) {
func(this[i]);
}
}
Array.prototype.each = Array_each;
[1, 2, 3, 4].each(function (i) {
alert(i);
});

はいはい。誰でもわかりますね。「なんだデキンジャン!」とか喜んだ俺はバカですね。くそ。まぁ美しくはないですけども……

  1. トップ
  2. prog
  3. ECMAScript でイテレータ

IE で script 要素を書くと全くレンダリングされないのだけれど、どうしてだろう? もちろん Gecko と Opera なら大丈夫だし、script 要素を消せば表示される。ためしに XML 宣言, html, head, script, body, h1 要素だけで試したけど表示されなかった。謎すぎ……

ってあー。書く前に散々悩んだのに書いてから気付いた。script 要素の閉じタグがないとだめなんだ……あぁもう

  1. トップ
  2. web
  3. script on IE
  1. トップ
  2. soft
  3. script on IE

また前触れなく完全にハングした。今回は画面の切り替えとかじゃなかった気がする。ただたんに画面の切り替えのときに起こりやすいだけかもしれない。スキャンディスクしてみた(させられた)けどエラーなし。誰かたすけt

  1. トップ
  2. soft
  3. またハング

Gecko の getElementsByTagName がおかしいなぁ。document.getElementsByTagName("*") の結果が少ない。具体的には body とその中身が入ってない。html, html/head, html/head/* だけ。おかしい。

そもそも document.documentElement.childNodes に body が含まれていない。DOM 上から抹消されとる。

わかった! document.documentElement.childNodes が実行される時点では DOM に body 以下が読み込まれていないんだ。

はぁ…… Opera は Event.srcElement 持ってるくせして中身がないっぽい。よう知らんけど fromElement がメンバにあるか (in) 調べればいいらしい……クライアントサイドなんて……

  1. トップ
  2. prog
  3. getElementsByTagName on Gecko