「むすび」に費やした大学院の1年間

昨年の12月ごろ、つまりちょうど1年前に、XMPPFirefox拡張の勉強を始めました。正月はずっとFirefox3 Hacksを読んでいました。

Firefox 3 Hacks ―Mozillaテクノロジ徹底活用テクニック

Firefox 3 Hacks ―Mozillaテクノロジ徹底活用テクニック

今年の5月15日に、構想をまとめて、2009年度上期未踏本体クリエータに応募したPDFです。結果は落選でしたが、めげずに実装を行いました。

7月4日にShibuya.lisp TT#3で途中経過を発表しました。

9月17日にJSSST第26回大会で登壇発表したときのスライドです。初めての論文投稿、発表で緊張しました。

11月20日、バージョン1.0をリリース。

12月7日に修士論文の中間報告としてプレゼンをしました。

学生生活の締めくくりとして1年間かけて、自分で構想から実装、公開までこぎつけることができて、満足しています。
ご指導いただいているジャック・ガリグ先生にも、とても感謝しています。

むすびのチャットとチェスがGoogleガジェットになりました

むすびが必要です。
むすびを使って、このページを開いてから、ブラウザのブックマークから遊びたい相手を選んでください。
それでブラウザのアドレスバーがこのようなxmpp URIになっていればOKです。

romeoとjulietが遊ぶURI
xmpp://romeo@gmail.com/Musubi/juliet@gmail.com#http://d.hatena.ne.jp/Gemma/20091206/1260094125
続きを読む

むすび 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

「むすび」でリアルタイム・ウェブなお買い物ページを作ってみた

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

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

チェスでは、双方ともchess.htmlを見てやりとりしますが、
このページでは、こちらはplayer.htmlを、むこうはmaster.htmlを見てやりとりします。

面白いでしょう?

ロビン・ミルナー△

対話するWebというと、マルチエージェント、アクターモデル、並行計算、も気になるので、
ロビン・ミルナーの本をちょっとかじってみる。

Communicating and Mobile Systems: The Pi-Calculus

Communicating and Mobile Systems: The Pi-Calculus

まだ全然理解できてないけど、巻末の言葉に感動したので訳してみる。

At the present time we cannot expect a theoretical model such as that which is provided by this book to be definitive; the new developments are too immature for that. But as we seriously address the problem of modelling mobile communicating systems we get a sense of completing a model which was previously incomplete; for we can now begin to describe what goes on outside a computer in the same terms as what goes on inside - i.e. in terms of interaction. Turning this observation inside-out, we may say that we inhabit a global computer, an informatic world which demand to be understood just as fundamentally as physicists understand the material world.

現時点では、本書が提示するような理論モデルが決定的なものになるかはわからない。それには新しい展開が未成熟にすぎる。しかし、モバイル通信システムをモデル化する問題に真剣に取り組み、不完全であった既存のモデルをより精密なものにできたと思う。それにより、コンピュータが外に何を発しているか、を、内で何を行っているか、と同じ言葉で語れるようになった - すなわち、相互作用という言葉で。この裏返した観点は、我々のグローバルコンピュータ、情報世界の、真髄を知ることと言えるのかもしれない。ちょうど物理学者にとっての物質世界のように。

コンピュータが内で何を行っているか、から、コンピュータが外に何を発しているか、へ。
アラン・ケイの、コンピュータはメタメディアだ、にもつながりそう。
情報世界と、物質世界での原子の相互作用との関わりは、石井裕Radical Atomsにもつながるかも。

Musubi開発の経緯

ここ5年くらい、いくつかのWebサービスを組み合わせて新しいものを作るという、マッシュアップがさかんです。
私も、クラウドでLinuxディストリビューションにあたるものは何になるだろう?にあるようなことを夢想していました。

Webサービス同士の糊になるのは何だろう? と悩んでいたある日、先生と四色定理の話をしていて、問題をグラフに置き換えるというアイディアを教えてもらいました。

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

見方が変われば発想も変わり、私の中に、糊(境界)ではなく対話(辺)という発想が生まれました。

Webサービス同士が対話する。あるいは、人とWebサービス、人と人、が対話する。

それなら、人とWebが対話するとは何だろう。

人とOSが対話するときに使うのは、対話的シェルです。
テキストシェルを、ブラウザ上でハイパーテキストシェルなWebアプリケーションとして実現するために必要なのは何か。
こうして、ブラウザとIMとの融合という考えに至りました。

セマンティック・ウェブは、コンピュータがWebを理解できるようにXMLで記述するという理想です。お互いを理解するのに必要なのは対話ではないでしょうか。そしてXMPPは、まさにそのXMLに基づいたIMプロトコルです。だから多分、方向性は正しいと思います。

Firefoxと融合するインスタントメッセンジャー「Musubi」をリリースしました

Google Waveは、電子メールを置き換える可能性を秘めたWebサービスと言われています。
Musubiは、インスタントメッセージ(IM)を置き換える可能性を秘めたFirefoxアドオンです。

このアドオンで目指したのは、ブラウザとIMの融合です。
それは、Webアプリケーションに、HTTPを越えた更なる力、IMによるリアルタイム性を与えることです。

HTTPは、必要なときだけサーバに接続するので、更新があってもこちらからリクエストするまでわかりません。BBSやTwitterを何度もリロードするのはそのためです。

逆に、IMが使うXMPPは、サーバと接続を保って相互にやりとりするので、更新があればリアルタイムにメッセージが飛んできます。もうリロードはいりません。

Musubiでは、Webアプリケーションが自由にメッセージの内容を操作できるので、例えば以下のようなものが作れます。

続きを読む