torutkのブログ

ソフトウェア・エンジニアのブログ

JavaOne Tokyo 2012の1日目

本日・明日と、JavaOne Tokyo 2012が六本木アカデミーヒルズ49で開催されています。日本でのJavaOne開催は2005年以来なので7年ぶりです。

今回のJavaOne Tokyoは申込み開始後早い段階(1か月ほど)で定員に達してしまい、申込み機会を逸してしまいましたが、3月になって追加募集が行われ、そこで申込みすることができました。なお、セッションについては既に満席が多数あり(キーノートも含め)、セッションの登録に選択の余地はほとんどありませんでした。

ですが、残っていたセッションはClient JavaやEmbedded Javaで、聞きたい対象になっていたので、まったく明後日なものではなかったのが幸いです。仕事として開発に携わったソフトウェアは、Web系はまったくなく、クライアント/サーバー(分散処理)系、組み込み系、デスクトップ系が主なので、今回は今まで日本で開催されたJavaOneやJava Tech DaysのようなWeb系が主でJava SEが少々、というのに比べてセッションのバランスもよいと思います。

組み込み系では、PowerPCやARMプロセッサのCPUボード/PDAに、LynxOS/VxWorks/Windows CEといった環境でC/C++での開発をしてきたので、この分野に最近のJavaがどう展開されているのか情報収集をする目的が1つ、あとはJava SE系の最新技術情報を得るのが目的です。

なお、登録できなかったセッションも、キャンセル待ち列に並べば入れることが分かったので、いくつか登録してないセッションも聞くことが出来ました。今日は以下セッションを聞きました。

  • Introduction to JavaFX 2.0 (jt12_s101)
  • Embedded Java: Smart, Connected, Pervasive (jt12_s112)
  • JavaFX + FXML + CSS = Javaの次世代GUI (jt12_s123)
  • Projected Lambda: To Multicore and Beyond (jt12_s131)
  • OSGiの概要と動向 (jt12_s141)
  • ARM & Oracle Java ME Session (jt12_s152)

Introduction to JavaFX 2.0

JavaFX 2.0の全体像をつかめました。既に本ブログでJavaFX 2.0プログラミングをはじめていますが、かいつまんで全体像を把握することがむずかしかったので、ちょうどよい機会でした。

JavaFXの主要機能を一通り説明し、JavaFXならではのデモプログラムを最後に複数紹介するという流れです。

JavaFXの中核となる概念:シーングラフは、有効非循環グラフでGUI部品の親子関係を定義するものです。
JavaFXは、派手なエフェクトについ気が向いてしまいますが、表(Table)、図(Chart)もあります。図については、従来はJFreeChartを使うところが、ある程度標準(Java SEに正式採用されたらですが)でも対応できるようになるのが嬉しいです。

今回、バインディングの説明が収穫でした。ドキュメントを見てもなかなか理解できなかったバインディングですが、セッションの説明でその特徴が頭に入りました。なお、ハイレベルAPIとローレベルAPIがあるとのことです。ハイレベルAPIでは、プリミティブ型、Object型、String型に対応するDoublePropertyなどのプロパティクラスのインスタンス同士をbind/unbindやbindBidirectionalなどのメソッドで関係付けするというものです。

デモは、JavaFX Ensemble (JavaFX 2.0の機能を網羅した、SwingSetのJavaFX版の位置づけのようなデモ)、スタイルシートを動的に切り替えるもの、JavaFX Book(本をめくるような操作/動作で各ページには動くGUIが張り付けられている)などインパクトが大きいものがありました。

Embedded Java: Smart, Connected, Pervasive

2000年過ぎ頃のJava ME(CLDC)で知識が止まっていましたので、今回10年分の知識の再構築ができました。
JavaCard、Java ME (CLDC)は今も健在ですが、それらよりもCPU/リソースの大きい組み込み計算機向けには、

があることを知りました。Java SE Embeddedは言葉だけ聞いていたのでどんなものか知るのが今回の目的の1つでした。

Java SE Embedded は、言語仕様、APIはフルセットのJava SEのまま、フットプリントを小さくし、組み込み系でよく用いられるARMプロセッサやPowerPCプロセッサに対応させたものとのことです。

OJECは、Java SE 1.4.2をベースにCDC Profileとしたもののようです。こちらはHotSpot VMではなくCDC VMとなっています。

Java適用事例の紹介、ARM/LinuxNetBeansで作成したプログラムをデプロイしリモートデバッグするデモ、などがありました。

JavaFX + FXML + CSS = Javaの次世代GUI

シーングラフの概念を丁寧に説明していました。分かりにくいところなので、よかったです。
FXMLは、前に手を出したらはまって(このセッションで説明のあった通りスキーマがないので、要素の指定が正しいのか分からず、結局APIを理解していないと手では書けない)挫折していたので、ちょうどこれもよかったです。

JavaFX 2.0は、GUI部品の構成をコード(JavaAPI)で記述すると、手続き型のプログラミングでコンポジットパターンの実装で記述されたコードから階層構造が読み取りにくいので、XMLで記述したFXMLの方が階層構造の読み取りが容易ということです。

ただ、FXMLは間違いを正すのが大変で(スキーマがないので、間違った記述をしてもバリデーションできない)、FXMLを手で書くものではない、という説明でした。
FXMLはツール(Scene Builder)で生成するということです。なお、Scene Builderについては、プレビュー版が以下URLから辿ってダウンロードできました。

CSSについては、GUIの構造と見た目を分離するという観点で、JavaコードやFXMLには見た目を指定しないのがよいとのことです。分離されていれば画面デザインを分業できるというメリットがあります。

Projected Lambda: To Multicore and Beyond

なぜラムダ式を導入するのか、が丁寧に解説されていました。

また、ラムダ式導入によって既存APIを(互換性を維持しつつ)ラムダ式対応に進化させたいが、JavaのinterfaceベースのAPIでは互換性の維持が難しい(メソッドをinterfaceに追加すると、interface実装クラスに手を入れる必要がある)ので、デフォルトメソッドが導入されます。

ちょっと意外な文法の導入として

FileFilter x = File::dcanRead;

のような記載ができるようになるようです。

デフォルトメソッドの応用例としてEnumerationのAPIiteratorに進化させる例がありましたが、なるほどと思いました。API進化としてXX2, XX3のように型を乱発するMicrosoft(COM)流ではなく、より洗練された方法になるのではと感じました。

OSGiの概要と動向

前のLambdaと同じ部屋で、隣の人と腕がぶつかるぎゅーぎゅーな椅子に2時間座っていたせいなのか、肩こりで体調が悪く離脱したいが前から3列目で出れる状況にもなく、厳しい状態でした。

内容はさておき、プレゼンターがやたら「えー」を連呼するので気になって内容に集中できませんでした。伝えたいことが何かがよく見えず、淡々としたものでした。

コードにまで踏み込んだ具体的な題材があった方がよかったのに(スーツ属向けなプレゼンだったのですね)。

ARM & Oracle Java ME Session

ARMは10年前にWindows CEPocketPC)ベースのPDA用ソフトウェアを作った時に縁があったきりですが(携帯電話ではお世話になってますが)、その後のARMプロセッサの流れが分かって個人的にはよかったです。

Java SE Embedded 7について詳しく説明があったのが収穫でした。

Client JIT、Server JITとARM版にも両方があり、ARMプロセッサ機能を使った最適化が実装されているようです。

体調管理

セッションが1時間、間の休みが15分ですが、会場が完全入れ替え制のため、休み時間は廊下で並んでいるので体が非常にきついです。また、メイン会場がぎゅうぎゅうに椅子を並べているので、隣と肩触れ合う状態です。エレベータが大変混雑するので、一度登ったら帰るまで降りれない中、ペットボトル1本では脱水気味にもなります。

夕方以降、体調悪化を感じたので、19:30-21:00のライトニングトークはパスして帰宅しました。

明日はセッション飛ばしてお茶しに外へ出る時間を設けようと思う・・・。