図1 スロットカーのコース
図1 スロットカーのコース
[画像のクリックで拡大表示]
図2 走るスロットカー
図2 走るスロットカー
[画像のクリックで拡大表示]
図3 James Gosling氏も視察
図3 James Gosling氏も視察
[画像のクリックで拡大表示]
図4 倒立振子
図4 倒立振子
[画像のクリックで拡大表示]
図5 ファンでバランスをとるシステム
図5 ファンでバランスをとるシステム
[画像のクリックで拡大表示]
図6 SPOTの開発者のRandall Smith氏
図6 SPOTの開発者のRandall Smith氏
[画像のクリックで拡大表示]
図7 模型飛行機に組み込んだSPOT
図7 模型飛行機に組み込んだSPOT
[画像のクリックで拡大表示]
図8 モーターを直接制御するSPOT
図8 モーターを直接制御するSPOT
[画像のクリックで拡大表示]
図9 開発キット
図9 開発キット
[画像のクリックで拡大表示]

今年のJavaOneの記事でよく取りあげられているのはSOA,Ajax,そしてスクリプト言語ですね。しかし,JavaOneはそれだけではありません。

毎年,James Gosling氏の基調講演ではJavaのリアルタイム拡張に関するデモがなにかしら行われます。去年は棒を立ててバランスをとるものでした(倒立振子と呼ばれるものです)。ここで使用されているのが,JSR-001のRealtime Specification for Java(RTSJ)です。もともと,James Gosling氏もJSR-001のメンバーだったことからわかるように,彼のお気に入りの技術のようです。

現在,RTSJはGregg Bollella氏が中心になって活動が続けられています。

そして,JavaOneで毎年恒例なものの一つにプログラミング・コンテストがあります。

今年はこの二つが合体してしまいました。つまり,RTSJを使用したプログラミング・コンテストが行われたのです。

題材はなんとスロットカー。レールから電力を供給して走る,模型の車です。モーターで走るスロットカーをうまく制御して,いかに速くコースを走り抜くかがコンテストの勝者を決めます。

今までのコンテストは誰が入賞するかの基準があいまいな部分がありましたが,スロットカーの場合は厳密です。すべて,ラップタイムだけでコンテストの勝負が決まります。

このコンテストのために,パビリオンには大きいスロットカーのコースが設置されました(コース図)。

コンテストに参加するにはスロットカー・プログラミング・コンテストのWebサイトからルールとプログラミング・ガイド,そしてNetBeans用のモジュールをダウンロードします。そして,NetBeansを使用してコードを作成し,サーバーに登録します。

登録が終了したら,パビリオンで実際に自分が作成したプログラムでスロットカーを走らせます。2周走ったラップタイムが結果になります。

このコンテストはかなり人気で常にスロットカーを走らせるのために行列ができていたほどです。

Real Time Specification for Java

このプログラミング・コンテストのキーとなるのがJavaのリアルタイム拡張です。

RTSJはJSR-001で仕様策定され,現在はJSR-282でバージョン1.1の仕様策定が開始されています。

プログラミング・コンテスト用のモジュールには,サンプルとしてContestantNHRTクラスが含まれています。このサンプル・クラスはjavax.realtime.NoHeapRealtimeThreadクラスの派生クラスです。

もうおわかりだと思いますが,RTSJでは二つのリアルタイム用のスレッドが定義されています。一方がRealtimeThreadクラスで,もう一方がサンプルで使用されていたNoHeapRealtimeThreadクラスです。

そして,もう一つのキーとなるのがリアルタイム用のガーベジ・コレクション(GC)です。ここでは詳細は省きますが,最終日に行われたセッション「Real-Time Java Technoloy:Why It Matters to You and What You Should Do About It!」では,いくつかのリアルタイムGCの比較が行われました。

今までリアルタイムのシステムは職人的なプログラミングが必要とされてきました。しかし,Javaを使用することで敷居はずいぶん下がるはずです。

パビリオンではスロットカー以外にも前述した倒立振子や二つのファンを使用してバランスをとるシステムなど,RTSJを使用したシステムが展示されていました。これらは少々の外乱(指で押すとか)があっても,ちゃんとバランスを保つことが可能です。

これらのシステムは,Sun Labで開発されているRTSJ実装の「Mackinac」を使用しています。もちろん,スロットカーにもMackinacが使用されています。

リアルタイム性が求められる分野は数多く存在します。機器の制御など組み込み分野はもちろん,金融やゲームなどでもリアルタイム性が求められます。これらの分野にも今後Javaが浸透していく可能性は大いにあるのではないでしょうか。

Sun SPOT

もう一つ,パビリオンで展示されていたガジェットを紹介しましょう。

それがSun SPOTです。

Sun SPOTは,昨年のJavaOneの最終日の基調講演でJohn Gage氏がデモをしていたガジェットです。

今年の3月にプレスリリースが発行され,5月から開発キットが発売される予定でした。これを聞いた筆者はJavaOneで販売が開始されるのではないかと期待していたのですが,残念ながら発売が延期されてしまいました。

SPOTは6cm×4cmぐらいの大きさで,CPUにARM9を使用しています。

もちろん,Javaが動作するのですが,なんとOSがなく,直接Java VMが動作します。このJava VMはCLDC 1.1準拠のVMで,Squawk VMと呼ばれます。

Squawk VMはJava言語のレベルで割り込みを記述できる機能や,複数のアプリケーションを同時に動作させるアイソレーションの機能を持っています。

このSquawk VMを搭載したSPOTは,外部インタフェースとしてUSBもしくはZigBeeを使用できます。以下のようなセンサー類も備えています。

  • 3軸加速度センサー
  • 光センサー
  • 温度センサー
  • ボタン
  • LED
  • アナログ入力
  • 汎用I/O

これを聞いたらガジェット好きな人にはたまらないのではないでしょうか。パビリオンでは模型飛行機や,戦車の模型に組み込んだものなどが展示されていました。

期待の開発キットは,SPOTが2台とNetBeans用のモジュールなどが含まれています。発売は夏になるとのことですが,待ち遠しいですね。

JavaOneを振り返って

毎年,JavaOneに参加していますが,今年のJavaOneは参加者も多く,とても活気があったと感じます。とはいうものの,今年から導入した事前登録制など運用面ではいろいろと問題もありました。どこにいくにも長蛇の列を見るとうんざりしてしまいます。

しかし,JavaOneで得られたものに比べれば,そのような問題は微々たるものでしかありません。技術的な知見はもちろんですが,先週も書いたように人とのふれあいもJavaOneの醍醐味です。

世界中からJavaOneに参加した人たちと顔を合わせてコミュニケーションをすることはとてもエキサイティングなことです。ここかしこで,Javaに関する議論が行われています。

筆者も,毎年参加されているブラジルの友人と年に1回JavaOneで会うことを楽しみにしています。

JavaOneは朝8時30分から夜の11時30分までびっしりとセッションが組まれ,そのほかにも様々なイベントが用意されています。毎年,寝不足でふらふらになるのですが,それでも楽しくてしかたありません。

筆者の筆力ではなかなかこの雰囲気をお伝えすることが難しいのですが,少しでもその雰囲気が伝わればと感じています。

著者紹介 櫻庭祐一

横河電機の研究部門に勤務。同氏のJavaプログラマ向け情報ページ「Java in the Box」はあまりに有名