ブログ  前の月  次の月 

たけまる / 2007-07


2007-07-31 Tue

_ Perl - Atompub モジュールの実装について [perl][atompub]

Atompub Interop [2007-07-30-1] で miyagawa さんと話して,なんとな
く Atompub の実装を進めることになりました.

実装はそれほど手間でもないと思うのですが,名前や API がちょっと悩
ましいです.とりあえず予定を書き留めておいて,しばらくして気が変わっ
てなければこのように実装します.

新たに実装する機能
- Media Resource
- Cache (Etag/If-Match)
- Media-type/Category Restriction
- Slug
- Feed Paging
- Configuring Collection (YAML)

実装アプローチ
- XML Format に関するモジュールは,XML::Atom の振舞いを変更する
  (メソッドを追加したり,上書きする)
- Client/Server は,XML::Atom を継承した新しいモジュールを作る
   - Cache の実装はスクラッチで書いたんだけど,適当なモジュールを
     使ったほうがいいだろうか?
- Catalyst プラグインも作ってみる (YAML で Collection の設定ができ
  るようにする)

新モジュール名
- XML::Atompub::Client
- XML::Atompub::Server

Catalyst プラグインの API
- なるべく多くの処理をプログインが行う
- プログラマはいくつかのハンドラ関数を書くだけ
   - Model 操作 (データの出し入れ)
   - ETag の計算
   - Feed Paging?
- Perl 以外の実装を参考にすればいいんだろうけど,調べるのがめんど
  くさい..誰か教えてください.

その他
- エラー処理は,undef を返すのではなく,croak を投げるようにしたい
   -> Perl らしくないので undef and errstr にする
- xBase のある XML をパースできない (segmentation fault)
- content->body: 必ず <div> が追加される.UTF-8 flag の扱いに統一
  性がない
- Client: username がないときは認証ヘッダを付けない
- hash を返している部分で呼んでいる関数が,() を返す可能性があると
  きは ( func || undef ) あるいは scalar func とする

Referrer (Inside): [2007-08-12-1]

2007-07-30 Mon

_ AtomPub Interop Tokyo [atompub]

都内で行われた Atompub (Atom Publishing Protocol) の Interop に参
加してきました.

July2007InteropTokyo - Atom Wiki

# Atom Publishing Protocol の略称ですが,yohei さんが記事に
# "Atompub" と書いたそうなので,それでいきましょう ;-)

12名の参加者が集まり,和気あいあいと接続実験を行いました.あとで
asakura さんが写真をアップしてくれると思います.

(追記) アップされました
OCN Photofriend - TECH BLOG: APP Interop in Tokyo snap shots

実験結果はこちらです.

July2007InteropTokyo

まだ書き込まれていない分もありますが,揃ったら US のように Matrix
形式にしたいです.

いつものことながら,こういう接続実験はすんなりといきません.. 実
験してみると不思議とバグが出てきます.それでも,その場で修正を加え
ながらほとんどのサーバとクライアントの間で接続試験をすることができ
ました.

僕が持参した Perl 実装もいくつかバグを修正することができました.こ
れをベースに,Atompub モジュールを実装しようかと思ってます (あとで
書く).

接続実験以外にも,プロトコルの挙動や解釈について議論することができ,
Atompub に対する理解が深まりました.

IRC では,海外から miyagawa さんらにも参加していただきました.IRC
のログを置いておきます.

irc-atom.html

最後に,このような場を用意していただきありがとうございました > asakura さま

(追記) Interop Tokyo 関連エントリ
OCNフォトフレンド ラボ: APP Interop in Tokyo 終了しました!
masakiのはてなダイアリー - July2007InteropTokyoに行ってきた
AtomPub の Interop に参加しました。 - blog.s14u.info

2007-07-26 Thu

_ Perl - APP サーバ・クライアントを実装しました [atompub][perl]

(2007-12-07 追記) gihyo.jp から来た方へ
- Reference Implementation (仕様確認用の実装) については [2007-11-19-2]
  を見てください.認証に必要な情報なども書いてあります.

(2007-09-13 追記) 現在は CPAN から入手できます
- クライアント: Atompub [2007-08-12-1]
- サーバ: Catalyst::Controller::Atompub [2007-09-13-1]

7/30 の InteropTokyo で使う APP サーバ・クライアントができ
ました.実装した機能の一覧表と,使い方を簡単に紹介します.サーバを
走らせておきますので,接続してみてください.

バグを見つけたら takemaru _ teahut.sakura.ne.jp までお願いします
m(_ _)m

APP については,以下のページを参考にしてください.

たけまる / Atom Publishing Protocol のメモ
IBM Atom 出版プロトコルを知る、第1回: Atom 出版プロトコルを使って… - Japan

■ 実装機能

I-D v.17 に従って実装してあります.

サーバ クライアント
ベーシック認証 o o
サービス文書 o o
Entry Resource (CRUD) o o
Media Resource (CRUD) o o
Slug ヘッダ o o
Location/Content-Location ヘッダ o o
キャッシュ (Etag/IF-MATCH ヘッダ) o o
メディアタイプ制限 (app:accept) o o
カテゴリ制限 (app:categories) o o
ソート (app:edited) o -
ページング (Feed) o -
app:control -
※ △: 実装したけど使ってない

MUST あるいは SHOULD となっている機能はすべて実装したつもりです.
といっても,たぶん漏れがあるので,Interop で明らかにします ;-)

今回は Perl モジュールの APP 機能試験が目的なので,アプリケーショ
ンとしての体裁は整えていません.Entry Resource (XML) や Media
Resource (バイナリ) の交換はできますが,Blog のような気の利いた
HTML 表示はありません.

続きを読む

2007-07-21 Sat

_ XML::Atom::Service 0.13.1 [atompub][perl]

XML::Atom::Service 0.13.1 をリリースしました.

XML::Atom::Service

0.12 からの主な変更点は,次のとおりです.

主な変更点
- Atom Publishing Protocol で定義されている app:edited,
  app:control, app:draft を追加

XML::Atom::Entry を変更するので迷ったのですが,既存動作に影響しな
いので実装しておきました.XML::Atom::Entry で実装されれば,そちら
を使うようになっています (上書きしません).

次の機能は XML::Atom の既存動作に影響するので,実装していません.

- エントリを app:edited に従ってソート

次の機能はモジュール利用者が実装したほうがよいと考えたので,実装し
ていません.

- Collection の分割 (link[@type=next] など)
- Entry Resource と Media Resource の処理の分岐
- Slug

XML::Atom は Atom API と呼ばれていた頃の仕様が基準になっているので,
そのまま APP として使うのは無理があるのかもしれません.そろそろ調
整しないとだなぁ.

2007-07-20 Fri

_ APP の InteropTokyo に参加します [atompub]

7/30 に行われる InteropTokyo (Atom Publishing Protocol の相互接続
実験) に参加します.Perl モジュールを使ったサンプル実装を持ち寄る
予定です.

July2007InteropTokyo - Atom Wiki

# 誘っていただいた yohei-y さま,ありがとうございます

それまでに,APP 開発者の方が自由に接続実験できるように,サンプル実
装をアップする予定です.

# 宣言しないとやらなそうなので,言ってみるテスト

2007-07-19 Thu

_ 『フィードがグーグルの世界制覇を阻止する!』 [atom][feed][book]

小川浩さん主催の WBS2.0 に参加してきました.ラッキーなことに,発売
前の著書『フィードがグーグルの世界制覇を阻止する!』をいただけたの
で,早速書評です.ありがとうございます.



タイトルの通り,RSS などの「フィード」にフォーカスした一冊です.と
はいっても,フィードをやたらに過大評価するのではなく,その役割を
「過不足なく正確に」伝えてくれる良書です.正直,読了してかなり頭が
整理されました.

フィードのことを「ブログのおまけ」と考えている人は多いと思いますが,
本書を読めば,従来型ウェブページとの本質的な違いを理解できると思い
ます (HTML ではなく XML だという表面的な違いではありません).

ウェブページとフィードの本質的な違いは「対象とするデータにある」と
著者の小川さんは述べています.ウェブページは一般的な情報を得意とし
ています.たとえば,Wikipedia であり,Amazon であり,専門的なブロ
グです.その価値は客観的に (機械的に) 測定することができ,Google
によってランク付けされています.

ところが,フィードはウェブページとは異なる種類の情報が対象であり,
これまでの Google の技術が通用しないことを述べています.また,理想
的なフィードリーダーやビジネスモデルはまだ発見されていません.ここ
にチャンスがあり,小川さんはそれに賭けています.

フィードとウェブページの違いが「対象とする情報」というのは以前から
感じており,それを見据えて仕事をしているので,とても勇気づけられま
した.

やや勢いで書かれた感は否めませんが (3徹で仕上げたそうです (^^;),
あまりカチッとしているより読みやすいかもしれません.フィードに馴染
みのない人でも抵抗なく読めると思います.


※ ひとつ,技術的な課題が抜けてるかなと思ったのでコメントします.

本書でも触れられていますが,これからは「オープンではないフィード」
がたくさん出てくると思います.つまり,認証が必要になります.

いまのフィードはほとんどがオープンなので,フィードリーダーは認証に
ついて考えていません.ところが,もしほとんどのフィードが認証を要求
するようになったらどうなるでしょうか.

ウェブ型であれば,事前に各サイトにログインしておかないと読めません.
何十,何百というフィードを登録していると破綻します.また,フィード
リーダー提供元にパスワードを預けるのも気が進みません.

ブラウザ型やクライアント型であればパスワードを記憶させることもでき
ますが,デバイスを変えたときに未読管理が一致しません (本書を読めば,
PC だけでなく携帯で読めることも重要とわかります).

そもそも,フィードの認証方法は標準化されていないので,あらゆるサイ
トで機械的にログインさせることは難しいです (昔の Atom Publishing
Protocol は WSSE でしたが,いまは定められていません .いまはベー
シック認証 + TLS が MUST になっていますが,実装の足並みが揃うかなぁ).

些細なことのようで,未来のフィードリーダーを占うひとつのポイントか
なと思っています (まぁ,ちょっと先の話ですが).

2007-07-12 Thu

_ microformats の例 - rel-nofollow, rel-license, rel-tag [microformats]

これまでに hCard [2007-06-16-1], hCalendar [2007-06-21-1], hReview
[2007-06-29-1] をみてきました.これらはいくつかの class 属性を組み
合わせてひとつの情報を表すため,"複合 (compound) microformats" と
呼ばれます.

これに対して,ひとつ (あるいは少数) の class 属性のみを用いた "単
純 (elemental) microformats" があります.それらのうち,
rel-nofollow, rel-license, rel-tag についてみていきます.

複合 microformats が名刺やイベントといった個別の情報を表すのに対し,
単純 microformats はページに属性を付加する目的で使われます.

■ rel-nofollow

リンク先との関係を表す microformats です.リンク (a タグ) に
rel="nofollow を加えると,リンク先の内容がそのページとは無関係であ
ることを意味します.下の例は,ページが YouTube と無関係であること
を意味します.
<a href="http://youtube.com/" rel="nofollow">YouTube</a>

検索エンジンはページのランキングを計算するときにリンクを利用してい
ますが,rel-nofollow が使われたリンクは計算の対象外とします.この
ため,他人によって作られるリンク (ブログのコメントやトラックバック)
などに使われています.

この microformats は広く使われています.主な検索エンジンは,かなり
前から rel-nofollow に対応していますし,SixApart の Vox (ブログサー
ビス) はコメントリンクに rel-nofollow を付けています.
nofollow!: blog.bulknews.net
Six Apart, Google, Yahoo! その他検索エンジンやBlog ソフトウェアベ
ンダーから、a タグの rel="nofollow" の取り扱いに対する表明がでまし


なお,nofollow という名前から,クローラにリンクをたどることを禁止
するようにも思えますが,そのような意味はないので気を付けてください.
[を] Yahoo! Slurp に rel="nofollow" を無視された
「rel="nofollow"」しとけばアクセスされないはず、と安心している人は
注意!

■ rel-license

ページのライセンス情報を表す microformats です.リンク (a タグ) に
rel="license" があると,リンク先 URL にあるライセンスが適用されま
す.以下の例では,GPLv3 ライセンスが適用されます.
<a href="http://www.gnu.org/licenses/gpl-3.0.html" rel="license">GPLv3</a>

ライセンス文書があれば,リンク先 URL はどのように選んでもかまわな
いと思います.たとえば,GPLv3 の文書は上の URL が大元ですが,同じ
文書が置いてあれば他の URL を指定してもよいでしょう.

■ rel-tag

ブログの "タグ" (カテゴリ) のように使われる microformats です.こ
の microformats もリンク (a タグ) を用いますが,タグ情報の表し方が
わかりにくいです.たとえば,以下のようなリンクがあったとき,このペー
ジのタグは,"ミクシィ" ではなく "mixi" となります.
<a href="http://b.hatena.ne.jp/teahut/mixi/" rel="tag">ミクシィ</a>

つまり,リンクテキストではなく,"URL の最後の部分" がタグとなりま
す.また,リンクパラメータ (search.cgi?q=mixi のような部分) は対象
外です.注意してください.

ちなみに,従来の HTML で同じことを表すために,meta タグが使われて
いました.
<head>
  <meta name="Keywords" content="mixi">
</head>

しかし,meta タグはページに表示されないため,関係ない単語を連ねて
検索エンジンを惑わすページが数多く作られました.目に見える rel-tag
には,このような行為を抑制する狙いがあります.

2007-07-05 Thu

_ Perl - Text::MeCab を使ってみた [perl][nlp]

MoSQL をインストールしたついでに,MeCab を Perl から使えるようにし
てみました.MeCab は日本語の形態素解析を行うツールで,文章を単語に
区切り,品詞名を推定してくれます.たとえば,文章から固有名詞を抜き
出したり,読み仮名をふるときに使えます.

MeCab と Text::MeCab というふたつのモジュールがありますが,インタ
フェースと速度の面で Text::MeCab が優れているようです.

Text::MeCab を使って,わかち書きと品詞推定をやってみました.品詞情
報をハッシュキーで指定できるように,ちょっと工夫してあります
(ex. $word->{'品詞'} で品詞名,$word->{'読み'} で読み方を得られる).

MeCab のインストールについては "MoSQL を使ってみた" [2007-07-04-1]
を参考にしてください.

続きを読む

2007-07-04 Wed

_ MoSQL を使ってみた [mysql][senna]

(追記: インストール先を /usr/local/mosql に変更,my.cnf, mysql.server パッチを追加)

話題の MoSQL を使ってみました.注目のエラーメッセージですが,萌え
語(?) かと楽しみにしていたら,普通の日本語でした… orz

それはさておき,Linux バイナリ (i686) も提供されていて,比較的簡単
に日本語全文検索 DB を構築できるのは嬉しいです.ただし,MeCab と
Senna のコンパイルは必要です.Linux バイナリを使ったインストール手
順を載せておきますので,参考にしてください.

環境は次のとおりです.
OS Debian Etch
MeCab 0.96
Senna 1.0.2
MoSQL 5.0.37-linux-i686

MoSQL の特徴を引用しておきます.ちょっと使ってみた感じでは,宣伝文
句どおり日本語を扱えていますし,Senna による全文検索もできています.

スラッシュドット ジャパン - MySQL互換のデータベース、MoSQLが登場
- デフォルトの文字コードはUTF-8(5.0&5.1)
- (デフォルトでは)文字コードの自動変換は行なわない(5.1のみ)
- 文字コードの範囲外のバイト列でもそのまま格納。データが失われない(5.0&5.1)
- デフォルトでSennaを組み込んでいるため、高速な日本語全文検索が可能(5.0のみ)
- ほとんどのエラーメッセージを日本語にできる(5.0&5.1)

続きを読む

Referrer (Inside): [2007-08-06-1] [2007-07-05-1]

2007-07-02 Mon

_ XML::Atom::Service 0.12.0 [atompub][perl]

昨日 [2007-07-01-1],mixi station API の解析結果をまとめましたが,
調べているとこんな記事を見つけました.

yohei-y:weblog: [これはすばらしい] mixi ステーション API。ただ一つ注文が…
どうしても直してほしいのは APP の service document の名前空間 URI。
これは http://www.w3.org/2007/app が本番仕様である。mixi の Web
API は古い名前空間を使ってる。

mixi は Perl で開発をしていたはずです.Perl の APP モジュールの一
部 (XML::Atom::Service) のメンテナは自分です.ということは,ひょっ
としたら,これは自分のせいではないのか? ということに気づきました.

慌てて XML::Atom::Service をバージョンアップしましたので,もしご利
用でしたらバージョンアップしてみてください.名前空間以外にはまった
く手を加えていないので,テストをやり直す必要はないと思います (とは
いえ,ご利用は at your own risk で).

XML::Atom::Service

0.12.0 へのバージョンアップが CPAN に反映されるまで少し時間がかか
るかもしれません.急ぐようでしたら↓からどうぞ.

XML-Atom-Service-0.12.0.tar.gz

■ 追記
互換性に関する修正を加えた v.0.12.1 をリリースしました.

v.0.12.1 では,デフォルトの名前空間を,旧仕様 'http://purl.org/atom/app#'
に戻してあります.これは,XML::Atom:Service モジュールを利用したア
プリケーションに対して,互換性を維持するためです.新仕様の名前空間
'http://www.w3.org/2007/app' を使うときは,次のように明示的に指定
してください.

use XML::Atom::Service;
$XML::Atom::Service::DefaultNamespace = 'http://www.w3.org/2007/app';

v.0.12.1 のソースコードはこちらです (CPAN にもアップしてあります).

XML-Atom-Service-0.12.1.tar.gz

2007-07-01 Sun

_ mixi station API [mixi][atompub]

mixi が "mixi station" をリリースしましたが,mixi サーバとのやりと
りに Atom Publishing Protocol (APP) を使っているようです.仕様は公
開されていませんが,調べたのでまとめておきます.ついでに,APP につ
いても説明します.最後に,API を利用したクライアントの作り方も紹介
します (Perl APP モジュールの一部のメンテナでもあるので).

続きを読む

Referrer (Inside): [2007-09-10-1] [2007-07-02-1]