JavaOne 2017 4日目レポート

遅くなろうが順番がめちゃくちゃだろうが、とにかく書くことが大事なんだ、と教わった。
JavaOne 2017の4日目です。この日はキーノート的なものは一切なかったので、ずっと個別セッションに出ていました。

Streams in JDK 8: The Good, the Bad, and the Ugly

スピーカーが、Simon RitterとStuart Marksというちょっと変わった組み合わせ。余談だけど、Simon Ritterの英語は早口なのにすごく聞き取りやすかった。
Stream APIを使った(あるいは使うべき)コードを見て、何がいけないのか、どう直すべきなのかを説明していくセッションです。Good/Bad/Uglyのセッションは、説明が明確で分かりやすいから好きです。

たとえば、

action=validate&key=10&key=22&key=10&key=30

みたいなURLパラメータをパースして、

action,validate
key,[10,22,10,33]

みたいな結果を取り出すコードを考えてみよう、という感じ。それで、UglyとかBadなコードを見せて、何がいけないのかを指摘する。

で、だいたい最初に悪いコード例が出される。

f:id:zinbe:20171004083350j:plain

基本的な指摘としては

  • Functionalに考える
    • 1つの中間操作とか末端操作の中に普通に複雑なロジック入れるのはStreamの意味がない
    • stateによって処理を分けるようなののも避けよう
    • 中間処理でprintlnで出力結果出して利用するのは良くない
  • Internal IterationとExternal Iterationをちゃんと使い分ける
  • 処理速度に注意する

みたいな感じ。

あと、Parallel Streamについては、以下のような感じの指摘でした。

  • Parallelにしたからといって、必ずしも速くなるわけではない
  • Parallel Streamsはcommon fork-join poolを利用しているので、その挙動を把握しよう
  • デフォルトのスレッド数=CPUのコア数。コンテナ環境とかは特に注意
  • ネストすると遅くなることが多い

Modules and Services

Java9のモジュールについて、サービスプロバイダの仕組みを解説。要するに、SPIの仕組みがモジュールが導入されてどうなったか的な感じの話でした。
モジュール定義にはrequiresとexportsの他にusesとprovideっていうキーワードがあって、使いたいサービスプロバイダを指定する場合(利用側)にはusesを、サービスの実装を提供する場合(提供側)にはprovideを使う。
f:id:zinbe:20171004093652j:plain

この場合だと、java.desktop側からは直接FirstPrintにはアクセスできなくて、必ずPrintServiceLookup経由で使うことになる。コード上はインタフェースが指定されていて、使う実装は実行時に決まる、いままでのSPIと同じ動き。
f:id:zinbe:20171004095148j:plain

java.desktopモジュールではこのサービスタイプをたくさん使ってる。
f:id:zinbe:20171004095306j:plain

あと、Optionalとかも使えるっていう話がありました。

55 New Features In JDK 9

ふたたびSimon Ritter。JDK 9の新機能をズラーっと説明していくセッション。ほぼ既知の内容でした。
というか、久保田さん(@sugarlife)が去年のJJUG CCCでやったセッションでほぼカバーされてる。さすがです。

www.slideshare.net

G1GC Concepts and Performance Tuning

G1GCの基本的な動きと、それをどうやってチューニングしていくかといったポイントの解説。
基本的には、GCのオプションつけて、ダンプして、Flight Recorderで見て、それを元にチューニングするという話。
ちょっとすぐにはまとめきれないので後回し。

The G1 GC in JDK 9

上のセッションと同じスピーカー。やる順番が逆のような気がした。
前半は、G1GCの基本的な仕組みをもっと詳しく解説、後半はJDK8からJDK9までに何が変わったかという話。
大きな変更点は以下の5つ。

  1. String deduplication (8u20)
  2. Class unloading with concurrent mark (8u40)
  3. Eagerly reclaim humongous regions (8u60)
  4. Adaptive start of concurrent mark (JDK9)
  5. More efficient collections (JDK9)

実質1つじゃんってツッコミは置いといて。
1は、2つの同値(equals()の結果がtrue)のStringオブジェクトがある場合に、その中身の参照先を同じchar[]にする。メモリは大幅に節約できる反面、CPU使用率は少し上がってYoungGCは少しだけ伸びる。

2は、オブジェクトが不要になったかどうかのマーク処理を並列で実行するというもの。fall-back full GCよりも処理は複雑でトリッキーだけど高速。

3は、1つの領域の半分を超えるようなでかいオブジェクトがあった場合、humongous領域に独立して格納する。これによって参照が無くなった段階で簡単に解放できるようになる。humongous領域は他の領域とは独立しているから、並列マークが完全に終わるのを待たなくても解放できる。

4は、Old領域の並列マークの開始タイミングを最適化する仕組みの導入。Old regionの並列マークは領域がフルになる前に完了しないといけないので、フルにならないようにするための安全なマージンが必要。一方でフルGCはギリギリまでやりたくない。そのマージンをどれくらい取るのかを実行時のデータを元にして最適化する。

5は、上記の他にもいろいろ改善されていて、実に250以上のenhancementsと180以上のbug fixesがあったよ、というお話。

あと、次のJDKに向けて開発中の機能として、パラレルfall-back full GC(JEP 307)とか、card scanningの高速化なんかが進められているらしい。

Troubleshooting Memory Problems in Java Applications

Javaアプリケーションのメモリエラーに関するトラブルシューティングのセッション。
OutOfMemoryErrorが起こったときに、その原因を探って、解消するための方法を解説。基本的には、GCのログとヒープダンプをとってちゃんとツールで追っていけば、怪しい箇所が見つかるよ、という話。あと、どういうときにメモリリークが起こりやすいか、何を見ればそれがわかるかなどが詳しく紹介されました。

Javaのメモリの問題は、おもに次の原因で起こる。

  • Memory Poolの設定ミス
    • Memory Poolのサイズ設定は適切に
  • Finelizerの過度な使用
  • 明示的なGC呼び出し
  • メモリリーク

メモリリークの解析や解消を手助けするツールやオプションは以下のようなものがある。

  • JVMオプション - HeapDumpOutOfMemoryError / PrintClassHistogram
  • JConsole
  • jcmd
  • jmap
  • GCログ
  • Eclipse MAT
  • NMT
  • メモリリーク検出ツール - dbx / libumen / valgrind / purify

Oracle Cloud Fest.17

この日は夜にAT&T ParkでOpenWorldとJavaOne参加者向けの特別ライブがありました。
出演したのはThe ChainsmokersとEllie Goulding。私はもともとそれほど興味が無いのと、疲れていたのとで、後ろの方で人と話しながらのんびり聞いてました。でもさすがに本番のライブのサウンドは迫力があっていいですね。

f:id:zinbe:20171004201342j:plain

JavaOne 2017 3日目レポート

2日目の分書いてないですが、Gihyo.jpにキーノートのレポートを書かせていただいたので、ひとまずそれで。
第1回 JavaOne 2017開幕,キーノート速報~Project Jigsawついにリリース!女性コミュニティ活性化,データが創る未来:Java 9のその先へ~JavaOne Conference 2017レポート|gihyo.jp … 技術評論社

Monitoring and Troubleshooting Tools Available in Your Java 9 “bin” Folder

JDK 9に含まれるモニタリングおよびトラブルシューティング・ツールの話。
主なものは以下の5つ。

jconsole

Javaアプリの監視と管理のためのグラフィカルツール。プロダクション環境でローカルで使うのは推奨しない。
リモートで使うには「com.sun.management.jmxremote.port=ポート番号」で起動。

jps

試験的ツール。対象のシステム上で動いているJVMを一覧表示する。ローカルでもリモートでも使えるけど、リモートで使うには対象のシステムでjstatdが動いている必要がある。

jstat

試験的ツール。JVMの状態を監視する。HotSpot VMのパフォーマンスを計測できる。リモートで使うには対象のシステムでjstatdが動いている必要がある。

jstatd

試験的ツール。JVMの状態をリモートで監視するためのデーモン。jpsやjstatなどをリモートで使うために必要。

JMC

Javaのミッションコントロールツール。JMXコンソールとJava Flight Recorder(JFR)を含む。
JFR APIJava 9でサポートされたので、カスタムのJFRイベントを作れる。新しいイベントもサポート(safepoint/codecache/compiler/G1/moduler)

その他、次のようなものもある。jhsdbって知らなかったのであとでチェックしよう。

  • jcmd
  • jdb
  • jinfo
  • jmap
  • jstack
  • jhsdb - Java HotSpot Debugger

以下のものはJDKには同梱されなくなった。

  • Java VisualVM
  • jhat
  • jsadebugd

Immutable Collections

immutableなcollectionって、本当はこういうものが欲しいけど、今のJava9でもまだちょっと足りないよね。じゃあどうしようか、という話。
まず、Immutable collectionに求めたい要件の提案。

  1. Manifest immutability
  2. Sealed
  3. Provide a bridge to mutable collections
  4. Efficient construction, updates, and copying

Java 9だとunmodifiable collectionsが使えるけど、上の要件は満たしてない。他のフレームワークはどうだろうか。

  • Guava - 1と2はOK。3は無し。4はconstructionとcopyingは一部OKだけどupdatesは無し。
  • Eclipse Collections - 1と3はOK。2と4は無し。
  • Vavr, Clojire, Scala - 全部OK。

Immutable collectionの実装はMapやSet、VectorのPersistent data structureにつながる。Hash Array Mapped Tries(HAMTs)がEfficient persistentのベースになる。ということで、ここから先はこのHAMTsベースのCollectionsを実際に自前で実装してみよう、という話でした。

Modules in One Lesson / Migrating to Modules

Mark ReinholdによるJigsawのセッション。2つとも満席。
MarkがJava 9のModulerの使い方について実際に目の前でデモ。emacsでその場でプログラム書いて、コマンドラインコンパイルしたりjlinkしたりする。目の前でどんどんコード書いて動いていくのは分かりやすくていいんだけど、新しい話はほとんど無かったのは残念。突然SwingSet2を起動して見せたのはちょっと笑った。

JDK 9 Language, Tooling, and Library Features

JDK 9のおさらい。あとで書くかも。

OpenJ9: Under the Hood of the Next Open Source JVM

IBMが開発してEclipse Foundationに寄贈したJavaVM「OpenJ9」の話。
http://www.eclipse.org/openj9/

ランタイム技術はEclipse OMR(とOpenJDK)ベース。つまりJITとかGCなんかの基礎部分はOMRをベースに作られていて、その上に起動の高速化とかメモリ使用量の削減みたいな拡張を加えている感じ。
ちょっと面白そうなので、余力があったら別途まとめたい。

最初の勢いで書いてたら体力がもたないことに気づいたので、尻すぼみですみません。

【JavaOne 2017 初日】Geek Bike Rideに参加してきました

JavaOne 2017に参加するためにサンフランシスコに来ています。

今日はJavaOne Geek Bike Rideという、JavaOneに来てるみんなで自転車でゴールデンゲートブリッジを走ろうぜ、というようなイベントに参加してきました。
JavaOne Geek Bike Ride 2017 - Silicon Valley Java User Group (Mountain View, CA) | Meetup

3つほど丘を登りますが、レンタサイクルでのんびり走る非常にゆるい感じのイベントです。

ちなみに自転車はここで借りました。
マウンテンバイク1dayで40ドル弱。今回のコースくらいなら余裕でした。

自転車を借りたら、こんな感じでゆるゆると集合。
f:id:zinbe:20171001091036j:plain

超快晴。絶好のサイクリング日和。でも風邪がちょっと冷たいです。
f:id:zinbe:20171002014252j:plain

私は例によってJJUG CCCスタッフTシャツを着ていきました着ていきました。右の後ろのが私。
f:id:zinbe:20171002155713j:plain

ゴールデンゲートブリッジの下をくぐって。
f:id:zinbe:20171002020226j:plain

上まで登って、橋を渡って対岸まで行きます。
f:id:zinbe:20171002025010j:plain

対岸から。かなり参加者が多かったので、途中で自然に何グループかに別れて走りました。私は最後のグループ。
f:id:zinbe:20171001111544j:plain

最後にメキシカンレストレンで軽く昼食を食べてから、フェリーに自転車を乗っけて帰りました。
f:id:zinbe:20171002051702j:plain

ものすごい快晴だったので気持ち良かったです。
他の参加者とも、どこから来たの?何回めなの?どんな仕事してるの?みたいなお決まりの会話で交流をしました。
相変わらずのつたない英語でも話に入れてもらえたし、みんなフレンドリーで楽しかったです。

意外と戻るまでに時間がかかって、予定してたセッションのいくつかを見逃したのは誤算でしたが、まあそれでも思い切って参加して良かったです。

8月3日と4日、赤坂アオモリンクが青森ねぶた祭のライブビューイングを開催

東京の赤坂にあるアオモリンクでは、去年に引き続いて今年も青森ねぶた祭のライブビューイング、題して「ネブリックビューイング」を開催するそうです。

今年も開催決定!「ネブリックビューイング 8月3・4日」... - Ao Mo Link〜赤坂〜あおもり地域ビジネス交流センター | Facebook

AoMoLinK~赤坂~では、今年も現地をテレビ会議システムでつなぎ、8月3、4日とライブビューイングを開催します。
観覧無料イベントとなりますが、店内商品をご購入していただきご観覧いただければ幸いです。

開催するのは8月3日(木)と4日(金)の2日間、それぞれ19時からです。
ねぶたの喧騒が伝わる沿道からライブ中継。
青森までは行けないけど大画面でねぶたを観てみたい方、行ってみたいけどその前にどんなものか様子を見ておきたい方、ぜひ仕事帰りに赤坂まで足を運んでみてはいかがでしょうか。

なお、飲食の提供は行わないとのことなのでご注意ください。

広報あおもりの表紙に載った件

青森市が発行している「広報あおもり」の平成29年7月15日号は青森ねぶた祭特集でした。
PDF版が下記リンク先で公開されています。
広報あおもり平成29年7月15日号PDF版/青森市

この表紙の真ん中にいる跳人。
f:id:zinbe:20170801021506j:plain

私ですね。
広報あおもりデビュー!

はい、まあそれだけですが、記念に。

ちなみにこの浴衣と花笠の組み合わせから、たぶん去年の六魂祭のときの写真だと思います。
後ろの跳人の数は合成してだいぶ盛ってますね。ねぶたもおそらく別のときのものです。
ちょっと合成が荒すぎるんじゃないかと思うんですが、まあそんなもんなのかな。

本文は、今年のねぶた祭についての情報とか、跳龍會會頭のインタビューとか、なかなか見応えがありますよ。

棟方志功作「禰舞多運行連々絵」の実物が、棟方志功記念館で展示されるそうです

青森市にある棟方志功記念館が、「禰舞多運行連々絵巻(ねぶたうんこうれんれんえまき)」の実物の展示を実施するそうです。期間は2017年8月1日から8月20日まで。現在は期間は複製を展示中とのことです。

禰舞多運行連々絵巻 | 棟方志功記念館ブログ

夏の展示では、青森のねぶた祭を描いた全長17mにわたる絵巻 ≪禰舞多運行連々絵巻≫を展示しています。

 

禰舞多運行連々絵巻とは

禰舞多運行連々絵巻は、棟方志功氏の晩年の作品で、青森ねぶた祭の運行の様子を描いた全長17メートルにも及ぶ大作です。

「祢舞多運行連々繪巻」という題字に続いて、自身の顔を模した金魚ねぶたや、乱舞する跳人や化人、ねぶた「弁慶と牛若」、それに続く大太鼓と囃子方など、ねぶた祭の熱気がダイナミックに描かれています。

 

記念館によると、17メートルの実物をひとつなぎで見られる機会はなかなかないとのことで、これはぜひ見に行っておくべきでしょう。

全長17m、当館ではひとつなぎで飾れますが(2巻の絵巻で1作品)他館に貸し出してもなかなかこのように見られる機会はないと思います!!
しかしながら現在はレプリカを展示中。8月1日~20日の期間のみ本物の公開となります。(使われている紙と絵具が強くないため。)レプリカと本物の違い、ぜひ確かめてみてください

 

もともとは「別冊太陽」掲載用に描かれた

この作品は、もともとは昭和49年に発行された平凡社「別冊太陽」の棟方志功特集号ために制作されたものです。このときの作品タイトルは、絵巻の中に描かれているのと同じ「祢舞多運行連々繪巻」となっています。

f:id:zinbe:20170729152736j:image

 

f:id:zinbe:20170729151616j:image

 

該当の別冊太陽には、この17メートルの作品が実に59ページにも渡って原寸大で掲載されています。原寸大ですよ。雑誌としてものすごいチャレンジですね。

 

さらに、その中から「弁慶と牛若」の部分と、本人の顔を模した金魚ねぶたの部分を和紙に印刷したものが、付録として付いています。

f:id:zinbe:20170729152758j:plain

 

 この別冊太陽は、ヤフーオークションなどでときどき出品されるので、今でも運が良ければ入手できます。ねぶたファンであればぜひ手元に置いておきたい一冊です。 

 

 

青森ねぶた祭サマーキャンプ場利用上の注意事項の覚え書き 2017年版

これは青森ねぶた祭のサマーキャンプ場についてのエントリーです。
サマーキャンプ場 - 青森ねぶた祭

先に断っておきますが、サマーキャンプ場はもともと規則がどうこうと言うようなおカタイ場所ではありません。しかし来た人に気持ち良く利用してもらうために、また近隣住人の方々に迷惑をかけないように、気をつけてもらいたいことがあります。ここに書くのは、あくまでも私が現場でアナウンスしないといけない内容の覚書きです。初めての方、あまり気にせずに気楽に来てください。

サマーキャンプ場は青森市が設置してくれているものです。上記リンク先に書かれているように、管理人はおらず、利用者同士の自治体制で運営されていて、スムーズな運営のために多少の注意事項があります。

公式サイトに書かれている注意事項は、まとめると次のような感じです。

  • 夜間走行の排気音等の騒音は近隣の迷惑なので、夜間のバイク利用は極力控えてください。
  • 申込は不要で、受付窓口もないので、直接お越しください。
  • このキャンプ場は、毎年利用する人たちのコミュニティによって運営されています。
  • 開設期間は8月1日から8日までです。それ以前・以後は利用できません。
  • 自転車とバイクの駐輪場はキャンプサイト内に、車(四輪)の駐車場は道路を挟んで向かい側にあります。
  • お風呂は無いので、近隣の銭湯などを使ってください。
  • キャンプ用品等の貸し出しはしていないので、各自でご用意ください。
  • 青森ねぶた祭に参加しない方の利用はご遠慮ください。

上記以外に、これまでの経験から伝えている注意事項は以下の通りです。まあ、ほとんど常識的なことばかりだと思います。

  • 飲酒運転は絶対厳禁(発見したらその当日からキャンプ場が閉鎖になります)。
  • 交通ルールは絶対厳守(事故を起こしたら来年からキャンプ場が無くなる覚悟でいてください)。
  • 夜中に騒がないこと。大声、歌、鳴り物等厳禁。
  • キャンプ場内での焚き火や花火等は厳禁です。火の扱いに注意してください。
  • テントは決められたエリアに張ってください(張ってはいけない場所があります。現地にて要確認のこと)。
  • 車、バイクは整理して停めてください。スペースが限られています。
  • 貴重品の管理は自己責任でお願いします。
  • 水の無駄遣いはやめましょう。青森市が水道代を支払ってくれています。
  • ゴミの分別にご協力をお願いします(分別ルールは毎年変わるので、現地で確認してください)。
  • 食中毒に注意しましょう。
  • 荷物を宅配便等で現地宛に発送するのはやめてください。運送会社の営業所留めなどを利用してください。

そのほか、何か分からないことや困ったことがあれば、現場で遠慮なく聞いてください。常連っぽい人を捕まえて聞けば優しく教えてくれるはずです。

なお、8月2日(水)の10:00から開村式を行うので、その時間までにキャンプ場入りしている人は必ず参加してください。

公共交通機関でのキャンプ場までの行き方については下記のエントリーを参照してください。とはいえ、バイクか自転車がベストです。
nebuta.hatenablog.jp

また、キャンプ場の成り立ちについては下記を参照してください。なぜバイクのライダーが中心なのか、なぜ自治体制なのかといった経緯がまとめてあります。
nebuta.hatenablog.jp