2012/10/01

JavaOne 2012 Day 2

このエントリーをはてなブックマークに追加
_DSC0500

昨日は Keynote だけだったので、実質的には今日が JavaOne のスタートです。

Facebook の今日の備忘録

今年の JavaOne はテーマごとに会場が別れています。Java SE と JavaFX は Hilton Hotel、Java EE は Parc 55、Java ME は Nikko Hotel です。

櫻庭は Java SE と JavaFX のセッションしか聴講する予定がないので、ずっと Hilton。去年のようにホテルを渡り歩くのも大変なので、今年のようにテーマごとに別れているのはいいですね。とはいうものの、たまには他のホテルも見てみたいとは思いますが ^ ^;;

さて、今日聴講したセッションは次のとおりです。

それにしても、16:30 から BOF って早すぎないですか? テクニカルセッションより BOF の方が多く聴講したなんてはじめてです。

今日の Tech Session ははずれなし。みんなそれぞれおもしろかったです。

BOF は JavaFX のレイアウトのセッションが Scenen Builder のデモばかりで、あんまり役に立つことに言及してくれなかったのが残念。Facebook に書いたメモをいちおうあげておきます。

ところで、この BOF のスピーカーは Jean-François Denise。Jean-François は以前 JMX のチームにいたのですが、Scene Bulder のチームに変わったみたいです。

次の、JVM Performance BOF は Q&A セッション。Q&A セッションは取りあげる話題に対して興味があり、実際に何か聞いてみたい人にとっては有用なんですが... やっぱり、英語での Q&A はきついんですよね ^ ^;;

ほとんど聞き取れず、あえなく撃沈。

Lessons from Mathmatics は Project Coin の Joseph D. Darcy のセッション。数学的な見知からプログラム開発に役立てようという話でおもしろいんですけど、難しい。正直、blog に書けるほど理解できているかどうかおぼつかないので、とりあえず Facebook のメモで許してください。


_DSC0682


Jean-François さん

_DSC0790


Joseph さん

Technical Session

CON4616 What's New in JavaFX - Richard Bair and Jasper Potts

Facebook に書いたメモ

昨日の Tech Keynote があんな調子だったので、まったく JavaFX のテクニカルな情報がなかったわけです。JavaFX が Win, OS X, Ubutu, Linux/ARM で動くのなんか知っているしね。

で、このセッションが実質的な Tech Keynote になります。スピーカーも Richard Bair と Jasper Potts という JavaFX の二大巨頭ですし。

Richard は今日も服が黒。黒が好きなんでしょうね。

前半が最新バージョンの JavaFX 2.2 について、後半は JavaFX 8 について。

ちなみに JavaFX 8 は以前は JavaFX 3.0 というバージョンでした。でも、JavaFX が Java SE に正式に取り入れられることが決まったので、Java SE のバージョンに合わせて 8 ということになったわけです。

Java SE に含まれてしまった後は、Swing と同じようにバージョンはなくなります。Java SE 9 の JavaFX とか、Java SE 10 の JavaFX というようになるわけです。

で、まず JavaFX 2.2。

Richard のお気に入りの機能は Canvas、Jasper は PixelReader だそうです。前者は Java 2D を使った描画と同じような機能を持つコントロール、後者はイメージのピクセル情報を読み出すためのクラスです。

Canvas は今や HTML 5 の Canvas と同じようなクラスと行った方が通りがいいかもしれません。

使い方はほんとに Java 2D に似ています。Java 2D の Graphics2D クラスに相当するのが GraphicsContext2D クラスです。GraphicsContext2D クラスに対し、drawRect したり、fillOval したりするわけです。

ところで、ここで Richard が出したソースコードが明らかに間違っている。JavaOne で示されたコードがそのままでちゃんと動くわけではないという、いい例です。

PixelReader クラスは Image クラスと、PixelWriter クラスは WritableImage と一緒に使います。WritableImage クラスは Image クラスのサブクラスなので、PixelReader は WritableImage でも、もちろん使えます。

でも、イメージをミニチュア風写真にするというデモがあって、ぼかしをダイナミックに変更できるのです。これはおもしろかった。

SnapShot はシーングラフのスナップショットをとってイメージに変換するクラスです。SnapShot よりも印刷の方が欲しいんだけどなぁ....

取得したイメージを保存するには、やっぱり BufferedImage にする必要があるんですよね。はやく Image I/O も JavaFX に対応してくれないかなぁ。

JavaScript-toJava は WebView の JavaScript と Java の連携に関する機能です。また、Pagination は複数のページを扱うコンテナクラスです。

後半は JavaFX 8 の機能。

代表的な機能として列挙されたのですが、それが昨日 Nandini が紹介したものとずいぶん違うのはどうなっているんでしょう。たとえば、このリストには印刷などは入っていません。どういうこと?

まぁ、それはそれとしても、その新機能のリストの中で唯一説明されたのが Rich Text。

えっ、他にも説明するものがあるんじゃないの? でも、Rich Text だけです。3D とか説明してよ!

気を取り直して Rich Text です。Rich Text を扱うためには TextFlow クラスを使用します。TextFlow クラスは、Text クラスのためのコンテナのようなクラスです。

Font regular = Font.font("Helvetica", 96);
    Font bold = Font.font("Helvetica", FontWeight.BOLD, 96);
 
    Text hello = new Text("Hello ");
    hello.setFont(regular);
 
    Text world = new Text("World");
    world.setFont(bold);
 
    TextFlow textFlow = new TextFlow(hello, world);

このように記述すると、Hello が普通のウェイト、World だけがボールドで描画されます。これは Text オブジェクトのフォントを直接指定していますが、CSS で指定することも可能です。

でも.... なんで、マークアップ形式にしなかったんでしょうね。マークアップの方が絶対にいいのに。たとえば、HTML のサブセットとか。

Swing のよさの 1 つにすべての文字列を HTML で記述できたことがあると思うのです。HTML のバージョンが低いのはしかたないとして、どこでも HTML で書けるというのはすごい便利だったんですけどねぇ。

絶対に HTML でマークアップできる方がいいと思うんだけどなぁ。

というわけで、ちょっと不満が残るセッションでした。


_DSC0150

右が Richard、左が Jasper

_DSC0162
CON4862 The Road to Lambda - Brian Goetz
_DSC0238

Facebook に書いたメモ

去年は登場しなかった Brian Goetz ですが、今年は 2 セッション。このセッションと、明日の CON6080 Lambda: A Peek Under the Hood です。

どちらも Project Lambda に関するセッションです。今年はこれ以外にも Lambda のセッションがあって、Lambda の完成間近の雰囲気が漂っています。

それにしても、Brian は喋る時の特徴がすごいあっておもしろいです。2 ~ 3 分ごとに、一歩ステップバック、再びステップイン。

そして、ちょっとかかとをあげる。これが基本形です。

常にせわしくなく動いているわけではないのですが、自分の中でなにかしらのリズムがあるんでしょうね。

さて、セッション内容です。セッションでは、もう Lambda はあるもののという感じで、Lambda に関する説明はほとんどなし。重点はコレクションの API の方でした。

forEach から始まって、コンビネータの reverse と compose、バルク処理として filter、map など。

ここでバルク処理を扱うためのインタフェースとして Stream が登場。Lambda の ML で議論になっていたので、知っていたけど、ようやく公式に登場ということです。

今までは filter や map は Iterable のメソッドということになっていましたが、これからは Stream になるようです。で、Iterable の stream メソッドで、Stream オブジェクトを取得できます。

Stream インタフェースは遅延評価がデフォルトらしく、filter して map するなんていうのも結合して評価するようになるのでパフォーマンスも高いらしいです。

また、パラレル処理のための Splitable インタフェースは Stream インタフェースのサブインタフェースとなるようです。

CON7257 JVM Bytecode for Dummies (and the Rest of Us Too) - Charles Nutter
_DSC0309

Facebook に書いたメモ

JRuby の Charles Nutter がまじめにバイトコードを解説したセッション。今さらバイトコードですよ!!

先ほどの Lambda の部屋と同じ部屋なのですが、どう比べてみてもこっちのセッションの方が人が入っています。Charles 人気のせいなのか、Lambda の人気がないからなのか....

このセッションは明日の CON7263 JVM JIT for Dummies とペアになっているらしいです。明日の JVM JIT for Dummies の時間は他のセッションの予定だったのですが、予定変更して JVM JIT for Dummies を聞くことにしました。

ところで、Charles Nutter いつものごとく帽子をかぶっています。でも、RedHat の人になったのに赤い帽子じゃないんだね。

バイトコードを表すのに javap -c をしてという説明から入ったのですが、途中から BiteScript で書いた表記になっています。JRuby でバイトコードを扱うための DSL らしいです。

JVM がスタックマシンで、スタックマシンの動作を説明してから、個々のバイトコードの説明に入りました。

スタックに対する操作、コンスタントの扱い、ローカル変数のテーブルに関する操作、計算、フローコントロールと続きます。しかし、これは Dummies には分からないんじゃないかなぁ。

これが分かる人はこの説明ではちょっともの足りないような気もします。

最後は InvokeDynamic の説明。やっぱり、indy は登場するわけですね。

CON4082 Nashorn: JavaScript on the JVM - Jim Laskey
_DSC0581

今まで Oracle 内部で開発されてましたけど、やっと OpenJDK でオープンソースになることが決まった Nashorn です。ただ、メディアの扱いが OpenJDK に寄贈されたというように書かれていることが多いような気がします。

でも、寄贈というニュアンスからはちょっと違うような気がするんですよね。だって、OpenJDK のプロジェクトになっても、結局開発には何も代わりがなくて、コミットする先が社内の hg から、OpenJDK の hg になったというだけだと思うので。

Java SE 8 に入るには、OpenJDK 8 にも入れなくてはいけないので、オープンソースになるのは既定の路線だったはずです。

まぁ、それはそれとして、セッションはおなじみのナスホンじゃなくて、ナズホンだよという発音ネタから。

クライアントサイドで Nashorn を使う場面として JavaFX との連携があるらしいです。FXML に JavaScript がかけるので、そういうところみたいです。WebView の JavaScript エンジンも Nashorn にすることを検討しているみたい。

サーバーサイドでは JSP やビジネスプロセスを JavaScript で記述する意外にも Node.jar プロジェクトや Avatar などで使われるようです。

Node.jar は Node.js を Nashorn に移植したものらしいです。

昨日の Keynote でも Twitter や IBM と協力していくことをいっていましたが、このセッションでも Twitter の人と、NetBeans の人がちょっとだけ喋っていきました。2 人ともファーストネームでしか呼ばないので、誰だか分かりません。もしご存じの方がいらっしゃいましたら教えてください。

さて、Java から Nashorn を使うには、Scripting API を使用します。getEngineByNameメソッドの引数は nashorn です。Java SE 8 になったら、JavaScript や ECMAScript でも取得できるようになるらしいです。

デモとして、テンプレートエンジンの mustache に Nashorn を使用するものと、JavaFX の花火のデモ。JavaFX のプログラムがそのまま JavaScript で書かれています。これはおもしろい。


_DSC0603

Twitter の Jim さん

_DSC0605

NetBeans の John さん

BOF

BOF4347 JavaFX Event System Walk-through - Eva Krejčířová
_DSC0729

明らかにアメリカ人とは違う雰囲気の人。セッションの後にスピーカー紹介を見たらフランスの人だった。どうりで!

まずはイベントに関するクラスのクラス図から。JavaFX のイベントは Event クラスがスーパークラス。MouseEvent などは InputEvent のサブクラスで、InputEvent クラスのサブクラス以外だと ActionEvent と WindowEvent があるぐらいです。

Event クラスはイベントの種類を表す EventType、Swing のリスナーに相当する EventHandler インタフェースなどを持ちます。

イベントはシーングラフを辿ってイベントが発生したノードを探し、再びルートまで登ってくるという動きをします。前者がキャプチャリングフェーズで、後者がバブリングフェーズです。

イベントのフィルタリングはキャプチャリングフェーズに行ない、イベントハンドリングはバブリングフェーズに行ないます。

イベントハンドリングするにはノードの setOnKeyPressed メソッドなどでイベントハンドラーを指定します。setOnKeyPressed イベントなどは内部で addEventHandler メソッドをコールしています。

addEventHandler メソッドはイベントタイプとイベントハンドラーの 2 つの引数をとるメソッドです。

Swing/AWT ではイベントリスナーはイベントの種類ごとにありましたが、JavaFX では EventHandler インタフェースだけです。というのも、ジェネリクスでイベントを指定できるので、1 つで済むわけです。

EventHandler インタフェースはメソッドが handle の 1 つだけ。ということは関数型インタフェースなので、Lambda 式でイベント処理を書くこともできますね。

JavaFX 2.2 からはマルチタッチイベントが使えるようになりました。もちろん、ジェスチャーも使えます。マルチタッチを扱うイベントは TouchEvent です。

組み込まれたジェスチャーとしては 2 本の指で回す動作をする回転、ピンチアウト・ピンチインのズーム、1 つの指で前後もしくは左右に動かすスクロールがあります。

BOF5112 Thermostat: An Open Source Instrumentation Tool for the HotSpot JVM - Mario Torre, Roman Kennke

私が聴講するセッションは木村さんと小出先生と一緒になることが非常に多いのです。特に木村さんとは 6 ~ 7 割ぐらい一緒だったんじゃないかなぁ。

でも、このセッションは珍しく、末永さん、高雄さんと一緒でした。末永さんが一緒ということは JVM に関するセッションです。

Thermostat は RedHat で開発している、JVM の監視ツールです。私はぜんぜん事前知識がなかったのですが、末永さんと高雄さんはウォッチしていたらしいです。さすがです。

このセッションも RedHat の 2 人。どちらも赤い帽子かぶってますよ > Nutter さん

Thermostat は VisualVM に非常に似た立ち位置のツールですけど、拡張性とかがずいぶん違うらしいです。VisualVM は NetBeans Platform で作られたものだけですが、Thermostat はクライアントにスタンドアロンのアプリや Web、Eclipse のプラグインなどを提供しているらしいです。

とはいっても、Eclipse のプラグインはまだ見たいですが。

また、プラグインで機能を拡張することができるそうです。VisualVM もプラグインで拡張できますが、VisualVM のプラグインは画面のペインだったのに対し、もっと幅広い拡張になるようです。そして、プラグインは OSGi に対応しているのだと。

とはいうものの、まだスタンドアロン版のクライアントの GUI はかなりしょぼいです。今はまだ VisualVM に負けているな。

とはいうものの、これからが楽しみなツールです。


_DSC0753

Mario さん。帽子は恥ずかしいのか、かぶったり脱いだりを繰り返してました

_DSC0757

Roman さん

おまけ

_DSC0439

今年もやっぱり朝食は朝から出ません。なんで朝一のセッションの前に出してくれないのでしょう。結局、最終日まで朝食に出会うことがありませんでした。

昼ご飯もいつも通りのランチボックス。ところが、今年のランチボックスはおいしくなったという噂が。明日食べてみようっと!

それにしても、昼の時間帯にはランチ休憩はなし。その代わり 2 時から 3 時までが休憩です。でも、ランチボックスの配布は 2 時には終わっているので、この時間に食べようとしても食べられないんです。

なんか絶対おかしいよ!!

まぁ怒っていてもしかたないので、Candy Bar でお菓子をゲットしました。今年も Candy Bar があって、グミやチョコレートなどが取り放題。

今年は、Candy Bar の時間も長くなったので、それほど行列ができることはなくなりましたが、やっぱり行列します。

そして、今年は Taylor St. Cafe で昼間からビールが出されているらしいです。というか去年も出ていたのかもしれませんが、あんまり興味がないので ^ ^;;

そういえば、今年は JavaOne でもゴミは分別になりました。Compost と Wastee Only と Recycle の 3 種類。Recycle はペットボトルや缶、ビンなどは分かるのですが、雑誌や紙のバッグも書いてあってよく分かりません。

もっと分からないのが Compost と Waste Only の違い。残飯的なものは Compost というのは分かるのですが、例に出ている写真を見ても結局どっちに捨てればよく分からないんですよね。プラスティックは Waste Only なのかと思うと、ランチボックスの容器は Compost に書いてあるし。

生分解性プラスティックということなのかな? でも、生分解性とそれ以外の区別がよく分からないのです。結局、最後までよく分かりませんでした ><

Hilton の廊下に昨日の Keynote で登場した PandBoard を使った JavaFX のキオスク端末がおいてありました。もちろん、スケジュールビルダーが動きます。

特に問題もなく、普通に動きます。というか、JavaFX は CPU がプアーでも、GPU がちゃんとしていれば動いちゃうんですよね。ハードウェアアクセラレーションがいかに重要かが分かります。

ちなみに操作しているのは、山本さんです。


_DSC0408

_DSC0421

これが噂のランチボックス

_DSC0401

Candy Bar!

_DSC0505

どれでも取り放題

_DSC0424

ここでビールをもらえます。もちろんタダ!

_DSC0429

Taylor St. Cafe はコーヒーも常においてあります

_DSC0512

ゴミは分別して

_DSC0658

JavaFX のキオスク端末

_DSC0662

_DSC0672

0 件のコメント: