今日は James Golsing の General Session があるので、早起き。
Alumni Lounge でごはんを食べて、7:30 に General Session の列に並びました。もちろん、かなり早い順番です。
さて、今年の JavaOne のテーマは Java + You ですが、パビリオンでは無料で Java + XX = YY という T-Shirt を無料で作ってくれます。もちろん、XX と YY の部分は好きな言葉を入れらます。
会場には業務用のアイロンが持ち込まれていて、そこでアイロンプリントしてくれるというわけです。
というわけで、できあがるまでの工程を写真で撮ってきました。
ということで、今日櫻庭が聴講したのは
- General Session
- Technical Session
- TS-6623 More "Effective Java"
- TS-5657 JavaFX Technology: Bring the Web with You - Multiple Interfaces to Games, Chat, and More
- TS-4883 Advanced Java NIO Technology-Based Applications Using the Grizzly Framework
- TS-6206 JVM Challenges and Directions in the Multicore Era
General Session
General Sessionは今年も DJ Anna によるパフォーマンスから。この人、写真だけを見ていると、ほんとにマネキンみたいです。
さて、今日も John Gage の MC ではじまります。
彼は初日にデモをした Sentilla Mote がいたくお気に入りのようで、今日も Sentilla のデモ。エスカレータのところに Sentilla をしかけておき、そこを通る人をカウントできるようにしたらしいのです。
モニタリングする方は、エスカレータの写真が表示され、人が 1 人通るごとに James Gosling がエスカレータに乗るというもの。これはおもしろい。
そして、次のスピーカーである James Golsing を壇上に呼びました。John Gage が役目を終わって、壇から降りようとすると、James Gosling が John Gage を呼びとめるのです。
James Golsing がこれを見てくれと、ビデオが上映されました。
なんとそれは、JavaOne の顔、John Gage を讃えるビデオだったのです。一昨年は Scott McNealy、去年は James Gosling、そして今年は John Gage だったわけです。
James Golsing をはじめ、Scott McNealy、Jonathan Schwartz、Rich Green、そしてなんと Bill Joy まで出てきましたよ。それにしても、Bill Joy はカッコイイ。
わざとドキュメンタリーのコメントみたいに、側面からライトを当て、バックは暗くして、コントラストを高くした画像だからかもしれませんが、それにしてもカッコイイです。
ビデオが終わったら、James Gosling が「いつも、投げる方ばかりでもらったことがないだろう」と、T-Shirt スローで使われる T-Shirt を John Gage にプレゼント。
その後、Jonathan Schwartz、Rich Green、Chris Melissinos が壇上に。Jonathan の手には Golden Duke が。
それを送られた John Gage はちょっとウルウル来てましたね。
そして、James Gosling の General Session に移っていきます。
彼のセッションはいつものごとく、彼が興味を持っているものをいろいろと集めた楽しいセッションです。
紹介されたものは、次の 11 種類です。
- VisualVM
- JavaScript Support in NetBeans
- Java on NVidia APX 2500
- Java Games (jMonkeyEngine) and Project Darkstar
- Java Card 3.0 (Robocode)
- Sentilla Mote
- Livescribe Pulse
- Real Time Java
- Tommy Jr.
- JMARS
- CERN
VisualVM は今年の JavaOne ではもう何度も出てきてますね。NetBeans の JavaScript サポートはなかなかよさげ。Firefox と協調してデバッグもできます。
APX 2500 での OpenGL ES のデモは JOGL の BOF で見たものと同じです。jMonkey Engine と Project Darkstar を使ったゲームはシミュレーションのようでした。かなり凝った演出も可能なようです。
NetBeans の Tor Norbye、JOGL の Ken Rusell、Project Darkstar の Chris Melissinos は James Gosling の General Session ではもうおなじみ。登場するときに、「今年はなにをみせてくれるんだい?」的な会話が交わされています。
次が Java Card。Java Card が General Session で登場するのなんてかなり久しぶりのような気がします。かつて、VISA の人が General Session に出て、そのとき一緒に Michael Jordan が出たんですけど、ご存じでしたか?
Java Card 3.0 ではかなり機能強化されたようです。デモでは、Robocode のプログラムを Java Card で動作させて対戦させてました。事前にプログラミングコンテストがおこなわれており、この場で決勝戦がおこなわれたのでした。
次が Sentilla Mote。ここでは、大きいビーチボールの中に、Mote をしかけておいて、ボールの位置をモニタリングするというもの。
そして、Livescribe の Pulse です。Pulse はボールペンなのですが、なんとペン先にカメラが仕込まれてあります。そして、もちろん Java (CLDC) も動作します。
カメラからの画像を認識して、文字を読みとったり、単語を訳したりできます。それだけでなく、ピアノの鍵盤を模したマス目を書き、そこをポインティングするとピアノの音が出てくるというすごいペンです。
会場でも販売していたのですが、悩んだすえ買いませんでした。ちょっと後悔しています。
次の Greg Bollella による Real Time Java のデモも JavaOne 恒例。今年はパチンコの玉と同じくらいの色つきの玉をパイプの中を走らせるというもの。パイプにはフリッパーがついていて、玉が来るとフリッパーが玉を打つのです。それだけでなく、カラーセンサが設置されており、玉の色によって走路を変更することができます。
今まで Real Time Java は、リソースの大きなシステム向けのものが多かったのですが、今回はファクトリーオートメーション的なもの。ちょっと方向性を変えてきたのかもしれません。
工場やプラントでは、制御用の特殊なネットワークであるフィールドバスが使われています。フィールドバスにはいくつか種類があるのですが、ここでは Profibus を使ってラダーを制御してました。
とはいうものの、今回のデモも Java SE で動作する Real Time VM であり、CDC などの Java ME で動作するものではありません。CDC で動くといろいろと楽しいことできるんだけどなぁ。
Tommy Jr. はおととし出展されていた Tommy の新型。今回の Tommy はトヨタの Scion xB がベースになっているので、前回に比べるとかなりスマート。それでも、センサ類がたくさん車体につけられているのは異様ですが。
JMARS は Gosling お気に入りの火星のお話し。とはいっても、ローバーを直接制御するのではなく、ローバーのミッションプランニングや、ローバーなどから送られてきた各種情報を解析するためのツールです。
そして、最後が CERN で使われている各種の Java のシステム。Web といえば CERN ですが (といっても知っている人は少ないのかなぁ)、そちらではなくて本業の素粒子や原子核の研究の方。
この研究を支援するためのツールが Java で作られているらしいのです。これもなかなすごいです。
Technical Session
今日はいろんな意味でいまいちでした。Effective Java はよかったのですが、その後の JavaFX はイマイチ。Josh Marinacci なので、Extreme GUI Makeover の JavaFX を期待していたのですが...
そのころから昨日ひいてしまった風邪が悪化。集中力がかなり落ちてしまいました。そのせいもあって、次の Grizzly は全然理解できませんでした。その後の JVM Challenges にいたっては、座ったとたん落ちてしまったらしく、全然記憶がないのでした ^ ^;;;
TS-6623 More "Effective Java"
このセッションも Joshua Bloch の JavaOne 名物セッション。名物セッションなので人気があります。なので、はじめから 2 回おこなわれることになっていました。なので、今日は 2 回目のセッションです。
しかし、今年は Joshua Bloch のもう 1 つの名物セッションである Java Puzzlers がないのが寂しいですね。
そういえば、今年の JavaOne では Effective Java 2nd edition の先行発売がおこなわれています。2nd edition では、J2SE 5.0 の言語仕様変更にあわせて、かなり項目が追加されています。これから買う人がいるのであれば、絶対に 2nd。すでに持っている人も、買い換える価値が十分にありますよ。
JavaOne の本屋さんでは、Joshua Bloch のサイン会がおこなわれたのですが、すごい長蛇の列。予定の時間をとうに過ぎていても、列がいっこうにへる様子がありません。1 時間以上、時間を延長したらしいです。もちろん、櫻庭は Effective Java 買いましたよ。サインはもらえませんでしたけど。
さて、Effective Java のセッションです。
このセッションも 2nd edtion で追加された項目をベースにされていました。
はじめがジェネリクス。ジェネリクスの中でも、ワイルドカードの使い方です。
ワイルドカードを使うときの基本は PECS。PECS とは Producer extends, Consumer super の略です。
たとえば、コピーを考えた場合、コピー元は <? extends T> を使い、コピー先は <? super T> を使うというわけです。
また、戻り値にはワイルドカードは使わないようにします。
次が enum。
enum は特殊なクラスなので、いろいろと拡張することが可能です。たとえば、独自のフィールドを持つこともできます。たとえば、ordinal() メソッドを使うような場合は往々にして独自のフィールドを持った方がスマートに書くことができます。
// こう書いてはダメ!! public enum Ensemble { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET; public int numberOfMusicians() { return ordinal() + 1; } }
このように書くのではなく、下のように書きます。
// この書き方の方が Good! public enum Ensemble { SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUINTET(5), SEXTET(6), SEPTET(7), OCTET(8), DOUBLE_QUARTET(8), NONET(9), DECTET(10), TRIPLE_QUARTET(12); private final int numberOfMusicians; Ensemble(int size) { numberOfMusicians = size; } public int numberOfMusicians() { return numberOfMusicians; } }
このように記述することで値が重複するときでも、また値が追加、変更されるときでもコードの変更が少なくてすみます。
また、ビットフィールドを int を使って実現することも、タイプセーフでないことや、32 bit 以上の扱いなど、いろいろと問題があります。ビットフィールドを扱う場合は EnumSet を使うようにします。同じように EnumMap もいろいろと活用ができます。
櫻庭は EnumSet も EnumMap も知っていたのですが、enum によるシングルトンパターンは気づきませんでした。たとえば、下のコードはシングルトンでしょうか?
public class Elvis implements Serializable { public static final Elvis INSTANCE = new Elvis(); private Elvis() { } private final String[] favoriteSongs = { "Hound Dog", "Heartbreak Hotel" }; public void printFavorites() { System.out.println(Arrays.toString(favoriteSongs)); } private Object readResolve() { return INSTANCE; } }
もちろん、違います。理由は考えてみてください。
enum を使ったシングルトンは次のように書きます。
public enum Elvis { INSTANCE; private final String[] favoriteSongs = { "Hound Dog", "Heartbreak Hotel" }; public void printFavorites() { System.out.println(Arrays.toString(favoriteSongs)); } }
この使い方は思いつきませんでした。
0 件のコメント:
コメントを投稿