2004年 12月 03日

REXML の謎。

何だか知らないけど 文字列から Source をそれっぽくやるハック が XREA の鯖上ではできない。uninitialized constant REXML::Parsers::TreeParser というエラーが出てしまう。ローカルだと上手くいくんだけどなぁ……意味わからん。なんでだろう?

ってまさかと思ったら site_ruby に新しい rexml が入ってた。めんどくさ……

build メソッドを Ruby デフォルトについてくるほう (の document.rb) に書き換えた。動いてるもより。これで view-image でファイルリストも RDF として渡すように。RDF to XHTML が汚いけど仕方ない。しばらくやりたくない。

2004年 12月 02日

CSS/Ruby

思いつきでごにょったら Ruby のオブジェクトとして再現できた。めでたしめでたし。んでごちゃってみたけど用途すくな。読み込むだけだからなぁ……

2004年 12月 01日

CSS/Ruby

スキャナ&パーサーだけで力尽きた…… racc css.y

ホントはアクション部分も少し書いたんだけど、どうも上手くいかないので削除って、とりあえず分離させておくことにしてみた。パーサーから構文木作るところって普通はどういう風に実装するだろう。再帰定義の部分で汚くなっちゃうんだよなぁ。スーパー簡単なサンプルが欲しい……

あーあと、Invalid なものが突っ込まれたとき、その部分を無視してパースを続ける、っていうのはどうやって書くんだろう。謎ががががが。

パースエラーは error に還元される。だから、右辺の正しい場所に error を置いとけば無視できると。CSS の ruleset を処理中にパースエラーが起きたら ruleset : error とか書いておけばそこを飛ばして次のやつを探す?みたいな? 適当にやってみよう。

error トークン書くと on_error 呼ばれないのか。なんかどういう風にエラーを処理するのかわからん。

Namazu

なんだか今度は Done までいかずに死んだらしくインデックスが壊れた (?) らしい。新しいファイルが追加されてなかった。インデックス削除したらなおった。

正確には追加されてるみたいなんだけど、検索すると別の文書がヒットする。ポインタ (?) がズレてる感じ。二回目だ……

2004年 11月 30日

CRON で殺される。

何か Killed って言われるので6時から3時にしてみた。Ruby で日記の XML をセクションごとに HTML にわけるところで Killed。mknmz も中途半端に終わったらしく NMZ.lock2 が残ってた。謎。

横スクロール

img 要素がはみ出したり、Gecko では URI が折り返されなかったりで横スクロールがでるけど確実にうざいので対策。

CSSimg { max-with: 100% }, p, dt, dd, li { overflow: hidden } にしてみた。どんな弊害があるかしら。

と思ったら後者で float したところに流れ込まなくなった。なんでだろう。

float させてる中に画像があると大きさが 0 になっちゃうか。だめだなこりゃ。さくじょー

2004年 11月 29日

XSLT と XPath の理解

とりあえずカレントノードとコンテキストノード。

カレントノード = current() で、コンテキストノード = self::node()。カレントノードは XSLT のもの。XPath には current() という関数はないし、そもそも必要ない。

current() が変わるのは xsl:template 又は xsl:for-each。選択 (select) されたノードが current() になる。

self::node() が変わるのは /, [ ]。(別に変わるとは限らない……)

基準点とノードテストがまだあんまり理解できてない……

画像をてきとーに一覧表示する。

/view-img/2003/ みたいな。

RDF は画像ファイル自身に埋め込んだのを取り出していちいち動的に合成してる。現状では同じディレクトリに samp-meta.rdf があるからそっち直接読んでもいいんだけど……実験ってことで……

合成するとき REXML 使ってるから怪しい XML (名前空間接頭辞が他のファイルと違うとか) があるとたぶんパースエラーになる。稀なケースだし Ruby のライブラリでガッチリキッチリ実装した使いやすいやつを知らないので仕方ない。

ローカル側では RDF を埋め込む (ファイル名に -meta.rdf をつけたやつを突っ込む) ときに画像サイズが一定以上だったらサムネイルを作って、その情報 (foaf:thumbnail) も追加して埋め込む。

サーバー側は同じディレクトリの画像をスキャンして RDF を取り出し、@rdf:about を書き換えて合成。合成したヤツを XSLT エンジンに渡す。あとはまぁ普通に XSLT テンプレの仕事で……

ちなみにファイル名のリストは別に XML 作って渡してる。丁度いい語彙があれば RDFRDF として突っ込んだほうがスマートだけど考えるのが面倒だった。

だいぶソースが汚い。

2004年 11月 28日

Sablotron にノード集合を渡す。

XSLT エンジンにノード集合渡したいことが多々あるけど、params にナマの XML を渡しても当たり前にサニタライズされたただの文字列が渡るだけ。じゃあどうすりゃいいねんと諦めていたわけだけど、FOAF Explorer のソース見ててわかった。arguments のほうに XML とか XSLT とか渡すのと同じように渡せばいいんだ。

Sablotron は arguments を内部的に URI として (スキーム arg:) 扱っているから、そっちに適当に渡してやればやりほうだいらしい。エロイ。

$arguments = array(
'/_xml' => file_get_contents($xml),
'/_xsl' => file_get_contents($xsl),
'/foo' => "<test><f>aa</f><f>bb</f></test>"
);
$result = xslt_process($xh, 'arg:/_xml', "arg:/_xsl", NULL, $arguments);

で、XSLT 側からは document('arg:/foo') でアクセスできる。結局 <xsl:param name="foo" select="document('arg:/foo')"/> とかやっとけば OK。Sablotron イイ

2004年 11月 27日

暇なので最近のめも

メタデータと密着した画像管理システム。例えば複数の画像から一つの画像に合成したら dc:source 使って元の画像の URI を記録しておくとか。ライセンスも画像に一緒に記録しとけば一番いいはず。

更にキーワードとかを書いておけば画像を検索できたりとか。

結局のとこ、Flickr に似たような感じになるわけだけども……