2009/12/11

JavaFX 勉強会

はてなの blog にも書きましたが、この日は JavaFX.jp の勉強会

場所は前回に引き続き IAjapan の会議室です。いつも使わせていただいて、ありがとうございます > IAjapan 関係者のみなさま

櫻庭はアニメーションについてお話ししました。ほんとは 1 時間のつもりだったのですが、1 時間半も喋ってしまいました。

いわゆるキャラクターアニメーションではなくて、GUI でよく使われるフェードなどのアニメーションに関する話。

アニメーションはうまく使えばとても効果的だし、ユーザビリティも向上します。でも、使い方を間違えると、とても使いにくくなってしまいます。

アニメーションを使うと派手になるので、カッコよさのためにアニメーションを導入すると、大概失敗しますね。あくまでも、アニメーションは使い勝手をよくするためと位置づけなくてはいけないと思います。

特に、場面が変化する、状態が推移するなど、ユーザが迷子になりがちなところで、迷子にしないようにアニメーションを使えばいいのではないかと思っています。

そこらへんが伝われば、櫻庭としては御の字です。

 

その他は、岡崎さんが Project MaiTai、片貝さんが NetBeans の JavaFX Plugin に関して、高橋さんがビデオエンコーダーの話。

たまたまですが、NetBeans の JavaFX Composer Plugin の日本でのお披露目となりました。Composer Plugin は NetBeans の GUI ビルダーのように GUI コンポーネントをぺたぺたと貼って GUI を構築できるというプラグインです。

でも、これはやっぱり開発者向けなんですよね。早いとこデザイナー向けのツールを出してもらいたいなぁ。

岡崎さん, 第 2 回 JavaFX 勉強会
岡崎さん
片貝さん, 第 2 回 JavaFX 勉強会
片貝さん。後ろに写っているのが、Composer Plugin
高橋さん, 第 2 回 JavaFX 勉強会
高橋さん

ラベル: , ,

2009/11/28

Java Küche 第 9 回勉強会

というわけで、Java Küche の勉強会で講演です。場所は琉球大学。

私は JavaFX で、もう 1 人の下東さんは Ruby on Rails。かなりかけ離れた話題ですね。

JavaFX なんて聞いたこともないという人も多いと思っていたので、今回も初心者向けです。いつものごとく GUI と構造の話しをしてきました。

意外にも時間が余ってしまったので、NetBeans 使ってライブコーディングまでしてしまいました。あいかわらず、時間配分がむちゃくちゃのようです ^ ^;;

また、ノベルティの T シャツとかを持っていって、質問してくれた人に配ったおかげもあったのか、いろいろと質問があったのでよかったです。

Java SE 7 の質問とかもあったのですが、あまり答えられなくてスイマセン。

ラベル: , ,

2009/11/14

沖縄にいきます

11/28 に沖縄の Java コミュニティの Java Küche の第 9 回勉強会でプレゼンします。

お題は JavaFX です。

詳しくは以下の URL へ。

http://www.java-kuche.org/modules/eguide/event.php?eid=14

沖縄のみなさま、よろしくお願いします。

ラベル: , ,

2009/08/05

JavaFX 勉強会

JavaFX ユーザグループで勉強会をしました。場所は新橋の IAjapan の会議室。

今回は何の話をしようか迷いました。JJUG の CCC や札幌の OSC で話したような一般の人向けの JavaFX の話だと、すでに JavaFX を触っている人には簡単すぎるし...

かといって、プログラムのこまかい所を説明してもしょうがないし...

ということで、シーングラフについて話をしました。

前半はともかく、後半はついて行けない人が多かったかもしれません。なんか聞いている人の反応が薄かったので ^ ^;;; 後で懇親会の時、yone098 さんにも指摘されてしまいました。

やっぱりコード説明するのは大変。

もう 1 つ、つらかったのが、UStream で勉強会をストリーミングしたこと。なぜかというと、とある人の PC をストリーミングに使わせてもらおうと画策していたら、その人が途中で帰らなければいけなくなってしまったのです。

しかたないので、私の PC でプレゼンしつつストリーミング。

普段はプレゼン用のワイヤレスマウスを使っているのでいいのですが、デモで PC を操作しなくてはいけない時が問題。だって、カメラが液晶の上に固定なので、普通に PC を操作すると私がドアップで写ってしまうのです。

なるべく写らないようにするため、変な位置から操作していたら、首がつりそうになってしまいました ^ ^;;

さて、私以外の話は、id:hide1080 さんの WidgetFX と、id:yone098 さんの AMF 通信の話

id:hide1080 さんは、こうやって人前で話すのは初めてということでかなり緊張してましたね。

座って話したいというのに、私がムリヤリ立たせてしまいました ^ ^;; だって、座って話しているのと、立って話しているのでは、聞いている人たちへのインパクトが全然違うのですから。

できれば、PC の画面ばかり見ていないで、聞いている人たちの方をもうちょっと見られれば、もっとよかったですね。

id:yone098 さんはもっと俳句を出してくれるかと思ったら、意外に少ない。ほんとは時間も 10 分もあればいいといっていたのが、30 分以上話していたのはないしょ ^ ^;;

小林 秀樹さん, 第 1 回 JavaFX 勉強会
id:hide1080 さん
米林 正明さん, 第 1 回 JavaFX 勉強会
id:yone098 さん

ラベル: ,

2009/07/10

Java Edge の JavaOne 報告会

で、JavaOne 報告会です。

場所はナディアパークにあるオラクルの中部支社。

去年もこの場所で JavaOne 報告会がありました。でも、会場に行ってみると、去年とちょっと違う。あれっ、こんなだったったけ?

そしたら、セミナールームの場所を移したのだと。あぁ、そうでしたか。

話の分担は下道さんが Sun のジェネラルと Cloud 関連の話題、私が Java SE と JavaFX です。

というか、3 回とも内容同じです。ごめんなさーい。

ただ、前振りとして、JavaOne がこんなところで行なわれているとか、セッションの様子はどうなっているかなどを写真で紹介しました。まぁ、いってみれば IAjapan の JavaOne 報告会で大山さんが喋っていた内容のダイジェストみたいなものですね。

ラベル: , , ,

2009/07/04

今度は JJUG の JavaOne 報告会

ということで、JJUG の JavaOne 報告会です。

IAjapan の JavaOne 報告会では、前振りに Java FE について話しましたけど、ここではなし。すいません、本編は IAjapan の時と同じです。

さすがに、これだけ過密スケジュールで資料を作り直す時間がありませんでした。

資料をすばやく作成ということができないタチなんです。ただでさえ時間がかかるのに、今は JavaFX で作っているのでなおさら時間がかかってしまいます。

1 枚 1 時間を切ることはなくて、ちょっと凝り出したりすると 1 枚しあげるのに 5, 6 時間かけてしまったりします。

ということで、ちょこちょこと変えてある部分はあるものの、基本的に同じ話です。もし IAjapan の JavaOne 報告会に出ていた人がいたら、謝ります。ごめんなさーい。

JJUG の JavaOne 報告会では、LT をやるのが恒例なのですが、なんせ今年は JavaOne に参加した人が少ないので LT も少ない。

ちょっと淋しいので、飛び入りで LT もやることにしました。もちろん、事前に資料は用意はしておきましたけどね。

話した内容は、6/7 の最後に書いた食べ物の話です。

私の前の杉山さんも馮さんも、ちょっと固めの話だったので、軟らかい話もあってもいいでしょう。

LT の時間が余っていたので、何分でもいいといわれたのですが、結局 20 分近く喋っていたそうです。これじゃ、LT じゃないですね。スイマセン。

ラベル: , , ,

2009/07/01

IAjapan Java 研究部会 JavaOne 報告会

JavaOne 2009 報告会, IAjapan Java 研究部会 JavaOne 2009 報告会, IAjapan Java 研究部会

去年は IAjapan Java 研究部会と JJUG が一緒に JavaOne 報告会を行なったのですが、今年は日程が折り合わなかったらしく、別々に行なうことになったようです。

JavaOne に日本から参加した人が少ないということから、両方の JavaOne 報告会からお声をかけていただきました。

今日は Java 研究部会、いわゆる旧 Java カンの方。

Java 研究会の JavaOne 報告会では恒例の大山さんのフォトセッションから。

大山さんは目のつけ所がおもしろいんですよね。写真を見ててもとても勉強になります。「あぁ、こういう撮り方があったか!」という気づきがいっぱい。

次が私のセッション。

私は ITpro に書いたもののダイジェスト版のような形です。当然のことながら、Java EE は話せないので、Java SE と JavaFX です。

それだけ喋るのもナンなので、枕として Java FE について。

FE ってナンだと思いますよね。当然です。私が勝手に作ったものですから。FE は Food Edition です。まぁ、いうなれば JavaOne で何食べたという話です。それなりにうけたので、よしとしよう (笑)。

ラベル: , , ,

2009/06/20

今日のオープンソースカンファレンス Hokkaido

そんなこんなで OSC 開場の産業振興センターについたのが、2 時過ぎ。ちょうど Java カンファレンス放浪記をやっている最中でした。

この場所に来るのは 2 回目で、前に来たのは 2006 年の Java Festa の時 (実際には隣の札幌コンベンションセンタですが)。いつのまにかイーアス札幌なんてものができてました。

想定外だったのが、部屋が明るいのにプロジェクターが暗いこと。コンパクトタイプのプロジェクターで、暗いのです。

こういう場なのですから、もう少しましなプロジェクターを用意してもらいたいなぁ。

会場がどうなっているか確認できない場合、なるべく大きなフォントを使うのがプレゼンテーションの鉄則です。当然、私も大きいフォントを使っていたので、読めないことはないと思いますが、見づらかったのではないでしょうか。

さて、プレゼンです。今回も JavaFX の初心者用の話。構造をどうやって表すかとか、プログラミングはどうするのかなどです。

下のアプレットはクリックすれば進むようになっています。

ラベル: ,

2009/06/19

今日の JavaFX 1.2

明日のオープンソースカンファレンスのために札幌に前泊。ぜっかく札幌まで来ているのですから、札幌 Java コミュニティ渡辺さんに連絡をとって、勉強会をやっていただくことにしました。

Swing とかの GUI 系の話題がいいということであったので、Swing のスレッドモデルと非同期処理についてお話しすることにしました。

しかし、明日の資料作成が全然終わらない。

JavaFX のプレゼンツール Caraibe は JavaFX 1.1 で作っていたので、せっかくだから JavaFX 1.2 に対応させようと思ったのが運のつき。

安易に NetBeans の JavaFX Plugin を JavaFX 1.2 対応のものにアップデートしてしまったのです。

そうしたら、動かない、動かない。

もう JavaFX 1.2 をやめて 1.1 に戻そうと思ったのですが、プラグインのダウングレードってどうやるかよく分からないし... しかたないので、例外はでるけど動くというところで、妥協することにしました。

ドキュメントには書いていないところで変更されていたのが、Scene Graph プロジェクトの Scenario.jar に関する部分。ようするに、JavaFX の描画要素と Swing を連携させる部分です。

まず、Scenrario.jar がありません。しかたないので、JAR ファイルを展開して (といっても jar コマンドの t オプションで調べるだけですが)、対応しそうなクラスを探すというところから。

その結果、javafx-sg-common.jar ファイルと javafx-sg-swing.jar の 2 つの JAR ファイルが Scenario.jar ファイルに対応することが分かりました。

今まで Node オブジェクトが貼られている Swing コンポーネントは

    var node: Node = ...;
    var pane: JSGPanel = node.impl_getSGNode().getPanel();

で取得することができたのですが、これができません。

var panel = (node.impl_createPGNode() as SGGroup).getPanel();

でパネルは取得できることがわかったのですが、どうもちゃんと Node オブジェクトが貼られているパネルではないようなのです。

この時点でこれはあきらめました。このため、ポップアップメニューで指定のページに移動することや、終了させることは省略。まぁ、プレゼン自体には影響ないので、大丈夫です。

この問題はもう少し時間をかけて調べれば、どうにかなるでしょう。Scene Graph プロジェクトのソースが公開されていれば、もっと簡単に調べられるのですが...

もう 1 点、分からないところがあります。

Caraibe ではマウスクリックによって、動的に Node オブジェクトを生成し、シーングラフに追加していきます。しかし、以下のようなメッセージと例外が発生してしまうのです。

WARNING * WARNING * WARNING * WARNING * WARNING
An attempt has been made to add node to a new group without
first removing it from its current group. See the class
documentation for javafx.scene.Node for further information.
This request will be granted temporarily but it will
be refused in the future. Please change your code now.
node=Group [id=background] oldgroup=Group newgroup=Group
Stack trace follows.
java.lang.IllegalArgumentException
        at javafx.scene.Group$_SBECL.onChange(Group.fx:162)
      <<以下、省略>>

この理由が全然分からない。例外が投げられている箇所の動的追加をやめたとしても、やっぱりまだ例外が発生します。

Caraibe 全体だと大きすぎるので、小さいサンプルを作って現象を再現させようと思ったのですが、普通に追加できます。

一体全体、なにがわるいんだろう。全然分からない。

幸いなことに、例外が投げられたとしても、動作はそのまま続けられるので、これも追求するのをやめました。クリックするたびに例外が投げられるのは気持ち悪いけど、背に腹は代えられません。

ほんとは札幌 Java コミュの勉強会に出るまでに、写真を撮りにいったり、なにか軽く食べたりしたかったのですが、断念。

今日は、朝からなにも食べていないのですごいおなかへっているのですが、しかたありません。

私がこうやってホテルで資料作り & デバッグをしている間、Java カンの人たちは、寿司食べに行って、その後ジンギスカンまで食べたというじゃないですか。いいなぁ。

ラベル: ,

2009/06/17

今日の活動予定

今週末から、怒濤のようにいろんなところで講演します。

ぜひ、ご参加ください。

あさっては札幌 Java コミュで勉強会。まだ定員に達していないようなので、札幌近郊の方はぜひ。

ありがたいことに、OSC は満員。でも、会場に行ってみると入れるかもしれないので、登録できなかった方でも、セッション前にのぞいてみてください。

その後の、JavaOne 報告会は Java SE と JavaFX に関して報告します。詳細はまだ決まっていないので、決まりしだいアップデートします。

ラベル: , ,

2009/06/05

今日の JavaOne 2009 Day 4

JavaOne 2009 San Francisco

今日で JavaOne もおしまい。これが最後の JavaOne になるかもしれないので、寂しさもひとしおです。

最終日はセッションも少なく、夕方 (といっても日は高いのですが) にはすべてのセッションが終わってしまいます。今日帰る人も多いので、午後になると人がとても減ります。

それにしても今年は参加者が少なかったですね。いつもであれば長蛇の列がつらなる James Gosling の General Session でさえ、それほど並んでいません。

朝、早起きして並んだのですが、全然人がこないので、拍子抜けでした。

JavaOne 2009 San Francisco

寂しいといえば、上の写真。

この写真は Moscone North の階段を降りたところにある今までの JavaOne T-Shirt で使われたキャラクターなどを使った大きいタペストリーの一部です。

全体は左の写真です。真ん中の建物の 2 階の奥の窓からのぞいている人がいるので誰かと思ったら... John Gage でした。彼もいなくなってしまったんですよね。

ということで、今日は次のセッションを聴講しました。

General Session

Technical Session

The Toy Show

James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco

去年は DJ Anna の演奏があったのですが、今年は何もなし。それはちょっと寂しすぎませんか?

Chris Melissinos, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
Chris Melissinos はよく動きます。静の John Gage、道の Chris Melissinos という感じ
James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
御大、James Gosling
Ari Zilka and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
Terracotta の Ari Zilka に Duke's Choice Award
Brendan Humphreys and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
Atlassian の Brendan Humphreys も Duke's Choics Award。でも、その Duke の持ち方はないんじゃない
Ian Utting, Poul Henriksen, Davin McCall and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
教育用 IDE の BlueJ のメンバ
Mark Gerhard and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
初日の General Session でも取りあげられた Java の FPS である Runescape の Mark Gerhard
Simon Ritter, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
Simon Ritter による JavaFX とプロジェクタのデモ。でも、これ去年の Sun Tech Days Tokyo でもやってたよ。しかも、立ち位置悪すぎ
Angela Caicedo, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
Angela Caicedo も JavaFX のデモ。透明ディスプレイに赤外 LED を仕込んだ手袋を使ってお絵かきするというデモ。こっちはおもしろかった
Tor Norbye and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
Tor Norbye は JavaFX Authoring Tool のデモ
Tor Norbye and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
JavaFX Authoring Tool
Fritjof Bogner Engelhardtsen and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
Telenor の Fritjof Bogner Engelhardtsen は SunSPOT に Java Card 3.0 に対応した SIM カードをつなげて、電話をしたりするデモ
Brad Miller, Derek White, Students from Mountain View and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
高校生が対象のロボコン FIRST Robotic Competition に優勝したチームとそのロボット
Brad Miller and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
フィールドにあるボールを拾って、相手のロボットのコンテナに多く入れると勝ち。ここでは拾ったボールを James Gosling に。
Sven Reimer and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
ND SatCom の Sven Reimer は NetBeansプラットフォームを利用した衛星トラッキングシステムをデモした
Chris Boone and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
Visuvi の Chris Boone はイメージ検索のデモ
Sam Birney, Van Mittal-Hankle and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
Grameen Foundation の Sam Birney と Van Mittal-Hankle はマイクロファイナンス用の情報管理システム
Manuel Tijerino and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
Check1two の Manuel Tijerino は Java/JavaFX を用いたジュークボックスを紹介
Manuel Tijerino and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
ジュークボックスに使うから 1 ドルくれと Gosling にせびる。General Session で Gosling に金をせびる人なんて初めて見た
Manuel Tijerino and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
せびった 1 ドルをジュークボックスに投入して、音楽を聴く
Zoltán Szabó, Balázs Lájer and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
Zoltán Szabó と Balázs Lájer は Richo のプログラミングコンテスト優勝者。コピー複合機を使ったアンケートの解析システム。でも、これ SQS に似てるよね
Marcial Hernandez, Greg Bollella and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
毎度おなじみ Realtime Java の Greg Bollella が連れてきたのは VM の Marcial Hernandez。VM の無人運転の研究を紹介。Golf GTi が無人でかっ飛ばしていた
Neil Young and James Gosling, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
Neil Young がリンカーンの電気自動車の LincVolt に乗って Gosling を訪ねた時のようす
Neil Young's LincVolt, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
これが Neil Young の LincVolt。UI に Java/JavaFX が使われているらしい
Chris Melissinos, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
最後に Chris Melissinos 再び登場
Chris Melissinos, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco
再び T-Shirt を投げておしまい

General Session の後、Sun の従業員が集まって記念写真。こんなのはじめて見ました。

少なくとも Sun が主催する JavaOne はこれでおしまいなわけでです。

Thank You!, General Session "The Toy Show" on June 5, JavaOne 2009 San Francisco Sun Employees Photo, JavaOne 2009 San Francisco

TS-5427 Inside Out: A Modern Virtual Machine Revealed

なんでもいいけど、話すスピード早すぎ。特に Tony Printezis。

昨日もそうだったけど、VM に関係する人ってみんな早口なのかなぁ?

VM、特に HotSpot のように動作中にダイナミックにコンパイルする VM に関して。HotSpot って、動作しながらプロファイルして、ホットスポットをネイティブにコンパイルするわけです。逆に使われないようになったらデコンパイルもします。

そういう VM の最適化について。たとえば、インラインとか。null にならないことが保証できれば、null チェックをネグってしまうなんて全然知りませんでしたよ。

内容はおもしろいのですが、資料の文字は多いし、早口だし、でついていくのが大変でした。

そういえば、質問の時間に、演台につかつかと近づいていく人が。誰かと思ったら Cliff Click でした。

Brian Goetz, TS-5427 Inside Out: A Modern Virtual Machine Revealed, JavaOne 2009 San Francisco
Brian Goetz
Antonios Printezis, TS-5427 Inside Out: A Modern Virtual Machine Revealed, JavaOne 2009 San Francisco
Antonios Printezis
John Coomes, TS-5427 Inside Out: A Modern Virtual Machine Revealed, JavaOne 2009 San Francisco
John Coomes

TS-4466 Move Your Users - Animation Principles for Great User Experiences

Chet Haase と Romain Guy のセッションといえば Filthy Rich Clients という名物セッションなわけですが、今年はなぜかタイトルが変わってしまいました。タイトルが変わってしまったため気づかなかった人が多いのか、最終日のせいか、聴講者は少なめ。おもしろいセッションなのにもったいない。

開口一番、Chet が "Welcome to the Filthy Rich Clients" というと、Romain がすかさず突っ込み。こんな感じで、漫才のようにセッションが続いていきます。タイトルも勝手に Animation Rules に変えちゃったりして。

でも、内容はかなり示唆に富んだもの。

ディズニーが出している The illusion of Life というアニメーションを作るための本と、Timing for Animation という本をベースに、漫画のアニメーションと GUI のアニメーションで通じるところ通じないところを比較しながら、効果的なアニメーションについて考えていくセッション。

まずは、漫画のアニメーションにおける 12 の法則。一応日本語にしてみましたけど、もしかするとアニメ特有の訳語や言い回しがあるのかもしれないので、参考程度に。

  • Squash & Stretch つぶす & のばす
    物体を動かす時にそのままの形状でなく、ぶつかった時はつぶし、飛び上がる時はのばすなど変形させる
  • Anticipation 先行
    速い動作の前に、ちょっとだけ後ろに引くような動作を付け加えると、スピード感が増す
  • Staging 演出
  • Straight Ahead vs. Pose to Pose 連続 vs 離散
    物体がある地点から他の地点に移動する時、刻々と形状を変化させるか、移動開始の形状をそのまま維持するか
  • Follow Through & Overlapping Action 事後動作 & オーバラップした動作
  • Slow In & Out スローイン & スローアウト
  • Arcs 弧
    物体を移動させる時に弧を描かせる
  • Secondary Action 第 2 の動作
    移動する時に、移動のアニメーションだけでなく、もう1つ別のアニメーションを組み合わせる
  • Timing タイミング
  • Exaggeration 誇張表現
  • Solid Drawing リアルな絵
  • Appeal アピール

こういうことに対し、GUI では普通のアニメに比べてリフレッシュレートが高いことや、手書きではないことから、すべてをそのまま鵜呑みにできるわけではありません。もちろん、かぶるところもあります。

ということで、GUI での 12 の原則。

  • Squash & Stretch
  • Anticipation
  • Staging
  • Straight Ahead vs. Pose to Pose
  • Follow Through and Overlapping Action
  • Slow In & Out
  • Arcs
  • Secondary Action
  • Timing
  • Exaggeration
  • Solid Drawing
  • Appeal

その他に細かいところだと

  • Timed
  • Designed
  • Smooth
  • Transitioning
  • Realistic
  • Anticipatory
  • Simple

考えさせられますね。

おもしろかったのが、サンプル。現在、Chet は Adobe に所属しているのですが、サンプルは半分が Flash、半分が Java でした。やっぱり、まだ Java を使かっているんですかねぇ。

Chet Haase, TS-4466 Move Your Users: Animation Principles for Great User Experiences, JavaOne 2009 San Francisco
Chet Haase
Romain Guy, TS-4466 Move Your Users: Animation Principles for Great User Experiences, JavaOne 2009 San Francisco
Romain Guy

というわけで、今年の JavaOne もこれでおしまい。

Memory Lane, JavaOne 2009 San Francisco

ラベル: , ,

2009/06/04

今日の JavaOne 2009 Day 3

Duke Photo Ops, JavaOne 2009 San Francisco

今日の午前中の General Session はなんと Miscrosoft。

Microsoft が General Session を担当するなんて、以前だったら考えられないですね。でも、全然興味がないので、ゆっくり寝ることにしました。

ところで、例年 Duke と写真を捕れる場所が、今年は緑の布が張られています。

ここで写真を撮るのは以前と変わりません。変わるのは撮った後。グリーンバックを画像処理で抜いてしまい、カードに印刷してくれるのです。

普段は Duke はいないのですが、今日はたまたま Duke が来てました。Duke と一緒に写真を撮ってカードを作ってくれるのです。

カードを作るため並んでいる人が多数。今年の人気スポットになってました。

Duke Photo Ops, JavaOne 2009 San Francisco Duke Photo Ops, JavaOne 2009 San Francisco

ということで、今日聴講したセッションです。

Technical Session

BOF

  • BOF-5087 All Things I/O with JDK Release 7
  • BOF-4595 Insights into Java Platformsk Standard Edition, and JavaFX Platform Performance
  • BOF-4135 Java Programming Language Tools in JDK Release 7

その他

BOF-5087 と BOF-4595 は Q&A セッションでした。なーんだ、そうだったのか。だったら、Ask the X とか Meet the X Team のようなセッション名にしてくれないかなぁ

Q&A セッションは、その対象に対してすでに知識を持っており、問題意識を持っている人にはとても有益です。でも、事前の知識がない場合、とても退屈。全然分からないのですから ^ ^;;

最後の BOF-4135 は内容がちょっと薄い。そういえば、apt は JDK 7 からはサポートされないようです。

今年は結局、おもしろかった BOF に参加できませんでした。残念。

TS-5578 The New World: JavaFX Technology-Based UI Controls

JavaFX のチームが JavaFX 1.2 の機能を紹介する唯一のセッションかもしれません。ほんとはちゃんとジェネラルな情報、たとえば JavaFX 1.2 の新機能をまとめたり、今後のロードマップを紹介したりするセッションを初日に欲しいところです。

なぜ初日かというと、そこで各機能の詳細を紹介するセッション情報を得られるので、予定を組み直すことも可能だからです。

で、このセッションは JavaFX 1.2 で拡充された UI Controls に関するセッション。

UI Controls は Swing をベースにしていない GUI コンポーネントのことです。Swing をベースにしていないので、JavaFX Mobile でも使うことが可能です。

JavaFX 1.1 で JavaFX Mobile を使うことができるようになりましたが、GUI コンポーネントが皆無だったので (ほんの少しだけありましたけど)、ろくにアプリケーションを書くことができませんでした。それが、やっと普通に使えるレベルまで達したというところです。

UI Controls には

  • Button
  • ToggleButton/RadioButton/CheckButton
  • Slider
  • Label
  • ScrollBar
  • Hyperlink
  • ProgressIndicator
  • TextBox
  • ListView

その他に

  • Single/Multiline text
  • Position text within Labeled bouds
  • Text overrun rules
  • Font
  • Graphic

が用意されています。しかも、これらの機能は JavaFX 1.2 の新機能である Mixin で提供されます。

JavaFX ではもともとインタフェースが使えないかわりに、多重継承をサポートしていたのですが、多重継承は使うのが難しい。だから、今回の Mixin はいい選択だと思います。

で、これらは CSS で外観を変えることも可能です。

そして、もう 1 つが Charts。棒グラフや円グラフ、折れ線グラフなどを使えるようになりました。

個人的にはレイアウトマネージャが拡充されたのがうれしいところ。JavaFX ではノードごとに回転やスケールなどが変更できるので、それらを含めたレイアウトをするのは大変らしいです。

それにしても、これでやっとまともなレイアウトをできるようになりました。これで、ずいぶん Flex に近づいてきたという感じですね。

ところで、このセッションだけ資料が JavaOne のテンプレートと違っていました。こんなこと許されるの? JavaOne は事務局がすべてのセッションの資料を事前にチェックするはずなのに (BOF は除く)、なんでテンプレートが違っていて平気なんだろう?

Amy Fowler, TS-5578 The New World: JavaFX Technology-Based UI Controls, JavaOne 2009 San Francisco
Amy Fowler
Richard Bair, TS-5578 The New World: JavaFX Technology-Based UI Controls, JavaOne 2009 San Francisco
Richard Bair
Jasper Potts, TS-5578 The New World: JavaFX Technology-Based UI Controls, JavaOne 2009 San Francisco
Jasper Potts
Jasper Potts, TS-5578 The New World: JavaFX Technology-Based UI Controls, JavaOne 2009 San Francisco

TS-5052 Hacking the File System with JDK Release 7

Alan Bateman and Carl Quinn, TS-5052 Hacking the File System with JDK Release 7, JavaOne 2009 San Francisco
右が Alan Bateman、左が Carl Quinn

JSR 203 More New I/O APIs for the Java Platform ("NIO.2") のファイルシステムに関する部分だけを紹介するセッション。

今まで、java.io.File クラスではできなかったことがいろいろとできそうです。

基本は Path クラス。

PathオブジェクトはFileクラスのtoPathメソッドを使用するか、FileSystemクラスのgetPathメソッドを使用して取得します。

ところが、JSR 203 の public review draft には FileSytem クラスには getPath ではなくて toPath メソッドになっています。

public review draft 以後の動きは Expert Group でないとよく分からないのですが、いろいろと変わっているのかもしれません。

実をいうと公開されている資料にはコードは全然のっていません。セッションではコード例はすべて NetBeans で示されています。このコードはもちろん公開されていません。

できれば、資料にものせてもらいたいですね。

個人的におもしろかったのが、Visitor パターンを使ってファイルをトラバースしながら処理を行なう API。これはおもしろい。

また、ファイルに変更があった場合にのティふぃけーションをあげてくれる機能もあります。いままで、ファイルが変更されたかどうかを調べるには、定期的にファイルの最終変更時間を取得するという方法を用いていましたが、のティふぃけーションでかなり簡単になりそうです。

扱えるファイルのメタ情報も大幅に増加しています。

TS-4887 Garbage Collection Tuning in the Java HotSpot Virtual Machine

Java VM はいろいろな種類の GC が採用されていますが、それぞれの特徴とチューニング方法を紹介するセッション。

おもに、Yound 世代の CopyGC と、パラレル GC、Concurrent Mark & Sweep の 3 種類。残念なことに G1 GC は紹介されませんでした。

最後に GC をモニタリングする方法。

びっくりしたのが、VisualGC が VisualVM のプラグインとして提供されるようになったこと。jconsole がなかったころは VisualGC をよく使っていたので、ここで復活するとは思いもしませんでした。

確かに、jconsole では Young 世代の寿命のチャートが表示されないので、それなりに使えるかもしれません。

その他に、オフラインのツールとして

  • GC Logging
  • PrintGCStats
  • GChisto

が紹介されました。

Charlie Hunt, TS-4887 Garbage Collection Tuning in the Java HotSpot Virtual Machine, JavaOne 2009 San Francisco
Charlie Hunt
Antonios Printezis, TS-4887 Garbage Collection Tuning in the Java HotSpot Virtual Machine, JavaOne 2009 San Francisco
Antonion Printezis

TS-5496 This in Not Your Father's Von Neumann Machine; How Modern Architecture Impacts Your Java Apps

CPU のアーキテクチャーの歴史と、それがどのようにアプリケーションに影響するかというセッション。スピーカーは ex-Sun で現 Azul の Cliff Click とまたまた Brian Goetz。

印象的だったのが、CPU とメモリのスピードのギャップが大きくなってしまった現在は、メモリは新しいディスクとしてみるしかないということ。

だから、なるべくキャッシュをなるべくミスしないようにするのが重要になってくるわけです。

Brian Goetz, TS-5496 This Is Not Your Father's Von Neumann Machine; How Modern Architecture Impacts Your Java Apps, JavaOne 2009 San Francisco
Brian Goetz
Cliff Click and Brian Goetz, TS-5496 This Is Not Your Father's Von Neumann Machine; How Modern Architecture Impacts Your Java Apps, JavaOne 2009 San Francisco
Cliff Click

"After Dark" Bash

The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco

今日の 1 コマ目の BOF が外れだったので、途中で抜け出して "After Dark" Bash へ。

今年の "After Dark" Bash は World Classic Rockers のライブです。

もともと Moscone Center の上の Yerba Buena Park で行なわれるはずだったのですが、昨日の夜場所変更のメールが。

天気予報では今日は雨の予報でした。さすがに雨の中、野外でライブを行なうわけにはいかないということで、Marriott Hotel の地下のボールルームに変更になったのです。

しかし、蓋を開けてみたら、今日はよく晴れています。今回の JavaOne は雨の日はないものの、ずっと曇りで寒い日が続いていたのですが、はじめて朝から晴れてました。

これだったら野外の方がよかったなぁ。

The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco

さて、今日ライブを行なう World Classic Rockers ですが、それほど知名度は高くありませ。去年の Smash Mouth に比べるまでもありません。

でも、メンバはすごいのです。

ようするに、World Classic Rockers は以前は著名なバンドなどで活躍していた人が集まってできたバンドなのです。

まぁ、いうなればシニアバンドですね。

メンバーを並べてみると

  • Vocal: Greg Walker (元 Santana)
  • Vocal: Fran Cosmo (元 Boston)
  • Guitar: Michael Monarch (元 Steppenwolf)
  • Base: Nick St. Nicholas (元 Steppenwolf)
  • Drums: Ansley Dunbar (元 Journey)
  • Guitar: David Coyle
  • Keyboard: Mark Hoyt

ステージと客席の間隔はほとんどなし。すぐ目の前で演奏してます。だから、上の写真のようなドアップも撮れるわけです。でも、被写体ぶれしてますが ^ ^;;

櫻庭は BOF の合間に来ただけなので、Black Magic Woman など 2, 3 曲聞いただけで再び BOF へ向かいました。もっと聞いていたかったなぁ。

後で聞いた話だと、後半ゲストとして元 TOTO のボーカルが来たらしいのです。そして、Africa などを演奏したらしいのです。

それを知っているのであれば、次の BOF なんか聴講せずにここに居続ければよかったのに......

後悔先に立たず。

The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco
The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco
The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco
The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco
The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco
The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco
The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco The World Classic Rockers, "After Dark" Bash, JavaOne 2009 San Francisco

ラベル: , ,

2009/06/03

今日の JavaOne 2009 Day 2

Pavilion, JavaOne 2009/CommunityOne West 2009
Alan Bateman, TS-5052 Hacking the File System with JDK Release 7, JavaOne 2009 San Francisco
セッション会場

今日の朝の General Session は Sony Ericsson。なので、自主休講。

ランチ会場で丸山先生たちとおしゃべりしていたら、あっという間に General Session の時間は過ぎ去っていったのでした。

それにしても今年はいろんなところで Twitter してます。こういうマイクロブログは JavaOne のようなカンファレンスには便利ですね。ご飯の約束などもこれでできるし。

ちなみに、上の写真は Pavilion でやっている Poker の景品。ポルシェですよ、ポルシェ。ちなみに 2 位は Segway でした。

話はまったく変わるのですが、今年のテクニカルセッション or BOF は、今までと違ったところがありました。

何が違っていたのかというと、セッション会場に机があるのです。もちろん、ないところもあるのですが、広めの会場はみな机配備。こんなのはじめて。

机があるせいで、セッション中でも PC を開くのが楽。結局、Twitter をやってしまって、なかなかセッションに集中できないのでした。

というわけで、今日は次のセッションを聴講しました。

General Session

Technical Session

BOF

TS-4861 ははずれ。いちおう、JavaFX では有名な Jim Weaver のセッションだったのですが、まったくプレゼンになっていません。

もう 1 人 Stephen Chin という若い人といっしょのプレゼンです。Jim Weaver はこの若い人がいうことに突っこみを入れる役 (?)。でも、その突っこみがまるでなっていない。突っこむことによって論旨があいまいになるばかり。これでは逆効果にしかなりません。

友達どうしで話している時だったら全然かまわないのですが、こういう公の場ではダメ。せめて、Romain Guy の突っこみを勉強してから、出直してもらいたいなぁ。

2 つの BOF もはずれ。なんか内容が薄い... 今年はほんとに BOF は不作だ。

Sun General Session - Your Java Lifestyle: Mobile, TV and Beyoond

ここ数年、Java ME は初日の Technical General Session から外されてしまい、普通のセッション枠で Java ME だけの General Session をやっていました。

ところが、今年は Java ME 単独でちゃんとした General Session が行なわれました。

この枠はもともとプラチナスポンサー枠だったのです。しかし、例年プラチナスポンサーだった Oracle が、今年はスポンサーを降りてしまったのです。もちろん、買収のからみで、スポンサーができないのだと思います。

Oracle の代わりになるプラチナスポンサーがいればよかったのでしょうが、決まらなかったんでしょうね。

しかたなく Java ME 枠になったというのが櫻庭の見るところです。

ということで、もともとは Technical General Session だったという過去を持つ、この General Session ですが、Technical なところが全くないというのはどういうことなのだろう。

話のメインは JavaFX。JavaFX Mobile や JavaFX TV、そして、昨日の General Session でも搭乗した JavaFX オーサリングツール。

しかし、いずれもデモのみで、新しいバージョンの機能紹介とか、今後のロードマップなどまったく説明されません。こんなんでいいのか?

JavaFX 以外は他の企業で、たとえば PayPal や、Sony Ericsson、Qualcomm などからゲストを呼んで話をしたり、デモするだけ。こういうないようなのであれば、初日の朝の General Session でやってもらいたいですね。

確かにメディア受けはすると思いますけど、開発者にはつまらないです。

ちなみにこのセッションでも T-Shirt 投げがありました。このためにだけ James Gosling が駆り出されてましたよ。T-Shirt 投げが終わったら、T-Shirt 用スリングショットを持ってすぐに帰って行ってしまいました。

ちなみのちなみですが、ここで T-Shirt を受け取った人は JavaFX Phone ももらえるというおまけ付き。これはちょっと欲しかった ^ ^;;

Chris Melissinos, General Session "Your Java Lifestyle: Mobile, TV and Beyond" on Jun 3, JavaOne 2009 San Francisco
MC は Chris Melissions
Eric Klein and Chris Melissinos, General Session "Your Java Lifestyle: Mobile, TV and Beyond" on Jun 3, JavaOne 2009 San Francisco
でも、すぐに Eric Klein にバトンタッチ
T-Shirts Throwing, General Session "Your Java Lifestyle: Mobile, TV and Beyond" on Jun 3, JavaOne 2009 San Francisco
パチンコ持って、Gosling あらわる
T-Shirts Throwing, General Session "Your Java Lifestyle: Mobile, TV and Beyond" on Jun 3, JavaOne 2009 San Francisco T-Shirts Throwing, General Session "Your Java Lifestyle: Mobile, TV and Beyond" on Jun 3, JavaOne 2009 San Francisco
T-Shirts Throwing, General Session "Your Java Lifestyle: Mobile, TV and Beyond" on Jun 3, JavaOne 2009 San Francisco T-Shirts Throwing, General Session "Your Java Lifestyle: Mobile, TV and Beyond" on Jun 3, JavaOne 2009 San Francisco
T-Shirts Throwing, General Session "Your Java Lifestyle: Mobile, TV and Beyond" on Jun 3, JavaOne 2009 San Francisco Eric Klein, General Session "Your Java Lifestyle: Mobile, TV and Beyond" on Jun 3, JavaOne 2009 San Francisco
Eric Klein, General Session "Your Java Lifestyle: Mobile, TV and Beyond" on Jun 3, JavaOne 2009 San Francisco
Eric Klein は猫背
Eran Davidov and Eric Klein, General Session "Your Java Lifestyle: Mobile, TV and Beyond" on Jun 3, JavaOne 2009 San Francisco
Eran Davidov と JavaFX Mobile のデモ
Osama Bedier, General Session "Your Java Lifestyle: Mobile, TV and Beyond" on Jun 3, JavaOne 2009 San Francisco
PayPal の Osama Bedier
Steve Glagow and Eric Klein, General Session "Your Java Lifestyle: Mobile, TV and Beyond" on Jun 3, JavaOne 2009 San Francisco
Orange の Steve Galgow
Rob Chandhok and Eric Klein, General Session "Your Java Lifestyle: Mobile, TV and Beyond" on Jun 3, JavaOne 2009 San Francisco
Qualcomm の Rob Chandhok。Smartbook について語る
JavaOne 2009 San Francisco
General Session 後の大混雑

TS-5575 Extrem GUI Makeover (Hybrid Swing and JavaFX Technology)

Extream GUI Makeover は毎年行なわれている名物セッションですが、去年から JavaFX を使いはじめました。今年は Hybrid というので、Swing アプリで一部だけ JavaFX を使う話かと思ったら... 逆でした。

でも、それは当たり前すぎてつまらないなぁ。

毎年、何かしらのアプリケーションを取りあげて、それを徐々にかっこよくしていくというスタイルで進みます。

今年の題材は JavaOne 2006 の Extrem GUI Makeover。ちなみに 2006 年は Chet Haasse や Romain Guy が担当していたはず。

すでにあの時点でそれなりのかっこいい GUI になっていたのですが、もっと見栄えをよくしようというわけです。

たとえば、イメージを下に反射しているように表示することや、アイコンにマウスカーソルが入ると文字が浮きでる、イメージを角丸にするなどを紹介しました。こういうのは JavaFX を使うと簡単にできます。

また、CSS で背景色やフォントを設定することなどを紹介しました。

ちょっとおもしろかったのが、ページをめくる動作。3D は使わずに 2D だけでやっています。自分でもやったことがあるのですが、どうもうまくページがめくれていくように見えないのです。

今日気がついたのは、影のつけかた。そうか、あすこに影をつけるともっともらしいんですね。

Amy Fowler, TS-5575 Extreme GUI Makeover (Hybrid Swing and JavaFX Technology), JavaOne 2009 San Francisco
Amy Fowler
David Grieve, TS-5575 Extreme GUI Makeover (Hybrid Swing and JavaFX Technology), JavaOne 2009 San Francisco
David Grieve
Paru Somashekar, TS-5575 Extreme GUI Makeover (Hybrid Swing and JavaFX Technology), JavaOne 2009 San Francisco
Paru Somashekar
Jasper Potts, TS-5575 Extreme GUI Makeover (Hybrid Swing and JavaFX Technology), JavaOne 2009 San Francisco
Jasper Potts

TS-4954 Modularity in the Java Programming Language: JSR 294 and Beyond

Alex Buckley, TS-4954 Modularity in the Java Programming Language: JSR 294 and Beyond, JavaOne 2009 San Francisco
Alex Buckley

いったんなくなってしまった JSR 294 ですが、JSR 277 がキャンセルされたおかげで復活です。

まったく気づいていなかったのですが、この前のセッションが Mark Reinhold の Project Jigsaw のセッションでした。しまった、GUI Makeover なんかじゃなくて、Jigsaw のセッションに出ればよかった。

もう一度おさらいしておくと、JSR 294 はインプリメンテーションのモジュール化を目指し、module というモジュール (以前は supperpackage と呼ばれていました) を導入しようとしています。

一方の JSR 277 はデプロイメントのモジュール化を目指し、JAR ファイルの代わりに JAM ファイルによるモジュール化を行なおうとしていました。

そして、去年の JavaOne 2008 ではインプリメンテーションとデプロイメントを別々に考えるのではなく、一緒に考えようということで JSR 277 に統合されたのでした。

しかし、去年の暮れになって JSR 277 が急にキャンセルされたのです。

そして、その後 Jigsaw でより低レベルのモジュール化を行なうことになりました。Jigsaw もインプリメンテーションとデプロイメントの両方の側面を持っていますが、インプリメンテーションの部分に関しては JSR 294 を採用することになりました。

つまり、もともとの JSR 277 で提唱されていた JAM がはじかれてしまったように見えます。確かに JAM はとても評判が悪かったので、しかたないかもしれません。

Jigsaw は言語や VM の部分は JSR 294 をそのまま採用し、パッケージングに関しては JAR ファイルをそのまま使用します。とはいってもバージョニングなどの問題があるので、それらの問題を最小限の変更で解決しようというところのようです。

それが低レベルのモジュール化ということを表しているようです。

そして、Jigsaw のリファレンスインプリメンテーションを行なっているのが OpenJDK のサブプロジェクトである Project Jigsaw です。

で、このセッションは JSR 294 に関するものです。なので、Jigsaw で決めているデプロイメント関連のモジュール化は言及されませんでした。

TS-5217 "Effective Java": Still Effective After All These Years

Joshua Bloch, TS-5217 "Effective Java": Still Effective After All These Years, JavaOne 2009 San Francisco
Joshua Bloch

Effective Java も名物セッション。このセッションはほんとに人気があって、事前登録ができませんでした。で、キャンセル待ち列に並んだんですが、すでにこちらも 200 人ぐらい並んでいる。入れないかと思いました。

ようやく入れたのはセッションが開始されてから 10 分後。会場内は立ち見もいっぱい。とりあえず、床に座るとしても前の方がいいので、前にいってみたら前から 2 列目に空席があったのですかさずゲット。そしたら、斜め前には N 社の K 村さんが座ってました ^ ^;;

はじめはジェネリクスの extends や super の使い方。途中から入ったのでよく理解できていませんが、去年の PECS 原則をもう一度やっていたようです。

次が 2 値しか取らない変数でも、true と false で意味が分かりにくい場合は積極的に enum を使おうね、という話。

そして、可変数引数。可変数引数はパフォーマンスが落ちるらしいです。なので、よく使われる引数の個数が分かっているのであれば、それを可変数引数ではなく、固定引数で作っておいて、その他に可変数引数を使うという使い方を紹介してました。

たとえば、EmunSet クラスの of メソッドは引数が 5 つまでのメソッドは固定で定義されていて、それ以上が可変数引数が使われているのだそうです。

次は CocurrentMap の話。

Concurrency Utilities で定義されているクラスは synchronized で囲ったらダメ、という話。get して、値がなかったら put する時に使う putIfAbsent メソッドの使い方。Brian Goetz の本で勉強していたので、putIfAbsent メソッドは知っていましたけど、パフォーマンスを上げるにはどう書けばいいかという話。

でも、get メソッドの後、putIfAbsent メソッドをコールするまでの間に、他のスレッドからアクセスされていたらどうなるんだろう?

最後がシリアライズする時に、Proxy Pattern が使えるよという話でした。

BOF-4724 Monitoring and Troubleshooting Java Platform Applications with JDK Software

VisualVM を作っている Tomas Hurka と Mandy Chung のセッション。

今年は保守管理系のセッションがあまりありません。JMX 2.0 がもう落ち着いちゃったかもしれません。それにしても、今年は JSR-255 JMX 2.0 のスペックリードの Eamonn McManus の姿が見あたりません。もしかして、辞めちゃったのかなぁ?

セッションの前半はツールの紹介。jconsole や VisualVM など。

後半がよくあるトラブルへの対処法。取りあげられたのは

  • Deadlocks
  • Memory leak
  • Finalizers
  • High lock contentions
  • OutOfMemoryError

の 5 種類です。

Deadlockに関しては、HotSpot VM にもともとデッドロック検出機能が備わっています。ツールで使えるのは jvisualvm と jstack。jstack を使う場合は -l オプションを使用すると、java.util.concurrent のロックに関する情報を取得できます。

次のメモリーリークはまずメモリ使用をモニタする、ヒープの使用量が上がっていれば次にヒープのヒストグラムから怪しそうな箇所を見つけ、ヒープのスナップショットから解析するという対応を行ないます。

最初のヒープのモニタには jvisualvm もしくは jstat が使用できます。ヒストグラムから怪しい部分を見つけるには jvisualvm か jmap -histo を使用できます。

そして、スナップショットの解析は jvisualvm、jmap -dump もしくは jhat が使えます。

ファイナライザでファイナライズがペンディングになっているオブジェクトを探すのはメモリリークと似ています。ファイナライズがペンディングされているオブジェクトを観察するには jvisualvm もしくは jconsole が使えます。

Hot Lock Contention はロックの取り合いの検出。ツールとしては jvisualvm と jconsole。

OutOfMemoryErrorはヒープなのか、パーマネント領域なのか、ネイティブコードなのか、などメモリの種類を特定します。そして、OutOfMemoryErroが生成したヒープダンプを解析します。

ツールとしては jvisualvm と jinfo -flag +HeapDumpOnOutOfMemoryError を使用します。

Tomas Hurka がスピーカなので、ツールの選択は jvisualvm よりですね。jconsole でも使えそうなところはありますが、今となったら jvisualvm なのかもしれません。

Mandy Chung, BOF-4724 Monitoring and Troubleshooting Java Platform Applications with JDK Software, JavaOne 2009 San Francisco
Mandy Chung
Tomas Hurka, BOF-4724 Monitoring and Troubleshooting Java Platform Applications with JDK Software, JavaOne 2009 San Francisco
Tomas Hurka

ラベル: , ,

2009/06/02

今日の JavaOne 2009 Day 1

JavaOne 2009 San Francisco

さて、今日から JavaOne 本番。

ということで、まずは朝ご飯です。ところが、今年の JavaOne はなんと Alumni Lounge がなくなっていたんです!!

おととしまでは、JavaOne の朝食はベーグルやデニッシュの食べ放題だったのですが、去年からパックになってしまいました。それでも、Alumni Lounge だけは食べ放題だったのですが...

ところが、今年は Alumni Lounge がなくなってしまったので、Alumni ではない初参加者といっしょにパックの朝ご飯。ちょっと悲しい。

とはいっても、そんなに食べるわけじゃないので、いいといえばいいんですけど、気分の問題が...

Breakfast, JavaOne 2009 San Francisco Breakfast, JavaOne 2009 San Francisco
Breakfast, JavaOne 2009 San Francisco

ということで、朝ご飯を食べてから、General Session 会場へ。ところが、例年すごい行列があるのに、今年はそれほどでもありません。やっぱり、参加者が減っているんでしょうね。

というわけで、今日聴講したセッションです。

General Session

Technical Session

BOF

なんと Java SE の一番重要なセッションである TS-5362 The Java Platform, Standard Edition (Java SE Platform) Development Kit Version 7 がドタキャン。Java SE 7 はまだまだ一悶着あるのかもしれません。

BOF は 1 つだけ。今年はいまいち BOF におもしろそうなセッションがないような気がします。

Sun General Sessioon - Java: Change (Y)our World

Scott McNealy, Before General Session on June 2, JavaOne 2009 San Francisco

今日の General Session は事前情報によると、大物のサプライズゲストがいるらしいのです。

Larry かなぁ? でも、合併期間の間はこういう場に立てないんじゃないかなぁ、などいろいろ勘ぐっていたのです。

私はいつものごとく一番前に陣取って、写真、写真。

そうしたら、General Session が始まった後、スタッフに連れられて黒いスーツを着た人が一番前の席に座ったのです。そう、彼が Larry Ellison でした。

というわけで、サプライズゲストが誰だか分かっちゃいました ^ ^;;

 

General Session に関してメディアでは Larry Ellison と Scott McNealy の話題と、Java Store の話題のようですが...

個人的には、やっとでてきた JavaFX Authoring Tool の方が気になります。

Scott に関しては、壇上から降りた時に参加者がスタンディングオベーションしたのが印象に残ってます。やっぱり、彼は人気ありますね。

DJ Anna, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
DJ Anna。去年は最終日でしたが、今年は初日に登場
DJ Anna, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
DJ Anna, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
DJ Anna, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco DJ Anna, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
Scott McNealy, Before General Session on June 2, JavaOne 2009 San Francisco
Scott McNealy
Jonathan Schwartz and James Gosling, Before General Session on June 2, JavaOne 2009 San Francisco
James Gosling と Jonathan Schewartz
James Gosling, Before General Session on June 2, JavaOne 2009 San Francisco
Chris Melissinos, Before General Session on June 2, JavaOne 2009 San Francisco
Chris Melissinos
James Gosling, Before General Session on June 2, JavaOne 2009 San Francisco
プレゼン準備中
Chris Melissinos, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
MC は大方の予想通り Chris Melissinos でした
Jonathan Schwartz, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
そして Jonathan Schwartz 登場
Jonathan Schwartz, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
James Barrese and Jonathan Schwartz, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
eBay の James Barrese を壇上にあげる
Alan Brenner and Jonathan Schwartz, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
続いて RIM の Alan Brenner。Alan Brenner は ex-Sun。久しぶりに見た
Don Eklund and Jonathan Schwartz, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
Blu-ray に関して Sony Pictures の Don Eklund を呼ぶ
Lowell McAdam and Jonathan Schwartz, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
次は Verizon の Lowell McAdam
Dyna Bryant and Jonathan Schwartz, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
Intel の Diane Bryant
Dyna Bryant, Paul Ciciora and Jonathan Schwartz, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
Diane Bryant が紹介したのは CBOE の Paul Ciciora。CBOE では 1 秒で 300,000 トランザクションを Java で処理しているらしい
Ronan McBrien and Jonathan Schwartz, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
ここから JavaFX のパート。まず JavaFX TV の発表
Nandini Ramani and Jonathan Schwartz, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
そして、Nandini Ramani が Authoring Tool のデモ。でも、失敗 ^ ^;;
JavaFX authoring tool, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
Authoring Tool のスクリーンショット
Jonathan Schwartz and James Gosling, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
ここで James Gosling を壇上へ
James Gosling, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
Jonathan Schwartz and James Gosling, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
James Gosling が発表したのは Java Store。しかし、Gosling が何か発表するというのはとても珍しい
Jonathan Schwartz and James Gosling, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
Drag & Drop だけでアプリをインストールできる
Mark Gerhard, Jonathan Schwartz and James Gosling, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
アプリの例として、Java の 3D FPS ゲームの RuneScape を紹介。Jagex の Mark Gerhard に Duke's Choice Award の Duke 像を渡す
Jonathan Schwartz, Scott McNealy and James Gosling, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
ここで Scott McNealy 登場。Schwartz と交代
Scott McNealy, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
T-Shirts Throwing, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
ここで取りだしたものは...
T-Shirts Throwing, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
T シャツパチンコ
T-Shirts Throwing, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco T-Shirts Throwing, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
T-Shirts Throwing, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco T-Shirts Throwing, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
お疲れさま
Randy Bryant, Scott McNealy and James Gosling, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
Alice 3.0 に対して Duke's Choice Awards が贈られる
Scott McNealy, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
Scott McNealy, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
何か聞きたいことない?
General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
Scott McNealy and Larry Ellison, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
さんざんおちょくった後に Larry Ellison 登場
Scott McNealy and Larry Ellison, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
みなピンマイクなのに、Larry だけハンドマイク
Larry Ellison, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
Scott McNealy and Larry Ellison, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco Scott McNealy and Larry Ellison, General Session "Java: Change (Y)Our World" on June 2, JavaOne 2009 San Francisco
信号旗で JAVA を示しています
Scott McNealy, General Session on June 2, JavaOne 2009 San Francisco
スタンディングオベーション
Scott McNealy, General Session on June 2, JavaOne 2009 San Francisco DJ Anna, General Session on June 2, JavaOne 2009 San Francisco

Technical General Session - Intelligent Design: The Pervasive Java Platform

Robert Brewin, Technical General Session "Intelligent Design: The Pervasive Java Platform" on June 2, JavaOne 2009 San Francisco

時間的には Puzzlers の方が先なのですが...

今年も MC は Bob Brewin。

彼は見てくれ的にかつての Graham Hamiltion と同じように渋めの人なのかと思っていたのですが、今回はちょっと印象が違いました。

だって、登場する時に "Thank you, thank you, thank you, ....." と軽い調子で出てきたのです。ちょっと軽すぎだと思うよ、Bob。

JavaFX はデモのみ。ちゃんと JavaFX 1.2 の新機能の紹介とかしてくれないかなぁ。

JavaFX にはこういう場でコンセプトやテーマを話せるようなカリスマ性を持ったスタープレイヤーがいないのが問題ですね。

JavaFX の父である Chris Oliver がその役をできればいいのでしょうけど、どうも彼はそういう感じではないのです。今年はセッションも担当していないし...

もっとみんなを引っ張ってくれるような人がいればいいんですけどねぇ。

Robert Brewin, Technical General Session "Intelligent Design: The Pervasive Java Platform" on June 2, JavaOne 2009 San Francisco
Bob Brewin
John Burkey and Robert Brewin, Technical General Session "Intelligent Design: The Pervasive Java Platform" on June 2, JavaOne 2009 San Francisco
Facebook Client のデモ

Java SE は久しぶりに登場の Mark Reinhold。去年は Danny Coward でしたね。

Mark Reinhold は持ち時間のほとんどを Java SE 7 にあてていました。しかし、紹介したのはなんとたったの 3 つ。

  • Modular Platform
  • Multi-Lingual VM
  • Productive Developers

しかも、そのうちの Multi-Lingual VM は名前をあげたぐらい。

Modular Platform は Project Jigsaw の紹介。去年までの JSR 277 は却下され、より低レベルなところでやり直しといったところです。JRE 自体もモジュール化され、Synaptic Package Monager というツールから必要なモジュールをインストールするデモを行ないました。

Multi-Lingual VM は Da Vinci Machine Project の名前を出しただけ。3 つめの Productive Developers は言語のマイナーな修正。ジェネリクスの定義をちょっとだけ省略できる例をしめして、Project Coin を紹介しておしまいです。

現在は JDK 7 Milstone 3 が公開されていますが、その後のスケジュール。Milestone 8 が 2010/2/18 の予定で、これが Release Candidate になるらしいです。正式リリースの日程は不明。ほんといつ出るんでしょうね?

Java EE は去年に引き続き Roberto Chinnici。主に Java EE 6 の話。

ちょっとだけ GlassFish v3 の話もしてました。

最後は Java Store。でも、ほとんど時間がなかったですね。いちおう、出ましたというぐらい。

Mark Reinhold, Technical General Session "Intelligent Design: The Pervasive Java Platform" on June 2, JavaOne 2009 San Francisco
Mark Reinhold
Mark Reinhold, Technical General Session "Intelligent Design: The Pervasive Java Platform" on June 2, JavaOne 2009 San Francisco
Roberto Chinnici, Technical General Session "Intelligent Design: The Pervasive Java Platform" on June 2, JavaOne 2009 San Francisco
Roberto Chinnici

TS-5186 Return of the Puzzlers: Schlock and Awe

Joshua Bloch and Neal Gafter, TS-5186 Return of the Puzzlers: Schlock and Awe, JavaOne 2009 San Francisco
左が Neal Gafter、右が Joshua Bloch

Joshua Bloch と Neal Gafter はクロージャー問題で喧嘩していたのですが、最近仲直りしたようです。Neal がクロージャー推進派、Jochua が反対派だったんですけど、収まりどころはどうなったんでしょうね。

喧嘩状態だったので、おととしの Puzzlers は Joshua Bloch と William Pugh、去年は Puzzlers 自体ありませんでした。仲直りしたので、復活です。なので、タイトルが Return of the Puzzlers。

今回は 7 問。

今回はとーっても難しかったです。とりあえず、1 問だけ。

public class SimpleQuestion {
    static boolean yesOrNo(String s) {
        s = s.toLowerCase();
        if (s.equals("yes")  || s.equals("y") || s.equals("t")) {
            s = "true";
        }
        return Boolean.getBoolean(s);
    }
 
    public static void main(String[] args) {
        System.out.println(
            yesOrNo("true") + " " + yesOrNo("YeS"));
    }
}

選択肢が

  1. false false
  2. true false
  3. true true
  4. None of the above

です。答えは書かないでおくので、ぜひ考えてみてください。

TS-4060 Small Language Changes in JDK Release 7

Joseph Darcy, TS-4060 Small Language Changes in JDK Release 7, JavaOne 2009 San Francisco
Joseph Darcy

Java SE 7 は再び言語仕様の変更があります。

とはいっても、クロージャーも XML リテラルも入りません。とはいっても、Project Jigsaw のように大きい変更もあります。

で、その他の小さな言語仕様の変更を行なっているのが Project Coin です。

Coin という名前は、語呂合わせです。コインは小銭、つまり英語でいうところの small change。つまり、小さい変更 small change とかけているのです。

このセッションでは Project Coin で実施する言語仕様の変更についてのセッションではないところがミソ。

言語仕様の変更がいかに大変かという示すためのセッションです ^ ^;;

今までの言語仕様と矛盾なく、かつあいまいさが入らないように変更を行なうというのはかなり大変なようです。できれば、ライブラリレベルで解決できれば、それにこしたことはないというところでしょう。

Project Coin では、言語仕様の変更に関して一般から募集していました。現在はその中から、実際に Java SE 7 に取り込むものを選択中のようです。

いちおう例として、クローズしなくても勝手にストリームを閉じることや、文字列を switch 文の case に記述すること、リストやマップを配列のようにアクセスすることなどが紹介されました。でも、これらのすべてが SE 7 に入ると決まったわけではありません。

最終的にはどうなるんでしょうね。

TS-4222 Asynchrous I/O Tricks and Tips

Alan Bateman, TS-4222 Asynchronous I/O Tricks and Tips, JavaOne 2009 San Francisco
Alan Bateman
Jean-François Arcand, TS-4222 Asynchronous I/O Tricks and Tips, JavaOne 2009 San Francisco
Jean-François Arcand

J2SE 1.4 で導入された New I/O ですが、J2SE 1.4 には入れられなかった部分を JSR-203 More New I/O として提案されていました。

もともと、JSR-203 は J2SE 5.0 で入る予定だったのですが、スリップ。Java SE 6 もスリップ。

やっと Java SE 7 で入ることになりました。

このセッションでは JSR-203 の機能のうち、非同期 I/O に関して。そして、後半は New I/O を大々的に使っている Grizzly について紹介されました。

まず、非同期 I/O について。

Java SE 7 では Councurrency Utilities を使った非同期 I/O を提供するようです。

使い方としては 2 種類。

  • java.util.concurrent.Future インタフェースを使用する
  • コールバックハンドラを使用する

Future インタフェースを使う方法は非同期チャネルの read メソッドの戻り値が Future オブジェクトになるというものです。

Future オブジェクトが取得できれば、後は Concurrency Utilities の非同期処理と扱いは同じです。たとえば、こんな感じ。

AsynchronousSocketChannel ch = ...
ByteBuffer buf = ...
 
Future<Integer> result = ch.read(buf);
 
// check if I/O operation has completed
boolean isDone = result.isDone();
 
// wait for I/O operation to complete
int nread = result.get();
 
// wait for I/O operation to complete with timeout
int nread = result.get(5, TimeUnit.SECONDS);

Futrue インタフェースのパラメータを指定できて、そのまま get できるのはいいですね。

コールバックハンドラはこんな感じで使います。

AsynchronousSocketChannel ch = ...
ByteBuffer buf = …
 
CompletionHandler<Integer,Void> handler =
    new CompletionHandler<Integer,Void>() {
        public void completed(Integer result, Void att) {
            int nread = result;
        }
        public void failed(Throwable exc, Void att) {
            // error handling
        }
    };
    
ch.read(buf, null, handler);

使いやすさからいくと、コールバックハンドラの方がいいかもしれません。

よく分からないのが、Future インタフェースの cancel メソッドが使えるかどうか。使えるといいんですけどね。

このような非同期 I/O が使用できるチャネルとして

  • AsynchronousSocketChannel
  • AsynchronousServerSocketChannel
  • AsynchronousDatagramChannel
  • AsynchronousFileChannel

が提供されています。つまり、TCP と UDP、そしてファイルの入出力が非同期で行えるというわけですね。

また、非同期入出力のためのスレッドはスレッドプールを使うことができるようです。

後半は Grizzly で非同期 I/O をどのように使っているかを紹介し、非同期 I/O の Tips を紹介しました。

TS-5216 Toward a Renaissance VM

Da Vinci Machine Project の John Rose と、Concurrency Utilitiles や JavaFX Compiler の Brian Goetz のセッション。

タイトルの Renaissance は Da Vinci とかけているんでしょう。

内容的には昨日の Da Vinci Machine Project のセッションとかなりかぶっています。ただ、もう少し抽象的な議論が多くありました。

たとえば、VM を採用することによる利点、多言語に対応するためには VM にどのような機能が必要出るかなどです。

それはそうと、Goetz は喋る時に絶えず前後に動きます。だいたい 2, 3 歩ぐらい前にいったり、後ろにいったり。結構これがいらつく。

もうちょっと落ち着いて喋ってくれないかなぁ。ただでさえ、彼は早口なので、ついていくのが大変。それに加えてうろうろされると、集中が切れてしまうんです。

John Rose, TS-5216 Toward a Renaissance VM, JavaOne 2009 San Francisco
John Rose
Brian Goetz, TS-5216 Toward a Renaissance VM, JavaOne 2009 San Francisco
Brian Goetz

BOF-5493 Quo Vadis JavaFX Production Suite

Martin Brehovsky and Lukas Waldmann, TS-5494 Getting the Most from the Designers with the JavaFX Production Suite, JavaOne 2009 San Francisco
Martin Brehovsky と Lukas Waldmann

JavaFX Production Suite は Illustrator/Photoshop の JavaFX Plugin や、SVG から JavaFX への変換ツールなどを含んだスイーツです。

Production Suite が扱うのは FXD/FXZ 形式のファイル。FXD 形式のファイルは、テキストファイルでJavaFX Script によるスクリプトからなっています。FXZ 形式の方は、FXD ファイルを ZIP で圧縮したものです。

JavaFX でこれらの形式のファイルを読み込むには javafx.fxd パッケージのクラスを使います。

この Production Suite も JavaFX 1.2 のリリースと同時に 1.2 にバージョンアップしました。

1.2 ではやっと Adobe CS 4 に対応したこと。一応、今までも CS 4 で使えていたのですが、1.2 からは正式対応ということになりました。

そういえば、NetBeans で FXD/FXZ ファイルのプレビューやソースを見ることができるようになってました。

そして、現在取り組んでいることとして、次の 6 項目をあげました。

  • References
  • Libraries
  • Events
  • Actions
  • States
  • UI Controls Skinning

References はノードに ID を付けて、ID で参照できるようにするということです。

Libraries はよく使う要素をライブラリとしてまとめられるようにすることです。ここでは、グラデーションなどをあげてましたけど、ノードもライブラリ化できるようになるといいなぁ。Flash ではできているのですから、ぜひやってもらいたいところです。

次の Events はその名の通りイベントです。ボタンのクリックなどにより状態変化や、アニメーションのイベントなどが含まれるようです。

Slanted JavaOne

ちなみに、現在はムービーなどは FXD/FXZ で扱えないのですが、今後扱えるようになるということです。これは、今日発表された Authoring Tool が扱うファイルが FXD/FXZ なのではないかと、櫻庭は予想しています。

Actions はアニメーションのコントロールやシーングラフの変更などのアクションを扱えるようにしようということらしいです。

States は状態変化を扱えるようにすること、そして最後の UI Controls Skinning は JavaFX Mobile でも使える UI Control のスキンを FXD/FXZ で可能にすることのようです。

こういうことが実現できると、コードで記述しなければいけない部分がかなり少なくなることが予想できます。早くリリースしないかなぁ。

ところで、セッションの内容にはまったく関係ないのですが、セッション中にハプニングが。

どのセッション会場でも中央にある演台には JavaOne のロゴが表示されています。

そしたら、セッション中に急にガタンという音が。何かと思ったら右の写真のように、演台の JavaOne ロゴが傾いてしまったのです。

これ単に両面テープで貼っているだけでした。で、最終的にはロゴは落ちてしまったのです。

落ちた JavaOne です...

ラベル: , ,

2009/04/21

今日の CCC

今日は JJUGCross Community Conference。場所は代々木のオリンピック記念青少年総合センタ。

今回が 4 回目の CCC ですが、櫻庭はずっと裏方でセッションを持つのははじめて。もちろん、JavaFX について話をしました。

今日は初心者向けに JavaFX がこういうものだということが分かってもらえるようなプレゼンにしました。

まぁ、いろいろあって (くわしくはこちら) バタバタしてしまいましたが、おおむね好評だったのでよかったです。

今回は丸レクでちょっとだけ使ったメタプログラミングをいっぱい使いました。

普通のプレゼンでデモなどでおもむろにパワーポイントのスライドショーを終了して、IDE を立ち上げるというのが、流れが阻害されてしまい、イヤだったのです。メタプログラミング使って、プレゼンツールの中にコード埋めこんで、その場で実行できるようにすれば、そんな流れの悪さも解消できます。

しかも、その場でコードを変更して実行することもできるので、やりやすいです。

いかんせん、コードが間違っていても、どこが間違っているのかが分かりにくいという欠点もありますが、それは十分に練習しておけば大丈夫。

困るのが、資料の配付。今のプレゼンツールはまだ印刷に対応していないのです。しかも、アプレットだと、メタプログラミングのための FXEvaluator クラスが使えないのが痛いところです。

櫻庭は基本的には配付資料とプレゼンの資料は別物だと思っています。プレゼンのための資料だけを読んでも、プレゼンのコンテキストが分からないので誤解の元になってしまいます。だから、いつも配付資料は別バージョンになっていて、誤解されそうな部分などは削っています。

本当は学会発表みたいに予稿形式にした方がいいと思うんですけど、そこまでの時間はだいたいないんですよね。ほんとはやりたいんですが...

というわけで資料はこちらから。

JavaFX for Dummy

ラベル: ,

2009/03/23

今日の丸レク

今日は蒲田の富士通で丸山先生レクチャーシリーズ。今年は全然参加していないので、1 年ぶり。

しかも、Adobe の Flash Platform、Microsoft の Silverlight、そして JavaFX で去年とまったく同じ。発表者もまったく同じ。

この組み合わせはやりにくいんですよね。Adobe と MS はどういうプレゼンをするか容易に予想できるので、それと同じパターンはやりたくないのです。だって、つまらないんだもん。聞く方にとっても同じようなプレゼンが 3 つ並んでも、混同するだけでおもしろくないんじゃないかなぁ。

なので、今年も変化球。

去年は構造と手続きの話をしたのですが、今年は何の話をするかとても迷いました。というか、前日までまよってました。

結局、JavaFX Compiler とメタプログラミングについてお話しをしてきました。

JavaFX Compiler に関しては、あまり深入りせずに、宣言的文法がどのように Java の手続き的な文法に置き換えられるかを中心に紹介しました。そして、その延長線上でメタプログラミングの話。

Java では JSR 223 でスクリプト言語を扱えるようになりました。これを使えば、スクリプトの中で、動的にスクリプトを作成して、その場で実行ということも簡単にできます。

JavaFX には FXEvaluator クラスという JSR 223 をラップするクラスが用意されているので、スクリプトを実行することも簡単にできます。FXEvaluator クラスは JavaFX Script しか扱えないのが残念なところです。

資料はもちろん JavaFX で作った自作プレゼンツールです。下のリンクから見ることができます。

しかし、FXEvaluator クラスだけはアプレットで使えないんです。だから、メタプログラミングの部分はカットしてあります。

http://www.javainthebox.net/publication/20090323marulec/marulec.html

ところで、櫻庭は RIA という言葉がキライです。

どうもリッチというのが鼻につくんですよね。この場合のリッチは、普通に考えたらリッチな表現力に結びつくからです。

もちろん表現力が豊かなのはいいのですが、私がいやなのは表現力を豊かにすることが目的になってしまいがちだということ。やはり、表現力うんぬんよりもユーザビリティの方が重要なはず。

しかし、RIA という言葉にしてしまうと、表現力の向上ありきのような感じを受けてしまいがちではないかと思うのです。

ユーザが使いやすいのであれば、シンプルな UI でも全然かまわないし、必要であれば 3D などを駆使して作っても全然かまいません。でも、それはユーザの使いやすさという視点を常に忘れないようにしなければいけないと感じています。

もちろん、Adobe や Microsoft がリッチというのを表現力だけでなく、クライアントのリソースであったり、開発環境であったり、さまざまな意味のリッチを含んでいるというのは分かります。今日も Adobe の XXX さんがそう仰っていたし。

でも、普通の人にリッチにそこまで深い意味があると気づかせるのはなかなか難しいのではないかなぁ。どうしても表現力に目が向きがちになってしまうのではないでしょうか。

ということで、RIA よりは UFIA (User Friendly Internet Application) がいいね、という話も一番はじめにしました。略語の一番はじめの文字が U だと、プロレスとかボクシングの団体のように聞こえてしまいますけど ^ ^;;

アンケートを見せていただいたところ、それに賛同してくれる方が少なからずいたので、間違っていないと思うのですが、どうでしょう。

ラベル: ,

2009/01/28

今日の Java Hot Topics セミナ

去年の 12 月はなかったので、久しぶりの Java Hot Topics セミナ。今回は JavaFX 特集ということで、国際化チームの奥津さんと私が担当させていただきました。

実をいうと Sun Tech Days の時に大渕さんと話をしていて、ぜひ Hot Topics セミナで JavaFX を話してくれといわれていたのですが、12 月はあまりの忙しさに断ってしまっていたのです。

ということで、今月になったわけです。

資料はこちらから。もちろん、JavaFX で作ったプレゼンツールです。

http://www.javainthebox.net/publication/20090128JavaFX/javafx.html

今回も構造と手続き的なところから、JavaFX Script の宣言的文法が必要であったという論旨で進めました。

やはり、Flash や Silverlight と比べるとこの点が一番の違いなので、話がやりやすいのです。

ラベル: ,

2008/12/05

今日の JavaFX

とうとう JavaFX 1.0 がリリースされました。

今回、JavaFX のリリースにあわせて、gihyo.jp連載を開始しました。実をいうと、この連載、櫻庭にとってはじめて NDA を結んで書いたものです。しかも、持ち込み企画。

今までのインタープリタ版や Preview SDK とあまりにも言語仕様や API が変わっているので、これは早いうちに正しい情報を世に送らなければならないと感じていたわけです。同じように思っていた神谷さんたちと一緒にこの企画を立ち上げたわけです。

ということで、Sun Microsystems と NDA 結んで、一足早く JavaFX 1.0 を触らせていただいていました。

いやぁ、ほんとに別物ですよ、これは。もし、これから JavaFX を学ぼうとしている人がいらっしゃいましたら、記事や本の日付をよく注意してください。2008 年 12 月以前のものはまるで使いものになりません。

JavaFX 自体とてもおもしろいし、作ったものがすぐ見えるので楽しいのですが、間違った情報のために悩まされないようにしてくださいね。

ラベル:

2008/12/04

今日の Sun Tech Days Day 1

Mr. James Gosling & NekoBean T-Shirt, General Session, Sun Tech Days 2008 in Tokyo Day1, 2008.12.02

今日から 3 日間、東京ミッドタウンで Sun Tech Days。今日は James Gosling が基調講演ということもあって、おおにぎわい。

基調講演の会場で一番前の席に陣取ろうと思ったら、のに子さんがいらっしゃいました。今日こそ指笛を披露してくれると思うのですが...

James Gosling には今年の JavaOne で JavaFX で Flickr の写真を表示するデモの中で、キーワードに James Gosling とした時に表示された写真が私が撮ったもので、去年の Sun Tech Days Tokyo の写真だということをいっておきましたよ ^ ^;;

基調講演の前にエヴァンジェリストによるデモ。白いパネルを検知して、プロジェクタの画像をそこに写すというデモがおもしろかったですね。各席には3D 用の赤青の眼鏡が置いてあったので、どんなデモをするのかと思ったのですが、こちらはちょっと期待はずれ。jMonkeyEngine を使ったデモなんですけど、jMonkeyEngine 使うんだったらもっと派手な映像にすればよかったのに。

そして、次が James Gosling の基調講演。ほんとうにジェネラルな話なので、全然おもしろくないです。彼にこういうことを喋らせてもつまらないということは、分かっている人には分っているはずなんだけどなぁ。

たとえば、JavaOne のジェネラルセッションでは James Gosling はそういう話はまったくしないですから。James Gosling にはもっとギークっぽい話題の方がいいですね。

午後は興味があるのだけ、ポツリポツリと聴講しました。Java SE 6u10 と、JavaFX と、NetBeans。

セッション後はレセプション。今日はその後があったので、ほとんど食べずに控えてました。

Mr. James Gosling, General Session, Sun Tech Days 2008 in Tokyo Day1, 2008.12.02 Mr. James Gosling, General Session, Sun Tech Days 2008 in Tokyo Day1, 2008.12.02
Mr. James Gosling, General Session, Sun Tech Days 2008 in Tokyo Day1, 2008.12.02 荻布 真也さん, 1-M-1 Java SE 6 Update 10 and Deployment, Sun Tech Days 2008 in Tokyo Day1, 2008.12.02
片貝 正紀さん, 1-J-5 NeBeans New and Cool, Sun Tech Days 2008 in Tokyo Day1, 2008.12.02 増月さん, Reception, Sun Tech Days 2008 in Tokyo Day1, 2008.12.02
Reception, Sun Tech Days 2008 in Tokyo Day1, 2008.12.02 Mr. James Hughes, Reception, Sun Tech Days 2008 in Tokyo Day1, 2008.12.02

ラベル: ,

今日の Sun Tech Days Day 2

今日の General Session はかなり空席が目立ちます。私も途中で席を立ってしまったし。

確かに James Hughes は James Gosling に比べると、認知度がずいぶん違いますからねぇ。ちなみに昨日は James Gosling のセッションだけ聞いて帰ってしまった人がずいぶんいるらしいです。そんなに Gosling 見たいのかなぁ。つまらなかったのになぁ。

午後は JavaFX の Hands on Lab に参加しました。といっても、参加者というよりはお手伝いみたいなことをしてきました。なんと、この HoL はリリース前の JavaFX SDK が使えてしまうという、太っ腹な企画です。

でも、リリース前ということで、事前にダウンロードしておくことや、当日もネットからダウンロードもできないので、CD や USB メモリで参加者にコピーしてもらってました。このため、インストール完了までがとても大変。

その割には、内容がちょっと難しすぎたんじゃないかなぁ。

ラベル: ,

2008/03/14

今日の丸レク

2 週連続で講演。今日の丸レクは RIA 特集ということで、JavaFX のことを喋ってきました。

とはいえ、Microsoft と Adobe の前で普通に JavaFX のことを喋るのは、やる前から負け戦になると分かっているので、ちょっと違う方向性で話をしました。

プログラムにおける構造と手続きについて議論を行い、JavaFX の言語仕様、特に宣言的文法をどうして採用したかを考えるというものです。

GUI の構築を考えた場合、構造的な情報がとても多いのです。

たとえば、フレームを考えてみまると、フレームのサイズ、タイトル、背景色、前景色、描画する内容など構造的な情報が山ほど出てきます。宣言的文法を使うことによって、このような情報を効率的に表せるはずです。

構造と手続きの話は、鈴木ゆうすけさんがよく話すような内容になってしまったのは内緒 ^ ^;;

JavaFX の話をするのだから、もちろんプレゼンは JavaFX で作成したプレゼンツールを作りました。今まで使っていたプレゼンツールはインタープリタ版の JavaFX を使っていたのですが、今回は全面的にコンパイラ版の JavaFX で作り直しました。

現在のところ、インタープリタとコンパイラで文法の違いがかなりあるという、とんでもない状況。しかも、ドキュメントが全然ない。コンパイラ版の言語仕様のドキュメントはあるのですが、全然役にたたず。書いてないことが多すぎ。

たとえば、do とかレイジーバインドとか。また、インタープリタ版と対応するように記述されていないので、文法がどのように変更されたかが全然分かりません。

開発途中なので、しかたないとは覆いますけど...

ついでにいうと、コンパイラもまだまだできが悪い。一番困ったのが、コンパイルをするコマンド javafxc がコンパイルするクラスが参照したクラスをコンパイルしてくれないこと。

たとえば、Hello.fx の中で Name クラスを使ったとしましょう。Hello.fx に対し javafxc を実行すると、当然 Name.fx をコンパイルしてくれると思ったら、してくれません。まず、Name.fx クラスをコンパイルして、次に Hello.fx をコンパイルしないとダメなんです。

これには困った。他のクラスに依存しないクラスからコンパイルするバッチファイル書いたんですけど、これは必要のないクラスまでコンパイルしてしまう。もうちょっと使いやすければよかったのに。

ビルドといえば、JavaFX Compiler は NetBeans で開発されていて、ant の build.xml ファイルが存在します。で、JavaFX のライブラリをコンパイルするために、javafxc に相当する Ant のタスクが用意されています。ところが、これがまた使い方が全然分からないんですよ。

NetBeans の build.xml は長すぎて、見る気も起きないし......

結局、Ant のタスクは使いこなすことができませんでした。誰か、使い方教えてぇ。

もう 1 つ困ったのが、デバッグ。

結局、解決できなかったバグが残っています。文字列や絵アニメーションさせると、バウンディングボックスが崩れてしまい、表示が切れてしまうというものです。

このバグがまた再現性が悪いんですよ。起ったり、起らなかったり。原因が全然分かりません。しかも、マシンによって頻度が全然違うのです。

これには困りました、というか困ってます。

まぁ、こんなそんなで本当にギリギリまで作り込んでました。会場に着いてからも、後ろの方でゴソゴソ。そんな姿を首藤さんにしっかり見られてしまい、後から「資料作ってましたね」といわれてしまいました ^ ^;;

だから、やろうと思っていたアニメーションなどがいくつか省略しています。次回までにはなんとか直さないと。

このプレゼンツールを作っている時に気がついた、インタープリターとコンパイラの違いは もう 1 つの blog に書いてありますので、参考にしてください。

それにしても、先週の講演の後、風邪をひいてしまい、体調はいまいち。しかも、コンパイラに泣かされながら徹夜したので、なおさら体調はいまいち。講演中も喉が痛くて大きい声を出せないとか、鼻水がとまらないとか、ほんとに聞きづらかったと思います。参加された方には、この場をかりて、お詫び申し上げます。

 

さて、他の講演です。

丸山先生の Andoroido はいいとして、それ以外の Air と Silverlight は、はっきりいってつまらなかったです。

なんでだろう、なんでこんなにつまらないんだろうと、モヤモヤしていたのですが、理由が分かりました。

丸山先生レクチャーシリーズは技術の話をするセミナーなのです。私はもちろん技術の話が聞けると思っているわけです。

しかし、Air と Silverlight の話には技術の話がないのです。単なる、製品紹介。

製品紹介なんか聴きたくないんです。技術の話が聞きたいのです。

たとえば、いろんなセミナーでパラレルにセッションがあるような時、一般的にスポンサーセッションは人気がないですよね。そういうことに企業の人は気づいていないのでしょうか?

そういうセミナでは、参加者は技術の話を聴きに来ているのであって、製品の紹介を聴きに来ているのではないのです。製品紹介は展示会とか自社イベントでやってください。

じゃぁ、どうすればいいかというと、製品の裏側で使われている技術の話をすればいいのです。

Air だったら、ActionScript のコンパイラの話とか、Air の実行環境の話とか、MXML がどのように処理されるのかとか。技術ネタはいっぱいあるはずです。そういうことを話してくれれば、どんなにおもしろくなったことか。

依頼された人が技術の話ができないのであれば、技術の話ができる技術者をアサインすればいいんです。ただそれだけなのに、なんでできないんだろう。

ラベル: , , ,

2007/12/22

今日の JavaFX

はてなにも書きましたが、こちらにも。

JavaFX のプロジェクトサイト OpenJFX のデザインが変更されたのですが、それに合わせて日本語サイトもデザインを更新しました。

でも、まだ index.html と downloads.html だけです。

その他のドキュメントについても準じ更新していこうと思っています。

OpenJFX はそんなにドキュメント量が多くないので、ほとんど個人でやってます。でも、やっぱり JavaFX のコミュニティはあった方がいいのかなぁ。やりたいという人がいれば、コミュニティを作ってもいいとは思っているのですが、私もそれほど時間が割けないので...

jMaki のドキュメント翻訳コミュニティ jMusu は動き出したみたいですし。

だれかやりません?

ラベル: ,

2007/11/08

今日の Sun Tech Days その 1

11/7, 8 の両日に渡って Sun Tech Days が開催されました。

初日の基調講演は James Gosling。ひさびさの James Gosling の登場のためか、9 時前に会場についたにもかかわらず、受付で登録待ちの人の列がずらーっと。それでも、ルービックキューブはもらえましたよ。

ちなみに、このルービックキューブはバチもんでもバッタもんでもなくて、ちゃんとライセンスをとったものらしいです。で、Duke の面の真ん中にルービックキューブのロゴがちゃんと入っています。

会場に入ったら、とりあえず席を確保。その後、会場の写真をとるため、ブラブラしていたら Inyoung にバッタリ。Inyoung は Java のエバンジェリストで今回は JavaFX などを担当しています。基調講演でも JavaFX のデモをするのだとか。

で、話をしているうちに時間が迫ってきたので、席につくことにしました。そうしたら、Inyoung が「写真を撮るんだったら、前の方においでよ」と。で、連れていかれたのが、関係者席。

隣が末次社長で、反対側が Inyoung、そしてその隣が James Gosling。なんか、すごく居心地がわるいんですが... ^ ^;;;;;;

とはいうものの、講演がはじまってしまえば、そんなの気にもせず、写真を撮りまくっていました。

予告通り、Inyoung は JavaFX のデモ。SunSPOT のデモもありました。興味深かったのが GUI 版 DTrace。最近、Mac で DTrace 使えるようになりましたが、Windows や Linux でも使えるようにならないかなぁ。

ところで、指笛を吹くと約束していたのに子さんですが、デモの最中も指笛の音は聞こえず。のに子さぁーん、指笛ならしましょうよぉ。

後で本人に聞いたら、吹こうとしていたのだが、音が出なかったらしいです。じゃぁ、こんど一緒に練習しましょう。

さて、デモの後、御大 James Gosling の登場。まぁ、話はそれほど目新しいことではないのですけど、彼が喋るということに意義があるのです (キッパリ)。

基調講演の後、Inyoung に私が作った JavaFX のプレゼンソフトを見せていたら、彼女が James Gosling まで読んできてしまいました。それで撮られたのが、kyuka さんの blog の写真。

そして、今日 JavaFX のセッションを行なう Nandini もそれを見ていたのです。で、それをセッションの中でぜひ使いたいといってきました。

それでプレゼンを作るのは簡単なのかというので、全部スクリプトなのでプログラミングが必要だというと、じゃあどうするか教えてくれというではないですか。しかたなく、後で打ち合わせるということにしたのでした。

Keynote Session, Sun Tech Days, 2007.11.07
末次社長
Keynote Session, Sun Tech Days, 2007.11.07 Keynote Session, Sun Tech Days, 2007.11.07
Keynote Session, Sun Tech Days, 2007.11.07
Inyoung
Keynote Session, Sun Tech Days, 2007.11.07 Keynote Session, Sun Tech Days, 2007.11.07
Keynote Session, Sun Tech Days, 2007.11.07 Keynote Session, Sun Tech Days, 2007.11.07
Angela
Keynote Session, Sun Tech Days, 2007.11.07
WowWeeのロボット
Keynote Session, Sun Tech Days, 2007.11.07 James Gosling, Keynote Session, Sun Tech Days, 2007.11.07
Javaの父 James Gosling
James Gosling, Keynote Session, Sun Tech Days, 2007.11.07
James Gosling, Keynote Session, Sun Tech Days, 2007.11.07

ラベル: ,

2007/11/02

今日の秘密の座談会

秘密で貫こうと思ったら、すでに本家の blog に公開されていました。

先週の打ち合わせはこのためにあったわけです。

それにしても、カメラで撮られているのは、かなり緊張しますね ^ ^;; とりあえず、姿勢だけは気をつけていたのですが、Google Japan Blog に載っている写真を見ると、前屈みになってますね。ダメだ、こりゃ。

さて、何を話したかというと...... 秘密。そのうち、Google Japan Blog で公開されると思います。

下の写真は収録前の様子。石原さんにダメ元で撮ってもいいかと聞いてみたところ、快諾してくれました。やっぱり、いってみるものですね。

Google Developer 交流会, Google 渋谷オフィス Google Developer 交流会, Google 渋谷オフィス Google Developer 交流会, Google 渋谷オフィス
Google Developer 交流会, Google 渋谷オフィス

ラベル: ,

2007/10/19

今日の Java Expert #02

Java Expert #02

3 月に #01 号が出た Java Expert ですが、11 月に #02 号が発売されます。

櫻庭は JavaFX の記事書きました。といっても、半分は Software Design に書いたものの転載です ^ ^;;

Software Design ではあまりプログラミングまで解説できなかったので、Java Expert では JavaFX Script について増補してあります。JavaFX Script の言語仕様を追いながら、アプリケーションを書いています。

#02 号ではそれ以外にも、Teeda や JRuby など、おもしろそうな記事がいっぱい。

ぜひ、書店にてお求めください。

ラベル: ,

2007/09/15

今日のセミナ

その後、Java コミュニティ@九州の セミナ

講師は昨日に引き続き浅海先生、小出先生。そして、きしださん。エイタロウソフトの西島さんにもお願いしていたのですが、時間があわず。その代わりに榊さんに登壇していただけることになりました。

お題は...

  • 浅海先生 マインドマップ・モデリング
  • 櫻庭 JavaFX
  • 榊さん モバゲーの 3D アバター
  • 小出先生 PBL の紹介
  • きしださん IDE を Dis る

規格は早くから決まっていたのですが、告知が遅くなってしまい、告知期間は 1 週間だけ。これだと、やっぱり集客は難しいですね。有料だったのも、集客に影響してしまったようです。

イベントの企画はやっぱり難しいですね。

とはいうものの、セミナ自体はわきあいあいと進んだのでした。

ちなみに、この日、天気予報では雨だったのですが、実際はピーカン。ものすごく気温が上がりました。セミナーの集客としては雨よりも晴れていた方がいいのですが、暑すぎ。

さて、セミナーです。

講演の中でヒットだったのは、榊さんの講演。モバゲーの 3D アバターってすごいですね。

3D のアバターを着替えさせたりできるのですが、なんとアバターのレンダリングはなんとサーバでやっているのだそうです。レンダリングした結果はアニメーション GIF にしてケイタイで表示するのだとか。

アバターはアニメチックな絵なのですが、カトゥーンシェーダーを使っていないようです。すべて、モデラーさんたちが作り込んでいるのだと。それはそれですごいかも。

現状はシステム側で用意された着替えしかできないようですが、今後ユーザ自身がモデリングできるような拡張も考えられているようです。

ちなみに、きしださんの講演は「Java IDE を比較してみよう」だったのですが、急遽変更。「NetBeans 以外の IDE を Dis ろう」になってしまいました。

きしだ さとしさん, 第 2 回 Java コミュニティ@九州 セミナー
司会はきしださん
浅海 智晴さん, 第 2 回 Java コミュニティ@九州 セミナー
浅海先生
浅海 智晴さん, 第 2 回 Java コミュニティ@九州 セミナー
やっぱり暑いんです
榊 真史さん, 第 2 回 Java コミュニティ@九州 セミナー
榊さん
小出 洋さん, 第 2 回 Java コミュニティ@九州 セミナー
小出先生
小出 洋さん, 第 2 回 Java コミュニティ@九州 セミナー
きしだ なおきさん, 第 2 回 Java コミュニティ@九州 セミナー
きしださん
きしだ なおきさん, 第 2 回 Java コミュニティ@九州 セミナー
タイトルが変った!

ラベル: , , , ,

2007/07/06

今日の予告 - Java Küche 講演会

来週、Java Küche の講演会で沖縄にいきます。

またか、といわれそうですが、JavaFX の話をします。

ひがさん、鈴木雄介さんの講演もあります。ご興味のある方はぜひご参加ください。

2007-07-13: JavaKuche 一周年記念講演会&総会

日時:2007/07/13(金) 13:30 - 17:30
会場: 浦添市 てだこホール(市民交流室)
参加費:無料(懇親会は別途)

ラベル: , ,

今日のナイトセミナ

というわけで、wakhok ナイトセミナーです。全 6 回の 試して学ぶ! RIA プラットフォーム

講師は白石俊平さん。毎コミなどによく記事を書かれている方です。私はアシスタントみたいなものです。

6 回のうち、今日と来週が JavaFX。その後、Adobe AIR と MS Silverlight を 2 回ずつという豪華なセミナーです。

でも、なんで AIR と Silverlight なんだろう? AIR と対応するのは WPF だし、Silverlight と対応するのは Flex か Flash だと思うのですが...

セミナーは和気藹々とした雰囲気でなかなかよかったですよ。

セミナー後は、となりのビルの Rose & Crown へ。wakhok といえば天府だったのですが、なんと先週閉店してしまったのでした。

Rose & Crown はパパミラノやティキティキと同じグループのブリティッシュパブ。内装の懲り方は、レストランというより遊園地のノリですね。

パブなので料理はこんなもんでしょう。ピザは冷凍食品だし ^^;;

しかし、デザートを頼んでいたのは私だけだったのに愕然としてしまったのでした。

Rose & Crown, Akihabara Rose & Crown, Akihabara Rose & Crown, Akihabara
Rose & Crown, Akihabara Rose & Crown, Akihabara Rose & Crown, Akihabara
Rose & Crown, Akihabara Rose & Crown, Akihabara Rose & Crown, Akihabara
Rose & Crown, Akihabara Rose & Crown, Akihabara Rose & Crown, Akihabara
Rose & Crown, Akihabara Rose & Crown, Akihabara

ラベル: ,

2007/06/27

今日の Java Night Seminar

で、Java Night Seminar です。何度も予告したように今日は Sun の岡崎さんといっしょに JavaFX。会場が狭く、30 人ぐらいでしょうか。それでも、ギュウギュウな感じ。

はじめに櫻庭が JavaFX の概要を 45 分ぐらい説明して (すいません予定では 30 分だったのですが ^^;;)、30 分ぐらい岡崎さんがプログラム言語の How to 的なところを 30 分ぐらい。

その後、お題を受けつけたのですが...

すいません、全然できませんでした ^^;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

やっぱり、ああいう場で即興でやるというのはむずかしいぃぃぃ。

まぁ、全体的にはいろいろ議論もできたしよかったのではないかと思っております。

java-ja の人たちはもちろん、その他にも mixi の JavaFX コミュや JavaFX wiki を作られている HDO さん、jollyrojer さんもわざわざ愛媛から駆けつけてくれたり、はてなのてんぷらメモで JavaFX のエントリーをいっぱい書いている aterai さんや、SQS を開発している久保さん、db4objects の佐藤さんなども参加していただきました。

こんなにいろいろな人が参加してくれるとは思いませんでした。あらためてお礼させてください。ありがとうございました。

ラベル: , ,

今日の資料

今日の資料は こちら から見ることができます。

Java Web Start にはいろいろと問題があって、Shift_JIS 版と UTF-8 版の 2 つを用意しました。

Java Web Start の問題点とは

  • -Dfile.encoding が効かない
  • フォントの埋め込みができない

1 つめはもう論外です。ただし、クラスファイルだけを考えていたのであれば、これはしかたないところもありますね。ところが、スクリプトファイルを JAR に含めてしまうとデフォルトエンコーディングでしか扱えないため、スクリプトファイルの読み込みすらできません。

2 つめはフォントの埋め込みの問題です。Java には Serif、SansSerif など論理フォントを扱えるのですが、はっきりいってちゃんと UI を設計するのであれば、これだけでは全然使い物になりません。

今回は TBP ゴシックDE (いわゆる太丸ゴシックです) を使っているのですが、ここに Windows で SansSerif に割り当てられている MS Pゴシックを使われてしまったら、まったく雰囲気の違う UI になってしまいます。

PDF や Flash ではこの問題に対して、フォントの埋め込みができるようになっています。Java Web Start でも (というか Java 自体かもしれませんが)、同様に仕組みを用意しないと、JavaFX で RIA なんていってられないですよ。

ラベル: , ,

今日のお題

で、もらったお題をここでやってみようと思います。

マウスに追従する Duke

マウスの動きに追随するようなコンポーネントです。

考え方としては、Java でいうところの MouseMotionListener#mouseMoved が発生したら、そのマウスカーソルの位置をアイコンなどに反映させるようにします。

このとき、マウスイベントが発生するコンポーネントとアイコンを扱うコンポーネントの同期を行なわなければいけません。これにはモデルのクラスとバインドを使用しました。

ソース: MouseFollower.fx

import javafx.ui.*;
import javafx.ui.canvas.*;
import java.lang.*;
 
// モデルとなるクラス
class PointModel {
    // アトリビュートとして ImageView の座標を持つ
    attribute x: Number;
    attribute y: Number;
}
 
// モデルの初期値
attribute PointModel.x = 100;
attribute PointModel.y = 100;
 
Frame {
    // モデルのインスタンス化
    var model = PointModel {}
 
    width: 800
    height: 600
    onClose: operation() {
        System.exit(0);
    }
 
    content: [
 Canvas {
            content:[
            ImageView {
                // モデルの値と ImageView の位置を同期させる
                transform: bind translate(model.x, model.y)
                animated: true
                image: {url: "{__DIR__}/duke.running.gif"}
            }          
            ]
 
            // Canvas 上でマウスが移動した場合の処理
            onMouseMoved: operation(e) {
                // マウスカーソルの位置をモデルに反映させる
                model.x = e.x;
                model.y = e.y;
            }
        }
    ]
  
    visible: true
}

モデルとなっているのが PointModel です。PointModel はアトリビュートとして x と y を持っています。この x と y と絵を表す ImageView の位置をバインドして、同期させるわけです。これを行っているのが赤字で示した部分です。bind というキーワードで同期させることができます。

また、マウスの位置が変化した場合、onMouseMoved がコールされます。onMouseMoved はオペレーション型のアトリビュートなので、オペレーション (Java でいうところのメソッドです) を代入できます。それが青字で示した部分です。

これを実行すると、マウスカーソルに常にイメージがくっついてしまいます。マウスカーソルがイメージの左上に位置しているのはご愛嬌ということで ^^;;

Java Web Start で起動

Mouse Follower

マウスカーソルに近づいていく Duke

このままでもいいといえばいいのですが、なんだか味気ないのです。常にピッタリとマウスカーソルとイメージがくっついているのは動き的にもおもしろくありません。

で、マウスカーソルに近づくように動くイメージを作ってみました。

ポイントは無限アニメーション。

無限につづくアニメーションには 2 種類あります。

  1. 0 から 100 までを何度も繰り返す
  2. 単に繰り返す

JavaFX でも Timing Framework でも上記の 2 種類は区別して扱われています。

何度も繰り返すほうは岡崎さんが説明していたので、ここでは単に繰り返すほうを説明します。

単に繰り返しは x = [0..100] dur 1000 のような書き方では記述できません (たぶん)。もう 1 つの for (unitinterval unit in dur 1000) { ... } の書き方を使用します。

単純に繰り返すということは、dur の後に記述する時間が無限大であることと同じ意味です。したがって、0 から 100 までの値をとりうるとしたら、0 の次の値は 100/∞ になってしまいます。したがって、値が変化しながらアニメーションということはできないのです。

もう 1 つの unitinterval を使った場合も、通常 unit は 0 から 1 に変化するのですが、無限アニメーションの場合は常に 0 のままです。

で、どう書けばいいのかというと次のように書きます。

    for (unitinterval unit in dur -1) { ... }

御託は長いくせにそれだけかい、といわれてしまいそうですが ^^;; dur の後の期間を -1 にするだけです。なぜこれに気がついたかというと、Timing Framework も期間を -1 (Animation.INFINITE という定数が用意されていますが、値は -1 です) だったからです。

たまたま、やってみたら当たりだったようです。

ここまでくれば後は簡単です。

この無限ループの中でマウスカーソルの位置を取得します。そして、イメージの位置と差分を取って、イメージを移動させます (実際にはバインドしてあるので、勝手に移動してくれます)。

ソース: MouseFollower2.fx

import javafx.ui.*;
import javafx.ui.canvas.*;
import java.awt.MouseInfo;
import java.awt.PointerInfo;
import java.lang.*;
 
// モデルのクラス
class PointModel {
    attribute x: Number;
    attribute y: Number;
 
    // 絶対座標と相対座標の差
    attribute diffX: Number;
    attribute diffY: Number;
 
    // ImageView を移動させるオペレーション
    operation move();
}

// モデルの初期値
attribute PointModel.x = 100;
attribute PointModel.y = 100;

// ImageView を移動させるオペレーション
operation PointModel.move() {
    var e: Number = 0;

    // dur -1 とすることで常に繰りかえす
    // unit は常に 0
    for (unitinterval unit in dur -1) {
        // マウスの現在位置を取得 (絶対座標)
        var info = MouseInfo.getPointerInfo();
        // Canvas における相対座標に変換
        var xx = info.getLocation().x - diffX;
        var yy = info.getLocation().y - diffY;
 
        // 移動の差分
        var dx = if xx > x then xx - x else x - xx;
        var dy = if yy > y then yy - y else y - yy;
        // 移動の向き
        var sx = if xx > x then 1 else -1;
        var sy = if yy > y then 1 else -1;

        // 移動分を計算
        if (dx > dy) {
            x += sx;
            e += 2 * dy;
            if (e >= 0) {
                y +=sy;
                e -= 2 * dx;
            }
        } else {
            y += sy;
            e += 2 * dx;
            if (e >= 0) {
                x += sx;
                e -= 2 * dy;
            }
        }
    }
}
 
// モデルのインスタンス化
var model = PointModel {};
 
Frame {
 
    title: "Mouse Followed Duke 2"
    width: 800
    height: 600
    onClose: operation() {
        System.exit(0);
    }
 
    content: [
 Canvas {
            content:[
            ImageView {
                transform: bind translate(model.x, model.y)
                animated: true
                image: {url: "{__DIR__}/duke.running.gif"}
            }          
            ]
  
            onMouseEntered: operation(e) {
                // Canvas とスクリーン座標の差を計算する
                model.diffX = e.source.getXOnScreen() - e.x;
                model.diffY = e.source.getYOnScreen() - e.y;
            }
        }
    ]
 
    visible: true
}
 
// 移動の開始
model.move();

赤字の部分が無限アニメーションの開始部分です。

ここでは、マウスカーソルの位置を取得するのに java.awt.MouseInfo クラスを使用しています。

ただし、取得できるのはスクリーンの左上を原点としたスクリーン座標なので、この値をここで使用している Canvas の原点からの座標に変換しなければいけません。

Canvas のスクリーン座標を取得する方法が分からなかったので、マウスイベントが発生したときにスクリーン座標と Cavas の座標の差分を取得しています。

Java Web Start で起動

Mouse Follower

これで、Duke がマウスカーソルを追いかけまわすようになりました。マウスカーソルに向かう軌跡がいまいちな点や、左に移動していても Duke は右を向いている点や、マウスカーソルに追いついてしまった後のアクションなど、いろいろ改良するところはあると思いますが...

今日はここまで。

ラベル: ,

2007/06/22

今日の JavaFX

いちおういっておきますが、お題ちょうだいといってもそんなすごいことはできないですよ。たかだか、1~2 時間ぐらいで、複数題やるつもりだし。しかも、時間中にプログラムの解説までおこなうつもりなのですから。

まちがっても、「Duke の画像を 60fps で 2 倍に拡大表示してください」とか「JOGL つかって 3D でガシガシ Flickr から写真表示してください」とか「Leopard の GUI を JavaFX で再現してください」とかはできません。

ご理解のほどよろしくお願いします。

ラベル: , ,

2007/06/19

今日の Java Night Seminar

6/27 に NSUG+IAjapan 主催の Java Night Seminar があります。

今月のお題は JavaFX。

岡崎さんと私が参加者からお題をもらって、その場でプログラムを作成すというライブ的なセミナにする予定です。

とはいうものの私はもっぱら説明役に徹しようかなぁと。染めの助染め太郎でいえば、染めの助の役目です。岡崎さんの横で「今日はいつもより多めにタイピングしておりますぅ」とでもいってようかな ^^;;

それとも横でプログラムできるまで Dukelele を弾くか ^^;;

まじめな話、JavaFX でどのようなことができるのか、どのような用途に使うのが紹介できればいいと思ってます。

Java Night Seminar はビールを飲みながらおこなうセミナで、とても柔らかい雰囲気なので、どんどん質問をぶつけてください。

まだ席は若干残っているようですので、みなさまのご参加お待ちしております。

申し込みは IAjapan の申し込みページよりお願いします。

ラベル: , ,

今日の JavaWorld Day

ということで、JavaWorld Day で Java SE のことを喋ってきました。

本来は Java SE 7 のことだけを喋るつもりだったのですが、急遽 OpenJDK と JavaFX に関しても喋ってきました。

というのも、この講演タイトルを決めたのは JavaOne にいく前だったからということがあります。ところが、JavaOne にいってら、OpenJDK と JavaFX が出てきてしまったわけです。

Java SE のことを話すのであれば、やっぱりこの 2 つは外せないだろうということで、内容に盛り込んでみました。

ところで、講演資料ですが今回もまた JavaFX Script で作ってみました。今回は前回と違い、パクッたコードはありません ^^;;

一から作り直してみましたが、そんなにいい設計とはいえないですね... orz

資料のはじめのうちは絵やグラフをちゃんと入れてみたのですが、後半は完全にばててしまって文字ばかりになってしまいました。まじめな話、資料作りが間にあうかどうか、かなりギリギリの所だったので ^^;;

資料を作ってすぐだということもあって、講演では後ろを向いてしまうことが多かったのが今回の反省点です。

サウンドも入れたかったので、当初 JOAL で作り込んでみたのですが、どうしても動かない。動かない原因をつきとめる時間もないので、Java Sound を使ってみました。ところが、これが大失敗。

家のデスクトップで動かしていたときはまったく問題なかったのですが、非力なノートで動かしたら音がブチブチに切れてしまうのです。

Java Sound API はストリームからデータを読みこんでミキサーに入力するという処理を記述しなくてはいけないのですが、UI の処理が重くなると、この読み込みが追いつかなくなってしまうのです。

結局、講演では最後のもう UI のイベントを扱わないところにだけサウンドを入れるだけにしました。

これだったら、もう少しがんばって JOAL が動かない原因を探せばよかった。

 

講演は Open をキーワードにして OpenJDK、Future をキーワードにして Java SE 7、Rich をキーワードにして JavaFX を説明しました。それぞれ、キーワードに関連した選曲までしたのに...

せっかくなので、使う予定だった曲を列挙しておきます。アーティスト名、タイトル、アルバムの順に並んでます。

オープニング Cyndi Lauper "Time After Time (Acoustic Version)" - The Body Acoustic
Open The Doobie Brothers "Open Your Eyes" - Minute by Minute
Future Herbie Hancock "Future Shock" - Future Shock
Rich Toristan Prettyman "Song for Rich" - 23
エンディング Jack Johnson "Breakdown" - In Between Dreams

もちろん、Song for Rich の Rich が人の名前だということは分かっているですけど、いい曲が思いつかなかったので ^^;;;;;;

発表資料はこちらのページで公開しています (ソースも公開してます)。

ラベル: , ,

2007/06/15

今日の JavaFX

OpenJFX プロジェクトの日本語 Web サイトがオープンしました。

https://openjfx.dev.java.net/ja/

コンテンツはとっくにできていたのですが、法務的な処理に時間がかかってしまいました (本当はまだちゃんと法的な処理が終わっていないので、見切り発車です ^^;;)。

とはいうものの、日本語になっているのは、トップページと Language Reference、そして Getting Started の 3 つだけです。

ないよりはましという程度ですね。

ひきつづき、ボランティア募集中です。よろしくお願いします。

ラベル: ,

2007/06/11

今日の JavaFX

上で書いた JavaOne 報告会のページには櫻庭の資料はありません。スイマセン...

だって、前に書いたように JavaFX で書いたので、PDF にするのは難しいんです。

とはいうものの、何もなしでは困るので、Java Web Start で動くようにしました。こちらのリンクから JavaFX が立ち上がるようになっています。

ただし、申し訳ないのですが、オレオレ証明書しか使っていません。ごめんなさい。

JavaFX はローカルのファイルキャッシュを作ってしまうのですが、それ以外はローカルのリソースにアクセスするなどの悪いことはしていないので、信用してください ^^;; 信用できない場合は実行しないようにしてくださいね。

プレゼンのソースはこちらに置いておきました。私自身もまだ模索中なので、このコードがお手本になるとは正直言えません。でも、公開しないよりは公開した方がいいと思うのです。

ラベル: , , ,

2007/06/06

今日の JavaFX

なんかいろいろと経緯があって、JavaFX の Language ReferenceGetting Started の翻訳をお手伝いしています。

もともとの翻訳は Language Reference が丸山先生、Getting Started がマイコミによく記事を書かれている白石さんによるものです。JJUG の活動の一環として、会員である丸山先生と白石さんが openjfx プロジェクトに翻訳を寄贈したことになります。

私がやっているのは java.net にあるオリジナルと同じ HTML のタグで構成をしなおすということだけ。

できあがった翻訳は java.net の openjfx プロジェクトで公開される予定です。

やっぱり、日本語があるといいですよね。

これまたいろいろ経緯があって、櫻庭は openjfx プロジェクトの Content Developer というロールをいただきました (一説によると K 谷さんにはめられたらしいです... うそです、うそです、K 谷さんごめんなさい ^^;;)。 Content Developer はソースのコミットはできないのですが、ドキュメントはコミットできるロールです。

せっかくこういうロールをいただいたので、もう少しがんばってみようと思います。翻訳者はつねに欠乏しているので、翻訳を手伝っていただけるボランティア大歓迎です。

我こそはという方がいらっしゃいましたら、ぜひお願いします。

 

ついでですが、6/19 に JavaWorld Day というイベントがあります。もともと、櫻庭は Java SE 7 の話だけをする予定だったのですが、JavaFX にも触れようと思っています。60 分の講演なので、40 分ぐらいを Java SE 7、残りを JavaFX にする予定。まぁ、JavaFX に関しては JavaOne 2007 報告会とほとんど変らないと思いますけど。

JavaOne 2007 報告会で使ったプレゼンツールをもうちょっとリファインするつもりです。そうやって、自分を追い込んでいかないとなかなかやらないので ^^;;

ラベル: , , ,