月末までメンテしないと言いつつ気になってちょくちょく手直ししています。前回遅延が長すぎて話すのが大変だったので、音質を犠牲にしても遅延を減らしてみました。WikiPhone の使い方については先日の日記で書きましたが、コンセプトについてちょっとだけ書きます。

WikiPhone は VoIP に必要な機能のうち、通話以外の機能を取り除き、通信に HTTP を利用した物です。

通話以外の機能、例えば特定の個人を呼び出す方法は用意されていません。そんな事で使い物になるのかって？私たちは人を呼び出すのに、すでにメッセンジャーやメールなど他のアプリを持っています。WikiPhone では、似たような機能を作るのではなく、他のプロトコルと連携する方向を目指しています。

現行の VoIP、IP電話システムでは、音声通話から呼出、暗号化まで、ワンセットで面倒を見てくれます。しかしこれは単に、既存の電話を IP に模倣する為に必要なだけであり、模倣に囚われなければもっとシンプルな形で IP 上の音声通話をデザイン出来るはずです。呼出や暗号化には他の仕組みと連動すれば良いです。

WikiPhone では個人を特定できる電話番号ではなく、同時に話せる場である URL チャンネルを指定します。サンプルにある。http://languagegame.org:9090/phone は URL チャンネルの一つの例ですが、URL にはサーバ内のどのような文字列でも指定出来ます(例: http://languagegame.org:9090/secret) 。チャンネルは動的に生成されます。もしもあなたが個人的な会話を友人としたい場合は、URL としてもっと謎めいた文字列を選び、その URL を友人に送ればバレないです。WikiPhone の名前は、同じく動的にウェブサイトを生成する wiki から取りました。

プロトコルは HTTP ベースです。HTTP は遅いだろうと言われましたが、しかしそれはムーアの法則が解決してくれます。なぜ HTTP かと言うと、WikiPhone はハッカーによるハッカーの為の電話だからです。電話全体を提供する物ではなく、リアルタイム通信の部分だけを出来るだけシンプルな形で提供します。それを電話に使おうがラジオを作ろうがゲームに使おうがハッカーの自由です。それを可能にするために、最もメジャーなプロトコルである HTTP/1.1 に出来るだけ合わせています。興味のある方は http://languagegame.org:9090/phone をブラウザで空けるか telnet でアクセスしながら WikiPhone してみてください。

現在すべてのコードは Squeak Smalltalk で書かれていますが、仕組みは単純なので多言語への移植は簡単だと思います。また面白い改造の仕方や応用も書きます。(Florian さんの言うようにステレオにして、ゼーレごっこも簡単に出来ると思います)。月末あたり時間を取って再度プロトコルを見直し、とりあえずのリリースに出来れば良いかなと思ってます。