ここではVESMAの特徴を簡単にまとめておきたいと思います。 VESMAを使ったほうが良いのか、別のソフトウェアを使うほうが 良いかの判断に役立てて下さい。でも、つたない文章で いちいち説明されるより、実際に使ってみて判断したいと 思う人は次の節の「インストールとセットアップ」と 「VESMAを使ってみよう!」の節に進んだほうが良いかもしれません。
読んでみたいけど時間が無いという人は箇条書のところだけチェック してみて下さい。●のマークがある項目はVESMAを使用する人全般 に対して関係する特徴、○のマークがある項目はVESMAをプログラム して拡張して使ってみたいという人に特に関係がある特徴になってます。
まず、VESMAは仮想環境を提供するシステムですが、 仮想環境と言ってもさまざまな タイプがあり、それぞれにさまざまなシステムも作成されています。 VESMAで提供される仮想環境は基本的に3次元空間で、倍精度実数値 により座標を指定するので原子などのミクロな世界から 宇宙などのマクロな世界までそのままのスケールで表現できます。 また、空間の中に空間を作ることができます。つまり、階層構造を 持つ空間群を扱うことができます。階層的といってもそれぞれの空間 は独立した空間になっているので、サイエンスフィクションで言う ところの互いに離れた並行宇宙と言ったほうが別りやすいかもしれません。 しかし、この階層性を利用すれば、
[大学]--+--[校舎棟]----+--[101教室]
| |
| +--[102教室]
| :
|
+--[図書館]----+--[観覧室]
| |
| +--[書庫1]--+--[書庫1-1]
| | |
| | +--[書庫1-2]
| |
| +--[書庫2]--+--[書庫2-1]
| : |
| +--[書庫2-2]
|
+--[研究室棟]--+--[101研究室]
| |
| +--[102研究室]
| :
|
+[食堂]--------+--[一階食堂]
|
+--[二階食堂]
のような自然な構造が簡単に作成できます。
VESMAの仮想空間内に、他のサーバが提供する仮想空間への
リンクを作成できます。ちょうどWebページでリンクを
クリックすると世界中の他のWebページに簡単に移動できるのと同じ
ような感じです。この仕組によって、世界規模の巨大なハイパー
空間が作成できます。一つのマシンではマシンパワーの限界で
実現不可能なような巨大な仮想空間でも複数のマシンを用いれば
いくらでも巨大な仮想空間を作成できます。
また、近年の仮想空間技術では当然のことですが、VESMAでも
インターネットで接続された複数のユーザが同じ空間に集まり
コミュニケーションをとったり様々なオブジェクトを共有する
ことができるようになっています。
VESMAのシステムにはサーバとクライアントがそれぞれありますが このサーバとクライアントの関係は、WebサーバとWebクライアント のような通常のサーバ-クライアントシステムの関係とは微妙に 異なります。VESMAのサーバは上の節でも説明したように、3次元空間 を提供するものであり、その中では様々なオブジェクトが生成できます。 VESMAのクライアントとは、VESMAサーバ内に生成される ちょっと特殊なオブジェクトという位置付けになっています。 よって、VESMAのクライアントが起動している時には必ずVESMAサーバも 起動していることになります。(特殊な場合としてサーバだけを立ち上げ ることも可能です。)そして最初にVESMAのクライアントに表示されるのは、 このクライアントが存在しているサーバの中ということになります。
これは、他のサーバクライアントシステムに慣れ親しんだユーザには 非常に奇妙なシステムに思えるでしょう。しかし、このようなシステムを 採用したことにより以下のような特徴的な機能を実現することが可能に なります。
まず一つ目は、必ず自分個人のプライベートなサーバを持つことができるという特徴があります。このプライベートなサーバはクライアントと同じマシン上にあるので、ほとんどタイムラグ無しでサーバの中がクライアントに表示されます。これを利用すればVESMAシステムを利用してアクションゲームを作成したり、簡単な物理シミュレーションなどを快適に実現できます。また、後でも述べますが、他のサーバから集めてきた情報やオブジェクトを自分のプライベートなサーバに持ってきてファイルに保存しておくことも可能になります。
通常のサーバクライアントの仕組では、クライアントがサーバに情報を要求し、サーバがそれに答えて情報を送り返します。サーバが自らの判断でクライアントに自分から情報を送り出すことは基本的にできません。VESMAでは情報の交換は「メッセージの伝達」という形で実現されますが、これはサーバ内の各オブジェクトがどのサーバのどのオブジェクトに対してでも自由にメッセージを送信できます。インターネットやイントラネットに詳しい人ならば、これは不可能なことのように思われるでしょうが、これは各イントラネット内に一つBridgeと呼ばれるサーバを立てることで実現できるようになっています。(ちなみにイントラネット内だけで使用する場合にはBridgeは必要ありません)ここで重要なのは通信が対象であるということです。こちらからあちら、あちらからこちら、のどの方向でも同じように情報を伝達できます。
上でも述べたようにオブジェクト間のあらゆる情報交換は「メッセージの伝達」という仕組みを用いており、プログラム上では情報の受け手・送り手の区別はなくなり統一された形になっています。また、その手順も可能なかぎり簡潔化されており、(1)URLのような形式で通信相手を指定して、(2)伝達するメッセージを作成し、(3)送り出すだけです。多くの単純な場合ではたった1行のプログラムになります。例えばこんな風です。
send(makeOrder(getElm("/room1/receiver"),"method1","data"));
上のプログラムは「room1」という空間の中にある「receiver」という名前のオブジェクトの「method1」という名前のメソッドに対して「"data"」という文字列データを送ります。データの部分は文字列だけでなく数字や、オブジェクトやなにかの配列でもOkです。上のプログラムは括弧が3重になっていて、ちょっとだけトリッキーなので同じプログラムをわかりやすく書くと、
ElmStub es = getElm("/room1/receiver"); // (1)送り先の取得
Order o = makeOrder(es,"method1","data"); // (2)メッセージを作る
send(o); // (3)送る
となります。もし同じところと繰り返し通信をするのなら送り先"es"は再利用できるので(2)と(3)の処理だけ繰り返せばOKです。
アバタとはユーザが仮想空間に入る際にユーザ自身の分身としてその外見を表現し、他のユーザに自分が仮想空間内に存在していることを示す働きを持ちます。仮想空間で行動するとは、このアバタを操縦するということに他なりません。VESMAのアバタはこのような働き以外にも他の重要な働きをします。
VESMAのアバタはモバイルエージェントで実装されています。つまりアバタを構成するプログラム自身が、サーバを渡り歩くことが可能です。セキュリティの設定によっては、自分で拡張し賢くしたアバタのプログラムをサーバに送り込むことが可能なので、様々な応用が可能です。また、VESMAのアバタはサーバ内にあるオブジェクトを自分のポケットの中に入れることが可能です。つまり、ゆっくり検討したいオブジェクトはポケットに入れプライベートなサーバに持ち帰り、インターネットとの接続を切った後でも見ることができます。また、自分のマシンのハードディスク内に保存することも可能です。
もう一つ重要な働きは、アバタはクライアントに表示させるための情報を自分で選択し、サーバ内から集めて送り返すということです。VESMAにはテキストベースのクライアントJavaSwingベースのクライアントJava3Dベースのクライアントがありますが、それぞれ表示されるものがまったく異なります。これはアバタがテキストベースのクライアントには文字情報を、SwingベースのクライアントにはJavaComponentの情報をJava3Dのクライアントには3Dの情報を収集して送り返すことにより可能になっています。もし、あなたが犬のペットを飼っていて、その犬にVESMAをつかわせたいと思ったら、アバタに「匂い」の情報を集めるように拡張してあげると良いでしょう。(クライアントで匂いを再生するには高価な機材が必要でしょうが…)
通常の仮想空間ではオブジェクトはたいていアイコン、または3次元グラフィックスのような形でクライアント内に表示されます。そして、他のオブジェクトに対してアクションする方法は「体当りする」「剣をふりおろす」「魔法をぶちあてる」などの限定された手法しか用意されません。我々がメインで開発しているVESMAのJavaSwingを用いたクライアントを用いれば、VESMAのオブジェクトはアイコンの代りにあらゆるSwingコンポーネントが使用できます。つまり、オブジェクトに複数のボタンを付けたり、テキストの入力欄を付けることなどが可能です。実際、データベースの入力画面などを上手く表示できるようにカスタマイズされたクライアントを作成すれば、データベース入力のためのGUIを簡単に作成できるようになるかもしれません。Swingのクライアントは拡張性に比重を置いて設計されています。
GUIでもう一つの重要な機能は、各オブジェクトに設定されているカスタマイザと呼ばれる機能です。仮想現実を現実に近付けるという観点から見れば、クライアントの中に実際にアバタが見る光景をそのまま表示するようにするのが最適かもしれません。しかし、現在のコンピュータでは一つのクライアントのウィンドウだけで美しい3Dの景色を表示したり、動画のデータを表示したり、大量の文字データを表示することは無理があります。動画や高解像度の画像、文字データなどはクライアントとは別ウィンドウに表示するほうが実際的です。そのような機能を提供するのがVESMAのカスタマイザという機能です。Swingのクライアントではオブジェクトをダブルクリックすることでウィンドウが表示されます。このカスタマイザはユーザが自由に変更することができます。実はもともとカスタマイザはその名が示すようにオブジェクトのパラメータなどをカスタマイズするための機能でしたが、上のような応用も可能です。
もちろん上のような機能はVESMAの処理速度を重くします。このような機能を使用したくない人は使わなければ、その分早くなると思います。VESMAにはスケーラビリティがあります。
ソフトウェア技術の専門用語でエージェントという言葉があります。これには正確な定義はないのですが、「自律的」であるとか「環境に適応」する機能を持つこととか「移動」する機能があることなどがエージェントである条件と言われています。VESMAのオブジェクトは単なるオブジェクトというよりはエージェントにかなり近い存在です。数千から数万のオブジェクトが互いに独立に自律的に動作することが可能です。
プログラミングに詳しい人ならば、「データの整合性」と「デッドロック」と呼ばれる問題があることを御存知でしょう。これはマルチスレッドプログラミングと呼ばれるプログラム方式を採用すると起る問題です。VESMAでは「準マルチスレッドプログラミング」とでも呼ぶべき方法が採用されています。非常に大量のエージェントを動作させるにはどうしても必要になってきます。上述の2つの問題は、プログラム上発見しにくいバグを生み出してしまう難しい問題ですが、VESMAで採用するメッセージの交換方式による通信を使えば、殆どその問題は回避できます。(詳しくはVESMAの基盤技術であるELM-VEのマニュアルを参照して下さい。)
VESMAのメッセージ交換による通信は、上述の複雑な問題を回避するだけでなく、プログラムをする時に必ず覚えておかなければならない概念は単純で少ないです。そしてプログラムとして記述する時のタイプ量もかなり少ないと思います。
基本的にはメッセージの交換の手法だけあればあらゆる通信が可能であるが、例えば特定のメッセージに対して返事のメッセージが欲しい時や、多くのオブジェクトが同期をとって動作するように同期用の信号をメッセージとして送る時など、プログラムが繁雑になってしまう。このようなタイプの通信が簡単にプログラムできるように、Request機能が用意されている。これを使用するには(1)メッセージの送信先の特定、(2)メッセージの作成、(3)返事のメッセージを受けとった時の振舞いを指定する、(4)メッセージを送るというステップになります。(3)の手順だけが通常の通信と違うところです。
VESMAのメッセージ伝送は3段階のセキュリティチェックを受けます。イントラネットに一台用意するBridgeサーバにおいてチェックされ、VESMAのサーバ自体もメッセージをチェックし、最後に、各オブジェクトのメソッドごとにチェックされます。このようにチェックの回数を多くしているのは、VESMAのサーバは単にリクエストに対してデータを返すだけのサーバではなく、外のプログラムをサーバ内に導き入れ、自由に動きまわらせるようなサーバだからです。
セキュリティを設定する個所が増えて一見大変になるだけに思えますが、次のような利点もあります。一つには個人レベルのセキュリティ設定が可能となることで、管理者のミスでBridgeサーバでのチェックが正しく行われなかった場合でも不測の事態を未然に防ぐことが可能かもしれません。また、個人でセキュリティの設定をすることは良いセキュリティの教育になると思われます。VESMAは一番最初に起動した時点では他のサーバとまったく通信できないような設定で起動します。他のサーバを接続を試みるには、自分の責任で自分に必要な通信を許可してゆく作業が必要になります。Swingベースのクライアントを使用していれば、セキュリティ設定のためのGUIが用意されているので、概念さえ覚えておけば自分で設定できるはずです。
VESMAのメッセージをチェックするために使用できるチェック項目は非常に豊富で、メッセージの送り手、受け手のそれぞれに対して、IPアドレス、サーバ名、オブジェクトの名前、オブジェクトのサーバ内での場所、オブジェクトのクラス名、オブジェクトのロール(役割)、メッセージの種類など細かく設定できます。
セキュリティを強くすると利便性が犠牲になり、利便性を優先するとセキュリティが弱くなるということは、セキュリティを考えるときに是非知っておくべきことです。しかしVESMAでは3段階のチェックとメッセージのチェック項目の豊富なセットのおかげで、セキュリティをあまり弱くせずに、利便性を保つことができると思います。設定は難しくなると思いますがこの際勉強して利便性を獲得できるようにチャレンジしてみると良いと思います。
実はVESMAプログラム全般に関しも言えるのですが、特にセキュリティの機能に関しては実地テストが十分ではありません。セキュリティホールを見付けた方はご報告お願いします。
ここまでの特徴を読んでくると、VESMAの特徴の多くが「拡張性」に起因するものであるのがわかると思います。もちろん、VESMAは拡張しなくとも十分「教育的仮想環境」として機能するように努力して作っていますが、教育的仮想環境ではない用途に使用したい人や、教育的仮想環境として使うにしても、もっと違った観点から使用したい人や、使う人の立場によってどうしても気にいらない部分というのが出てくるはずです。VESMAは拡張性に非常に気を使って設計しましたので、VESMAをベースにして少し手を加えるだけで、VESMAの特徴を受け継ぎながら、さらに良いシステムを構築できると思います。
拡張法するには、少しJavaでプログラミングで苦労をしいられると思いますがきっとその苦労に見合うものができるのではないかと思います。VESMAはGNUで定めたGPLのライセンスに基づき公開してあるので、あなたがVESMAを用いて作ったプログラムはどんどん公開することができます。是非VESMAをつかってみて、改善点などあれば御連絡下さい。
最後に悪い特徴つまり「欠点」についても述べておかねばなりません。現時点での欠点の多くは、VESMAがほとんどだれにも使用されていないということに関連しています。このためにフリーソフトウェアである利点の多くが失われています。作者が公開にあまり積極的ではなかったのですが、これからは改心してゆきたいと思いますので、有志の方々、どうか御協力お願いします。
技術的な点での欠点の一つとして、処理スピードの遅さが上げられます。通常の仮想空間としての使用や、簡単なゲームやシミュレーションなどに使用する場合にはほどんど問題になることはないと思いますが、大量の計算パワーを必要とするような物理シミュレーションには不向きだと思います。ただし、ある種のシミュレーションの場合、VESMAオブジェクトの自律性を利用して短時間でシミュレーションプログラムを作成でき、しかもビジュアルにシミュレーション結果を確認できるので、本格的なシミュレーションプログラムを作成前にその実験の価値を判断するのには役立つと思います。
また、VESMAのプログラミングにおいてはクラスを拡張してメソッドを追加する作業を行なうことになりますが、これにはVESMA特有の約束事や制限事項があります。多かれ少なかれ、既存のプログラムを使用して何かを作成する場合には約束事は必要ですが、それを理解しなければプログラムは組めません。VESMAでの約束事にはそれほど難しいものは無いと思いますが、他のプログラミングでは無いような特徴的な制限事項があります。詳しくはVESMAの基盤技術であるELM-VEのマニュアルを参照して下さい。