Bookmarks Synchronizer で Links ページを半自動的に作ってみるテスツ。ただファイルサイズがでかすぎ (現時点で元の XML ファイルが 115kb) でそれを PHP で動的に変換してるからさぁ大変。
負荷ポインツが増えないことを祈りつつ……それとクライアントサイドスクリプト使っているから(昨日のやつはこれだ!)なんか大変だったら教えてください。
サイズでかくなりすぎたら favicon を同期とるのやめよう。埋め込み……
Bookmarks Synchronizer で Links ページを半自動的に作ってみるテスツ。ただファイルサイズがでかすぎ (現時点で元の XML ファイルが 115kb) でそれを PHP で動的に変換してるからさぁ大変。
負荷ポインツが増えないことを祈りつつ……それとクライアントサイドスクリプト使っているから(昨日のやつはこれだ!)なんか大変だったら教えてください。
サイズでかくなりすぎたら favicon を同期とるのやめよう。埋め込み……
ins, del, blockquote の属性の表示を DOM で行うようにしてみた。でもインライン ins, del には対応してなかったりする……CSS とどっちがいいだろう。スクリプトきっていたら表示されないし、ins や del は CSS でやっても IE 以外は困らないと思うけど、blockquote の cite はいちいちソース開いたりプロパティ開いたりするのが面倒だから DOM で生成したほうが有用に働くんじゃないかなぁと。
ins, del はやっぱ 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 - ) が使えると……
now playing に Top Artists 表示してみる。データは Audioscrobbler からひっぱってくる。データの更新は今のところ手動。そんなに更新されないし。一日に一回 cron で動かしてもいいかもしれない。
Top Tracks も表示してみる。ごちゃごちゃしてきた。いらんかもしれない。
ちなみに何故か統計情報を XML やらテキストデータやらで取得できないので普通に正規表現で抜いてくることにしてみた。
イテレータってのは 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);
}); はいはい。誰でもわかりますね。「なんだデキンジャン!」とか喜んだ俺はバカですね。くそ。まぁ美しくはないですけども……
IE で script 要素を書くと全くレンダリングされないのだけれど、どうしてだろう? もちろん Gecko と Opera なら大丈夫だし、script 要素を消せば表示される。ためしに XML 宣言, html, head, script, body, h1 要素だけで試したけど表示されなかった。謎すぎ……
ってあー。書く前に散々悩んだのに書いてから気付いた。script 要素の閉じタグがないとだめなんだ……あぁもう
また前触れなく完全にハングした。今回は画面の切り替えとかじゃなかった気がする。ただたんに画面の切り替えのときに起こりやすいだけかもしれない。スキャンディスクしてみた(させられた)けどエラーなし。誰かたすけt
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) 調べればいいらしい……クライアントサイドなんて……
とりあえず実装してみた。http://lowreal.net/rpc/xmlrpc に ping 送ると表示されるように。実装は Ruby。logs の各日付への ping しか受け付けてない。そのうちそれ以外のリソースにも対応させてみたい。ようは受信したら trackback と同じように書き込めばいいだけだし、この日記のデータは XML だから扱う言語が Ruby だろうが PHP だろうが関係なくてよろしい。XML 操作するのは割と面倒臭いんだけど。
作ってて何となく感じたのは、ちゃんとツールが実装すれば tDiary のリファラのように働くなぁと。トラックバックは明示的にで、ピングバックはそうじゃない感じ。Auto Discovery だったらどっちも大差ないか。
Ruby で作られた blog から Pingback を送るためのモジュールがっ。
しかしデータ直書きの場合はいかにして自動で送ればいいだろう。a 要素抽出してキャッシュ。前回のキャッシュと比較して追加されていたら pingback ってあたりかなぁ……
あぁ……Faults Code って XMLRPC::FaultException.new で作るのか……
自動で Pingback するようにしてみた。'http://' で始まる attribute::href を探して撃つ。撃ったらキャッシュに突っ込む。次から追加されたのだけ撃つ。いちいち全部のファイルをスキャンするのはアレだけど仕方ない。少しずつ更新するの (C-c C-c) に時間がかかるように……