ブログトップ 記事一覧 ログイン 無料ブログ開設

Groovyラボ RSSフィード

2012-12-25

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が動作している画面です:

f:id:ksky:20121225215456j:image:w240 f:id:ksky:20121225215759j:image:w240

3. Groovyで遊ぶ!

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

f:id:ksky:20121225214402j:image:w640

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

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

D

(ちなみに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の新機能

をお届けします!ニューキャストさんのmybetabook(Grails製!)を使った、ペンギン本のバーチャル別冊です(無償)。本書を買われた方もまだの方にも楽しんでいただければ幸いです。

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

2012-06-15

複雑なアニメーション(SVG版のGroovyFX版)

id:the48さんが前のエントリのサンプルアニメーションのSVG版を書かれていました:

複雑なアニメーション(SVG版) - IT素人がIT機器を弄ったり妄想したりする日記

JavaFXに含まれている内蔵ブラウザSVGをサポートしているので、実はこのSVG版もJavaFX/GroovyFXで簡単に動かすことができます。

以下はGroovyFXで書いた例です。SVG部分はid:the48さんのをコピペしました。

JavaFXのWebコンポーネントについては下記もどうぞ:

2012-06-13

複雑なアニメーション(GroovyFX版)

f:id:ksky:20120613164756p:image:w360:right

id:skrbさんがJavaFXでのアニメーションについて

複雑なアニメーション - JavaFX in the Box

というとても勉強になる記事を書かれていたので、同じアニメーションのGroovyFX版を書いてみました。*1GroovyFXには、シーングラフの構築だけでなく、タイムラインの記述も簡潔にできる機能があり、この例ではそれがかなり役立っています。

"cut here"のところで切り取れば、いま話題(!?)のGroovyFxPadにコピペして実行することもできます(上図)。GroovyFxPadで実行すると、いろいろなパラメータを変えながら動きを見ることができ、なかなか面白いものがあります。GroovyFxPadについては、id:kimukou_26さんやid:orangecloverさんの下記の記事が参考になります。

*1:できるだけオリジナルに忠実に書きましたが、微妙な違いもあります。また、GroovyFXPadにコピペしやすいように少し構造を変えています。

2012-04-22

GroovyFX 初の正式リリース(翻訳)

原文: Pleasing Software: GroovyFX First Official Release

http://2.bp.blogspot.com/-HSzaJlyitE4/T1OwmQKBttI/AAAAAAAAAZs/0uoERu-x7gI/s200/helloGroovyFX.png

GroovyFX v0.1が、Mavenのセントラルリポジトリから、またはGroovyFXのwebサイトから直接バイナリJarファイルとして(「Community」の下の「Download」リンクか、あるいはここをクリック)入手できるようになりました。このリリースはJavaFX v2.0.2と互換性があります。

GroovyFXをJavaFX v2.1開発者プレビュー版と一緒に使う必要がある場合には、GroovyFX v0.2のスナップショットを使う必要があります。このポストの後半部分でその例を示します。

Grab対応

GroovyFXがMavenセントラルにあることで(SonatypeのOSSホスティングのおかげです!)シンプルなテストから大きなプロジェクトまで、どんな場面でもGroovyFXを簡単に使えるようになります。GroovyGrapeシステムの一部であるGrabアノテーションを使った、次のシンプルなスクリプトを考えてみてください。

このスクリプトは、以下のようにしてコマンドラインから簡単に実行できます

groovy -classpath $JAVAFX_HOME/rt/lib/jfxrt.jar helloGroovyFX.groovy

プロの小技:GroovyFXプロジェクトのフェロー・メンバであるDierk Königは、どのGroovyスクリプトでもJavaFXライブラリを利用できるようにする、以下の小技(このページでも説明されています)を提案してくれました:

mkdir ~/.groovy/lib
ln -s $JAVAFX_HOME/rt/lib/* ~/.groovy/lib/ 

これで次のようにタイプできます:

groovy groovyFXHello.groovy

プロジェクトのビルド

GroovyFXは、次のGradleスクリプトで示すように、単にビルドファイルの依存関係にそれ自身を含めることにより、より大きなGradleMavenプロジェクトの一部になることができます。

このビルドスクリプトは、JavaFXライブラリを見つけるためにJAVAFX_HOME環境変数を使っています。また、MavenセントラルリポジトリにあるGroovyFX 0.1への依存関係を宣言しています。

さらに、Dierk考案のmakeDirsタスクも取り込んであります。このスクリプトをプロジェクトのルートディレクトリにコピーしておけば、gradlew makeDirsを実行して、src/main/ や src/test といったディレクトリを含んだ、標準的なMaven/Gradleのプロジェクト構造を作ることができます。

次に、前述のGroovyFXのHello Worldスクリプトを src/main/groovy ディレクトリにコピーします(ここでは、Gradleビルドスクリプトの中でGroovyFXへの依存関係を明示的に宣言しているので、@Grabアノテーションは削除します)。そしてgradlew clean runを実行すれば、プロジェクトがコンパイルされ、実行されて、このポストの冒頭に示したウィンドウが表示されるはずです。

Mavenスクリプトは自虐的な読者の方への課題とします。

GroovyFX 0.2-SNAPSHOT の利用

最新のJavaFX 2.1開発者プレビュー版と一緒に使いたい場合には、最新のGroovyFX 0.2ライブラリのスナップショットを入手する必要があります。Sonatypeのリポジトリには、最新の0.2に対応したスナップショット版もあるので、前述のGradleビルドスクリプトを以下のように変更すれば使うのは簡単です。

ひとつ注意すべき点は、GroovyFX 0.2ではスタートアップの構文が少し変更されたことです。SceneGraphBuilderを明示的に生成する必要はなくなりました。これは自動的に生成され、delegateとしてstartクロージャに渡されます。以下のスクリプトは、GroovyFX 0.2と互換になるように修正したHello Worldの例です。

以上です!ぜひこの新しいリリースを試して、問題点改善提案などをお聞かせください。

2011-12-03

LupinFX

MacLupinルパンっぽいもの - ゲンゾウ用ポストイットにインスパイアされて、GroovyFXで作ってみました:

D

ソースはこちら: