学生さん達に手伝ってもらっています。ジッサマの僕から見ると、彼らは子供達という感じなんだけど、「ウチの子」と呼ぶとホントの子供達と紛らわしいし、成人もしているのだから失礼でもあるし。青年達、僕の田舎の言葉でいえば「わかいし」だな。カタカナ書きでワカイシとでもしましょうかね。
そのワカイシ達がいま作っているモノがあります。ソフトウェアです。なんとか動くようですが、システムとしてはアルファ以前の段階。ですが、紹介しておきます。
一言でいえば、ブラウザ-ブラウザのあいだでの双方向リアルタイム通信を行う仕掛けです。次の図のような感じ。
通信路(リンク)は双方向で、n個のブラウザが通信(対話)に参加すれば、リンクのトポロジーはn頂点の完全グラフになります。いったん通信路が確立してしまえば、どのブラウザがどのブラウザに話しかけるのも自由ですし、同報(マルチキャスト)も行えます(同報の実装はできてないけど)。
あたかもブラウザどおしが直接に結びついているようにしたいのです。実際にはもちろん、中継のサーバーが必要です。この中継用のサーバー/サイトをジャンクチャ(juncture)と呼んでいます。ブラウザ達とジャンクチャの関係は次のようです。
ジャンクチャ(図のサイトJ)は黒子になるべきで、存在があまり表に出ないようにしています。ジャンクチャを利用するWebページは、どんなサイトからロードされてもかまいません。ローカルディスクから読み込まれたページでもOKです(だよね>ワカイシ)。もっとも、各Webページのどこか(通常はJavaScriptコード内)にジャンクチャ・サイトのURLを埋め込む必要はあります。
ジャンクチャを介して通信するWebページに必要なものはJavaScriptによる通信ライブラリです。このライブラリさえあれば(あと、ジャンクチャが動いていれば)、JavaScriptだけで分散アプリケーションを書けるはずです。アプリケーションの構造は次のような感じでしょう。
アプリケーションのロジック/アルゴリズムはJavaScriptで書くことになります。データの保存が必要になるでしょうが、それはジャンクチャ側のストレージを利用します*1 -- って、いまんところストレージは何もできてませんけど、、、
それと、サーバー側でないと実現できない機能はジャンクチャ内で動くツールとして実装します。ジュンクチャがErlangで作られているので、サーバー側ツールもErlangで書くのが自然です。「ErlangとJavaのあいだでリモートメッセージング」で紹介した方法を使えば、Javaを使うのもいいと思います。もともとは、サーバー側プログラミングもJavaScriptでと思ってましたが、ちょっと難しい。まー、JVM上のRhinoを使えばJavaScriptで書ける、と言えなくもありませんが(苦しい)。
今日の午前中、「あー腰がいてー」と言いながら、ジャンクチャ・サイトを公開するために、さくらインターネットの手続きをしました*2。あと何をしたらいいんだかよくわかってない(苦笑)のですが、ジャンクチャ・サイトが見えるようになったら告知し、通信ライブラリも公開します。
*1:ロード元のサイトにXmlHttpRequestを使って保存してもかまいません。
*2:それで、「今日はもう安静に」と思ったけど、このエントリーを書くために戻ってきたよ。