ラベル JavaOne の投稿を表示しています。 すべての投稿を表示
ラベル JavaOne の投稿を表示しています。 すべての投稿を表示

2023/09/12

Who's Who in Java 現代編

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

 Who's Who in Javaの続きです。

前回はJavaを作っていた人たちを紹介しました。本エントリーでは現在、Javaを作っている人たちを紹介します。

発表資料でいうと、ここからです。

本エントリーで紹介する人は、今のところすべてOracleの社員です。オープンソースになったとはいっても、Javaの方向性を決めて、実装しているのは、やはりOracleの人が中心です。


Mark Reinhold

まずはじめに紹介するのが、JavaのチーフアーキテクトであるMark Reinholdです。

Markが表舞台に登場したのは、J2SE 1.4で導入されたNIOです。

J2SE 1.4のころの大きめの標準APIは、JCPで標準策定が行われていました。NIOはJSR 51です。JSRはJava Specification Requestの略です。

そのJSR 51のスペックリードがMarkでした。

NIOも結構もめたらしいのですが、それをまとめたのがMarkだったということをJSR 51のエキスパートグループにいらした方から聞いた覚えがあります。JSR 51のエキスパートグループを見てみれば分かりますが、日本の某企業も加わっているのが分かりますね。

その後、MarkはJava 5のスペックリードになります (JSR 176)。彼は技術力だけでなく、交渉をまとめる調整力があったからだと思います。

Java 6ではMarkはスペックリードを外れます。Java 6からJava 7のころは、SunがOracleに買収されたり、オープンソース化や、関数型の導入などでゆれにゆれていた時期です。

そこで、Java 6のスペックリードがまとめきれなくなったのか、途中からMarkが再登板します。

Java 7のリリース予定が遅れまくっていた時に、ラムダ式はJava 8にスリップさせることを決めたのもMarkです。

Javaを作っている開発者や、JCPのエキスパートグループなどから全幅の信頼を持たれていたMarkだからこそ、まとめられたのだと思います。

このころ、SunでJavaを作っていた日本人開発者の方から聞いた話なのですが、「Markが言うことなら信用できる」と多くの開発者が言っていたらしいです。

そして、激動期のJavaのスペックリードをJava 9までつとめます。Java 10からはこの後に紹介するBrian Goetzがスペックリードとなりました。

現在では大きな方針変更のたびにMarkが引っ張り出されています。たとえば、LTSの期間を変えるとか、JVMLSのエントリーで紹介したProject Leydenなどです。


彼がスペックリードだった時代、JavaOneのテクニカルキーノートといえばMarkでした。

"Welcome to JavaOne"で始めるのが恒例で、彼の口癖にa lot ofではなくa bunch ofがあります。こういう言い方を知ったのも彼のセッションでしたね。

しかし、彼はSunもしくはOracleが主催のイベント以外では登壇をほとんどしていません。たぶん、Devoxxぐらいじゃないかなぁ。

日本でJavaOneをする時に、Markに来日してもらおうと、当時Oracleだった寺田さんが奮闘していたのですが、結局果たされず。ぜひ、一度は日本にも来てほしいですね。


Brian Goetz

Mark ReinholdからJavaのスペックリードを受け継いだのがBrian Goetzです。肩書としてはJava Language Architectです。

Brianはもともと自分の会社を持っていました。その当時、IBMのDeveloperWorksという技術コミュニティサイトがあって(今はIBM Developerになっています)、そこに多くの記事を書いていました。DeveloperWorksは日本語サイトもあって、Brianの記事も訳されていて、さくらばも読んでました。残念なことにDeveloperに衣替えした時に、日本語のサイトはなくなってしまったようです。

また、彼はJSR 166 Concurrency Utilitiesのエキスパートグループのメンバーでもありました。JSR 166がJ2SE 5に導入された後、Brianが中心になってJava Concurrency in Practice (日本版はJava並行処理プログラミング)を書き上げています。

もう20年近く前の本ですが、今でもJavaでパラレル処理について一番おススメできる書籍です。残念ながら、日本語版は絶版になってしまいましたが...

さて、この本が出版されたころに、BrianはSunに入ります。

彼が担当したのが、Project Lambdaです。

Project Lambdaはほんといろいろあったプロジェクトです。

関数型をJavaに導入するということで、Project Lambdaの前に前哨戦があり、いくつもの提案がされていますし、もちろん反対派も多かったのです。

たとえば、前のエントリーで紹介したJoshua BlochとNeal Gafterはそれぞれ別の方式を支持し、そのせいで仲たがいしてしまったという噂もあります。

Project Lambdaになってからも、二転三転してやっとまとまったのがJava 8だったわけです。

Brainはプロジェクトリードとして、Project Lambdaをまとめたわけです。

その後も、Project AmberやProject Valhallaのプロジェクトリードになり、Java 10からはJavaのスペックリードになりました。

これからのJavaの方向性を決めているのが彼だと言い切っても間違いではないです。

BrianはOpenJDKでも、そのつどつどでドキュメントを書いていますし、InfoQなどにも記事を書いています。それだけでなく、メーリングリストでもたびたび投稿を行っており、他の開発者からの質問にも丁寧に答えています。

すごい忙しい人だと思うのですが、よくこれだけやるなぁと本当に頭が下がります。


John Rose

Brian GoetzがJava言語の人だとしたら、JVMの人といえばJohn Roseです。

John RoseはJavaOneのキーノートへの登壇こそないものの、JVMのセッションでおなじみです。

さくらばがJohnのことを知ったのは、JSR 292 Supporting Dynamically Typed Languages on the Java Platformのスペックリードとしてです。

JSR 292は新しいバイトコードであるinvokeDynamic、いわゆるindyを導入したプロジェクトです。indyはJVM上で動的型付け言語の実装を行いやすいように、実行時に実行するメソッドを動的に決定することのできるバイトコードです。

また、これに伴いDa Vinci Machine Project (Multi-Language VM)のプロジェクトリードにもなっています。

そして、これがJVMLSにつながるわけです。

現在はProject Panamaのプロジェクトリードにもなっています。


スペックリードたち

ほんとにJavaを作っている人たちをあげていくとキリがないのですが、その中から今活躍している4人を紹介します。


左上のPaul SandozはJVMからJavaの言語仕様まで広く活躍しています。

今のメインはProject PanamaのVector APIですね。

Project Panamaは大別して、2つのサブプロジェクトがあって、1つがPaulが主導しているVector API、他方が次に紹介するMaurizioが主導するForeign Function & Memory API (FFM)です。

JavaOneでも彼のセッションはおなじみで、柔らかい口調で、楽しくてしょうがない感じで話すのが印象的です。


左下のMaurizio Cimadamoreは前述したFFMを主導しています。

もともとコンパイラが得意で、javacにおけるラムダ式の部分はほとんど彼が書いたらしいです。これはOpenJDKのコミッターである @bitter_fox さんに聞いたので、たしかなはず。

他の開発者はMarkとかBrianというようにファーストネームで呼んでますけど、@bitter_foxさんがMaurizioさんといつも呼ぶので、なんとなくMaurizioさんと私もさんづけで呼ぶようになってしまいましたw


右上のRon PresslerはVirtual Threadを策定したProject Loomのプロジェクトリードです。

リードをするのはLoomがはじめてのはず。というか、それ以前に彼が何をやっていたのかさくらばはよく知らないのです。

Project Loomはもうそろそろ終わりが見えてきたので、次にRonが何をはじめるのか楽しみです。


ここまでの3人はどちらかというとJVM側の開発者でしたが、ライブラリを作っている人もいます。右下のStuart Marksもその1人。

彼もProject Lambdaなどのプロジェクトにも参画していましたが、今はコアライブラリチームの活動が主体のようです。特にコレクションフレームワークですね。

むきむきJavaでイシダさんがSequenced Collectionsについてプレゼンしてくれたのですが、そのSequenced CollectionsのJEPを書いたのも、プルリクしたのもStuartでした。

ところで、上の写真でStuartが白衣に聴診器をつけてます。これは、2016年のJavaOneのコミュニティキーノートでSteven Chinの企画で寸劇をしたのですが、その時にDr. Deprecatorという役でStuartが演じたものでした。

彼はこれが気に入ってしまったようで、毎年Dr. DeprecatorとしてJavaOneに登場してます。


Javaコミュニティ

ここで紹介する3人は、マネージメント側の人たち。特にJavaコミュニティに関わる人たちです。

3人とも同じTシャツを着ているのは、2022年のJavaOneのキーノートセッションで撮ったからです。


一番左側のGeorges SaabはJava Platform Groupの上級副社長です。そして、JavaOneのキーノートといえばGeorgesです。

Georgesは元々は開発者でJavaのGUIであるAWTを作っていました。

その後、BEAに転職して、そのBEAがOracleに買収されて、Oracleに戻ってきました。Oracleに戻ってきた時にはBEAのJRockit担当の副社長だったのですが、今ではJava全般を担当しています。


真ん中のChad Arimuraも副社長で、Javaのデベロッパーリレーション担当です。Java Championの事務局も彼に担当していただいてます。

彼も元々開発者で、サーバーレスのFn Projectなどを作っていました。

Arimuraという名字でお分かりのように日系の方なのですが、日本語は全然喋れないです。

そういえば、2019年に東京で開催されたOracle Codeで @bitter_fox さんと私でVector APIとVirtual Thread (当時はFiber)のデモをキーノートセッションで行いました。この無茶ぶりをしてきたのが、Chadですww


右側のSharat Chanderは肩書はプロダクトマネージャーですが、Sunの頃からJavaOneなどのイベントの取りまとめなどJavaコミュニティに関する業務を一手に引き受けている感じです。

2015年からはJavaOne (or Code One)のMCも彼が担当してますね。

X (元Twitter)でも、Javaに関するツィートをいっぱいしてます(それ以外のツィートも多いですけどw)。


Duke

最後に忘れてはならないのが、Dukeです!

言語でマスコットを使ったのはJavaのDukeがはじめてだと思います(さくらばが他を知らないだけかもしれませんが...)

前回のJames Goslingの説明で、Javaは元々情報家電向けのOakという言語だったことを書きました。このOak時代に、プロトタイプとしてStar 7というタブレットの分厚いののようなマシンを作成していました。

下の写真はComputer History Museumで展示されていた、Star 7 (* 7)です。

_DSC5804

このStar 7で、動いていたのがDukeです!この時から側転してましたww

つまり、Dukeの方がJavaよりも古くから存在するわけです。DukeのデザインをしたのがJoe Parlang。彼はのちにシュレックなどにも参画しています。

この当時は、Dukeには特に名前はなく、その形状からFang (牙)と呼ばれていました。しかし、当時のマーケの人が、「Fangなんてかわいそうな名前ではなくて、Dukeにしましょう!」と言ったとか言わないとか...

JDK 1.0のアルファ版からサンプルとしてDukeが側転するアプレットが含まれていたので、Javaを触る人は誰もがDukeを目にしていたわけです。

時代が変わって、JavaがOpenJDKでオープンソース化された時、Dukeもオープンソース化されました。JavaのライセンスはGPL Classpath Exceptionですが、DukeはBSDライセンスです。したがって、改変することも自由、商用利用も可能です。

ちなみに、Dukeはコミックにもなっていて、JavaOneで配布していました。そのコミックは The Amazing Adventures of Duke で読めます。


むきむきJavaではDukeを使ったものとして、下の4つの写真を紹介しました。

まずはやっぱりぬいぐるみ。

さくらばも各種Dukeのぬいぐるみ持ってます。ハンドパペットも持っていたりしてw

左下のDukeおにぎりはもちろん日本のものです。最古のDukeおにぎりは日本ではじめて横浜で開催されたJavaOneの時だと記憶しているのですが、もしかしたら違うかもしれません。

この時の企画は、当時SunのIさんでしたね。

その後、日本のJavaのイベントではDukeおにぎりはおなじみになってます。上の写真のDukeおにぎりは造形がイマイチですけどw

右上のギターのような楽器はウクレレです。Dukeleleといいます。

これも日本の企画でした。

Java 10周年の年である2005年に東京でJava Computing 2005 Springというイベントが開催されました。この時に、前述のIさんが記念になるノベルティを企画していたのです。

その当時、Javaで書かれた3DのウィンドウシステムであるProject Looking Glass (LG3D)が話題になっていました。

作者の川原さんはウクレレが好きで、登壇する時もウクレレを持ちながら登壇していました。また、LG3Dのコミュニティにやはりウクレレが好きなKさんが、三角形のFlukeというウクレレを見つけてきて、これだったらDukeになるんじゃないかとIさんに提案したのです。

そこからとんとん拍子に話が進んでDukeleleが誕生したわけです。

私がサムネイルに使っている写真で手に抱えているのがDukeleleです。

DukeleleはアメリカのJavaOneでも販売されたのですが、2005年と2006年だけ。持っている人はかなりレアですよ。

右下のずんぐりしたDukeは、Javaの20周年のパーティーを東京で行った時のDukeケーキです。このためにだけ、寺田さんが特注オーダーで作ってもらったものです。

この形にするために、かなりずっしりとしたケーキで、外側はマジパンで成形されてます。ちゃんと食べられるんですよ、このケーキw

これ以外にもいろいろなノベルティなどにDukeは使われていますね。


最後のDuke's Choice Awardというのは、毎年JavaOneでその年にJavaで作られた製品やサービスを表彰するというものです。

日本からもDuke's Choice Awardを受賞しています。たとえば、古くはNTTドコモのi-Modeなんてのも受賞していました。さくらばの友人だと、九州大学(当時は九州工業大学)の小出先生(2005年)や、サムライズムの山本ユースケさん(2019年)が受賞しています。

Duke's Choice Award _DSC3612


この他にも、AlanやAlex, Joe, Michael, Charlie、佐藤さんと、あげていけばキリがありません。そうそう、日本でJDKを作っているDavidも!

普段はJavaを作っている人たちはあまり表には出てきませんが、このエントリーで少しでも親しみを持っていただければと思います。


むきむきJava ふりかえり

最後にちょっとだけむきむきJavaの感想など。

ほぼはじめてだと思われる3人のプレゼンを聞いたのですが、はじめてだとしたら、まぁよかったのではないでしょうか。

JJUGのLT大会でShiryuさんが伝えることが多すぎて失敗したと嘆いていましたし、司会の cero_t さんからはメッセージは1つに絞った方がいいよとアドバイスもらっていたので、それ以外の視点で1つだけコメントしておきます。


Shiryuさんと、Kageiさん、イシダさんの3人のうち、一番わかりやすいと感じたのはイシダさんのSequenced Collectionsの話でした。

では、イシダさんと他の2人はどこに違いがあったのでしょう。

それは、ShiryuさんとKageiさんは自分が分かっていることを知らない人に説明したのに対し、イシダさんは自分の知らないことを調べてそれを知らない人に説明したという点です。

これはベテランの人でもやりがちなのですが、自分が分かっている分野だと、無意識のうちにその分野の言葉を使ってしまうのです。

もちろん、聞いている方はその分野は知らない世界なので、言葉も分かりません。そのためにプレゼンの理解が妨げられてしまうわけです。

プレゼンのターゲットが異なれば、言葉も変えていかなくてはならないのですが、普段、普通に使っている言葉だと、その言葉が相手に通じるかどうかすら考えなくなってしまうのです。

専門用語であれば「これは通じるかな?」と考えるかもしれないですけど、意識せずに使っているその世界の言葉はなかなか気づきにくいです。

以前、知人と雑談していた時に、家電の設定の初期値のことをデフォルトと言った時にまったく通じなかったことがあります。デフォルトってプログラムを書いている人であれば当たり前のように使っている言葉ですけど、この業界以外では通じない言葉です。

しかも、その知人は保険屋さんだったので、デフォルトがまったく違う意味で使われており、家電に対して使うという意味が分からなかったらしいです。金融系であれば、デフォルトは債務不履行のことなので、私たちが使う意味とは全然違いますよね。


これに対し、イシダさんは自分が知らないことを調べてプレゼンしたので、知らない世界の言葉は使わずに (というか使えなかったのだとは思いますが)、自分の言葉で説明しようとしていました。

ここが聞く側の分かりやすさの違いになっていたと思います。

プレゼンするときは、ターゲットによって言葉を変える。そして、説明する言葉が相手に理解できるかどうかを考えるというのが重要になってきます。

この点に気をつければ、次のプレゼンはもっとよくなると思いますよ。

2023/09/10

Who's Who in Java 過去編

このエントリーをはてなブックマークに追加
James Gosling, Community Keynote, JavaOne 2015 San Francisco

むきむきJava という若手中心のJavaのコミュニティが立ち上がり、第1回目のイベントをやるというので、ぜんぜん若手ではないのですが、プレゼンさせてもらいました。

コミュニティの趣旨であるJava筋をむきむきにするようなのは若者にまかせて、Javaの初期から関わっているおじさんとして技術ではない部分で興味を持ってもらおうという内容にしました。

題して、Who's Who in Java です。発表資料はこちら。

Who's Whoというのは日本語で言うと紳士録とか名士録というものです。最近だと使わない言葉ですね。

ようするに、Javaで有名な人を紹介するということです。というか、Javaを作ってきた/作っている人を紹介するプレゼンをしました。

話しだすと止まらないぐらいエピソードがいっぱいあって、時間を盛大にオーバーしてしまってすみませんでした。

できれば、1人ぐらいは覚えておいてほしいですね。

せっかくなので、ここで紹介しましょう。まずは作っていた人たちから。


James Gosling

1人目は "Javaの父" ことJames Goslingです。

彼はカーネギーメロン大学在籍中にEmacsを作った人として有名ですけど、結局Gosling EmacsはGNU Emacsにとってかわられてしまいました。

また、Sun Microsystemsに入社した後もSunOS向けのウィンドウシステムであるNeWSを作成したりしています。NeWSはDisplay PostScriptとは違いますが、PostScriptを使って描画するというかなり画期的ウィンドウシステムだったのですが、結局はX Windowにとってかわられてしまいました。(昔、SonyのワークステーションがNEWSで、NeWSとよくゴッチャになりやすいというのもありましたw)

3度目の正直ではないですけど、彼が情報家電向きに作った言語がOakです。

でも、結局情報家電向けには受け入れられず、方向性を変えてJavaとなったわけです。

彼は常にTシャツにジーンズといういでたち。

上の写真は2015年のJavaOneのコミュニティキーノートでのGoslingです。この時もTシャツ、ジーンズでしたが、ほんとにいつでもTシャツ、ジーンズです。

Sun Microsystemsだったころには、JavaOnのドレスコードの記載があって正装がTシャツとジーンズと書かれていたぐらいです。こういう遊び心はなかなか見かけなくなってしまいましたね。

そして、JavaOneでは毎年新しいTシャツを作っていて、それをキーノートの最後に投げるというT Shirt Tossも恒例になっていました。

2004年や2005年のJavaOneではT Shirt Toss Machineのコンテストがあったりしました。2005年は確か下の写真のマシンが優勝したような気がするのですが、詳細は覚えてないです... 

JavaOne 2005 San Francisco

James GoslingはOracleをやめた後、ベンチャーにいったりしてましたが、現在はAWSに所属しています。

そして、2019年にはマウンテンビューにあるComputer History Museumで殿堂入りしました。

たまたま、この年にComputer History Muesumに行ったら、ミュージアムのロビーにこの年に殿堂入りした4人が大きく取り上げられていてビックリしましたw

ちなみに、さくらばはJamesが来日した時に日本のSunの人に誘っていただいて、ランチを一緒に食べに行ったことがあります。

その時に、「Java言語仕様」を持って行って、サインしてもらったのもいい思い出です。

下の写真がサインをしてもらっている時に撮ったものです。

James Gosling, JJUG Cross Community Conference


Bill Joy

次はBill Joyです。

Bill JoyはあまりJavaのイメージはなくて、BSDのイメージの方が強いとは思いますが、初期のJavaの強力な推進者でもありました。

ちなみに、むきむきJavaの参加していた人たちはLinuxがUnixだと思っていたぐらいなので、BSDと言っても「はぁ?」という感じなんでしょうね。


Javaがリリースされたころ、すでにBill Joyは伝説のプログラマでした。

Bill JoyはBSDのcshやviを作った人で、TCP/IPのスタックを作ったのも彼でした。週末に1人でBSDのカーネルを書き換えたという伝説もあったりします。

で、そのBill Joyですが、OakのころからJavaに関与しています。Java言語仕様の作者としてもGoslingの次にクレジットされています。

ただし、彼がJVMを作っていたというわけではないです。

Javaが発表された1995年に、日本のJavaのお披露目的なイベントがたしかニューオータニでやったのですが、そこでプレゼンしたのがBill Joyでした。

その時に、Javaのカップをもらって、いまだに手元にあります。

その後、JavaのJiniやJXTAを進めていたのですが、これらはイマイチでしたね。どちらも分散オブジェクトシステムだったのですが、今となって考えるとオブジェクトを分散させて使う意味はほとんどなかったですね。

そういえば、JavaOneの前日にチュートリアルのJava Universityというイベントがあったのですが、そこでさくらばがJiniのコースを受けたことがあります。

コースの最後になって、なんとBill Joyがやってきたのです。抽選でJiniの本をくれるということになったのですが、そこで、あててしまったのですよ。

で、その場でJiniの本にBill Joyにサインしてもらいました!!

ちなみに、上の写真は2005年のJavaOneで撮ったのですが、このすぐ後にSunを退職されてしまいました。今はベンチャーキャピタルのパートナーになっています。

また、彼もComputer History Museumの殿堂入りしています。


Joshua Bloch

Joshua Blochといえば、Effective Javaの著者として有名ですね。Javaを使っている開発者であれば、ぜひ読んでほしい本です。

そのJoshua Blochですが、コレクションフレームワークなどを作っていた人でもあります。今でもJavaのソースコードを読んでいると、Joshua Blochがクレジットされているコードがいっぱいあります。

さて、彼はプレゼンの名手でもあります。Effective JavaもJavaOneのセッションとしても有名でした。

そして、当時の同僚であるNeal Gafterと一緒にJava Puzzlersというセッションも担当していました。

このJava Puzzlersは、簡単にいうとJavaのクイズです。言語仕様やAPIの分かりにくいところをクイズにして、答えてもらうセッションです。しかし、単なるクイズではなく、どうすればその間違いを防ぐことができるか、そして最後には教訓まで含めるという、とても教育的なセッションでした。

たとえば、こんな問題です。オリジナルはDateクラスを使っていたのですが、Date & Time APIに書きかえてあります。

このクイズの答えは2です。

なぜかというと、staticであるクラス変数は上から初期化されます。

つまり、INSTANCEの方がCURRENT_YEARより先に初期化されます。

INSTANCEの初期化でElvisのコンストラクタがコールされますが、コンストラクタ内のCURRENT_YEARはまだ初期化されていません。そのため、CURRENT_YEARは0のままになっています。

そのために、beltSizeは-1930になってしまうわけです。

この問題の教訓はクラス変数の初期化に他のクラス変数は使わないようにすることと、初期化の順番に依存してしまうようなコードは書かないようにしましょうということです。

このクイズのタイトルであるElvis LivesのElvisは、もちろんElvis Presleyのことです。晩年のElvisはどんどん太ってしまっていたのですが、そのElvisが生きていたらウェストがどのくらいになっていただろうねというジョークになっているわけです。

この問題に限らず、Joshuaのパズルはウィットに富んでいます。

彼らはJava Puzzlersのセッションには、おそろいのつなぎを着て、セッションの開始する時に"We are Click and Hack, The Type-it Brothers!"と言ってはじめるのです。

これも元ネタがあって、アメリカのラジオ番組の「Car Talk」のパズルコーナーから来ているらしいです。オリジナルは"Click and Clack, the Tappet Brothers"なんだそうです。

Java Puzzlersも書籍になっていて(日本語の翻訳はすでに絶版なのですが...)、その日本語版には訳者の柴田さんが、クイズの元ネタや英語ならではのジョークの解説を書いてくれています。こういうジョークを思いつくJoshuaもすごいですけど、柴田さんも裏をとるのが大変だったでしょうね。

ちなみに、彼はSunを退社した後、Googleにいましたが、現在はカーネギーメロン大学の教授をしています。


Scott McNealy, John Gage

過去の人の最後はScott McNealyとJohn Gageです。

彼らはJavaを作っていたわけではないのですが、Javaにとってとても重要な人たちです。

Scott McNealyは、Javaがリリースした当時のSun MicrosystemsのCEOです。

英語でべらんめえ調というのも変な感じですけど、ほんとそんな感じで話す人でした。上の写真でも彼は手にカードを持っていますが、あれはカンペです。

プレゼンでカンペ持って喋ってもいいと教えてくれたのが(もちろん、直接教えてもらったわけではないですけどw)彼でした。でも、カンペを見ながら話すことはないですね。

Scott's Top 10というのは、彼のジョークのことです。JavaOneなどのキーノートで10個のジョークを言っていくわけです。カンペに1つずつジョークが書いてあって、受けたらそれをとっておいて、受けなかったら捨ててしまうという。

変なCEOですよね。


そして、John Gageです。

彼のSunでの肩書はScientistでした。Sunのスローガンに"The Network is The Computer"というのがあります。このフレーズを考え出したのが、John Gageでした。

現代ではネットがなければ、ほんとに何もできないので、このフレーズも納得なのですが、ネットワークの普及期にこれを提唱するというのはほんとに先見性があったのだと思います。

さて、彼は長らくJavaOneのMCでありました。彼がいなければ、当時JavaOneがあれだけ盛り上がらなかったと思います。

彼が必ずJavaOneで言うフレーズに"Don't be Shy!"というのがあります。知らない人たちの集まりではあるけども、Javaという共通の話題があるのだから恥ずかしがらずに話しましょうということです。

彼のMCにおけるポスチャーはさくらばのお手本でした。ポスチャーに関しては彼から学んだことがほんと多いですね。


つらつらと書いていたら、やっぱり長くなってしまいました。

ほんとはTim LindholmやGraham Hamilton、2020年に亡くなってしまったBill Shannon、Roberto Chinninci、Chet Haase、そして奥津さんなど、取り上げたい人はいっぱいいるのですが、このエントリーではこのへんでやめておきます。

そして、今Javaを作っている人たちは次のエントリーで!

2022/11/15

JavaOne 2022に行ってきました

このエントリーをはてなブックマークに追加
_DSC7423
10月18日から3日間にわたって開催されたJavaOne 2022に参加してきました。
今年は久しぶりにJavaOneという名前が復活し、ラスベガスでの初めての開催ということになりました。

技術的なことはさておき、初のラスベガス開催ということで、来年参加する人たちの参考になればということで備忘録を書いておきます。

現地まで

残念ながら日本からラスベガスまでの直行便はありません。日本からだと以下の3つが主な乗り継ぎ空港ですね。
  • ロスアンゼルス
  • サンフランシスコ
  • シアトル
今回は知り合いの日本人参加者ではロス乗り継ぎが多かったです。私はサンフランシスコで乗り継ぎました。

飛行機代を抑えたいのであれば、LCCのZipairがロスアンゼルスやサンノゼまで飛んでいるので、それを利用するというのもありかもしれません。

アメリカ入国

どの空港で乗り継いだとしても入国審査は乗り継ぎの空港、私の場合はサンフランシスコ空港で行います。

アメリカに入国するにはESTAが必要です。ESTAは2年間有効で、ESTAを申請したはじめての時は有人の入国審査になりますが、その後は自動入国審査端末での審査になります。

今年はコロナになってから久々のアメリカだったので、ESTA申請し、審査官による入国審査でした。アメリカの入国審査官ってなんであんなにいろいろ聞いてくるんでしょうね😰

そして、来年はどうなるか分からないですが、今年はコロナに関する宣誓書を書いておく必要がありました。また、コロナワクチンの接種証明はいつでも見せられるようにしておきました。実際には見せる機会はありませんでしたが、念のため。

接種証明はマイナンバーカードを持っている人であれば、スマホの接種証明書アプリが便利です。マイナンバーカードを持っていない場合は、役所で英語表記の接種証明書を入手します。

ラスベガスまで

入国した空港から、ラスベガスのハリーリード国際空港(以前はマッカラン国際空港でしたが去年名称が変わりました)までは国内線で乗り継ぎます。

ハリーリード空港はターミナル1と3があります。私はUnited Airlinesだったのでターミナル3でした。

ハリーリード空港はいたるところにスロットマシンが置いてあって、さすがカジノの街という感じです。

ターミナル3はゲートがある建物と荷物カウンター(Baggage Claim)がある建物が別々になっていて、トラムで結ばれています。ただ、トラムが荷物カウンターに向かうものと、ターミナル1に向かうものの2種類あるので間違わないようにしないといけません。

大きい階段があって、Welcome to Las Vegasと書いてある看板?を下っていった先にあるのが、荷物カウンター行きのトラムです。

荷物を受け取ったら街に向かいましょう。
_DSC0834

ホテルまで

ハリーリード空港は市街地まではUberやLyftなどのライドシェア、タクシー、バスなどの選択肢があります。

タクシーの場合、空港から市街地は定額で$27だそうです。これに空港使用料とチップが加わります。

ライドシェアは混雑する時間帯はタクシーとあまり変わらない値段ですが、混雑していない場合はチップも含めても$20ぐらいです。

ライドシェアはどこでも呼べるわけではなく、空港内の決められた場所でしか乗車できないようになっています。

ターミナル3の場合、乗車できるのはパーキングの建物の中にあります。

荷物カウンターの階(Level 0)から1つあがって、49番の出口を出るとパーキングに向かう橋があります。パーキングについたら、1つ下の階(Level V)にライドシェアの乗車場があります。

乗車場についたらUberやLyftのアプリを使って、行き先と車の種類を指定して、配車できます。

ホテル

ラスベガスは南北に走るストリップを中心に街が構成されています。ストリップでも中心に なるのがフォーコーナー (Four Corners)と呼ばれる交差点です。

おおざっぱにいうとフォーコーナーに近い方がホテルの宿泊費が高く、離れると安くなる傾向があります。特に東西方向はストリップからちょっと離れるだけで急に安くなるようです。

JavaOneの会場はフォーコーナーにほど近いシーザースフォーラムというところです。そこのため、ホテルを選ぶには2つの選択肢があると思います。
  • 会場に近くて便利だが、宿泊費は高いホテル
  • 会場から遠いが、宿泊費は安いホテル
宿泊費は高いといっても、今までのサンフランシスコに比べればかなり安いです。

私は今回、会場に近いフラミンゴ(Flamingo)に宿泊しました。フラミンゴは古いホテルなので設備とかはかなりイマイチな感じ。古いホテルのためか、フォーコーナー近くのホテルの中では比較的安いです。

会場に近いので、ノベルティもらって荷物が多くなった時など、部屋に戻って荷物を置いてくるなんてことができるのは便利です。

フラミンゴやベネチアン(The Venetian)などは、JavaOne登録と一緒にホテルの予約もできるので、それを利用するというのも1つの手です。カンファレンスレートで、通常よりは少しだけ安くなっているはずです。

気候

ラスベガスは砂漠の中にあります。10月でしたが、最高気温は30度ぐらい。最低気温が15度ぐらいで、朝晩は過ごしやすいです。乾燥しているので、昼でも直射日光に当たらなければ、意外に過ごしやすかったです。

気になるのが会場の冷房だったのですが、意外にもそんなに冷えてはいませんでした。それでも、1枚羽織るものがあるといいと思います。

治安

最近、アメリカ各地で治安が悪くなったと聞きますが、ラスベガスのストリップ近辺は特に治安が悪い感じは受けませんでした。

ストリップからちょっと離れたところには治安の悪いところもあるらしいですが、そこまで行くことはないでしょうから、治安について心配することはないようです。

もちろん、ホームレスはいますが、お金をせびってくるようなホームレスには遭遇しませんでした。とはいっても、日本の感覚でいるのは危険なので、注意は必要です。

SIM

今まで海外旅行に行くときには、プリペイドSIMを普段使っているSIMと入れ替えて使っていました。

今回はじめてeSIMを使用しました。日本でプリペイドのeSIMを購入して、事前に設定しておきました。後はアメリカについたら、eSIMを有効化すればいいだけなので、とても楽。

プリペイドeSIMもいくつか選択肢がありますが、今回はソラコムのグローバルeSIMを使用しました。ソラコムのeSIMはデータ通信だけなのですが、通話はしないので全然OKです。

プリペイドeSIMを提供している企業によっては通話もできるところがあるようなので、必要であれば探してみるのもいいかもしれません。

なお、会場やホテルではWi-Fiが使えます。今回、会場のWi-Fiが瞬断することがありましたが、使えない状態が続くとか、遅くて使えないということはありませんでした。

まぁ、今回は参加人数が少なかったからということもあるかもしれません。

会場

今回のJavaOneの会場はCaesars Forumで、CloudWorldはThe Venetian Expoで行われました。両会場は橋でつながっていて行き来できるようになってます。

本来なら、3年前にCaesars Forumのこけら落としがOpenWorld/Code Oneだったんですけど、コロナで延期。まぁ、しかたありません。


Caesarsと名前がついていますが、Caesars Palaceからは離れていて、Harrahsの東側にあります。HarrahsやLINQからは直接Caesars Forumに入ることができ、またFlamingoの北側の道から観覧車のHigh Rollerの真下にCaesars Forumへ入る通路があります。

The Venetian ExpoはCaesars Forumの北側で、The Venetianから直接入ることができるのですが、カジノを通り抜けなくてはいけなくて、これがまた迷路のようになっているので、迷わずにいくのはなかなか大変です。

先述したように、会場はWi-Fiが使えます。また、今回は朝食とランチが提供されて、Caesars Forumの南側のテラス席でも食べることができました。暑くなければ、いい感じなんですけどね。

食事

ラスベガスは観光客向けの飲食店はいたるところにあります。でも、なんかみんな観光客向けの大箱、かつバックに資本がついているところばかりなような気がするんですよね。もちろん、そういう需要があることは分かるのですが、私の嗜好とは合わないのです。

ファストフード

1人でさくっと行きやすいといえば、ファストフードですね。McDonald'sやBurger Kingなどのように日本でも展開しているチェーン店もありますが、せっかくならば日本にない、もしくは日本ではまだそれほど店舗が多くないところを選んでみるのはどうでしょう。

  • In-N-Out Burger
  • Chick-fil-A
  • Chipotle Mexican Grill
  • Panda Express
In-N-Out (イン アンド アウト)はハンバーガーチェーンですが、裏メニューのカスタムがいっぱいあることや、冷凍のポテトを使わないなどで有名なところです。

Caesars Forumからも近いのですが、人気なのでいつも行列してました。とはいうものの、回転は早いので、そんなに待つこともないと思います。

Chick-fil-A (チックフィレイ)はチキンバーガーのチェーン店。KFCのチキンフィレバーガーのような感じです。Chik-fil-Aも人気ありますね。

Chipotoleはブリトーやタコスなどのメキシカンのチェーン店。ファストフードとしては珍しい地産地消をうたっています。日本からのJavaOne参加者にもここのファンという人が多いです。

最後のPanda Expressはアメリカンな中華のチェーンです。名物はオレンジチキン。日本では1度撤退していますが、2016年に再進出してます。でも、まだ店舗はそんなにないので、アメリカで行ってみるのはありだと思います。

フードコート

フードコートも1人で行くにはいいですね。だいたいのカジノにはフードコートがあるようです。

たとえば、Cloud World会場のベネチアンには2つのフードコートがあり、ハンバーガーのJohnny RocketsやFat Burger、上にも書いたPanda Expressなどがあります。

店を探す

やっぱりファストフードはやだという場合には店を探すわけですが、そんな時に役に立つのがアメリカ版食べログとでもいえるYelpです。
だいたいの店が予約可能なので、できることなら予約してから行った方がいいと思います。そんな時に使えるのが、OpenTableです。
日本のトレタやTableCheckのようなものですが、OpenTableの方が古くからあり、店の検索などもずっとやりやすくなっています。

今回もOpenTableで予約をとっていったところが多かったです。ただし、ホテル内にあるレストランはホテルの予約システムを使っていることがあるので、そちらもチェックした方がいいと思います。

とはいうものの、店が多いので、目当ての店があるとかでもないと、なかなか難しいですね。

参考までに今回ラスベガスで行ったレストランを列挙しておきます。

レストラン
  • Bouchon Bistro
    ナパにあるミシュラン三つ星のThe French Laundryの姉妹店のビストロ。本店はナパにあります。ナパのBouchonにも行ったことがありますが、ラスベガスの方がフォーマルな感じですね。とはいっても、ドレスコートがあるわけではなさそうですが。
    ベネチアンの10階にありますが、テラス席まであります。ぜんぜん10階のような感じがしないですが、とても静かでいいですね。
    朝ごはんに行ったのですが、ナパのBouchonはパンがおいしいので、クロワッサン。それとメインのサーモンのグリル。デザートも朝から頼めるというので、プロフィットロール。朝からいい気になって頼んだら、1万円超えてしまいました😰 でも、おいしかったので、OK。
    _DSC5763 _DSC5810 _DSC5875
  • Bardo Brasserie
    ARIAリゾートの中にあるブラッセリー。内装がウッディーで重厚な感じ。
    ここも朝ごはんで開店と同時に入店したのですが、開店待ちの人がいっぱい。このブログを書くために調べてみたら、Michael Mina系列のブラッセリーでした。Michael Minaもスターシェフなので、この人気もわかりますね。
    ここでは、タルタルとフレンチトースト。フレンチトーストはブリオッシュなので、そんなに大きくないだろうと高をくくっていたら、超巨大でした。
    _DSC0704 _DSC0751 _DSC0822
  • Sugarcane Raw Bar Grill
    _DSC6119 _DSC6127 _DSC6160
  • Off the Strip
    _DSC6300
ハンバーガー

WahlburgersもBurger Barもチェーン店ですが、Wahlburgersの方がファストフードに近い感じで、私にはBurger Barの方がよかったです。アメリカでハンバーガー食べると、日本のグルメバーガーがいかにおいしいか分かりますね😂

Wahlburgersでハンバーガーとサラダを食べていたら、隣に座っていたおじいさんにBig Dinnerだねと言われてしまいました🤣 
  • Wahlburgers
    _DSC5704 _DSC5723
  • Burger Bar
    _DSC0528
ステーキ
ステーキは、フレンチやイタリアンなどに比べると、シェフの技量よりも材料に起因する部分が大きいような気がします。つまり、いい肉を使っているかどうか。値段が高いところはいい肉を使っているので、おいしいわけです。もちろん、例外はありますけど。

とはいうものの、2倍の値段だったら、2倍おいしいということはないので、そこらはバランスですね。

2店行きましたが、Gordon Ramsayの方が値段が高いだけあっておいしかったです。Smith & Wollenskyもおいしかったんですけどね。

ちなみに、Gordon Ramsayもスターシェフで、ラスベガスにいろいろなジャンルの店があります。最近、Fish & Chipsの店をオープンしたらしいのですが、いつも行列していたので行くのをあきらめました。来年、行こうっと!
  • Smith & Wollensky
    _DSC6413 _DSC6459
  • Gordon Ramsay Steak
    _DSC7214 _DSC7219 _DSC7260 _DSC7294
スイーツ

アメリカは、おいしいスイーツがなかなかないんですよね。ラスベガスでもそういう感じでした。

たまたま帰国する日が、シザースパレスにドミニクアンセル (Dminique Ansel Bakery)がオープンするということだったので行ってみたのですが、すごい行列。

ドミニクアンセルは以前、表参道にもあったのですが撤退してしまったので、久しぶりに食べられると思ったのですが、さすがに行列に並ぶと飛行機に遅れてしまうので断念。

来年リベンジします。
  • Sweets Raku
    アメリカでアシェットデセールの店があるとは思いませんでした。とはいっても、日本人がオーナーで、パティシエも日本人。どおりで!
    日本人が作っているということで、日本の繊細なデザートが食べられます。ラスベガスでパフェ食べらるのはたぶんここだけ。というか、日本のパフェは日本独自のデザートなので、外国ではなかなか食べられないのです。
    _DSC6075 _DSC5981
  • Dandelion Chocolate
    サンフランシスコに本店があるビーントゥバーチョコレートのDandelion Chocolate。日本にも蔵前に店があります。
    ここはチョコはもちろん、チョコを使ったスイーツもおいしいです。
    ついでですが、ここが使っているコーヒー豆がサードウェーブ系で有名なRitual。ラスベガスでおいしいコーヒーをなかなか見つけられなかったので、チョコを食べなくてもコーヒーを飲みに来るのはありですね。
    _DSC7493 _DSC7508 _DSC7520
  • Bouchon Bakery
    上に書いたBouchon Bistroのベーカリー部門です。パンもありますが、スイーツもあります。もうちょっと種類が多いといいんだけどなぁ...
    _DSC9679 _DSC9707 _DSC9766
  • Bellagio Patisserie
    _DSC6336 _DSC6353
  • Donut Bar
    _DSC5896 _DSC5917

アメリカのレストランでクレジットカードで支払う時、一度カードを持って行ってレシートを持ってきてくれます。そこにチップと合計額を書いて、サインをして完了なんですけど、それがめんどうくさい。

チップのないフランスやシンガポールだと、店員さがハンディターミナルを持ってきて、タッチ機能がついていればピッとタッチすればそれでおしまい。アメリカはチップあるし、こうはできないよなぁと思っていたのですが、Bardo Brasserieではじめてハンディターミナルで決済しました。

ハンディターミナルを店員さんが置いていって、ディスプレイにチップのパーセンテージが表示されるので、その中から選択して、後はタッチすればOK。タッチ機能がなければ、暗証番号を入れるのだと思います。

今後、こういう店が増えていくのでしょう。それにしても、チップのパーセンテージの選択肢が決め打ちというのもなんかへんな感じですね。
_DSC0826

買いもの

ラスベガスはショッピングモールやアウトレットもあるので、時間があるのであればそういうところにいけばいいと思います。

アウトレットはちょっと離れているので、バスかタクシー/ライドシェアでしょうね。

さて、問題は日用品です。水とかね。

スーパーとかコンビニ的に使えるのは、以下の2つのショップ。

  • Walgreens
  • CVS
どちらも複数の店舗がJavaOne会場近辺にあります。どちらの店舗ももともとはドラッグストアなのですが、Walgreensの方が食べものなどは多い感じ。バラマキ用のおみやげのお菓子なんかはWalgreensの方がいいかもしれません。


その他

ドルは持って行った方がいい?

ほとんどクレジットカードで支払うので、現金はほとんど使いませんでした。

レストランに複数人で行った時も、クレジットカードを4枚ぐらいまでなら受け付けてくれます。

今回、現金を使ったのは、6人で食事に行った時の支払いと、チェックアウトの日に荷物を預かってもらったので、ポーターに対してのチップぐらい。後は全部クレジットカードでした。

Google Mapsのオフラインマップ

Google Mapsは便利なので、旅行には必需品だと思うのですが、意外に知られてないのがオフラインマップ。

Wi-Fiのあるところで、事前にマップをダウンロードしておけば、ネットが使えない場所でもGoogle Mapsを使うことができますよ。

帰国時

10月の時点では帰国時にMySOSに登録しておく必要があったんですが、11月からはVisit Japan Webに統一されたようです。来年はどうなるのか分からないですね。

ちなみに、Visit Japan Webを使うと、入国審査や税関申告も事前に登録しておくことができます。税関申告の紙を書かなくてもいいというのはいいのですが、使い方がイマイチなんですよね。

申告を事前に行っておくと、2次元バーコードが表示されるので、空港の税関のところでリーダーで読ませて、そのまま出ていけるのですが、導線がイマイチ。出口のところにリーダーを置いておけばいいのにと思いました。

まぁ、でも徐々に改善されるでしょう。


さて、来年のJavaOneは同じくラスベガスのCaesars Forumで9月18日から21日。今年は3日間でしたが、1日増えて4日間の会期に戻ります。

今年はいろいろと準備ができていない様子がありありだったのでしたし、はじめての会場だったこともあり、もうちょっとなんとかならないかなぁというところも多くありました。

来年はラスベガスでも2回目ですし、会期も公開されていますから、今年よりはよくなっているでしょう。

今のところ、私は参加する予定なので、ぜひご一緒に!

2016/09/22

JavaOne 2016 Day 5

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

やっとというか、あっという間というか、今日が最終日です。

今日はあさイチで Community Keynote。昨日の Appreciation Event の次の日のあさイチはつらい ><

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

  • Java Community Keynote
  • Troubleshooting the Java HotSpot VM [CON1640]
  • Vectors for Java [CON1560]

通常、最終日の午後はまったりムードで、リピートセッションなどが多いのです。金曜の午後には帰ってしまう人も多いし。でも、今年はなぜか Panama のセッション。これは出ないわけにはいかないです。

でも、その前の Troubleshooting のセッションはイマイチ。話題を盛り込みすぎて、1 つ 1 つが浅くなってしまってました。もったいない。

Java Community Keynote

キーノートは後で写真を加えて、更新する予定です。

キーノートは去年と同じく、前半が IBM で、後半が Community Keynote です。

IBM は 3 年連続 John Duimovich。まぁ、普通のキーノートです。

初日のキーノートで Oracle JDK を Docker に対応させることが発表されましたけど、IBM も IBM SDK for Java を Docker 対応させるのだそうです。また、J9 をオープンソースにするという発表は、Eclipse OMR についても言及してます。

最後に Devoxx の人たちを迎えてデモ。Nao にしゃべらせてみたり、同じエンジンを使ってスマホからアクセスするものです。

さて、Community Keynote です。

Community Keynote は去年と同じ寸劇。Starwars の超劣化版パロディ。JUG のメンバや Java Champion たちが出演しているのですが、なんだかなぁ。みんなこれおもしろいと思っているのかなぁ。やっている人たちはおもしろそうですけど。

James Gosling が悪役なのですが、まったくセリフ覚えていないで、台本見てしゃべっていたりするのは、まぁご愛敬。

今年は日本オラクルの伊藤さんと、HeapStats の久保田さん (@sugarlife) さんも出演してました。HeapStats も一緒に出演 (?) してました。

とはいえ、技術的な要素はなにもないし、ほんとうちわノリなんですよね。来年はどうにかしてほしいなぁ....

Vectors for Java [CON1560]

さて、今年の最後のセッションです。スピーカーは Oracle の Paul Sandoz と Intel の Ian Graves。資料はこちら

火曜日にも Panama のセッションがありましたが、あちらは JFFI に関して。このセッションは Panama のもう一方の Vector API について。java.util.Vector の話じゃないよとお約束のつっこみw

そのあと、Safe Harbor が提示されたのですが、Oracle の Safe Harbor に比べて、Intel の Safe Harbor が長い! Safe Horbor もネタとしてしか扱われないというのは ^ ^;;

さて、本題に入って、パラレル処理です。Hadoop のように複数マシンでパラレル処理はもちろん、CPU 単体でもマルチコアでパラレルになっています。

このセッションでは後者の単体の CPU での話。

CPU では Single Instruction, Multiple Data (SIMD) や SPARC で扱っている Data Analytics Accelarator (DAX) などがあります。その他にも GPU や FPGA があるのはご存知の通り。このセッションでは SIMD と Java について。

GPGPU に関しては Project Sumatra があったのですが、最近進捗がないようなんですよね。

HotSpot ではすでに Intel の AVX インストラクションは扱っていて、C2 コンパイラで SIMD のコードに最適化しているようです。配列のコピーなどに使用していると。でも、まだまだ限定的です。

そこで、Java でも低レベルでデータを扱えるようにしようというのが発端。これには 2 つのプロジェクトが関わっており、ハードに近いのが Project Panama、Java に近い方が Project Valhalla です。

たとえば 128bit を扱う Long2 とか、256bit を扱う Long4、さらに Long8 などを新たに導入するわけですが、だからといってそれをそのまま扱うにはなかなか難しい点があります。

そこで、使うのが Value Type と MethodHandle です。MethodHandle はもともと invokeDynamic のために作られた API ですけど、indy ほんといろいろ使われてるww こんなに使われるとは導入当時は思いもつかなかったろうなぁ。

さらに多ビットを表すために Vector API を導入します。多ビット演算や map なども定義されていて、それをパラレルに処理していくわけです。

なんかすごいおもしろい。こういうのが出てくるとワクワクしますねw

ということで、今年の JavaOne はこれでおしまい。

2016/09/21

JavaOne 2016 Day 4

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

今日の夜は Appreciation Event でライブ。今年は Sting と Gwen Stefani です。

Sting は 2011 年に続き、2 回目の登場。一方の Gwen は初登場です。というか、もともとは Billy Joel のライブが予定されていたのですが、急きょ変更されたのでした。

それにしても、Sting と書こうとして、何度 String と書いてしまったことか ^ ^;; 完全に手癖になってしまっています。

ということで、今日は BOF はなしです。

Apreciation Event については、写真を含めてまた後で更新します。

  • Unified JVM Logging in JDK 9 [CON6225]
  • Java Debuggers: A Peek Under the Hood [CON1503]
  • Introduction to Modular Development [CON3707]
  • Advanced Modular Development [CON3711]

今日、イタかったのが Project Valhalla の唯一のセッションだった Unsafe Zone がキャンセルされてしまったこと。そりゃないよ。これで、今年は Valhalla 関連のセッションがなくなっていまいました ><

その代わりに聴講したのが Java Debuggers。これは David のセッションです。今年、David は 4 つもセッションを持っていてタイヘン。でも、タイミングが合わなくて、1 つも聞けないと思っていたのです。たまたま、Unsafe Zone がキャンセルされたので、Debuggers を聞くことができました。

David のセッションの後、体調がすぐれなかったので、一度ホテルに帰って寝てました。ライブまでには回復したのでよかったのですが、時差ボケもあいまって体調が不安定なのは困ったものです。

それにしても、年をとると、どんどん時差ボケがひどくなるような気がします。体力が落ちているんでしょうね。

Unified JVM Logging in JDK 9 [CON6225]

Java のシステムログって複雑怪奇で、しかもバージョンごとにいろいろ変わるし、オプションもいろいろあって分からんのです。それを Java SE 9 では統一して扱うことになりました。ということで、そういうセッションです。

スピーカーは Oracle の Marcus Larsson。資料はこちら

一番はじめに java.util.logging.Logger の話ではないよと。まぁ、お約束ですね。

今まで、ログを出力するにはいろいろとオプションがありましたが、Java 9 からは -Xlog に統一されます。でも、-Xlog の後にやっぱりいろいろと書かなくてはいけないのはしかたない。

特に、gc や cpu などどの項目を出力するかを指定するために、+ と * が使えるのですが、この指定がちょっとわかりにくい。たとえば、T1 に関する項目を表示させるためには T1 もしくは T1* のどちらかを記述します。T1 と記述すると、T1 だけに関することだけが出力されます。たとえば、T1 と T2 に関連している項目は出力されません。

T1 と T2 の両方に関連している項目も含めて、T1 に関するすべてを出力するには T1* と記述する必要があります。

それ以外にもいろいろとオプションがあるので、システムを保守している人は資料をチェックしておいた方がいいと思います。

ついでに、ログをファイルに出力して、ついでにファイルをローリングすることもやっとできるようになりました。

なお、Java 8 までの古い書き方も使えますが、新しい書き方もヒントとして出力されますよ。

Java Debuggers: A Peek Under the Hood [CON1503]

Debbuger で使用する JVMTI に関するセッション。スピーカーは前述したように David Buck です。

資料はこちら

今年の JavaOne のセッションには Under the Hood 多すぎと書きましたが、なんと Debugger に関する Under the Hood が 2 セッションもあるのです。1 つが JVM Debugging Under the Hood で、もう 1 つがこのセッション。

David によると、前者は JDI に関するセッションで、David は JVMTI と JDWP に関する部分を話すそうです。JDI は JVMTI に依存していますが、JVMTI は独立で扱うことができます。

JDI は Java Debugger Interface で JVMTI に JDWP を使用して接続して、デバッグを行うためのフレームワークです。JDWP は Java Debug Wire Protocol。JDI と JVMTI 間の通信プロトコルを決めています。

そして、JVMTI が Java VM Tool Interface。JVM のプロファイルやデバッグを行います。JVMTI は J2SE 5 まで使っていたプロファイル用の JVMPI とデバッグ用の JVMDI を統合したものです。

でも、JVMTI の概要だけでセッション終わってしまいました。具体的にデバッグ時にどういう動きするのかとか、簡単なデバッガサンプルとか出してくれればもっと分かりやすかったと思うんですけどね。

おととい、David とちょっと話したのですが、このセッションが一番準備ができていなかったらしいです。しかも、このセッションだけ録画されるらしい。そのせいもあってか、ちょっと内容が硬かったですね。

Introduction to Modular Development [CON3707]

今日の後半 2 セッションは Project Jigsaw のセッション。スピーカーは Alan Bateman。

資料はこちら

はじめに標準のモジュールの話。モジュールは java のオプション -list-modules で確認できます。

続いて、もじゅーつの定義について。って、定義もなしに標準モジュールの説明をするのは間違っているのではないのかなぁ。というか、このセッションも次の Advanced ももうちょっとセッションのストーリーを考えた方がいいと思うよ。

このセッションで理解できると考えるのが、私には信じられません。

module-info.java に依存性と公開範囲を記述してというように話は続くのですが、ほぼ去年と同じ。まぁ、しかたないか...

Advanced Modular Development [CON3711]

引き続き Jigsaw のセッション。スピーカーは前半が Alex Buckley で、後半が Alan Bateman。Mandy Chung もタイムテーブルには書いてありましたけど、話はせず。でも、会場には姿を見せてました。

資料はこちら

開口一番、Alex がこのセッションは録画しないので、何をしゃべってもだいじょうぶ。何でも質問していいよと。やっぱり Alex や Alan クラスでも、録画されるかどうかで緊張度が変わるもんなんですね ^ ^;;

資料はかなり去年と同じ。

前半が Alex で Automatic Module、後半が Alan でマイグレーションの話。

前半で異なっていたのは Automatic Modle を扱う場合、module の前に weak をつけること。weak module は 9 月になって機能リクエストとしてあがったぐらいで、私もよくわかっていません。

後半は、去年とほぼ同じかな。

2016/09/20

JavaOne 2016 Day 3

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

今日のあさイチのセッションはチュートリアルだと思っていたらハンズオンだったので、自主休講。ちゃんと朝起きたのに...

JavaFX のハンズオンだったのですが、コントロールを自作しようというハンズオン。昨日のセッションの内容ともかなりかぶっていたのでした (はじめに CSS で見栄えを変えて、次にスキンを入れ替えてというようなぐあい)。

かといって、代わりに聴講したいセッションもなかった ><

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

  • Modules and Services [CON2949]
  • Connecting Oceans with Project Panama: A Journey into Native [CON1471]
  • Project Jigsaw: Under The Hood [CON2963]
  • Thinking in Parallel [CON5051]

これ以外に、Prepare for JDK 9 もセッション登録していたのですが、どうやら Jigsaw 関連はあまりアップデートがなさそうということが分かったので、こちらも自主休講。

また、今日は 19 時から Duke Cafe で Duke's Choice Awards の表彰があるので、BOF も勝手にお休み。

というのも、HeapStats が Duke's Choice Awards を受賞したからなのです。

おめでとう!!

そんなこんなで、今日は少なめ。

Modules and Services [CON2949]

スピーカーはおなじみの Alex Buckley。

このセッション、何がビックリしたって、Alex がすごい痩せていたのがビックリですよ。

去年まではすごい太っていて、それじゃ膝がつらいのではと思ったぐらいだったのが、今年はかなりスリムになってます。

これが、今年一番のサプライズかもw

Project Jigsaw 関連のセッションは去年とセッションタイトルが同じものが多いのですが、このセッションだけは去年はなかったのです。セッション資料はこちら

このセッションでは、今まで ServiceLoader でロードしていたサービスを Project Jigsaw でどうやれば実現できるかということを説明してます。でも、ほとんど既知のことでした。 このセッションで説明したことのほとんどは、ITpro の Java SE 9、Project Jigsawにおけるpublicに書いたので、そちらをご覧ください。

簡単にいうと、インタフェースを定義するモジュールでは、module-info.java に use 文を使ってインタフェースを記述します。そして、実装クラスを提供するモジュールでは、module-info.java に provides 文で実装クラスを記述します。

その他に、Unnamed module (いわゆるモジュールではない JAR ファイルです) に依存した場合などについても説明してましたが、それほど使うこともないと思います。

Connecting Oceans with Project Panama: A Journey into Native [CON1471]

数少ない Project Panama のセッション。スピーカーは Oracle の Mikael Vidstedt と Henry Jen。

Panama は 2 つの側面があって、Vector API に代表されるヒープのレイアウトと、ネイティブコードをコールするための JNR と JFFI の組み合わせです。後者は JNI の置き換えをはかっています。

で、このセッションは後者の方。特に JFFI (Java Foreign Function Interface) に関して。

JNR と JFFI は、JNR が Java からネイティブコードをコールするためのフレームワークで、JNR が実際にネイティブコードとやりとりする部分を JFFI で実現しています。

でも、よくわからないんですよね、このセッション。

JNR の話がまったく出てこなくて、JNR との切り分けが全然わからないのです。というか、JNR って亡きものされてしまった?

JNR は JRuby の Charles Nutter がメインになっているのですが、今年は Charles は JNR のセッションやらないので、よくわからないままです。

ま、それはおいておいて、このセッションです。

JNI でネイティブコードをコールするにはいろいろと手順が必要でした。ターゲットする API の Java のラッパを作成し、javah を使ってヘッダファイルを作って、C 側で再びターゲット API をコールする部分を作成し、やっとコールすることができます。

JNI って Java で足りないものを C で作る的な立場で作られているので、既存のネイティブライブラリをコールするには無駄が多かったわけです。

これに対して、JFFI はネイティブライブラリ側の API に合わせて、Java へのバインディングコードを作成できます。そのためのツールが Groveler ツールの jextract。

Groveler という単語、聞いたことがなかったのですが、grovel が「はらばう」とか「ひれ伏す」で、groveler が「こびへつらう人」になっていて、あんまりいい意味じゃなのです。なんでこんな単語使うのだろう。

jextract を使うと、ターゲット API のヘッダファイルから Java のインタフェースと実装クラスを作成してくれます。そこでは C の int から Java の int へなどのデータの変換なども行ってくれるようです。

ここで定義されたメソッドをコールするには、まずネイティブライブラリとバインディングを行います。

NativeLibrary クラスの loadLibrary メソッドでロードし、bindRay メソッドもしくは bind メソッドでバインドします。あとはバインドでえられたオブジェクトのメソッドをコールするだけ。簡単そう。

もちろん、相手はネイティブコードなので、ポインターやメモリアクセス、そのスコープなどをちゃんと決めないといけません。そこらへんも JFFI ではある程度やってくれそうです。

現状では Linux/x64 でプロトタイプが動いているようです。

Project Jigsaw: Under The Hood [CON2963]

Project Jigsaw の Under the Hood ですが、今年は Under the Hood セッションが多すぎ。なんと 8 セッションもありました。みんな、Under the Hood 好きだよねぇww

このセッションのスピーカーは、今日 2 回目の Alex Buckley。今年の Jigsaw セッションも Alex Buckley と Alan Bateman が分担しています。

ちなみに、この前の Prepare for JDK 9 はやっぱり内容は去年と同じようだったらしいです。で、このセッションも内容的には去年とあまり変わらず。Under the Hood なんだから、もうちょっと深いところまで説明してほしいんだけどなぁ。

セッション資料はこちら

はじめにアクセシビリティの話。やっと昨日の exports private の謎がとけました。

requires 文と exports 文の仕様が一部変更されたようです。

変更されたのが exports private 文と requires transitive 文です。

exports 文で公開されたパッケージの private メソッドやフィールドに対して、リフレクションの setAccesibility(true) メソッドをコールすると実行時例外が発生します。

これに対して exports private 文では setAccesibility(true) をコールしても例外になりません。

requires transitive 文は以前は requires public と記述していたものです。

つまり、requires transitive は依存しているモジュールで公開されているパッケージを、そのモジュールでも公開できるようにするために使用します。

その他にセッションでは出てこなかったのですが、コンパイル時だけにモジュールを使用する場合 requires static を使用します。

さっそく、bitter_fox さんがこれらを blog にまとめてくれました。すごい!

さて、セッションでは次に Unnamed Module と、クラスローダについて説明したのですが、これは去年とほぼ同じ。でも、もうちょっと詳しく説明してほしいところです。

特に bootclasspath が使えなくなった代わりにどうすればいいかとか、Automatic Module あたりはちゃんと説明してほしい。Automatic Module は資料にはありますけど、あれじゃ全然わからないです。

自分で解明するしかないか....

Thinking in Parallel [CON5051]

今日聴講したセッションの中で一番おもしろかったセッション。スピーカーは Stuart Marks と Brian Goetz。

Mr. Deprecator こと Stuart はやっぱり話がおもしろい!!

それにしても、Stuart は髪の毛が白くなったなぁ。去年よりも一段と白くなっていました。Dr. Deprecator としての心労がいろいろあるのかなぁ。

このセッション、パラレル処理関係の新しい機能の紹介は... まったくありません。でも、おもしろい。資料はこちら

セッションは前半と後半に分かれていて、前半が Stuart、後半が Brian になっています。

前半では、for 文と Stream を比較して、なぜ Stream を使うべきなのかのサンプルを使って説明。

for 文は長く使ってきているし、表現が直接的で、効率的だといわれているかもしれませんが、それらはみんな間違っていると。そして、Stream を使うのは新しくてクールだからというわけでもないと。

Stream が優れているのは、より高い抽象度で問題を表しているからだといいます。また、パラレル処理ができるからというのは理由ではないといいます。

パラレル処理ができるのは良いコードを書いたボーナスのようなものだと。

次にもうちょっと複雑なサンプル。これは stackoverflow にあった質問をベースにしているらしいです (資料の URL は間違っているっぽいです。リンクは正しいものにしてあります)。

問題はリストに入っている文字列を区切り文字で切り分けて、リストのリストにするというものです。

[a, b, #, c, #, d, e] に対して、# でリストを区切って、[[a, b], [c], [d, e]] というようにします。

この問題、意外に Stream だけではやりにくいんですよね。Stuart が例としてあげたコードも、個人的には納得がいきません。そのコードがこちら。

 

<T> List<List<T>> split(List<T> input, Predicate<T> pred) {
    int[] edges = IntStream.range(-1, input.size() + 1)
                           .filter((i -> i == -1 || i == input.size() || pred.test(input.get(i))))
                           .toArray();

    return IntStream.range(0, edges.length - 1)
                    .mapToObj(k -> input.subList(edges[k]+1, edges[k+1]))
                    .collect(Collectors.toList());
}

さて、ここから Brian のターン。

Brian はなんでもかんでもパラレルでやるべきではないといいます。パラレルはあくまでも最適化の手法の 1 つであり、そのためには正しく効果の計測をしなくてはいけないといいます。

そして、分割統治の説明を行い、最終的に値をまとめるマージの処理が重要であることも説明しました。

パラレルにするかどうかは、NQ モデルという単純な指標があります。N がデータの要素数、Q が 1 つに要素にかかる処理量です。そして、 NQ > 10,000 にならないとパラレルにしてもパフォーマンスが上がらないといいます。

この関係は私の経験ともかなり重なります。

最後にまとめとして、もう一度パラレルは最適化にすぎないと繰り返しています。そうなんですよね、なにからなにまで全部パラレルというのは考えにくいですし。

ちなみに、質問で I/O がある場合はどうすればいいのかとありましたが、このセッションで議論しているのはコンピュテーションだけなので、I/O が入るとまた違った議論になります。I/O が入ると、待ち時間などの問題が大きくなりますし、別な問題として扱う方がいいですね。

Duke's Choice Awards

今日は、夜の 7 時から Duke Cafe で Duke's Choice Awards の表彰式。

その前に、Null Pointers のライブ。Null Pointers はかなりメンバ入れ替わってます。去年、飛び入り参加していたボーカルの女性も今年は正式メンバになったもようw

びっくりしたのが、Jim Weaver がギター弾いていたこと。Jim さん、Oracle やめてからも、Java 続けているらしいです。

さて、表彰ですが、Sharat と Georges が Duke のトロフィーを渡して、記念写真を撮るだけのあっさりしたもの。トロフィーもその場で渡さずに、後で取りに行くようです。

Duke's Choice Awards はカテゴリーに分かれているのですが、HeapStats は Tool 部門でした。おめでとう。受賞者一覧はこちら

それにしても、ちゃんとトロフィー受け取れたのかなぁ?

2016/09/19

JavaOne 2016 Day 2

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

JavaOne は iOS と Andoroid 向けの公式アプリがあるのですが、私の iPhone ではまったく動いてくれません >< 動いていても、Web から登録したセッション情報を同期できないなど、できが悪すぎ。

よっぽど、Gluon が JavaFX で作ったアプリの方がサクサク動いてます。セッションの登録情報を表示できれば、Oracle のアプリは使わないんだけどなぁ。

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

  • Adventures with Extreme Types in a Purely Functional Language [TUT1288]
  • JDK 9 Language, Tooling, and Library Features [CON2497]
  • JavaFX: New and Noteworthy [CON2483]
  • A Survey of Memory Footprint Optimizations in Java SE and Java HotSpot VM [CON1938]
  • Introduction to Troubleshooting in JDK 9: Serviceability Tools Are Your Friends [CON3733]
  • Building JavaFX UI Controls [CON2476]
  • Tools for High-Performance Polyglot Programming on the JVM [BOF4837]

今日はかなりマジメにセッション出てました。マジメにセッション出ると、ランチが食べられないというジレンマがあるわけですが、朝ご飯いっぱい食べたので大丈夫です。

Adventures with Extreme Types in a Purely Functional Language [TUT1288]

型の話といいつつ、関数型プログラミングの話。スピーカーは Canoo の Dierk Koenig。

この人、話し方も柔らかいし、発音がはっきりしているので、とても聞きやすい。まだ英語慣れしていないので、聞くのが楽でした。

Extream Type というのは特殊な方ではなくて、immutable value とか pure function とか constraint context などを加えた型についてだそうです。なんで型でを考えるかというと、No Silly Error とか Safe Refactoring とか Less Tricky Error とか Abstraction などの理由から。

Extream Type を使うと、暗黙的な制約を明示的にできます。コードで制約を書くのではなく、型で制約を与える方がいいということなのでしょう。型であれば、まちがいがあってもコンパイル時に分かりますからね。

現在の Java であれば、Stream や JavaFX の一部で Extream Type が使われています。

さて、はじめのサンプルとして、以下のプログラムが示されました。

 

import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Supplier;
import java.util.stream.Stream;

public class RNG {
    static Supplier<Integer> countGen(AtomicInteger i) {
        return (() -> i.getAndIncrement());
    }

    public static void main(String... args) {
        final Supplier<Integer> numbers = countGen(new AtomicInteger(1));
        final Optional<Integer> sum = Stream.generate(numbers)
            .limit(100)
//            .parallel()
            .map(a -> a^2)
            .reduce((a, b) -> a + b);
        System.out.println("sum = " + sum);
    }
}

このプログラム、parallel メソッドのコメントを外すと正しい値になりません。問題は countGen メソッドで作成している Supplier オブジェクトです。Supplier インタフェースは関数型インタフェースなので、あたかも関数のように扱えます。しかし、ここでは countGen メソッドの引数になっている AtomicInteger オブジェクトに依存してしまっています。

つまり、Supplier オブジェクトは純粋関数としては扱えません。純粋な関数だけでプログラミングをしましょというのが、Koenig さんの主張。

そこで、例として取り上げられたのが、Online REPL の try.frege-lang.org です。frege では、ブラウザ上で Haskell の REPL を実行することができます。

その後、関数合成などの関数を用いたプログラミングの説明がされました。

ちなみに、frege は Haskell のコードを Java のコードに変換して、コンパイルしているようです。これもなかなかおもしろそう。

最後に Fizzbuzz を frege で書くのを紹介されたのですが、なかなかおもしろい。でも、Java の Stream には zip がないから難しいなぁ... と思っていたら、隣に座っていた @bitter_fox さんがさっそく Java で書き直してました。もちろん、zip も作ってあります。それが、こちら

さすが、OpenJDK コミッタともなると、やることが早い!

JDK 9 Language, Tooling, and Library Features [CON2497]

Java SE 9 の言語仕様の変更や、ツール類の説明セッション。スピーカーは Joe Darcy です。

Joe はいつもの赤シャツ。Joe は Project Coin のリードだったことからも分かるように、言語仕様の取りまとめを行っている重鎮です。

Joe のセッションではおなじみなのですが、最初に言語仕様を変えるのは大変という話。Java 9 でもバイナリーコンパチが崩れる部分があるようです。

たとえば、AWT の peer が使えなくなるようなのですが、これは AWT 使っている人には結構いたいのじゃないかなぁ。

ツール関係でまず紹介したのが、jshell。Java の REPL です。昨日のキーノートでもやってましたね。

そして、Javadoc 関連。HMLT 5 に対応したり、検索が使えるようになるなど、いろいろ変更されてます。ちなみに、検索はクライアントだけで実行しているので、サーバーはいらいようです。

次に紹介したのが、javac で違うバージョンのソースをコンパイルすること。今までは -target -source そして -bootclasspath を指定しなくてはいけなかったのですが、新たに -release というオプションが導入されました。

-release N と記述した場合、-target N -source N -bootclasspath rtN.jar に相当するそうです。

そして、言語仕様。

まずは Project Coin。Java 7 で導入された Coin ですが、Java 9 でも言語仕様の変更を Coin で行っています。

@SafeVarargs の変更や、try with resources で final もしくは effectively final であれば、try ブロックの外側で記述できるようになったりしています。

また、ダイヤモンド演算子がやっと匿名クラスでも使えるようになりました!

さらに Java 8 で予告されていた、_ を 1 文字でメソッド引数に使用できないようになっています。Java 8 ではラムダ式では使えなかったのですが、Java 9 ではすべてのメソッドでコンパイルエラーになります。

@Deprecated もいろいろ変化しています。@Deprecated に関しては Dr. Deprecator こと Stuart Marks のセッションもありますが、とってないんですよね ^ ^;;; 後で資料をチェックしないと。

その他に、ダイヤモンド演算子やラムダ式で使う型推論を入れ子で使用するとコンパイル時間が長くなる問題があったのですが、それもかなり解消されたようです。

また、コレクションにファクトリメソッドの of が追加されています。Arrays.asList メソッドと同じように変更不可のコレクションを作成できます。

Java 9 は大きい変更は Project Jigsaw だけですが、細かい部分はいろいろと変わっているので、ぜひ資料をチェックしてみてください。

JavaFX: New and Noteworthy [CON2483]

JavaFX のロードマップ的なセッション。今年も、Kevin Rushforth と Jonathan Giles がスピーカー。

このセッション、去年と内容があまり変わっていないのです。なんか、残念。

JavaFX 9 での一番の変更は Jigsaw 対応。特に今まで公開していなかった skin 関連の API を公開するように変更することによって、いろいろ変わっていると (JEP 253)。

ちなみに、Jigsaw 対応の中で exports private というキーワードが出ていたけど、後で Jigsaw のセッションで確認します。

それと、今まで使用できていた impl_* のメソッドは全部使えなくなります。まぁ、しかたないか。ハックするときは impl_* から辿ることが多かったので、ちょっと残念なのですが ^ ^;;

それ以外の機能としては Hi DPI 対応。Mac はすでに対応済み、Windows では部分的に対応されていましたが、Linux でも Hi DPI をサポートします。これ以外にも小さな変更があるようですが、小さいんですよね。

去年のセッションでは Java 9 のリリース時期が伸びたからもうちょっと機能を追加できるかもといっていたのですが、あまり追加できなかったようです。

さて、Java 9 以降の話をちょっとだけ。

まだ計画段階なので、実際にどうなるかわからないですけど、たとえば AWT を必要としなくなるなどの変更を計画しているようです。でも、大きな変更はあまりないような気が... シェーダーはやっぱり入れてくれないのかなぁ....

A Survey of Memory Footprint Optimizations in Java SE and Java HotSpot VM [CON1938]

JVM のメモリ関連のまとめ的なセッション。でも、GC については触れないのです。スピーカーは Charlie Hunt。

Charlie は Salesforth に転職していたのですが、また Oracle に復職していました。全然知りませんでしたよ。

ちなみに、最近 Charlie は共著で Java Perfomance Companion という本を出しています。G1GC のチューニングに関してかなり書かれているので、G1GC を使うのであれば、必読ではないかと思います。

さて、なぜメモリのフットプリントが大事なのかということからセッションは始まりました。メモリは CPU に比べるとパフォーマンスが向上していません。このため、CPU やネットワークとのギャップがどんどん開いてしまっているわけです。

このため、キャッシュやメインメモリのフットプリントがダイレクトにパフォーマンスに直結することになっているわけです。

さて、メモリを調べるには、いくつかの方法があります。Java のヒープであれば、jmap や Mission Control のプラグインである JOverflow が使用できます。

次に、Java のヒープを削減するために取り入れられた手法の紹介。

たとえば、Java 6 で導入された Compressed Ordinary Object Pointer。多くのオブジェクトに対するポインターを効率よく表すために、64bit を使用せずに、もっと少ないビット数で表す手法です。

また、Java 8 で導入された Metadata やアプリケーションのクラスデータの共有なども。

Java 9 ではアスキー文字を 16bit を使わずに 7 bit で表す Compact String が導入されます。

最後に WebLogic のリソースマネージメントの説明があったのですが、よくわかりません。メモリ使用量がかなり減るらしいですよ。

Introduction to Troubleshooting in JDK 9: Serviceability Tools Are Your Friends [CON3733]

久保田さん、末永さん、髙雄さんのセッション。去年は BOF だったのですが、今年はカンファレンスセッションに格上げです。

この 3 人のセッションなのですから HeapStats の紹介セッションなのかと思ったら、それほど HeapStats には触れず。なんかもったいない。

jcmd と jhsdb と HeapStats の 3 本立て。でも、トピックがありすぎて、焦点がちょっとぼけちゃったかな。単にコマンドの紹介だけのようになってしまった感じです。

とはいえ、久保田さんは去年に比べればかなり落ち着いてしゃべってましたね。

Building JavaFX UI Controls [CON2476]

JavaFX で部品を作る話。スピーカーは Jonathan Giles。

開口一番、このセッションは 2014 年にやったけど、Java 8 や 9 のアップデートを加えてあるよと。でも、あまり変わらなかった。そりゃそうか。

このセッションでは JavaOne ボタンを以下の 4 種類の方法で作成していきます。ソースコードは Bitbucket で公開されてます。

  1. 既存のコントロールを CSS でカスタマイズ
  2. 既存のコントロールのスキンを置き換え
  3. 既存のコントロールを組み合わせて新しいコントロールを作成
  4. Control クラスを派生させて新しいコントロールを作成

数字の若い方が簡便な方法です。

でも、作るとしたら、結局は 3 か 4 だろうな。

Tools for High-Performance Polyglot Programming on the JVM [BOF4837]

複数の言語を Java プラットフォームで扱いやすくする Graal VM のセッション。スピーカーは OpenJDK の Graal Project のリードの Michael Van de Vanter。

Graal VM は JVM Compiler Interface 上に Graal コンパイラを作成し、動的にコンパイルすることができます。

このセッションでは NetBeans 上で Graal 使ってデモしてました。デモでは、NetBeans 上で Java のコードと Ruby のコードを示し、Ruby のコードでもデバッガでトレースできることを示してました。デバッガは Truffle とよばれているものです。

パフォーマンスも Ruby ではかなり向上しているようす。Scala などはあまり変わらないようでしたが。

Graal コンパイラでは Instrumentation を使用して、AST を操作して最適化や部分評価を行っているようです。なかなかおもしろい。こういう話が効けるのが、JavaOne の醍醐味の 1 つですね。

おまけ

去年の JavaOne では、セッションのアンケートの代わりに、赤黄青を入力できる JavaFX のアンケートマシンが使われていました。

今年はそのアンケートマシンがパワーアップ。画面が大きくなってます。でも、裏を見ると、やっぱり Raspberry Pi。でも、去年のむき出し状態とはことなり、ちゃんとケースに入ってましたよ。

というか、画面が大きくなったことと、ケースに入ったことぐらいしか違いはないわけです。

やるんだったら、もうちょっと新しいことをやればいいのに。

2016/09/18

JavaOne 2016 Day 1

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

今年も JavaOne の季節がやってきました。

直前になって、Java SE 9 のリリース延期が提案されていたりして、あんまり期待はできないのですが、実際のところは....

さて、今日はコミュニティが主催しているセッションとキーノートです。とはいえ、はっきりいってコミュニティ主催のセッションはクオリティが低い。審査も何もないし、しかたないとは思うんですけどね。

それでも、1 つだけセッションをとってみました。ということで、今日聴講したのはこちら。

  • UGF7875 Refactoring Your Code with Java 8: Functional Programming to the Rescue
  • KEY7967 Java Keynote

UGF7875 は朝 8 時のセッション。早すぎ!

UGF7875 Refactoring Your Code with Java 8: Functional Programming to the Rescue

なぜ、このセッションに出ようと思ったかというと、関ジャバ会長の @jyukutyo がスピーカーだから。

メインのスピーカーは Red Hat の Eder Ignatowicz。Red Hat といっても US のではなくて、ブラジルの Red Hat だそうです。

で、朝の 8 時前に会場の Moscone Center にいってみたら..... @jyuktyo が見当たらない!!

結局、@jyukutyo なしでセッションは進んでしまいました。

内容的にはデザインパターンと関数を使ってモダンなコード書こうねという内容。Template Pattern など関数を使いやすいパターンがあるので、そういうのに組み合わせていこうというものでした。

まぁ、取り立てて言うことはないです。

後から @jyukutyo に聞いてみたら、寝坊したらしいですww

ちなみに、今日は JJUG 会長もスピーカーに名を連ねていたのですが、そちらは壇上にはいたらしいものの、しゃべらず。

日本の 2 大 JUG の会長がスピーカーに名を連ねるものの一言も話をしなかったということは、日本の Java の歴史に確実に刻まれることでしょうww

KEY7967 Java Keynote

メインは火星でした。以上。

ということで終わらせることはできないですよね ^ ^;;

それにしても新味に欠けるキーノートでした。Oracle 前に Intel のキーノートがあったのですが、よっぽどそっちの方がちゃんとしてましたよ。

予算がないのは分かるけど、もうちょっと工夫しようよ。

詳しい内容はまた後で写真と共に追加します。

Java SE のパートはいつもの Mark Reinhold。

彼が紹介したのは Project Kulla と Project Jigsaw。

Kulla は Java で REPL を実現する jshell を提供しています。で、jshell のデモをしようとするのですが、画面がなかなか切り替わらずにイライラする Mark。

REPL だからデモは地味だよね。でも、しかたない。

で、そのまま Jigsaw へ。Jigsaw の機能も jshell で紹介します。

ところが、画面の縦横比があってなくて、スクリーンの右側が見切れてしまっていました。Mark がスタッフにどうにかしてくれというのですが、誰も出てこないし、誰も直そうとしない。

イライラした Mark は舞台裏に戻ってしまいます。まさか、怒って出て行ってしまった?

でも、スタッフとともに戻ってきました。よかった、よかった。

Jigsaw もあまり新しいことはなし。exports private というキーワードが出ていたけど、後で Jigsaw のセッションで確認します。

途中から Brian Goetz が出てきて、Project Valhalla と Project Panama の話。ここも去年とほとんど変わらず。唯一、var がさらっと紹介されていましたww

Java EE もあれだけ Guardian に責められていたのに、これでいいのという内容。まぁ、久しぶりに Garr さんが技術の話をしてましたけど。結局、まだ何も決まっていないんだろうなぁ。その割には 2017 年に Java EE 8、2018 年に Java EE 9 をリリースするというのは、誰も信じてないと思います。

最後にデモをやろうとしたのですが、時間切れで終了。Larry のキーノートが次に控えているので、時間厳守です。

個人的には、Java EE は役目が終わったと思うのですが、どうなんでしょうね。

2015/10/28

JavaOne 2015 San Francisco 4 日目

このエントリーをはてなブックマークに追加
Rainbow, San Francisco

昨日の夜から雨が降っていて、朝もまだパラパラしてたのですが、朝ご飯を食べ終わって店を出たら虹が出てました。

さて、今日は Appreciation Event で Elton John と Beck のライブがあるので、セッションは少なめ。

  • CON7823 jshell: The New Interactive Java Language Shell for JDK 9
  • CON2709 The New HTTP Client API, Including HTTP/2 and WebSocket
  • CON7432 New Trics for Old Dogs: Collections Enhancements in Java 8
  • CON5118 Introduction to Modular Development
  • CON6936 Understanding Java Garbage Collection
  • CON1667 Effective Exceptions and Java 8 Streams

GC のセッションは初心者向けであまりおもしろくありませんでした。スピーカーの Gil Tene は Azure の人なので、Azure ならではの話が聞けると思ったのですが...

CON7823 jshell: The New Interactive Java Language Shell for JDK 9

Robert Field, CON7823 jshell: The New Interactive Java Language Shell for JDK 9, Including HTTP/2 and WebSocket, JavaOne 2015 San Francisco

Java にとうとう REPL が導入されることになったわけです。それが jshell。

個人的には、そんなにうれしくないのですが、ちょっと試してみたいとか教育目的にはいいかもしれません。ついでですが、@bitter_fox くんは OpenJDK の jshell プロジェクトのコミッタです。

スピーカーは、その jshell プロジェクトのリードの Robert Field。セッション中に @bitter_fox くんもコミッタとして紹介されていました!

jshell がどういうツールかという説明はあるのですが、なぜ今 REPL なのかなどの背景などはあまり説明がなく... 本当はこういうところが重要なんですけどねぇ。

まぁ、その代りデモはいっぱいやってくれましたけど。

jshell で書くのは Java のスニペットで、クラスなどをちゃんと書く必要はありません。スクリプト言語的に記述ができるわけです。もちろん、クラスを書くこともできますけど。

jshell の組み込みコマンドは /help で一覧が表示されます。リストを表示するとか、保存するとか、定義したメソッドの一覧を表示することなどができるようです。

実装がなかなかおもしろそう。コードのスニペットだとしても、それを補ってクラスにしてしまい、その都度コンパイルと実行を行っているようです。この法式だとパフォーマンスは悪くなりますけど、REPL でパフォーマンスのことをいってもしかたないですね。

ちょっとした用途には、いいかも。

CON2709 The New HTTP Client API, Including HTTP/2 and WebSocket

Michael Mcmahon, CON2709 The New HTTP Client API, Including HTTP/2 and WebSocket, JavaOne 2015 San Francisco

因縁の HTTP Client のセッションです。というのも、HTTP Client は Java SE 8 で導入予定だったのですが、スリップしてしまったのでした。当時、期待していたので、スリップは残念だったことを思い出します。

スピーカーは Oracle の Michael McMahon。

前半が HTTP/2 の説明で、後半が API の説明なのですが、一番はじめは CompletableFuture クラスについて。ようするに、新しい HTTP Client は CompletableFuture クラスをベースに作られているということです。

CompletableFuture クラスは処理を関数で表し、メソッドチェーンでつなげていきます。そのおかげで、今までのURLConnectionクラスよりも格段に使いやすそうですし、プロパティなども設定しやすいようです。

WebSocket も同じように使えそう。これは期待が持てるかも。

そういえば、このセッション、珍しくてらださんと一緒でした。

セッションの後、てらださんが「なんであんなめんどうくさいことするんですか。Java EE の WebSocket はアノテーションだけで指定できるのに」というわけです。

こういうところがてらださん、分かってないんだよなぁ。

Java SE は他のエディション、特に Java EE のベースになるエディションなわけです。つまり、Java EE から見たら、下位の API に相当します。

下位の API は上位の API に対して、必要十分な機能を提供しなくてはなりません。設定項目などもすべてちゃんと設定できなくてはならないわけです。それに対し、アノテーションでコードを自動生成する法式だと、上位の API から使いにくくなってしまうわけです。しかも、デバッグもやりにくくなるし。

だからというわけではないと思いますが、Java SE ではほとんどアノテーション使いません。@Override ぐらい。

Java SE と Java EE の立ち位置の違いをちゃんと理解してほしいなぁ > てらださん

CON7432 New Trics for Old Dogs: Collections Enhancements in Java 8

Stuart Marks, CON7432 New Trics for Old Dogs: Collections Enhancements in Java 8, JavaOne 2015 San Francisco

Java SE 8 でのコレクションフレームワークの変更点について。

スピーカーは Oracle の Stuart Marks。

コレクションに関しては、例年、Michael Duigou がスピーカーだったのですが、今回は壇上にはいるものの、話はせず。役割が変わったんですかねぇ。

Stuart は自分の資料にハッシュタグつけて、ツィートしてねというんだけど、あんまりツィートで実況する人はいないんですよね。日本だったら、当たり前のようにやってますけど、海外ではそんなことないのかな?

さて、コレクションですが、Java 8 で大きく変化しました。もちろん、Stream の存在もそうなのですが、それよりも何よりも影響が大きいのがデフォルトメソッドです。

コレクションはインタフェースで定義されているので、おいそれとは機能が追加できなかったのですが、デフォルトメソッドによって機能を追加することができることになりました。そのおかげで、List や Map に新しいメソッドがいっぱい追加されました。特に、Map。

というわけで、デフォルトメソッドで追加されたメソッドを半分以上の時間をかけて説明しています。たとえば、Map の getOrDefault とか putIfAbsent などなど。

後は、コレクションでよく使用する Comparator。Comparator もいっぱいメソッドが追加されています。

最後にちょっとだけ Java 9 の変更について。

ファクトリメソッドの of がコレクションにも追加されます。変更不可でイミュータブルなコレクションを作成できるようなので、Arrays.asList のコレクション版のような感じです。ついでですが、of メソッドでは null は使えません。イミュータブルだったり、null を要素にとれないというのは、安全性や、パラレルで使うことを考えたら当然ですね。

Map にも of メソッドがあって、キーと値を順々に並べていく感じです。これはちょっとわかりにくいような気が。タプルがあればいんですけどね。Map.Entry を生成する entry というメソッドもできるようなので、これを使っても書けます。

Java のコレクションは生成して、値を設定するのがめんどうなので、こういうファクトリメソッドはほんとうれしいです。

CON5118 Introduction to Modular Development

Alan Bateman, CON5118 Introduction to Modular Development, JavaOne 2015 San Francisco

このセッションのスピーカは Alan Bateman。昨日も Alan のセッション受けているし、毎日会っていますww

それにしても、Jisaw のセッションをいろいろ聞いた後に Itroduction を聞くのは、ほんとにセッションの取り方を間違えたとしかいえないです。

JavaOne で聞いていた時は頭のなか疑問符だらけだったのですが、家に帰って整理してやっと理解できた感じ。

基本的なところで、勘違いしていたのが、モジュールは JMOD ファイルだと思っていたこと。去年までは JMOD ファイルだったんですよ。でも、今年は JAR ファイルでモジュールを表せるようになったのでした。

JAR ファイルの説明ばかりして、モジュールはいつ出てくるんだろうと思っていたのですが、そもそもそれが勘違いだったわけです。

でも、去年からの差分では説明してくれないので、全然気が付かなかったわけです ^ ^;;

さて、モジュールは JAR ファイルにモジュールの定義情報を組み合わせたものだということが分かりました。では、そのモジュール定義をどこに書くかということですが、それは module-info.java というファイルに書きます。ここら辺も去年とは変わったところです。というか、元に戻ったというべきか。

module-info.java にはモジュールが依存しているモジュールと、公開するパッケージを記述します。依存性は Maven などと同じような感じ。パッケージはデフォルトでは非公開で、たとえ public なクラスであったとしても、外部からアクセスできないようになります。で、module-info.java に公開する (exports する) と指定したパッケージだけが、外部からアクセスできるようになるわけです。

そして、標準ライブラリもモジュールに分割されます。モジュールはかなり多いです。

実行やコンパイル時は -classpath ではなくて、-modulepath を使用します。-cp とは違って、-mp はディレクトリを指定します。-mp で指定されたディレクトリにあるモジュールのうち、依存性で芋づる式にモジュールをロードしていくようです。

困ったのが jar コマンドのオプションが全然見られないものになっていること。--create とか --file とかになってます。確かに、今までの cfv とかは、UNIX の ar とか tar を使っていない人にはなんのことかさっぱり分からないですから、こっちの方がいいのかも。

最後にちょっとだけ jlink の紹介。これはすでに書いたからいいでしょう。

ということで、やっと分かったような気がする。

CON1667 Effective Exceptions and Java 8 Streams

Benjamin Weber, CON1667 Effective Exceptions and Java 8 Streams, JavaOne 2015 San Francisco

Stream を使っていて困るのが、例外の扱い。そもそも java.util.funtion パッケージの関数型インタフェース群が例外返さないように定義されていることが問題なわけです。もちろん、そうしたのは理由があるわけですが、例外を扱うのが面倒になったのは事実です。

で、このセッションになるわけです。

スピーカは Benjamin Weber。

例外がスローできないといっても、できないのはチェック例外です。なので、よく使われる手としては RuntimeException にくるんで、スローする方法。

でも、メインに紹介したのが Either を使う方法。簡単にいえば、値もしくは例外を保持するコンテナクラスです。Optional の例外版のような感じですかね。

ただちょっと面倒くさいかな。正常に動作した場合を書いていかなくてはいけないんですよね。ここらへんも Optional のめんどうなところと似ています。

2015/10/27

JavaOne 2015 San Francisco 3 日目

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

後半戦スタートです。

だんだんと疲れてきて、今日は朝起きられませんでした。なので、朝ご飯は抜き ><

さて、今日聴講したセッションです。

  • TUT6825 Project Jigsaw Hack Session
  • CON6712 Enhanced Process APIs
  • CON5107 Prepare for JDK 9
  • CON3523 JSR 377: What's Up and What's Next
  • CON1868 Shenandoah: An Ultralow-Pause-Time Garbage Collector for OpenJDK
  • BOF7768 Visualize Log Files for Troubleshooting Java Applications

今日はいろいろと失敗続き。

まず、Jigsaw の Hack Session がチュートリアルなのに、実質 Q&A セッションだったこと。質問できるレベルじゃないんだから、ちゃんとしたチュートリアルにしてほしかった....

次にランチ食べに行っていたら、聞きたいセッションに間に合わなかったこと。Unsafe に関するセッションを聞きたかったんだけど、満員で部屋に入れませんでした。しかも、Java SE 10 に関する話もあったらしい。

今年の JavaOne は Java SE 10 のセッションがぜんぜんないので、Java SE 10 に関する話、特に Project Valhala に関する話題は貴重だったのに....

そして、JSR 377 のセッションで、JSR 377 がまったく進んでいないことがわかったこと。JSR 377 は GUI アプリケーションの標準フレームワークを策定しようとしているのですが、やっぱり難しいのかなぁ....

TUT6825 Project Jigsaw Hack Session

壇上にいるのは Mark Reinhold、Alan Bateman、Manday Chung。

前に書いたように、チュートリアルのくせに Q&A セッションだったこのセッションですが、Alan と Manday がちょっとだけデモをしてくれました。

デモをしたのは、2 つのコマンド、jdeps と jlink です。jdeps が依存性を調べるコマンドで、jlink が JRE のイメージを作るコマンドのようです。

jdeps は JDK 8 にも含まれているのですが、Project Jigsaw 用に拡張されているようです。どのモジュールを必要とするかの一覧を表示することができます。

さらに、依存関係から、依存関係を記述する module-info.java を作成してくれるようです。

そして、jlink は JRE を作ってしまうコマンド。必要なモジュールだけを集めて、JRE を作れるようです。これ、なにげにすごいことかもしれない!

javapackager コマンドと組み合わせれば、アプリケーションの配布も小さくてすむし、かなり便利かも。

Mark Reinhold, TUT6825 Project Jigsaw Hack Session, JavaOne 2015 San Francisco
Mandy Chung and Alan Bateman, TUT6825 Project Jigsaw Hack Session, JavaOne 2015 San Francisco

 

CON6712 Enhanced Process APIs

Roger Riggs, CON6712 Enhanced Process APIs, JavaOne 2015 San Francisco

スピーカーは Roger Riggs。Roger といえば、Date and Time API の Oracle 側の責任者でしたけど、Java SE 9 では Process APIs の担当になったようです。

Process APIs は J2SE 5 で導入されたんですけど、イマイチ使いにくい API でした。もちろん、Runtime#exec メソッドを使うことを考えれば、少しは楽になっていますが...

Runtime#exec メソッドで分かると思いますが、Process API は外部プロセスを制御するための API です。今は Runtime#exec メソッドも内部で Process API を使うようになっています。

それが 10 年以上の歳月の後、変更されることになったわけですが、何が変わったのでしょう。ところが、このセッション、とても不親切で、どこまでが既存のメソッドで、どれが新しい部分なのかさっぱり分からないんですよね。なんだかなぁ....

Process クラスでは onExit メソッドなどが追加されたようです。onExit メソッドの戻り値の型は ComputableFuture クラス。ということは、外部プロセスが終わったら、次に何かするのを簡単に書けるというわけです。onExit メソッドに関してはセッションの後半でいろいろ解説してましたけど、ComputableFuture の使い方的になっていました。

また、ProcessHandle インタフェースが追加されました。MethodHandle のプロセス版だと思えばいいのかな。

そして、プロセスの情報は ProcessHandle インタフェースのサブインタフェースである ProcessHandle.Info インタフェースで取得できます。実行ユーザや、コマンド名、引数、実行時間などが取得できるようです。これらはすべて型が Optional クラス。OS によって取得できるものと取得できないものがあるようです。

最後に紹介していたのが、プロセス間のパイプ。今までプロセスの出力を、他のプロセスの入力に直接パイプで流し込むことができなかったのですが、それもできるようになるようです。でも、イマイチよく分からん。

そういえば、このセッションに I18N チームの佐藤さんが聞きに来ていました。I18N チームも Rogger が所属する Core Library グループに含まれることにことになったようです。

CON5107 Prepare for JDK 9

再び、Project Jigsaw 関連のセッション。スピーカーは Alan Bateman ですけど、Mark と Manday も壇上に上がってます。途中から Alex も。

このセッションでは Java SE 9、主に Project Jigsaw に合わせて、アプリケーションやライブラリの作者が用意すべきことを説明したセッションです。

Java SE 9 でコンパティビリティが保たれない点として以下の項目があげられています。

  • Encapsulate most JDK-internal APIs
  • Remove a small number of supported, JCP-standard APIs
  • Change the binary structure of the JRE and JDK
  • Remove the endorsed-standards override and extension mechanisms
  • New version-string format
  • Underscore not allowed as a one-character identifier in source code

下の 2 つ以外は Jigsaw に由来するものです。一番最後の _ を単独で変数として使えないのは、Project Lambda に関わることで、Java SE 8 では警告が出ていたはずです。

まず、内部 API を使えないようにするというのは、Jigsaw の目的の 1 つです。sun.* などのパッケージは内部的に使うもので本来は使うべきではないのですが、今までは使えてしまいました。

特に多く使われているのが、sun.misc.BASE64Encoder と sun.misc.Unsafe です。BASE64Encoder は別の API が用意されたので、そちらを使うべきです。

問題は Unsafe。そこで、JEP 260 では Unsafe のようなクリティカルな内部 API は Java SE 9 で deprecated にして、Java SE 10 で廃止という流れになるようです。

クリティカルな API としてあげられていたのが、以下の項目。

  • sun.misc.Unsafe
  • sun.misc.{Signal,SignalHandler}
  • sun.misc.Cleaner
  • sun.reflect.Reflection::getCallerClass
  • sun.reflect.ReflectionFactory

内部 API を使っているかどうかは jdeps コマンドで調べられます。jdeps の起動オプションで -jdkinternals をつけると、使用されている内部 API の一覧を出力してくれます。

また、クリティカルではなくて、カプセル化されてしまった API も -XaddExports を使用すれば、使えるようです。ただし、あくまでも移行措置だと思っていた方がいいと思います。

次の削除される API ですが、java.util.logging.LogManager と java.util.jar.Pack200 の PropertyChangeListener に関するものです。これらも Jigsaw 関連なんだそうですけど、よく分からず ><

JRE と JDK の構造の変更はライブラリがモジュール化されたからです。かなり変わるようなので、JDK_HOME 以下のディレクトリ構造を決め打ちにしているようなアプリは注意が必要ですね。

そのほかに java のオプションの -Xbootclasspath や -Xbootclasspath/p などが使えないようになるようです。

バージョン番号は JEP 223 に書いてありますけど、基本的には 1.9 はやめて 9 にするよ、ということのようです。また、Update Release はマイナーバージョンアップになるようです。ここにきて、マイナーバージョンアップが復活するとは思いませんでしたよw

Alan Bateman, CON5107 Prepare for JDK 9, JavaOne 2015 San Francisco
Alan Bateman, Alex Buckley, Mandy Chung and Mark Reinhold, CON5107 Prepare for JDK 9, JavaOne 2015 San Francisco

 

CON1868 Shenandoah: An Ultralow-Pause-Time Garbage Collector for OpenJDK

Christine Flood, CON1868 Shenandoah: An Ultralow-Pause-Time Garbage Collector for OpenJDK, JavaOne 2015 San Francisco

スピーカーは Red Hat の Christine Flood。

Shenandoah は Red Hat が主導している新しい GC の手法なんですが、イマイチ分からん。OpenJDK のプロジェクトなので、サイト見に行ってもあまり情報がない....

ちなみに、Shenandoah はバージニア州の川もしくは地域の名前のようですね。

Shenandoah の目標は 100 GB 以上のヒープを、10ms 以下のポーズタイムで GC すること。かなり意欲的な目標です。

GC 全体の手法がよく分からないのですが、どうやら G1GC を改良した GC のようです。CMS や G1GC では他のアプリケーションスレッドが動作している状態でも、GC のスレッドを動かしています。Shenandoah はこの Concurrent のスレッドを増やしているのが特徴なのかな。

Parallel GC のように使える限りのスレッドをすべて GC に割り当てるのではなく (当然、Parallel GC が走っている時はアプリケーションスレッドはポーズします)、Shenandoah では余っているスレッドを割り当てているようです。

SpecJBB での G1GC との比較だと、かなりポーズ回数や時間が減っていることが分かります。

でも、もうちょっと詳しい解説がほしいなぁ....

BOF7768 Visualize Log Files for Troubleshooting Java Applications

Shin Tanimoto, BOF7768 Let’s Visualize Log Files for Troubleshooting Java Applications, JavaOne 2015 San Francisco
こうやって演台に手をついて、もたれたように立つのはほんとダメ

cero_t と石田さんのセッション。

なんかグダグダでイマイチ。直前まで内容が決まっていなかったようで、石田さんはオープニング以外はほとんど喋らないし。

日本語だったらどうにかなったかもしれないけど、英語でそれはまずいよね。

しかも、cero_t はポスチャーが悪いので、話に信憑性や信頼性がなくなってしまうのです。話題がどんなに興味深いものであったとしても、ポスチャーの悪いと聞いてもらえなくなるのに.... 限に、途中退席者が多かったのは、そういうところにあると思うんですよね。

特に欧米でプレゼンをやる時は、ポスチャーがとても重要!!

おまけ #1

Cross Your Tees, JavaOne 2015 San Francisco

上に書いたように、ランチにいって、Unsafe のセッションに入れなかったわけです。一緒にランチに誘った @bitter_fox くんにはとても悪いことをしてしまいました。

ぽっかり時間が空いてしまったので、20 周年の T シャツをもらいに行ってきました。

Java SE のセッションは Hilton なのですが、T シャツは Park 55 なので、なかなか行きづらかったんですよね。単に T シャツをもらえるだけかと思ったら、その場でプリントしてました。いわゆるシルクスクリーンというやつです。しかも 2 色摺り。

これはなかなかいいですね。

それにしても北斎がこんなところにも使われるなんて、ほんとすごいことです。

Cross Your Tees, JavaOne 2015 San Francisco
Cross Your Tees, JavaOne 2015 San Francisco

Cross Your Tees, JavaOne 2015 San Francisco
Cross Your Tees, JavaOne 2015 San Francisco
Cross Your Tees, JavaOne 2015 San Francisco

 

おまけ #2

Pepper, JavaOne Pavilion, JavaOne 2015 San Francisco

まだ時間があったので、@bitter_fox くんとは別れて、パビリオンへ。

パビリオンがまた縮小されているような気がするのですが... なんとも寂しいものです。

去年のパビリオンではアルデバランの Nao がいっぱいいたのですが、今年は Pepper のようです。

そこでたまたま会ったのが David。あれっ、昨日のセッションではひげはやしていたのに、今日はひげがない。

聞いてみたら、昨日私が Facebook にあげた写真を見て、ひげが汚らしいように感じたので、今日剃ってしまったと。そうだったんだ! でも、ひげない方がいいと思うよ。

David が Pepper に "Shake hands" とか "Hug me" などと話しかけても、一切無視されていたのが ^ ^;; ノイジーな場所だからしょうがないとは思うけど、反応する人にはちゃんと反応するので、何かが違うんでしょうねw

 

Nao, JavaOne Pavilion, JavaOne 2015 San Francisco
Pepper, JavaOne Pavilion, JavaOne 2015 San Francisco
Pepper, JavaOne Pavilion, JavaOne 2015 San Francisco

 

おまけ #3

Null Pointers, JavaOne 2015 San Francisco

今日は Taylor Street を封鎖して作られている Duke Cafe で Nll Pointers がプレイするというので、大山さんと聞きにいきました。

今年の Null Pointers はちょっと違う。なんと GS の伊藤さんがドラムとして参加されているのです。伊藤さんに聞いたところによると、バンドで練習したのは土曜日がはじめてということなので、なかなか厳しいですね。

ちなみに Null Pointers はコミュニティのバンドで以前からメンバをその都度代えながら、綿々と続けられているバンドです。

オリジナルはもちろんなくて、いわゆる懐メロ系のカバー。懐メロといっても、演歌ではないですけど。

なかなか楽しめました。

Null Pointers, JavaOne 2015 San Francisco
Null Pointers, JavaOne 2015 San Francisco

Null Pointers, JavaOne 2015 San Francisco
Null Pointers, JavaOne 2015 San Francisco
Null Pointers, JavaOne 2015 San Francisco
Null Pointers, JavaOne 2015 San Francisco
Null Pointers, JavaOne 2015 San Francisco

Null Pointers, JavaOne 2015 San Francisco
Null Pointers, JavaOne 2015 San Francisco
Null Pointers, JavaOne 2015 San Francisco