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

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

  1. トップ
  2. web
  3. Pingback 実装
  1. トップ
  2. prog
  3. Pingback 実装

writeback ファイルが巻き戻ってる……おかしいな。消えるかさっきバックアップとったぶんに戻るならまだしも微妙な時間に巻き戻ってる。なぞすぎる。

  1. トップ
  2. web
  3. 巻き戻り?

SP2 入れてからまたウィンドウ最小化したときとかに完全に Windows が応答しなくなるようになった。マウスもキーボードも一切聞かなくなる。本体からピと音が鳴る。あとはもうリセットボタン押すのみ。

前回のときはサムライ消したら直ったから、原因は違うかもしれない。でも症状は全く同じ。っつうか一日に二度も三度も完全にハングされたらやってらんねー。

  1. トップ
  2. soft
  3. 再描画。完全フリーズについて

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 のフォーマットって読み難い。

  1. トップ
  2. prog
  3. time.rb タイムゾーン

Pingback 1.0

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

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

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

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

  1. トップ
  2. web
  3. TrackBack? Pingback?
  1. トップ
  2. prog
  3. TrackBack? Pingback?

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

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

  1. トップ
  2. web
  3. Negotiated Script
  1. トップ
  2. prog
  3. Negotiated Script

update.mozilla.org をセーフリストに入れてるのに .xpi をインスコできない。いみふ。当たり前だけど他のサイトからはできる。HTTPS だから?

それと、mozdev.org はサブドメインに拡張のアレふってるからいちいちセーフリスト加えるのがメンドイ。ワイルドカードとかできないのかなぁ。

  1. トップ
  2. soft
  3. Mozilla Update

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

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

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

  1. トップ
  2. prog
  3. REXML, SourceFactory, Element

テスト終わったはずなんだけど終わった感じがしない。始まってもいない。

模試の結果が返ってきた。なんか普通だった。さらにやる気がなくなった。

  1. トップ
  2. life
  3. テストの終り。寝る。

13時に寝て18時に起き、5時に寝て、7時におきる。何かズレているようで、夜中のほうが頭が回るのです。

昨日は黒板に書いてあったこと勘違いして一科目試験を受けていないし、センター方式とかいうから殆ど選択問題だろうと踏んでた公民が普通に書き問題多杉。その他もろもろいろいろあって、ここ数日は全く運がないようなことに気付きました。気付いたからってどうしようもないんですけど。

  1. トップ
  2. life
  3. らいふすたいるおーばー
  1. トップ
  2. self
  3. らいふすたいるおーばー

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

  1. トップ
  2. prog
  3. Ruby, 羊, くらげRuby, Sheep, Jellyfish

via はてなダイアリー - 空の底にあるデイゼア

Good Dog Happy Men のサイトに歌詞だってさ。というかいつの間にか FF でも見れるようになっとる。よかったよかった。つーか聞きたいです。CDがほしいです。ライブむりです。

  1. トップ
  2. music
  3. GDHM の歌詞

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

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

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

  1. トップ
  2. web
  3. 日記簡易表記
  1. トップ
  2. prog
  3. 日記簡易表記

どっつぃさんIE でダウンロードになるぜ的指摘を受けたので思い返してみると application/xhtml+xml を受け入れるようにレジストリ改変してたの思い出してあちゃーみたいな。

それと type-map の書き方をちょっと間違っていたくさい。同じファイルに複数のコンテントタイプ (つまり URI が同じセクションを複数) は無理っぽいのでちゃんと .html も .xhtml を作るようにした。

  • type-map の text/html と application/xhtml+xml の qs の値を同じする。
  • type-map の順序は text/html を先にもってくる。
  • ちゃんとタイプ別にファイルを作る。

Gecko の Accept はデフォルトで application/xhtml+xml が先にくるので qs を同じ値にしても OK. IE は */* になってるので先に text/html をもってきてやる。そんな感じ。

分かりにくいのでサンプル

全部 XML で書いて XSLT にかけるようにするといろいろ便利だ。共通部分を完全に XSLT のテンプレートとして分けられるし。アプリケーションが違っていても XML + XSLT であればシームレス。

  1. トップ
  2. web
  3. 台風・雨・ネゴシエーション

Builder Objects { | one, step, back | } via Devlog(2004-09-14)

面白い。method_missing 使っててすごい簡潔な感じ。テキストそのまま書いていくのとどっちが分かりやすいかつったら微妙だけど面白い。

  1. トップ
  2. prog
  3. Builder Objects, Ruby, XML
  1. トップ
  2. web
  3. Builder Objects, Ruby, XML

本を読んでふと顔を上げると現実味がない感じがする。最近頭の中で言う言葉は「ねむい」と「かえりたい」だけだ。というか実際声に出してるし実際眠いし帰りたいことが多いんだけど。

  1. トップ
  2. life

dc:creatorの「内容モデル」 (via STUDIO DDT ONLINE - Diary archive - 2004 10) で DCプロパティの値が複数あるとき について書いてあった。前ちょっと迷ったやつ。DC の場合はただ単に列挙するほうがいいかもしれない的。

  1. トップ
  2. web
  3. dc: コンテナか列挙か

滅多に全画面なんて使わないけど、全画面表示に点で言えば俺は IE が好きだ。Opera もいいんだけどそもそもレンダリングが好きじゃないし、FF はタブとかが残ってしまうから論外。でも自分はタスクバーが上部なので IE で全画面表示すると飛び出てくるギミックがたまに上手くいかなかったりする。一応考慮されているみたいだけど、どうせなら下側から出てくるようにするか、あるいはタスクバーは出さないようにするようにしてもいいような気がする。

  1. トップ
  2. soft
  3. ブラウザ全画面について

何だか Opera で凄いことになっているらしいことを聞いたのだけど再現しにくい。今のところ分かっているのは見出しリストをクリックしても飛ばないとか、フルスクリーンだと見出しリストにホバーした瞬間ふっとんでどっかいくぐらいだけども……見出しリスト関係なく a 要素にホバーしたらどっかふっとぶ。

あーあと、ホイールがクリックしないと効かないし、 a 要素にホバーしたら又効かなくなる。Opera で overflow: auto による模擬フレームは上手くいかないんだろうか。

Opera7.6p1 のとき .htaccess の DefaultLanguage ja があると Not Acceptable になった。画像がこれになると表示されなくてハマった。のりさんに教えてもらった。むずかしい。

何かもう CSSPHP かなんかで生成してやろうかしら。UA 偽称されたらダメだけど UA 偽称する人はそれなりの覚悟があるに違いない!

とりあえず position: fixed; を使用するようにしてみた。overflow するのは IE のみに。よって Gecko でも完全な表示じゃない。つまり全部のブラウザでそれぞれ妥協してる。

  • IE では左の見出しリストが表示されない。
  • Gecko と Opera では上のナヴィゲーションが固定されない。
  1. トップ
  2. web
  3. Opera?

自分の FOAF の変換したやつを見ていて、ふと Link ToolBar を見てちょっと感動。XHTML 中に埋め込んだ Metadata を読み込んでリストアップしているっぽい。素敵。

class="FOAF.interest" とかが指定してある要素の中の a 要素を抜き出してるのかな。li だけかな。hreflang も読んでる。

  1. トップ
  2. soft
  3. Link Toolbar

よく分からない要因で IE のレイアウトが崩れる(しかも途中からだったりする)事があるけど、ボーダーを設定することである程度回避できるような気がしてきた。border-width を 0 以外にしてその他を適当に設定しておけば大丈夫なときもある。わけわか実装にはわけわか対策。

  1. トップ
  2. web
  3. IE での表示ズレ

サイト構造とか CSS は殆ど終わった。リソースの移動をどうするかとか、そういうのを考えるだけだ……

  1. トップ
  2. web
  3. 心機一転

リソースを移動しましたけど自信ありませんっつうかダメかも。

http://lowreal.net/ と http://lowreal.net/logs/latest は同じです。今までトップページが大して意味なかったのを改善したつもり。

tDiary のログはなくなりました。たぶん最近のアクセスログを見ている限り大丈夫っぽい。

見た目ちょっと込み入ったように見えるけどまぁいいや。っていうか誰かどうにかしてくd

now playing も一旦 XML を生成してから XSLT しとります。前より負荷かかるね!

思うに、自分は環境として Windows IE6, Mozilla Firefox 1.0PR, Opera7 しか見てないからいいけど、他の環境も対処してたら今の数倍時間かかりそうだ。Win IE だけでも数時間かかるし……IEOS のただの付録でおもちゃ。でも他のブラウザを知らなきゃ乗り換えられない。

Opera の全画面モードでなんかコンテンツがふっとぶときがある。

それとフォントサイズが大きいとヤバい。キモすぎ。

  1. トップ
  2. web
  3. 移動

全て XML で書いて変換してやる。日記は今のまま。common.xsl を作り、ヘッダ、ナヴィゲーション、フッタをインクルード。-about.xml というファイルがあったら about.xhtml.ja.u8 とか about.html.ja.u8 を出力する build.rb。こういうファイルを作って適切な .htaccess を置いておけば Apache はちゃんと Content-Type: application/xhtml+xml; charset=utf-8 を送ってくれる。

ブラウザの Accept ヘッダが最初に application/xml と text/xml を持ってきているのは何故? 自分の環境だけかもしれないけど。

type-map を使うのもいいかも。自動的に生成してやればいいだけだし。

URI: about
URI: about.xhtml.ja.u8
Content-type: application/xhtml+xml; qs=0.9
Content-language: ja
URI: about.html.ja.u8
Content-type: text/html; qs=0.7
Content-language: ja
URI: about.xml
Content-type: application/xml; qs=0.5
Content-language: ja

こんなの (about.var) を作ってやる。Accept の q の値とこのファイルの qs の値をそれぞれのメディアタイプで掛け合わせて最大になったメディアタイプが自動的に Apache に選ばれる。MultiViews も併用できるから作れるのだけ作ればいいかも。

Accept ヘッダが text/xml, application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, image/png, */*;q=0.5 のとき上記ファイルの about をリクエストすると application/xhtml+xml=0.81, text/html=0.63, application/xml=0.45 で about.xhtml.ja.u8 が選択される。about.var がない(上の記述がない)場合で Accept の q が同じ場合はたぶん先頭から順に選択されるので application/xml になる about.xml が選択される。

  1. トップ
  2. web
  3. サイト構成