2002-11-18 [長年日記]
_ 頭痛と鼻水と腹下し (20:02)
朝起きたときはそこそこ体調が良さそうな気がしたのに、ムスコを保育園に送って返ってきたら一気にぐったり来たんで、今日はお休み決定。今回の風邪の主な症状は頭痛と鼻水と腹下し。そんなにひどくはないんだけど、微妙につらい状態が長く続く。普段は風邪薬が結構効く体質なんだけど、今回の風邪にはあんまり効かないなー。
_ TrackBack (20:02)
TrackBackという機能
blogネタで話題になったMovableType。基本機能の部分には大して興味がなかった(ありがちなものの集大成というだけ)し、RSS配信ってのも別にやればいつでもできる(けど再利用する人が出てこないと面白くない)よなーと思っていたんだけど、TrackBackって仕組みはちょっと興味を引かれるな。こういうのをWikiCloneでも取り込むといいかもね。
- http://www.movabletype.org/docs/mtmanual_trackback.html
- 日本語訳 - http://lowlife.jp/translation/mttrackback.html
- 2003/04/05 「TrackBackの図解」を追加
今のところ複数のWikiサイト間のつながりはInterWikiで表現しようってのが主流なんだろうけど、個人的にInterWikiってのはあんまり面白いと思わない。リンク(とページ生成コマンド)だけはつながるけど、それ以上のつながりがあまりにもないし。まあたったあれだけの実装であのくらいつながると言うこと自体は面白いけど(っつーかWiki自体がそういう面白さの積み重ねだから、それを否定しちゃおしまいって気もするけど)。
TrackBackのポイントは、ある記事(WikiCloneならばWikiPage)への他サイト(のWiki)からの言及を取り込む仕組みを用意しよう、ってことだろう。その仕組みも非常にシンプルだ。ある記事に他のサイトから反応する場合、あるURLを「対象の記事ID」と「反応したURL」を引数につけて呼んでくれれば、システムはその記事に対する他サイトからの反応があったことを認識する、というだけのもの。
tDiaryみたいにReferer解析をそういう用途で使えるように実装しているシステムがあったり、アクセス解析を使って手動でそういうことをやっている人は結構いるだろうけど、共通フォーマットを定めてシステムとしてそういうことが出来るようにするってのはいい考えだな。ずいぶん昔から「Web日記同士の言及リンクがわかりやすい更新報告型リンク集:http://ishinao.net/diary/?200201c&to=200201281#200201281」を作りたいといろいろ考えていたんだけど、リンク集という形式ではなくP2Pベースに実装するという考えは思いつかなかったよ。
WikiLikeでのTrackBackサポート方法(文字コードについて)
ここのWikiLikeでも実験的にTrackBackをサポートしてみました(RSSとTrackBackを実装を参照)。現行のTrackBackの仕様書には文字コードに関する情報が盛り込まれていないため、その部分を拡張しました。
- http://host.domain/dir/tb.php/sid/****というPATH_INFOの2階層目に入力文字コードを指定
- ie=****という要素(GET/POST)で入力文字コードを指定
- charset=****という要素(GET/POST)で入力文字コードを指定
- 投稿要素の文字列から自動認識を使って入力文字コードを判別
という順序で入力文字コードを指定します。最初に見つかった要素が優先です。
送信側としては、POSTするパラメータにcharsetを追加。多分これが一番直観的な実装なんで文字コードの解決手段としてはこの方法に収束していくといいな。うちはしばらくの間はすべてのパラメータを受け付けるようにしておきますけど。
TrackBackの送信側インターフェースも実装。文字コードは送信時にドロップダウンから選択できるようにした。ただ、本文の最初の255文字を抜粋として送信しているんだけど、そうするとほとんど元の引用文部分だけになっちゃうな。それはちょっといまいちかも。
※文字コード指定文字列は、受信側はそのままPHPのmbstring系関数に渡しています。送信側はutf-8/euc-jp/shift_jisで渡しています
_ TrackBackを実装する (20:02)
TrackBack的なものをWikiLikeに実装するとして、どんな感じにするといいだろう。もともとのTrackBackの実装を参考にしつつ、自分で欲しい機能を中心に仕様を考えてみる。
TrackBack的な機能を実装するにあたって抑えておきたいポイントとしては、
- 他のサイトの記事→自サイトの記事の言及について
- 他サイト側から自サイトへの通知が簡単
- 自サイト側の通知の受け取りが簡単
- 他サイトのどの記事(URL)が自サイトのどの記事(記事番号)に言及しているか
あたりだろう。
あとどうせこういうものを実装するならば、
- 専用クライアント→自サイトの記事の言及について
- 専用クライアントから自サイトへの通知が簡単
- 自サイト側の通知の受け取りが簡単
- 専用クライアントからの言及については、そのコメント本文自体も受け取る
なんて機能も実装したいところだ。
さらにそれらのインターフェース(API)について、特定の実装に依存するのは避けたいところなので、
というのもある。
あと、WikiCloneをはじめとする特殊な機能(単なるblogシステムよりも高度な機能)をもっているシステムで使った際に、さらに有用な機能を追加できるように、
- 送受信APIは、拡張情報の受け渡しに対応できるようにする
- ただし、基本的になAPIの利用は手軽である必要がある
ってな感じで試しにWikiLikeに実装してみて、複数サイトに置いたWikiLike同士で通信できたらどんな感じになるかを試してみよう。なんてことをやっていると、いつまで経っても完成しない罠。
_ TrackBackインターフェース (20:02)
TrackBackの受信側のインターフェースの実装はそんなに難しくないよな。試しに作ってみたけど、簡単に実装できる。ところでIEってヘッダにtext/xmlを返さないと、内容がxmlでもxmlと解釈(表示)してくれないんだっけ?
閑話休題、受信側のインターフェースにコメントの実体まで受信するとなると、それをどう処理するかを抽象化するのが難しそうではある。WikiLikeだったら、そのままコメント欄にPOSTしちゃえばそれで終わりなんだけど、一般的なインターフェースとして考えるともうちょっと融通が利くようにしておかないとまずいだろうし。
何にしろ、受信側はそんなに難しくなさそうだ。が、送信側が結構面倒くさい。えーっと、本家のTrackBackは送信側のインターフェースをどうやって実装しているのかな? 単純に考えると、コメント先のTrackBackインターフェース(ping url)と記事番号をフォームに手入力する感じ? なんかそれはかなりいまいちだよなー。
本当ならば、コメント先のurlを入力すると、そのurlから自動的に相手先のTrackBackインターフェースの実装を問い合わせて、TrackBackインターフェースにTrackBack情報を送る、みたいな実装がいいよなー。コメント先URLのQUERY_STRINGにたとえば「?sysinfo」とかつけたら、必ずそのシステムのTrackBack(をはじめとするコミュニケーション系の)APIの実装に関する情報を(xmlで)返す、みたいなメタ情報向けAPIはやはり欲しい。

