2004年 10月 25日

Audioscrobbler Top Artists

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

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

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

ECMAScript でイテレータ

イテレータってのは 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);
});

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

getElementsByTagName on Gecko

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) 調べればいいらしい……クライアントサイドなんて……

2004年 10月 24日

Pingback 実装

とりあえず実装してみた。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) に時間がかかるように……

2004年 10月 23日

time.rb タイムゾーン

time.rb が xmlschema でパースしたときタイムゾーンを無視しているみたい。いや、無視じゃなくて Ruby オブジェクトにするとき地方時間になってないのか。

Time.now.xmlschema
#=> "2004-10-23T03:27:57+09:00"
Time.xmlschema(Time.now.xmlschema)
#=> Fri Oct 22 18:28:11 UTC 2004
Time.xmlschema(Time.now.xmlschema).xmlschema
#=> "2004-10-22T18:28:25Z"

あらまぁ。

Time がゾーンとマイクロ秒を同時に扱えないのか。何かよくわからない。地方時ってシステムの時計のことなのかな。それ以外の地方はどうやってセットするんだ。てか Time.to_s のフォーマットって読み難い。

TrackBack? Pingback?

Pingback 1.0

何が違うんだろう? XML-RPC かどうかの違い? それだけ?

excerpt がないのと、どんなリソースにでもバックできるってのが Pingback かなぁ。それだけかね。

でも TrackBack よりは送信先の URI が一定で、パラメータ取得するのが容易な Pingback のほうが好きだな。

不正な ping 調べるのが結構面倒だ…… sourceURI に自分のホストを含まず targetURI に自分のホストを含むときに受付ですかね。

Negotiated Script

ネゴシエーションで CGI ファイルが選択されたとき、拡張子無しのファイル名がインタプリタに渡されて Script File Not Found! になるっぽい。どうしたらいいかな。いや原因は違うのかもしれない。

XREA SUPPORT BOARD で発見 MultiViews設定時のCGIWrap Error

2004年 10月 22日

REXML, SourceFactory, Element

これ全く使えないんですけれど、何か他にモジュールとか、もしくはバージョン制限とかあるんですかね。

p REXML::Version
#=> "3.1.2" or "2.7.3"
src = REXML::SourceFactory.create_from("<a attr='val'>text<b/></a>")
puts (e = REXML::Element.new(src))
#=> </>
puts REXML::Element.new("child", e)
#=> <child/>
puts e
#=> <><child/></>
puts REXML::Element.new(e)
#=> </>

これは 私家版REXML APIリファレンス のやつをそのままコピって実行してみた結果。

自力でエレメンツちまちま追加してくとか DOM 並に面倒臭いのですが!

rexml/element.rb の initialize に Source クラスのインスタンス渡したときの処理が 3.1.2 でも 2.7.3 でも見当たらない。コメントにはちゃんと書いてあるんだけど、未実装なのかな。

それと REXML::Element.new("<ele>") の結果が <<ele>/> なのはどうなのよ。使用できない文字渡されたら例外のほうがいいと思うんだけど。

Document と同じ build メソッドを作ってやればいいのかな。あとで試そう。

module REXML
class Element
def initialize( arg = UNDEFINED, parent=nil, context=nil )
super(parent)
@elements = Elements.new(self)
@attributes = Attributes.new(self)
@context = context
if arg.kind_of? String
self.name = arg
elsif arg.kind_of? Element
self.name = arg.expanded_name
arg.attributes.each_attribute{ |attribute|
@attributes << Attribute.new( attribute )
}
@context = arg.context
elsif arg.kind_of? Source
build arg
self.name = @elements[1].expanded_name
@attributes = @elements[1].attributes
@elements = @elements[1].elements
@children = @children[0].instance_eval("@children")
end
end
private
def build(source)
Parsers::TreeParser.new(source, self).parse
end
end
end

無理やりなんだけどこれでいいのかなぁ。表示的には思い通りだけど何か穴がありそうだ……

2004年 10月 21日

Ruby, 羊, くらげRuby, Sheep, Jellyfish

Ruby といえば赤色の宝石で羊。赤色で羊といえば Syrup16gHELL-SEE のジャケット。Syrup16g のジャケットといえばクラゲ。クラゲは下等生物じゃない。

2004年 10月 20日

日記簡易表記

さて、また哀さんのとこをパクって簡易表記を導入してみた。<a>Syrup16g</a> と書くと lexicon.xml の Term = 'Syrup16g', SeeAlso @href にリンク。それがなかった people.rdf で foaf:nick を検索して foaf:weblog @resource にリンク。拡張しやすいのが XML のいいとこだ。むしろ読んだまんまだけど。まぁでも導入するときは慎重にやらないとなぁ……一回書いたら消せない(と考える)し。

はてなのキーワードリンクにちょっとだけ似てる。

foaf:nick はちょっと違うかもしれないとか思いつつ。called とかがあればいいのに。