Panama(Vector API)をWindowsでビルドする

Vector APIWindowsで試そうと思ったのだけど、やっぱりビルドでひっかかった。
ということで、対処法

ml64がみつからないというエラーが出るので、アセンブラとしてml64.exeを設定する。

export AS=/mnt/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/ml64.exe

Vector APIvectorIntrinsicsというブランチで開発されているので、ブランチの変更も必要です。
また、C/C++コンパイラも指定しておく必要があります。
なので、全体としてはこんな感じになります。

$ git clone https://github.com/openjdk/panama
$ git checkout vectorIntrinsics
$ export CC=/mnt/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe 
$ export CXX=/mnt/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe 
$ export AS=/mnt/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/ml64.exe
$ bash configure --with-boot-jdk=/mnt/c/Users/naoki/java/jdk/jdk-13.0.1 --disable-hotspot-gtest                            
$ make images

試しにこんなサンプルを動かしてみます。
gist.github.com

こんな感じ

C:\Users\naoki\java\jdk\source\vector>bin\java --add-modules jdk.incubator.vector Main.java
WARNING: Using incubator modules: jdk.incubator.vector
警告:実験的なモジュールを使用しています: jdk.incubator.vector
警告1個
55617100
60240500

JITが優秀すぎてAVX256ではおいつけてない感じ・・・

2019年に買ってよかったもの

ことし買ってよかったものふたつ

ウォシュレット

まずひとつめ
まちがいなくウォシュレット。

うちにはウォシュレットついてなくて、業者呼んでつけてもらうとかもめんどくて先延ばしになってたのだけど、BuriKaigi 2019で富山に行った帰りにメシ食いにヨドバシ行ったとき、ふと自分でつければいいのではと衝動買いしてもってかえって設置して便利だった。
もっと早く導入すればよかった。

Androidタブレット

ふたつめ
安いAndroidタブレット

ふと買ってみたら、YouTubeみる用にめちゃよくって、とくにJVMLSとかDevoxxとかでビデオみながらブログ書くのに便利だった。
あと、メインPCのテレビチューナーを使ってどこでもテレビ見れるようになったのも便利。

まとめ

今年はコストパフォーマンスよく便利になった。

WindowsでのOpenJDKビルドでmspdbcore.dllがみつからないときの対処

WSLを使ってWindows版のOpenJDKをビルドできるということだったので、ずっと試してた。
Windows Subsystem for Linux を使って OpenJDK をビルド - #chiroito ’s blog

けど、configureでcがコンパイルできるか試すところで止まってしまう。
config.logを見ると、どうも

c1: fatal error C1356: mspdbcore.dll を見つけることができません

というエラーが出ている。

VC++のbin/Hostx86/x64/cl.exeというのを使っているのだけど、Hostx86/x64にはmspdbcore.dllがない。一方でHostx86/x86やHostx64/x64にはmspdbcore.dllがあって、コマンドラインで試したところこちらではコンパイルが通る。

ということで、強制的にHostx64/x64のほうのcl.exeを使うようにしてみたらビルドが通った。

$ export CC=/mnt/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe 
$ export CXX=/mnt/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe 
$ bash configure --with-boot-jdk=/mnt/c/Users/naoki/java/jdk/jdk-13.0.1 --disable-hotspot-gtest                            
$ make images

無事recordもうごいてる f:id:nowokay:20191208074736p:plain

Devoxx Belgium 2019 - Day 4

LINEでは年に1回の海外カンファレンス補助があるので、ベルギーのDevoxxに来てます。

今日はConference Daysの2日目。しかし寝坊・・・
ところで会場の向こうには風力発電が見えます。
f:id:nowokay:20191108093958j:plain

今日聞いたセッションはこんな感じ。Ask the Java Architectが一番おもしろかった。

Optimizing the Performance of Machine Learning in Enterprise Java SaaS with GraalVM, Python and CUDA

GraalVMといってもNative Imageは関係なくて、PythonなどTruffleベースの言語からCUDAが使えるようにするという話です。
f:id:nowokay:20191108101255j:plain

grCUDAという、Truffleベースの言語からCUDAが使える仕組みをNVIDIAとGraalVMチームが一緒に開発しているらしく、そうするといろんな言語から同じようにCUDAが使えるというのを目指してるっぽい。
これは楽しそう。
f:id:nowokay:20191108102159j:plain

あと、なんかNetSuiteというのを紹介してたけどなんだったんだろう?ERPパッケージらしい

The past, present and future of the Java type system

Javaの型を紹介するショートセッション
f:id:nowokay:20191108102615j:plain

Oakからenumジェネリクス、Lambda、varなど型の扱いの拡張の歴史を紹介して、Valhallaのinline classやAmberのrecordにつなげるというセッションでした。

Ask the Java Architect

Javaアーキテクトに話を聞いてみようというセッション
f:id:nowokay:20191108104420j:plain

主にBrian Goetzが話をしていました。
会場での質問や、Twitterで #askarch タグをつけた質問に答えるセッションです。 とりあえず、話題にでたもののまとめ

  • Alpine Linux対応について。Project Portola
  • 検査例外について。検査例外自体は失敗ではなく、その使い方に問題があったという話。
  • Deprecationについて。LinkedListをDeprecatedにする?という冗談が共通の話題っぽい
  • Project Loom。非同期はデバッグとかプロファイルとか大変
    構造化並列という新しいプログラムモデルが導入できるとか言ってたかな。
  • GraalVM native imageについて
  • 14で正式化されるswitch式について。13と一緒
  • 3項演算子の話?(ternary operatorと聞こえた)
  • Reflection。Valhallaで変える必要がある?specialized genericsとか。
  • モジュールシステム。Genericsが最初は複雑といわれてたけど今は当たり前になっていて、そんな感じで時間がたつと当たり前になるんでは
    JDK自身については絶対に必要

ぼくも質問してみました。

ちゃんと答えてもらえて、エスケープシーケンスや改行の扱いなどで再考する必要があるということでした。
そこからPreview featureの話になって、6ヶ月だけのpreview期間はフィードバックを集めて作業するのに必ずしも十分ではないという話をしていました。
それから、ぜひフィードバックをくれ、と。
フィードバックについては、ドキュメントをちょっと眺めて文句をつけるんではなくて、使ってみてどういう場合にどういう不具合があったかという形で報告してもらえると役立つとのこと。

Java. Migrating to 11 in real app

Java 11への移行のやりかたについて f:id:nowokay:20191108110254j:plain

リリースサイクルの変更やライセンスの変更の話をしていたのだけど、Repeat after me・・・Java・・・Eleven・・is NOT・・・PAIDってみんなやってたのおもしろかった。
f:id:nowokay:20191108110343j:plain

Bootiful Kotlin

おもしろプレゼンをするJosh Longさんです。
f:id:nowokay:20191108110519j:plain

会場のみんながたぶん(cがかぶってる・・・)ってつっこんでたと思うんだけど
f:id:nowokay:20191108110609j:plain

流れでカーソルを先頭にもっていったときに何事もなかったかのようにc消してて、すげー場慣れしてるなーと思いました。
f:id:nowokay:20191108110629j:plain

おもしろかった。

Java Packaging Tool: Create Native Packages to Deploy Java Applications

インストーラーを作るツールの話
f:id:nowokay:20191108111027j:plain

14以降でIncubatorとして入って、16で正式版になるだろうとのこと。
コマンドライン引数やAPIは確定ではないので、たくさんフィードバックが欲しいらしいです。
f:id:nowokay:20191108110944j:plain

帰りの電車とアントワープ

帰りは電車で 。 f:id:nowokay:20191108094035j:plain

アントワープ駅につくのだけど、めちゃかっこいいです。プラットフォームは4階層あるのかな。
f:id:nowokay:20191108094141j:plain

プラットフォームから外にでてもかっこいい
f:id:nowokay:20191108094236j:plain

今日のビール

結局ホテルの近くでごはん食べつつビール飲めるところというと、Bier Central一択みたいな感じでした。
まずLambicus Blanche Timmermans
ランビックでありブランシェ。すっぱくてさわやか。
f:id:nowokay:20191108095353j:plain

そしてDelirium Tremens
f:id:nowokay:20191108095440j:plain

それと、ハンバーガー食べました。 いままで食べたことがあるハンバーガーで一番おいしい。そこらで食べるパンがすごくおいしいし、チーズもおいしいし、そうするとハンバーガーもおいしいって感じです。
f:id:nowokay:20191108095520j:plain

最後はBlanche de Bruxelles
日本で飲んだのよりホップの味がする気が。
f:id:nowokay:20191108095704j:plain

そして、今日はちゃんとノンアルのヒューガルデンを買って帰りました。
f:id:nowokay:20191108095808j:plain

おやすみなさい

聞きたかったけど聞いてないセッション

Why We Hate Java Serialization And What We're Doing About It
Brianのセッションは、寝坊で・・・
Javaシリアライズについて問題意識があって、改善していくって話のようです。
http://cr.openjdk.java.net/~briangoetz/amber/serialization.html

Beyond Jakarta EE 8, by and for the Jakarta community

Back to the Future: How 80s Arcade Games Taught me Clojure
ハイヒールのヒールがかわいすぎる

Play an acoustic guitar with a Raspberry Pi

How to Build A Decompiler

Devoxx Belgium 2019 - Day 3

LINEでは年に1回の海外カンファレンス補助があるので、ベルギーのDevoxxに来てます。

DevoxxはヨーロッパのJavaコミュニティで、ロンドンやパリなど各地でカンファレンスを行なっていますが、ベルギーが最大です。
毎年、Javaのびっくり発表がDevoxx Belgiumというイベントであるというのを認識していて気になっていたのですが、今回初めて来てみました。

今日はConference Daysの初日でキーノートから始まりました。
https://devoxx.be/wednesday-schedule/

今日聞いたのはキーノートの他に次のセッションですが、Spring BootをGraalVM Native Imageで動かすセッションが一番おもしろかったです。

KeyNote

Conference Daysの初日ということで、キーノートから始まります。
キーノートは3つのセッションにわかれていました。
ところでDevoxx Belgiumは映画館で行われていて、各部屋300-500人くらい入る感じですが、キーノートで一気に数千人入るような部屋はありません。なので、一番大きい部屋でキーノートが行われて他の部屋に配信される感じになっています。
この部屋には話してる人いませんね。
f:id:nowokay:20191107104927j:plain

この部屋にいました。
f:id:nowokay:20191107105527j:plain

Welcome to Devoxx: practical info

最初のキーノートはDevoxxについての説明です。
Devoxxはヨーロッパを中心に活動するコミュニティで、年間21のイベントをやっていて、先週がウクライナで来週がモロッコらしい。
その中でも最大なのがこのベルギーで、今年は3300人の登録とのこと。去年3500人でめっちゃ混んでたから3300人で打ち止めたということらしい。
そして去年は4ヶ月でsold outだったのが、今年は10日でsold outだったとか。来年はもっと早くなる気がする。
抽選にするかどうかということを話していました。

The Hitchhiker’s Guide to Diversity (Don't panic!)

2番目のセッションはダイバーシティについて。
なのですが、途中で配信が切れてしまった・・・
f:id:nowokay:20191107102256j:plain

「ゴスリンが話してくれたんだけどつないだ瞬間切れた」とか冗談を言ってましたが、4K対応したら電源が追いつかなくて落ちたということらしい。

Qualities of a Highly Effective Architect

よいアーキテクトがどうのというセッション。
パワポアーキテクトになってはいけない、という言葉が印象的
f:id:nowokay:20191107105607j:plain

Abstractions Without Regret with GraalVM

GraalVMのセッション。
だけどやはりNative Imageが中心になりますね。

今月出る19.3でJava 11をサポートするそうな。
f:id:nowokay:20191107110253j:plain

あとのSpringのセッションのほうが知らない情報でてたな。

Developing Java applications leveraging the Quantum Internet

JavaFXがんばってるJohan Vosさんの量子通信の話。 f:id:nowokay:20191107110931j:plain

途中で覗き見とかが難しいのでセキュアだと。
SuperpositionとかEntanglementとか量子の話をしたあと、スイッチとか入れるの難しいよねという話をして、ただスイッチ作れれば通信ができていいってことを話してました。
f:id:nowokay:20191107110759j:plain

そして、Javaでつくってる量子コンピュータシミュレータの紹介。
https://github.com/gluonhq/strange

Implementing a Simple JVM in Rust

RustでJVMを実装する話
f:id:nowokay:20191107111010j:plain

GCは実装してないということなので、unit256_tさんがRustで作ったJVMのほうがGCJITもあって実装が進んでますね。

会場への問いかけで、Rust使ってる人という質問には1/4くらいが手をあげてたのだけど、Rustをプロダクトで使ってる人という質問はだれも手をあげなかった。まあJavaイベントだからね。

簡単な実装をする上でのJVMのだいたいの仕組みというのがわかりやすくてよかった。
f:id:nowokay:20191107111239j:plain

あとはRustでの実装の説明 f:id:nowokay:20191107111355j:plain

Running Spring Boot applications as GraalVM native images

SpringをGraalVM Native Imageで動かす話
f:id:nowokay:20191107111701j:plain

Java Buildpack Memory Calculatorというのを紹介していました。メモリ使用量やクラス数から最適なオプションを計算してくれるユーティリティなのかな。
https://github.com/cloudfoundry/java-buildpack-memory-calculator
f:id:nowokay:20191107112021j:plain

Parallel GCはGraalVM EEに入るとか。
f:id:nowokay:20191107112545j:plain

Native Imageに必要な設定などはSpring Graal Nativeを見ればいいぽい
https://github.com/spring-projects-experimental/spring-graal-native

Spring Boot 2.2ではCGLIBやProxyを使わないようにできるので、native imageに優しくなっているらしい。すごい。
f:id:nowokay:20191107112748j:plain

あと、AOT用の工夫はJITでも有効だと言ってました。
相当がんばっとるな。
GraalVMチームと協力して開発をすすめているらしい。

Understanding Low Latency JVM GCs

G1GC、Shenandoah、ZGC、C4の説明のセッション。
f:id:nowokay:20191107113132j:plain

GCの使い分けのまとめ。しかし、ZGCはWindows対応するっぽいので、Windowsならってとこは変わりそう。
f:id:nowokay:20191107113455j:plain

しかし、話とともにちょっとずつ資料を表示するスタイルで疲れた・・・
GC使い分けとか、ちょっとずつ出されても・・・みたいな。

Evolving Java for the Serverless Era with Micronaut

Micronautのセッションなんだけど、初日に聞いたセッションの一部ぽいので途中退出。
f:id:nowokay:20191107113742j:plain

What's coming in Scala 3

ということでScala 3のセッションに。
f:id:nowokay:20191107113845j:plain

Scalaようわからんけど、楽しそうでした。

Meet & Greet in exhibition floor until 20h30

今日は会場でビールがでました。
ブロンド系なんだけど、銘柄まではわからず。ベルギービールを当てるのは種類が多すぎるし日本で飲みにくいものも多いので相当難しい・・・
f:id:nowokay:20191107113946j:plain

今日のビール

で、ホテルに戻って、気になっていたDuvelの看板がでている店に。
f:id:nowokay:20191107114330j:plain

ボトルかよ、という気持ちw
f:id:nowokay:20191107114242j:plain

そして、料理もない店でした。。。まあ4Eurでお釣りが来るくらい安くていいのだけど。ビールだけ出て料理は出ない店が結構多いふいんき

いつもどおりノンアルヒューガルデンを買って・・・と思ったら、ふつうのヒューガルデンだった。
f:id:nowokay:20191107114947j:plain

夜のアントワープ駅もきれい。
f:id:nowokay:20191107114621j:plain

聞かなかったセッション

ついでに、聞きたいけど裏番組だったりで聞かなかったのをまとめておきます。
Project Loom: Helping Write Concurrent Applications on the Java Platform

Quarkus why, how and what by Emmanuel Bernard

Java on ARM Theory, Applications and Workloads

Your Program as a Transpiler: Applying Compiler Design to Everyday Programming

Devoxx Belgium 2019 - Day 2

LINEでは年に1回の海外カンファレンス参加補助があるので、ベルギーのDevoxxに来ています。
(夏のJVMLSは自費です)

Devoxxは月・火のDeep Dive Daysとと水・木・金のConference Daysにわかれていて、今日はDeep Dive Daysの2日目です。
https://devoxx.be/tuesday-schedule/

会場はKinepolisという映画館
f:id:nowokay:20191106093910j:plain

映画館だけあって、スクリーンはでかいし席はすわりごこちいいし後ろの席からも見やすいです。

Solving Memory Leaks in the JVM

Kirkさんのセッションです。Deep Diveということで、3時間のコマです。
https://devoxx.be/talk/?id=109305 f:id:nowokay:20191106101215j:plain

セッションとしては、VIsualVMやjClarity、jcmd、jmapを使ってメモリリークを探す説明でした。
f:id:nowokay:20191106101416j:plain

しかしながら、英語がよく聞き取れなかったり説明をききのがしてたりで、なんのためにそのコマンドでオブジェクトがたくさん使われてるか発見するのかというのがよくわからなかった・・・
YouTubeでは字幕もつくので、見直すといいんではなかろうか・・・

Migrating AWS Lambda's frontend from Java 8 to 11

もとのタイトルは「Learnings from migrating a production service from JDK8 to JDK 11」でしたが、プレゼンタイトルではLambda FrontendのMigrationということになっていました。
https://devoxx.be/talk/?id=106451
f:id:nowokay:20191106102039j:plain

それでLambdaの説明が始まると出ていく人が結構いましたが、Lambda上で動かすコードをMigrateするのではなくて、Lambda自体の認証などを行うフロントエンド部分をMigrateしたという話で、おもしろかったです。

Java 8からJava 11でパフォーマンスにインパクトがあったのはG1GCがデフォルトになったこととCompact Stringだとのこと。
f:id:nowokay:20191106095653j:plain
あと、-XX:+UseStringDeduplicationで文字列の重複をなくすとメモリ利用が80%へったけどGC停止時間は増えたと。結局これどうしたんだろう?ライブラリ中の文字列重複を省いていったのかな。

デプロイは小さなリージョンから大きなリージョンへ。
f:id:nowokay:20191106095008j:plain

結果としてGC停止時間はかなり減っています。
f:id:nowokay:20191106095937j:plain

あと、レイテンシーが99パーセンタイルだと20%減って、99.99パーセンタイルだと33%減った、と。
f:id:nowokay:20191106095847j:plain

総じて、バグはなくパフォーマンスもよくなってよかった、という話でした。

GraalVM native images explained

Olegさんの、GraalVM native imageのセッション。身振り大きく説明していて、楽しかった。
https://devoxx.be/talk/?id=104405
f:id:nowokay:20191106102128j:plain

とりあえず前提として、native imageによるAOTと通常のJVMでのJITでこういう違いがあるよ、という話。
f:id:nowokay:20191106103433j:plain

クラスひとつでどれだけコンパイル時間がかかるんだ、ってことに関しては、システムクラスがたくさん使われているという話なのだけど、それを説明するために利用しているクラスを全部可視化するというのをやっていて、これすごく興味ある。
f:id:nowokay:20191106102250j:plain

あと、リフレクション使ってるコードに対してnative-image-agentを使って自動的に利用クラスの設定ファイルを出力するというデモをやっていました。
こんな感じで入力されたメソッドを呼び出すデモ。
f:id:nowokay:20191106103400j:plain

普通にnative imageを作るとうまく実行されないので、設定ファイルが必要なのでJava Agentを使うと。
f:id:nowokay:20191106102643j:plain

こんなJSONができています。

[
{
  "name":"HelloReflection",
  "methods":[{"name":"foo","parameterTypes":[] }]
}
]

あと、プログラムから読み込むリソースファイルなどは設定を書いておく必要があるけどMicronautとかは あらかじめ書いていてくれるよ、という話。
f:id:nowokay:20191106102920j:plain

最終的にはJITのいいところも取り込まれればいいよね、ってことでした。
f:id:nowokay:20191106103613j:plain

Choosing a JDK: Ask the Distributors

JDKバイナリ配布する人にいろいろ聞いてみよう、というBOFです。 https://devoxx.be/talk/?id=21103
f:id:nowokay:20191106103824j:plain

まんなかにいるAzulのSimon Ritterさんによる進行で、右はBellSoftのLibericaの人。左のひとはだれだったかよくわからない・・・
あと、プロジェクタの左側にSAP Machineの人が座っていました。
そんな感じで、JDKのバイナリ配布をしてる人たちがいろいろ話すBOFでした。

JavaLinuxみたいにいろいろなディストリビューションがあるんだという話。

Javaが動くVMの一覧。
f:id:nowokay:20191106103817j:plain

BOFにしては人が多くて50人くらい入っていました。 いろいろ挙手があったのだけど、Oracle JDKを使ってる人という質問には半分以上が手をあげていた。
Java 8を使ってる人がほとんどで、Java 11が1/4、13を使ってる人も少し、という感じ。
Intel CPUがほとんどで、ARM使ってる人が2人かな。
あと、Dockerで動かしてる人が1/3くらいいて、その半分はKubernetes

OpenJDKのDocker Imageを使ってる人という質問に手をあげる人はだれもいなくて、ダウンロードはたくさんあるので木になるとSimonさんは言ってた。

Dockerの話になったのは、Docker Imageを提供しないのかという質問をした人がいたからで、その人は最小のイメージが欲しいといっていたので、Libericaの人がAlpineを使えと切ってすてていた。そういえばLibericaの人は(Project Portola)https://openjdk.java.net/projects/portola/やってる人だったな。

サポートはどういう風にやっているかという質問があって、パッチについて - A: OpenJDKに還元する。変更は他のディストリビューションにも広まる - B: OpenJDKに提供しない

という選択肢があるし、お金払ってサポートするのだからBのほうがいいかもしれないけど、コミュニティに情報を共有するほうがいい、って言ってた気がする。

Oracle JDKとOpenJDKの違いについて、会場の人がJavaFXは入ってないしJava SEでもない、どこもJavaFXを入れていないということを言う人がいたんだけど、前にいるSimonさんとLibericaの人が「We do!!!」って手をあげたのがおもしろかった。

終了

電車で帰ります。
f:id:nowokay:20191106110914j:plain

今日のベルギービールはPrimus。
f:id:nowokay:20191106110901j:plain

まあ、普通のピルスナーなんで、ベルギーまで来て飲むほどのものではないけど、他の店が閉まっていたので・・・
BOFまで聞いて帰ると21時とかで店がしまっていて選択肢がなくなるのがつらい。
でもBier Centralでハンバーガーのほうがよかったかな。

今日もノンアルのヒューガルデンを買って帰ったのだけど、お店のおにいさんに「お前は酒飲みに見えるのになんでノンアルを買うんだ!」と聞かれました。
日本から来て、これは日本で売ってないというと、日本の酒はニッカとかヤマサキとかウイスキーが好きだと言っていました。
f:id:nowokay:20191106110838j:plain

ということで、明日からはConference Daysです。おやすみなさい。

エンジニアHubのインタビュー記事がでました

エンジニアHubのインタビュー記事が出ました。
employment.en-japan.com

インタビューの前に質問集をもらったんですけど、この質問がよくできていて、そのまま記事にしてもいいのではーと思うくらいの内容でした。

記事中で触れてる無設定Strutsは このあたりですね。もうソースとかはリンク切れだけど。
無設定Strutsできました - きしだのHatena

よく見ると、S2Strutsにそのまま無設定Strutsという機能名で入っていた。
http://s2struts.seasar.org/ja/1.3/zeroconfig.html