Gemmaの日記 このページをアンテナに追加 RSSフィード

2009-12-05

「むすび」でリアルタイム・ウェブなお買い物ページを作ってみた 04:49 「むすび」でリアルタイム・ウェブなお買い物ページを作ってみたを含むブックマーク 「むすび」でリアルタイム・ウェブなお買い物ページを作ってみたのブックマークコメント

むすびに新しいサンプルを加えました。

お買い物ごっこをするページで、相手(店主)とリアルタイムにチャットしたり、交渉したりできます。

http://eva-lu-ator.net/~gemma/geocities/musubi/shop.png

D

チェスでは、双方ともchess.htmlを見てやりとりしますが、

このページでは、こちらはplayer.htmlを、むこうはmaster.htmlを見てやりとりします。

面白いでしょう?

むすび v1.1.0でTwitterをリダイレクション、パイプしよう! 05:20  むすび v1.1.0でTwitterをリダイレクション、パイプしよう!を含むブックマーク  むすび v1.1.0でTwitterをリダイレクション、パイプしよう!のブックマークコメント

むすびがバージョンアップして、リダイレクションとパイプ機能がつきました。

さて、WWW、特にURIは、世界規模のファイルシステムを実現しました。

しかし、今のWebには、ファイルとして表現できないものが生まれています。

それは、Twitterなどからリアルタイムに流れてくるメッセージのストリームです。

ところで、Unixでは、行指向のテキストストリームを扱うために、リダイレクションやパイプといった便利な機能があります。

catやgrepってすごく便利ですよね。

そこで、むすびでも、メッセージ指向のXMLストリームを扱うために、それらを真似してみました。

これで、例えばTwitterなどからのメッセージをcatして、

grep.htmlに通ったものだけ読むといったことが簡単にできるようになります。

従来は以下のxmpp URIでロードしたページは、juliet@localhostにしかメッセージできませんでした。

xmpp://romeo@localhost/Musubi/juliet@localhost#http://musubi.im/chat/

これからはリダイレクションとして、chan/0にもメッセージできます。

chanはチャンネルの略です。0はチャンネル名で、好きな名前を付けられます。

ページのスクリプトで、例えばこのようにしてください。

Musubi.send(<message to="chan/0">
              <body>このメッセージはchan/0にリダイレクションします</body>
            </message>);

catするには、複数のページから1つのチャンネルにリダイレクションするわけです。

chan/0にリダイレクションしたメッセージは、以下のようなxmpp URIに届きます。

xmpp://romeo@localhost/Musubi/chan/0

xmpp://chan/0/juliet@localhost

xmpp://chan/0/chan/foobar

ちなみに、ちょっとまぎらわしいですが、以下のURIにはjuliet@localhostやchan/foobarからのメッセージは届きません。

xmpp://chan/0/juliet@localhost

xmpp://chan/0/chan/foobar

パイプは以下のようにします。chan/0 -> alice@localhost の向きのパイプです。

例えばgrepするページを挟むとよいでしょう。

xmpp://chan/0/alice@localhost#http://musubi.im/grep/

リダイレクションするページ

http://musubi.im/rdr/

パイプの例: grepするページ

http://musubi.im/grep/

まとめ

julietからのloveを含むメッセージをaliceに転送します。

xmpp://romeo@localhost/Musubi/juliet@localhost#http://musubi.im/rdr/  (julietのメッセージをchan/0にリダイレクション)
xmpp://chan/0/alice@localhost/#http://musubi.im/grep/                 (パイプでgrepしてaliceへ) 

Unixのシェルコマンドと見比べてみてください。

romeo$ <juliet > chan/0
romeo$ <chan/0 grep love > alice