Raspberry PiでGroovy! #gadvent2012

G* Advent Calendar 2012もいよいよ最終日となりました。昨日は @shuji_w6e さんのJavaのテストコードからはじめるGroovyでした。

さて、7月に注文していた話題の低価格シングルボードコンピュータRaspberry Piがつい先日、ようやく我が家にも届きました。タイミングよく、Raspberry Pi上で動作するJDK 8の開発者プレビュー版(JavaFXも含む!)がリリースされたので、こいつをのっけて、さらにその上にGroovyをふりかけて遊んでみました、という話です。

1. Linux/JDKを載せる

詳しくはこちらをご覧ください(訳しておきました):
Raspberry Pi で JavaFX - かんたん3ステップ

ここでは実際にやってみてわかった注意事項などをいくつかあげておきます:

  • 電源コネクタはMicroUSB。デジカメでよく使われているMini-USBとは別物なので注意
  • 電源は5V、Model-Bでは700mA以上必要。スマホ充電用の電源ケーブルを購入したが、USB 3.0であれば900mA以上の給電能力があるのでMacBook Proなどからでも大丈夫との噂も。
  • SDカードについては、4GB/Class 4より大容量/高速のものは避けろ、とあったり、逆にJDKのドキュメントのようにClass 10で大容量推奨、などとさまざまな情報があり混乱している。私は余っていた4GB/Class 6のものを使ってみたが特に問題なし。
  • カードにイメージを書き込む際、Macで RPi-sd Card Builder を使う場合はイメージファイルのパスに空白が入っていないことを確認する。私は"Raspberry Pi"というフォルダに入れていてハマった。
  • ロケールはja_JP等に設定しない方がよい。コンソールや設定メニューが日本語になり文字化けしてしまうため。
  • sshは絶対にenableにしておくこと!(理由は後述)

2. JavaFXで遊ぶ

JavaFXのサンプルアプリがJDKの開発者プレビューと同じページからダウンロードできます:
http://jdk8.java.net/fxarmpreview/

以下のアプリが含まれています:

  • StopWatch
  • BouncingBall
  • Calculator
  • BrickBreaker
  • FXML-LoginDemo
  • SwingInterop
  • Ensemble

まともに動くのは上の5つだけで、それらもお世辞にも安定しているとは言えませんが。。

アプリを動かすには次のようにします:

java -Djavafx.platform=eglfb -cp /usr/local/java/jre/lib/jfxrt.jar:BrickBreaker.jar brickbreaker.Main

DオプションでEGLFBモードを指定します。これはX Windowなどを介さず直接OpenGL上で動作するモードで、現在唯一の選択肢です。JavaFXアプリが画面を占有して動作するので、コンソールから直接起動してかまいません。ただし、上記のアプリには終了ボタンなどがなく、このモードでは終了する方法がなくなるため、必ず別途sshでリモートログインしておき、psとkillで終了できるようにしておきましょう。

jfxrt.jarは(まだ)デフォルトではクラスパスに入っていないので、明示的に指定する必要があります。あとは、アプリ固有のjarファイルと、メインクラスを指定します。

下記はおなじみBrickBreakerとCalculatorが動作している画面です:

3. Groovyで遊ぶ!

Java SEが動くということはすなわちGroovyも動く、ということです!普通に最新版のGroovy 2.0.6をインストールして試してみました:

よしっ!groovyshとgroovyConsoleが動いているのがおわかりいただけるでしょうか?

今回のG* Advent Calendarの12/2分@tyama さんが作ったリズムボックスも動かしてみました:

(ちなみにRasberry Piにはスピーカはありません。HDMI経由でテレビから音がでています)

ここまで順調に動作しているように見えると思いますが、実は大問題が。遅い、とにかく遅すぎる。groovyshなんて立ち上がるまで30秒くらいかかります。grovyConsoleではキータイプについてこれません。実用はおろか、デモにも厳しいレベルです。Javaのパフォーマンスは悪くないので、何か特殊な原因があるような気がしますが、今回は調査が間に合いませんでした。ごめんなさい。

さらにこの先、GroovyFXまで進む予定だったのですが、JavaFXの実装が不完全(WebViewやMediaViewなどが未実装)な関係で、初期化時にエラーになってGroovyFXが起動できませんでした。残念無念!このへんも近い将来挽回できると思います。

まとめ。そしてOne More Thing...

以上、噂のデバイス、Rasberry PiでのGroovy実験レポート第一弾でした。注文してもなかなか手に入らないデバイスですが、最近は増産体制も整ったとの噂ですし、標準メモリも256MB→512MBにアップしています。三千円台で買えるわりにはかなり遊べるデバイスですので、まだの方はぜひ注文してみてはいかがでしょうか。

さて、これで2012年のG* Advent Calendarも完了です。参加していただいたみなさん、お疲れさまでした&ありがとうございました。最後に「プログラミングGroovy」の執筆チームからのクリスマスプレゼントとして、

プログラミングGROOVY別冊:第8章 Groovy 2.0の新機能
をお届けします!ニューキャストさんのmybetabookGrails製!)を使った、ペンギン本のバーチャル別冊です(無償)。本書を買われた方もまだの方にも楽しんでいただければ幸いです。

ではみなさん、Groovyな良いお年をお迎えください!