JJUG CCC 2017 fall 参加したセッションまとめ #jjug_ccc

これに行ってきた。

www.java-users.jp

 

結果的にroom Mにずっと張り付き。

この部屋は20分セッションが中心。短時間でいろいろと話題が変わって飽きなかった。(個人的にはこっちの方が好みかもしれない。)

 

M1 サーバサイドでの非同期処理で色々試したよ。(#ccc_m1)

https://docs.google.com/presentation/d/1LKcFzspXUQbq-sivRBPb3Q6V7fQBLKB0zH6BSnGrD_I/edit#slide=id.p

 

リクエスト受付~レスポンス返却 までの流れをすべて非同期化した、という内容。DBアクセス回りを非同期化だけは想像できていたけど、レスポンスを返す部分までも非同期化。

非同期化が名目なので、Future#getを使っていたらマージを拒否するなど、やるなら徹底的に。本当に非同期化できている(かつちゃんと動く)かのコードレビューが超大変そう。。

Daggerを使うことである程度見通し良くできるらしいけど再利用性が低いので、今後はRxJava2を使ってみるらしい。おすすめしていた本↓

Reactive Programming with RxJava - O'Reilly Media

shop.oreilly.com

 

M2 ユニットテストアサーション 流れるようなインターフェースのAssertJを添えて 入門者仕立て (#ccc_m2)

https://www.slideshare.net/RyosukeUchitate/assertj-82260732

 

テスティングフレームワークJUnitよりもいろいろカスタマイズできそうなAssertJの紹介。JDK8を使う場合はAssertJ Core3を使用する。

単一オブジェクトへの検証メソッドは微妙だったけど、コレクションへのそれは割と便利そうな印象。softAssertion、カスタムアサーションなども面白そう。

 

M4 DDD × CQRS - コマンドとクエリでORMを使い分けた話 (#ccc_m4)

https://www.slideshare.net/koichiromatsuoka/ddd-x-cqrs-orm

CQRSなどの詳しい説明は下のリンクから。(講演者のページ)

JJUG2017fall 資料リンク集 - little hands' lab

 

データストアに対するRead/Writeで求める要件が違うから、対応するモデルも別にしよう、という当たり前の発想。確かにそうだよなぁ。

潜在的に1つのORMしか使ってはいけないと思ってしまっていた気がする。

対応する読み書きモデルが変わるから異なるORM使っても問題ないし、
リードレプリカなどの読み書きで異なるデータストアへのアクセスまで考慮するとそっちの方が良いなのかもしれない。

 

M5 劇的改善 CI4時間から5分へ 〜私がやった10のこと〜 (#ccc_m5)

https://www.slideshare.net/aha_oretama/ci-82258405

 

CIシステム(?)の作り自体を変えたのではなく、テストをより効率的に実施できるようにしたという話が中心だった。とはいえ

CIを回すには自動化されたテストが必須 ->テストに時間がかかるとCIのサイクルを何度も回せない ->だったらテストを効率的に!

なので考えれば当然かもしれない。

Googleの提唱するテストサイズというのも初めて知った。

Google Testing Blog: Test Sizes

JUnitの@Categoryアノテーション。恥ずかしながら初見だった。。テストケースに付与することでmavenなどで特定のテストを起動できるように。

 

M6 Docker ではじめる Java EE アプリケーション開発 (#ccc_m6)

https://www.slideshare.net/KoheiSaito2/docker-java-ee-for-jjug-ccc-2017/1

 

最近Dockerは一から勉強しなきゃと思っていたのでタイムリーなセッション。yamlファイルとDockerファイルがあれば手軽に環境作れるってのはやはり大きい。

なお、このセッションは講演者がとても可哀そうだった。。。せめて講演者には安定したネットワーク環境を提供してもらえればなぁという気がした。

 

M7 Stream API の代わりにEclipse Collections を使ってみた話 (#ccc_m7)

http://slides.com/nashcft/jjug_ccc_2017_fall#/

Goldman Sachs の開発した GS Collectionsがベースとなったコレクション。Java SE8のStream APIと比較しての説明だったのでとても分かりやすかった。

同じような動きなのにメソッド名の異なっている理由もプチネタとして知れて良かった。とはいえ正直言うと説明を聞きながら手を動かしたかったセッションw

GitHub - eclipse/eclipse-collections-kata: Collections Kata

 

M8 速いソートアルゴリズムを書こう!! (#ccc_m8)

https://www.slideshare.net/masakazumatsubara1/ss-82272241/masakazumatsubara1/ss-82272241

 

その名の通り高速なソートアルゴリズムを作ってみたというセッション。Arrays#sortよりも高速なものを作り上げていた。

https://github.com/m-matsubara/sort

特に Dual-pivot stable Quick sort(mmsSort)がとても面白かった。CPUキャッシュまでも利用するとは。。3way Marge Sortは…よく作れたなぁと、とても感心してしまった。作れる気がしないw

 

M9 Design Pattern in Presto source code (#ccc_m9)

※スライド見つからず

 

PrestoというOSSソースコードにたくさんのDPが使われているよというお話。

https://prestodb.io/

BuilderやSingletonなど様々なものが使われている中で、このセッションではTemplateとVisitorについて言及していた。

(Templateは処理の大枠と処理の詳細を分離し、処理の詳細だけを追加しやすくなる、Visitorはあるデータ構造に対する処理を別クラスに分離し拡張しやすくする )

Visitorは個人的には結構難しい。もう一回DP本見直してみよう。

 

M10 Javaで使えるもう一つのコンパイル方式 -AOT (#ccc_m10)

https://www.slideshare.net/akihironishikawa/another-compilation-method-in-java-aot-ahead-of-time-compilation-82258865

 

JavaSE9からJIT(Just in Time)だけでなくAOT(Ahead of Time)形式のコンパイルができるように。JITに比べて立ち上げ時間を短縮できる。javac ではなく jaotc コマンド。.soファイルが出力される。(.classファイルの代わり) 

AWS Lambdaなど使うときには有効になるかも、と言っていたがまだAWS LambdaはJava SE8までの対応なので検証はまだ先。

現在は実験段階。ノーサポート、ドキュメント。linux x64 parallel or g1 gc だけなど。

 

M11 DBのTCPプロトコルJDBC (#ccc_m11)

https://docs.google.com/presentation/d/1xSwS73_iTPyMKdtXUUiwawJ05XaS-gFRkOeYLgu8mLI/edit#slide=id.g2a927d1286_0_17

 

講演者も話していたが開発業務にはまったく関係がない内容w

JDBCが色々とラッピングしてくれてホント助かるなぁというのが良く分かる内容だった。PostgreSQL/MySQLのパケット構造がまったく違うことも、なるほどという感じ。

そしてこのセッションでもJDBCの非同期APIについての言及が。今後はちゃんと見ておかないといけないかなぁ。。

 

まとめ

Springはいかなかったので1年ぶりの参加。Javaだけでなく周辺知識も一緒に手に入るのでとても勉強になるなぁと実感。

講演者の皆様お疲れさまでした!