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

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

フリクリとかアレしてナニしてるんですけど、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

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

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

とりあえずやったけども検索ボックスをつけるのが(というよりその周りのスタイルを考えるのが)面倒くさいとかなんとか。そのうちやろう……

とりあえず俺は namazu 君と相性があまり良くないらしい。

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

10x10 の右側のヌネヌネが面白いなぁとか思いつつ、なんでフラッシュなんだこのやろうとかなんとか考えてたので Javascript でヌネヌネの部分だけ再現した。んでそのスクリプト

ホントは 10x10 相当までやろうとしたけどめんどくなりましたとさ。めんどくさくなったってのはなんていうか Gecko でしか見てないっつうことで IE なんかもうめんどいのでいいです。誰か Strict 10x10 作ってくだs

とりあえず addEventListener のクロスブラウザ化したら動いた。

  1. トップ
  2. web
  3. ぬねぬねするリスト from 10x10
  1. トップ
  2. prog
  3. ぬねぬねするリスト from 10x10

フィスオンって読んでた……ふぃすおん……ふぃすおん……python がもうちょっと苦手になりました。ふぃすおん って何か響きが好きだったのに。そもそも食わず嫌いなわけですけど。あーほら cygwin のインタプリタが何か変なので……

torrent 系のページ 見ていて スト2に出てくるのはバイソン って書いてあったから、もしかしてパイソンなのか!? 俺は壮大な(大げさ)勘違いをしていたのか!? とか思いつつ IRC で聞いて見たらそうだよって言われました。orz

  1. トップ
  2. prog
  3. python を読み間違えてた

cezanne っつうアイコンセット凄すぎ。しばらく放置しといたアレとかソレとか設定しなおした。んで途中で気付いたのだけれど、Firefox に関連付けられているファイルタイプのアイコンが変わらない。

IconHandler の先にある OldIcon\DefaultIcon を変更しないといけないらしい。

  1. トップ
  2. soft
  3. アイコン

昨日も今日も夢を起きる直前まで見ていたけれど忘れてしまった。でもかなり起きたくなくなる夢だった。街とか空とかキラキラ。

  1. トップ
  2. self
  1. トップ
  2. life

SP2 着たので当てなおして WaterColor 当てた。Luna 有効にすると OpenJane の描画が糞重くなるけど今はもう使ってないので無問題。

  1. トップ
  2. soft
  3. uxtheme.dll

ck - wator color skin

右クリックでコマンドプロンプトを多様していたのだけれど、ck という半透明なターミナルエミュレータを見つけたのでいっそのこと右クリックからこれを呼べたらいいなと。

Bash はログインするとホームディレクトリに移ってしまう。検索したら ごく些細な Tips 集 を見つけたので /etc/profile の cd "$HOME" をコメントアウト。あとはレジストリに設定するだけ。

bash.reg
フォルダの右クリックに “Console” を追加する。
.Xdefaults
ck の設定。
ck.png
ck 用 WatorColor スキン

ちなみに マイ ドキュメント のディレクトリは /home/sugar に (cygwin は d: 直下にインスコ) して環境変数 HOME に設定してある。この方が色々いいよね。.xyzzy とかとか。

やっぱ白は眩しいので -fg #CCCCCC 付けて実行してみる。

  1. トップ
  2. soft
  3. 右クリックで Bash

サーチバーが実装されてから検索しにくくなった。Find As You Type も上手く動かないし Ctrl+F しても開かないことがしばしば。日本語入力になっているときも何も表示が出ないから分からない。サーチバー周辺の UI は好きじゃない。てかダメだろコレ。多言語的じゃない感じ。

  1. トップ
  2. soft
  3. レッサーパンダの憂鬱

昼ぐらいまで寝ていると少し問題があるけどかなり幸せな夢を見る。

あー起きたくねーなー。でも起きないと時間もったいないなーというジレンマ

  1. トップ
  2. self
  3. 昼間まで寝るときの夢について
  1. トップ
  2. life
  3. 昼間まで寝るときの夢について

png にテキストデータを埋め込みできるってのはいいんだけど、肝心の埋め込み機能を持っているソフトがあんまりないんじゃないかと……

なんかいいソフトないかなぁ。

  1. トップ
  2. soft
  3. 画像にテキスト

GOOD DREAMS のせいで(というのよりフリクリまた見たせいで)ピロウズのアレとかソレとかがかなり燃焼。ポータブルプレイヤー(256MB)にも the pillows ディレクトリ作って入れまくった。

ところで最近 Blues Drive Monster 聞いているとヤバいですよ。喩えるなら心臓に下から繋がっているパイプを素手で掴んでひっぱってくるような感じ。本当に格好いいなぁ……

たのしいことがしたい。

  1. トップ
  2. music
  3. the pillows
  1. トップ
  2. life
  3. the pillows

何か知らないけどいろんなところで微妙に価値観がずれているらしい。学校では控えめに言っても納得できないことがかなり多い。色々あって黙っているのが一番いいと気付いたわけだけど、完全に諦め切れない部分で困る。ちゃんとマルチスレッドにしないと……別スレッドに納得できないことを移して kill すれば(感情用のプロパティに直接 nil を代入しようとすると TypeError なのだ)消える。素敵だ。問題はどうやって実装するかだけれど。

俺は嫌いなことが多いっぽい。例えば俺の管理下にある部分で全く Strict じゃない部分があるのは嫌いだ。フレームが大嫌いだ。気取ったやつが嫌いだ。まぁを多様するやつが嫌いだ。解ったふりするやつが嫌いだ。勘違いが嫌いだ。C 言語至上主義者が嫌いだ。汚い実装が嫌いだ。あまり使わない漢字を強いポリシーがないのに使っているのが嫌いだ。他人に影響されすぎるやつが嫌いだ。聞いてもいない音楽を批判するのは頭が腐ってるとしか思えない。勉強できるやつが嫌いだ。理解力が低いやつが嫌いだ。満員電車が嫌いだ。遅刻しても各駅に乗る。体育会系が大嫌いだ。体育教師は例外なく嫌いだ。挙動不審なやつが嫌いだ。神話至上主義者が嫌いだ。緊張感が嫌いだ。調べようとしないやつが嫌いだ。神経症だからと言うやつが嫌いだ。テレビのニュースが大嫌いだ。空気読めないやつが嫌いだ。くだらないラブソングが嫌いだ。想像力がないやつが大嫌いだ。こういう中で自分が当てはまっている部分があると本当嫌気がさす。

マンガ読まないのに MANGA SICK。可愛いあの子は夢の中とか、インチキ空間の次元は幾つだろうとか。もやしは日のないところで育つ。なんかそれっぽいこと言っておけばOK。

これからしばらくですますを使うようにしようと思う。なんかアフォっぽくなって素敵そうだから。

  1. トップ
  2. self
  3. ろっく

もっとちゃんと調べてみました。でもあんまり見つからない。(google: png iTXt)

PNGCRUSH
iTXt を埋め込めるらしいですが、コマンドラインで、僕の環境では起動したら CRUSH しました。なるほど。
TweakPNG
チャンクエディタ(&ビューワ) 。でも iTXt は (存在していても問題ないみたいですが) キーワードの表示しかできません。編集・追加もできません。と README に書いてありました。
もじうめ
読むかぎり tEXt を使用しているようです。説明にはちゃんとPNGの仕様上、アルファベットだけにしてください。と書いてあります。
PNG Comment Editor
tEXt に Shift_JIS データをそのまま書き込むようです。説明書に書いてないのでバイナリエディタで開きました。

PNG 仕様書の tEXt チャンクの仕様には

テキストは ISO/IEC 8859-1 (Latin-1) [ISO/IEC-8859-1] 文字集合に従って解釈されます。テキスト文字列はどのような Latin-1 も格納できます。テキスト文字列中の改行は LF 文字(十進 10)ひとつで表現されるべきです。ほかのコントロール文字をテキスト中に使うことは推奨されません。

と書いてあるので、マルチバイトは含めないみたいです。日本語に拘るなよとか言われたらそれまでという感じですけど、XML 格納するなら I18N 必須じゃないかなぁと思います。

てかですますってなんか……

png.rb

スーパー適当実装 iTXt 埋め込み用クラス(でもサイズとかも取得できるよ)。微妙に中途半端だけど力尽きたのでまた今度にします。デバッグ用のコード (p) 満載。

  1. トップ
  2. soft
  3. PNG チャンク編集ツール

拙作編集ツールスクリーンショット

結局自分で作ってみた。exerb で EXE 化しようと思ったら mswin32 版の Ruby では zlib が原因不明の SEGV で落ちるのでどうしたものかと。

Ruby + VisualuRuby で GUI 作った。iTXt 以外は TweakPNG があるので何もしない。UI は見ての通り TweakPNG のパクり。

pngtxt.rb
GUI 部分。VisualuRuby 使ってます。何故かポップアップメニューが右ダブルクリックじゃないと出ない謎。
png.rb
iTXt を編集するのに使える部分だけ実装。ただ UTF-8 への変換はこのクラスはやらない。

使っているライブラリは Uconv と zlib と VisualuRuby かな。VisualuRuby が Win32API 使ってるか。といいますかですね、GUI まですぐ作れる Ruby ってやっぱ偉大なんですよ。

zlib.dll を変えていったら(?)直った。よく分からないけどめでたし。

  1. トップ
  2. soft
  3. PNG チャンク編集ツール 2Edit PNG iTXt chunk

とりあえず iTXt への書き込み/読み込み方法はできたので実際にどうやって埋め込むかを考える。考えるっていっても、メタデータを埋め込んでいる PNG ファイルというと RDF のアイコンが既にあるのでそいつをそのまま真似ればいいかなと。

この埋め込み方法は二つのチャンクを使う。一つはメディアタイプを明確にする Metadata Type チャンク。もう一つは実際にデータを埋め込む Metadata チャンク。RDF アイコンではこれらは tEXt チャンクに入っているけど、日本語を (というか国際化のために) 使うのでどちらも iTXt に入れる。Metadata Type (ASCII しか使われないっぽい) も iTXt にするのは tEXt, zTXt チャンクが iTXt 登場のおかげで既に古くさい感じが漂うから。

ってか実際何を埋め込んで何をしたら面白いかをちゃんと考えてない。まだあくまでこういう方法もできるという保険みたいなもん。何かいいことできないかな。

  1. トップ
  2. web
  3. PNG への RDF メタデータ埋め込み
  1. トップ
  2. sw
  3. PNG への RDF メタデータ埋め込み

pngtxt.zip (458KB) MD5:44fda2b7421e94e6f181ee80a134e814

exerb で固めてみた。たぶん zlib.dll がいる。んでファイルサイズが大きい。

iTXt 以外のチャンクは (tEXt, zTXt チャンクも) 見ることさえできません。tEXt, zTXt チャンクを全部 iTXt に変換する機能とかあるけども、文字コード変換はやらないからあんまり意味ない。ついでに変換するやつに Unicode 文字以外があると微妙に危険。

Compress にチェックを入れても、圧縮しないほうがデータサイズが小さいときは自動的に無圧縮で保存されます。つまり Compress にチェックを入れても必ず圧縮されるわけじゃないです。たぶん多くの場合はこのほうが便利だと思うので……

  1. トップ
  2. soft
  3. PNG iTXt チャンク編集ツール
  1. トップ
  2. web
  3. PNG iTXt チャンク編集ツール

図書室から寝ぼけながら教室の自分の机に戻ると、知っている女の子が二人いる。一言二言話して行ってしまう。机の上に何か色々書いてある紙が置いてある。白黒でペンによって書かれている。右上から左下にかけて斜めに女の子の絵が描いてある。二人のうちの一人が書いたらしい。その周りにはいろいろメッセージがぎっしり書いてある。カバンの中に手帳が入っている。二人のうち一人のらしい。妙に幸せな気分だった。

起きたらなんか妙に切なかった。なんかそれでしばらく混乱しててひとつ授業受けそびれた……別にいいんだけど出席がやばめ。

とにかくごちゃごちゃ書いてある紙の絵が好きだった。

  1. トップ
  2. self
  3. 夢。図書室にて
  1. トップ
  2. life
  3. 夢。図書室にて

zsh にしてみたけど日本語のディレクトリ名が正しく表示されない……あんまり困らないけども。

他人のプロンプトの設定を見ていて時々疑問なのだけど、ホスト名とユーザ名ってなんで左側なんだろう。リモートで操作するとそんな頻繁に変わるもんなのかな。

PROMPT='%(?..exit %?
)
%{^[[33m%}%~%{^[[m%}
%{^[[32m%}%(!.#.$)%{^[[m%}%{^[[m%} '
RPROMPT='%{^[[32m%}[%n@%m]%{^[[m%}'
 ~/data
$                                                             [cho45@C12H22O11]

^[ = C-q ESC

  1. トップ
  2. soft
  3. zsh

いっぱいありすぎてドレがいいのかサッパリ。何にしても機械がないのでインスコできないんだけども……

  1. トップ
  2. soft
  3. Linux ディストロ

なんかこういうのを見つけて仕様 (PDF) を見てみたけど、XML である意味が薄いところが多々あると思う。それと仕様が緩くて仕様の意味が薄かったり、そもそもアプリケーション間のエクスポート・インポートにしか使えない。手で書いたとき creator 属性には何を入れればいいんだろう? 想定外なんだろうけど、メールで XML を送ってインポートさせてあげられれば相手の手間が省けるんじゃないかなぁ。

なんていうか ExtensionItem なんて要素作らずにアプリケーション個別の拡張のためなら独自のネームスペースでやればいいのになぁとか思った。せっかく eXtensible なのに……何か理由があるんだろうか。

  1. トップ
  2. web
  3. ContactXML?
  1. トップ
  2. soft
  3. ContactXML?

画像に埋め込んであるだけだといちいち編集するのが面倒なので、簡単な管理方法を考えた。っていっても firefox.png に対して firefox-meta.rdf というファイルを作っておいてスクリプトで一括合成させるだけのものだけど……

本当は firefox.rdf にしようと思ったけど、そのままアップロードしたとき MultiViews のネゴシエーションで RDF のほうが優先されて困るので -meta というサフィックスをつけた。playing.xml を変換するスタイルシートに playing-style.xsl と同じような雰囲気。

むしろ画像データ (firefox.png) をリクエストしてメタデータ (firefox.rdf) が返ってくるは少し変な気もする。いやでも firefox.png はメタデータを含んでいるし、image/png を受け入れないなら RDF を返してもいいか。実際 W3C もそういう方法 (photoRDF) を考えているみたいだし……

  1. トップ
  2. web
  3. 画像メタデータの管理法
  1. トップ
  2. sw
  3. 画像メタデータの管理法

coLinux をインスコして Debian を弄ってみる。わかんないこと多すぎだけどとりあえず手探りで……とりあえず仮想的にコンピュータがもう一個あるのは遊べるなぁ。最初にやったのはころがってるチュートリアル見ながら SSH の設定と環境構築 (zsh インスコとか)

一通り KDE とかインスコしてみて VNC で遊んだので Apache をインスコ。

何となく WebDAV って楽しそうじゃん?とか思って mod_dav をインスコ。しかしながら XP SP2 の Web フォルダでは HTTPS でないと Basic 認証ができないらしく mod_ssl を入れる。ついでにログイン時のユーザ名がわけわかになって絶対認証に失敗するので Web Client サービスをとめる。

なんかできたっぽいかなと思ったので、この状態でこのウェブサーバに外部から接続するにはどうしたらいいだろうと考えた。普通の HTTP はホストコンピュータ上の Apache からバーチャルホスト設定 (ホストの Apache はそのまま使うため) と内部 Proxy 使っていってらっしゃい。SSL のほうは TCPTunnel 使ってポートフォワーディング。めでたしめでたし。

xyzzy のキーバインドを一部覚えててよかった。

  1. トップ
  2. web
  3. coLinux, WebDAV, SSL
  1. トップ
  2. soft
  3. coLinux, WebDAV, SSL

がやってたから見た。

ところで、いつかに一回書いたんだけれど、よろしい作品を見る (読む) となんともいえない感覚になる。その感覚のことをうまく説明できないわけだけど……虚無っつうか喪失感っつうか、おなかごろごろっつうか……

  1. トップ
  2. life
  3. もののけ姫

namazu 検索エンジン の夢を見た。namazu はある大学の一つの建物で、中がかなり広い。namazu は工事中らしい。中に入るとコンクリート片やらパイプやらが散らばっている。中に入っていくつかの部屋を抜ける間に何人かの学生を見た。何をしていたかは知らない。かなり中のほうの部屋までいった。そこでパイプの残骸を見つめて、そこで目が覚めた。

  1. トップ
  2. self
  3. 夢。廃墟の namazu

もしかしてそろそろ年賀状買ったほうがいい系? ここ数年年賀状をまともに出してない (きたらだす) から年賀状のあれがどういうシステムかを完全に忘却してる……

あーほら、キリのいい年だからこっちから出そうかと思ったけどめんどくなってきt

  1. トップ
  2. life
  3. 年賀状

いくつか目標的な何か

  • パット見のバランス。何か左側に偏っててキモイ
  • 余白のとりかた。余白とかない
  • border を最小限に……つまり余白のとりかた
  • フォントグラフィをちゃんと考える。今めんどくさがりすぎ
  • 配色の再考。各種アクセシビリティツール使ってみるとかしてみる
  • かっこよく……

そんなわけで CSS Vault とかでパクる参考にするサイトを探す。もっと綺麗な方向にしたい……

なんか細々したグラデーションとボーダー (not CSS) が流行ってるみたいだからパクろう。うん。

  1. トップ
  2. web
  3. 次期スタイルに向けて

なんか殆どできちゃったけどまだ適用しない。IE:first-child 非対応の対策のために元のマークアップを少し変えて (新しく class を導入) しまった。

結局配色について殆ど考えなかった。というか画像を今のスタイルから流用しているから、全体的に殆ど今のまま。

アクセシビリティツールもまだ使ってない。白ベースの青と黒だから殆ど問題ないと思うけどやっぱやってみなくちゃなぁ。

  • 画像と重なる部分のナヴィゲーションが読み難い。
  • 検索ページもちゃんとサイト全体と同じ CSS を適用する。
  • 本文のスタイルをもっとちゃんと考える。
  • もっと細かく
  • 骨まで美味しく。

ColorDoctor を使って検証してみたけど、とりあえず大丈夫みたいだ。

それより、この ColorDocter メモリ : 256MB以上 (推奨 : 2GB以上) って書いてあって 2GB 以上は嘘だろう、とか思ってたら本気でメモリ足りなくなった。むしろ最初起動すらしなかった。起動したと思ったら Firefox が落ちた。どこにそんなメモリ使ってんだろ…….Net だからっすか。

  1. トップ
  2. web
  3. 新しいスタイル

テンプレートに XSLT を使う namazu.cgi の代替を書いて置き換えた。これで namazu だけ HTML4.01 だったり、適用している CSS が違うということがなくなった。

Ruby 拡張ライブラリの search-namazu を使ってクエリ投げて、いったんデータを XML に変換。んでそれを XSLT エンジンに渡してやる。

遠回りだけど、namazu のやつだけ統一感がないのはいくないからこれでよし。もちろん common.xsl が適用されているからスタイルシート追加したきゃ common.xsl を書き換えるだけ。全部変わる!

あーそうだ。Ruby 用の XSLT エンジンがなかったから sablot を使った。何か CGI 経由でコンパイルするっていう方法がずっと頭から抜けてて、Ruby で XSLT エンジンつかえないじゃん!って思ってた。想像力が減ってる。だめだ。

  1. トップ
  2. prog
  3. namazu のカスタマイズ
  1. トップ
  2. web
  3. namazu のカスタマイズ

やっと帰ってきた。てか模試やっても自己採点してないとか、見直してないとかであんまり意味ない。英語て長文が面白いか面白くないかでめっさ偏差値変わるんですが。

とりあえず重要なのは、出席番号を間違えて書いても (該当する出席番号の人はこの模試を受けていない) ちゃんと帰ってくるってことだ! でも印刷は間違ってるから、学校の先生が出席番号しか見ていなかったら帰ってこなかっただろうなぁ。

  1. トップ
  2. life
  3. 全統マーク

予め xmlns:t="http://temporary/" とかやっておく。既存の空間が利用できるならそれ使ってもいいと思う。

<xsl:call-template name="tempfoo">
<xsl:with-param name="foo" xmlns="http://temporary/">
<foo>Foo</foo>
<foo>Bar</foo>
</xsl:with-param>
</xsl:call-template>
<xsl:template name="tempfoo">
<xsl:param name="foo"/>
<ol>
<xsl:for-each select="$foo/t:foo">
<li><xsl:value-of select="."/></li>
</xsl:for-each>
</ol>
</xsl:template>
<ol>
<li>Foo</li>
<li>Bar</li>
</ol>

渡すほうに名前空間を指定しない場合は、(あたりまえだけど) デフォルトの空間になる。でもそのまま template のほうで接頭辞なしでアクセスしようとしても無理。

できないと思ってた方法ができると分かって、いろいろ楽できる! 諦めかけていたなか光をくれた (謎) 哀さん にありがとう

namazu スタイルシートをつくるときに、一個の option 要素ごとに selected を入れるかの if を作るのが面倒でごちゃごちゃやってた。だいぶスッキリしていい感じ。

ソース間違ってたのをちょっと修正。

  1. トップ
  2. web
  3. xsl:param にノード集合を渡す。
  1. トップ
  2. xslt
  3. xsl:param にノード集合を渡す。

少し修正してだいぶやる気がなくなったので適用。公開するとまたアレな部分がいっぱい見えてくる。不思議だ。

タイトルフォントについて書くのを忘れてた……

NULL の部分は Amerika Sans。残りの部分は Brie Light っつうフォントどす。

  1. トップ
  2. web
  3. 新スタイル適用

今まで散々 namazu と書いてきましたが、全部 Namazu の意味です。コマンドラインなんてつかたことない。

  1. トップ
  2. web
  3. Namazu について

tDiary のデータを楽チンにインポートできないかなぁと思ってデータファイル見ていたのだけど、二年前の日記とかキモすぎて段々へこんでくる。だからもうインポートとかできなくていいや……

  1. トップ
  2. life
  3. 日記とか
  1. トップ
  2. self
  3. 日記とか

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

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

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

  1. トップ
  2. web
  3. 暇なので最近のめも

動かない。sabcmd は (たぶん) 動いてるけど、Ruby の sablot 作ろうと (ruby extconf.rb で) すると libsablot.a で大量にエラーが出る。検索しても何か妙に情報なし。壮大な勘違いでもしてるんだろうか?

ローカルにこれ入れられないといちいち XREA にうぷしてやらなきゃいけない……嫌だ。wakewakame.

  1. トップ
  2. soft
  3. cygwin sablotron

メタデータを含む画像の例

とりあえず中途半端だけど書いた。画像に含まれる RDF を抽出して表示するだけ。そのうちちゃんと整形させたい。

nulog の画像参照については全部こっちにリンクが張られるようにした。nulog のデータの href とか src はそのままにして、img を含むリンクや、img 単体が存在する場合に view-img を付けてリンクをはる (はりなおす)

URI が微妙だよなぁ……もっといい感じにならないかなぁ。

特定ディレクトリ以下の画像を一覧表示 (サムネイルで。なければない旨の画像? サイズもちゃんと書いておいて条件分岐? 面倒) とかも面白いかなぁ……形にならないとよくわからない。

  1. トップ
  2. web
  3. 画像メタデータを表示

なんかエラーでるので原因を特定すると、foaf:nick に rdf:Alt があるとエラーになる。FOAF Explorer の XSLT を見てみると <xsl:template mode="title" match="*"> というテンプレートの中身が悪さしてる。xsl:choose で選択しているので上のほうに書いてある要素で rdf:Alt を含まなければエラーにならないんじゃないかと思ってやってみたらヒット。foaf:name は書いていなかったので適当に書いておいた。この回避法だと foaf:name を既に書いていてエラーが出る場合無理。あっちの対策を待ちましょうみたいな?

でもこっちで回避するより何かフィードバック送ったほうがいいだろうなぁ。っていっても既に誰か送ってると思うんだけど……むしろエンジンのエラーな気がする。

  1. トップ
  2. web
  3. FOAF Explorer でのエラー
  1. トップ
  2. xslt
  3. FOAF Explorer でのエラー

マジメな実装をするなら name() を select や @test で使う機会はまずないはず。 (もちろん name() をそのまま出力する用途では使うけど) そのかわりにちゃんと namespace-uri()local-name() を使うはずだから。

今まで name() を使うときなんかひっかかりつつ使っていたけどやっと変なことに気付いた。

  1. トップ
  2. web
  3. XSLT での name()
  1. トップ
  2. xslt
  3. XSLT での name()

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 イイ

  1. トップ
  2. xslt
  3. Sablotron にノード集合を渡す。
  1. トップ
  2. web
  3. Sablotron にノード集合を渡す。

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

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

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

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

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

  1. トップ
  2. web
  3. XSLT と XPath の理解
  1. トップ
  2. xslt
  3. XSLT と XPath の理解

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

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

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

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

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

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

だいぶソースが汚い。

  1. トップ
  2. sw
  3. 画像をてきとーに一覧表示する。
  1. トップ
  2. web
  3. 画像をてきとーに一覧表示する。
  1. トップ
  2. xslt
  3. 画像をてきとーに一覧表示する。

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

  1. トップ
  2. web
  3. CRON で殺される。

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

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

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

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

  1. トップ
  2. web
  3. 横スクロール
  1. トップ
  2. soft
  3. 横スクロール