Javaのコミュニティカンファレンスに参加してきたのでメモを投稿。ちゃんとまとめるつもりはあまりないけど、あとで公開されたスライドへのリンクも追加する。
JJUG CCC 2015 Fall
http://www.java-users.jp/?page_id=2056
10:00-11:00
#ccc_keynote1
Kids are Future.
Javaを子供向けに教える。教育に利用する。
そろそろ他の言語に行こうと思っていたが、やっぱりJavaから離れられなかった。
Spring Boot
11:00-12:00
#ccc_keynote2
進捗がいいもの
WEB層の拡張 (HTML5 Support/ Web Tier Enhancements)
JSON Binding (JSONB)
JSON Processing (JSON-P) enhancements
Server-sent events (SSE)
Action-based MVC
HTTP/2 support
Survey: https://blogs.oracle.com/ldemichiel/entry/results_from_the_java_ee
JSON-P 1.1
JsonPointer…JSONの要素へのポインタオブジェクト
immutableになってる
SSE
JAX-RSを活用していく
ストリームを使う例
@Produces("text/event-stream")
MVC
Java EE 8ではAction-based MVCを提供する (Struts2やSpringのようなアプリケーションでコントローラを実装するMVC)
今まで通りJSFのようなComponent-based MVCも提供し続ける
Model層、View層は既存の資産を利用すれば良いが、Controller層については議論された。結局JAX-RSを使うことになり、それがいい方法であった。
Controller用の新しいアノテーション
@Controller…メソッドに付与してコントローラであることをフレームワークに知らせる
HTTP/2サポート
Servlet 4.0による
ほとんどの開発者にとっては今まで通りの使い方でHTTP/2対応ができる
感想
早くJava EE 8出てほしい。
13:00-13:50
#ccc_ab1
DBスキーマのバージョン管理
チーム開発実践入門にも書かれてる
Flyway…DBマイグレーションツール
mavenやgradleでビルドできるようにするといい
ファイル名のバージョンは連番ではなくタイムスタンプにすると良い
マージしたときに衝突しない
outOfOrderオプションを使うことで過去のバージョンも適用できる
JOOQ
すでに存在するDBを重視
ドキュメントやチュートリアル、サンプルコードが充実している
fetch()から結果をCSV, XML, HTML, FormatedText フォーマットで出力が可能
感想
JOOQ便利そうだし可読性もすごくいいけど、JPAにあるようなentity cacheやprepared statement cacheの機能があるのかどうか。
またJPAでも、Criteria APIの可読性が低いと思ったらJPQLを使えば良いのでは。要調査。
回答を発表者から頂けた。
14:00-14:50
#ccc_ef2
データを2回以上参照するなら、キャッシュを使う
データベースアクセスだけでなく、データの生成など
アムダールの法則 (amdahl's law)
Cache効率(キャッシュのヒット率)
何をキャッシュにつめるか
参照データ(郵便番号など)
長期間存在するデータ
よく使われるデータ
よく変化するデータについては考慮する
メソッド
get, put, putAndGet
JSR107 annotations
感想
JCacheのセッションすごく面白かった。キャッシュのイントロダクションが長かったかも。通訳しながらなので仕方ないけど、JCacheの設計方針や実装についてもっと詳しく話を聞きたかった。
15:00-15:50
#ccc_gh3
時代の変化
メインフレーム→クラサバ→ウェブ
クラウドの時代(過渡期)
サーバーの処理能力が超巨大化
巨大なサービスをどのように変化させていくか
カナリアリリース(ブルー・グリーンデプロイ)
新バージョンをリリースして稼働させたサーバー群に、全体のアクセスのうち少量だけ流すことで、システム全体を停止することなくリリース時の不具合を検知することが出来る
ダークカナリアリリース (test-in-prod)
LBから新バージョンにアクセスできるのは開発者のみ
モチベーション:ステージングではなく本番でテストしたい
→連携するシステムとの整合性が取れているかは本番環境でなければわからない
Chaos Monkey
Netflixの事例
巨大なサービスをいかに管理するか
→マイクロサービスアーキテクチャ (MSA) に分割
広義には、粒度ではなく関係性に注目を
重要なのはサービス相互の関係性のあり方
- 複雑なものを、いかに管理するのか
巨大なサービスはトップダウンに管理できない
技術面:分散配置と統合
組織面:持続性と分権
ボトムアップでもうまくいかない
あるルールのもとで多様性を保証する
→プラットフォームを利用する
サービスの分割
モジュール分割の基本は「時間軸の中で変化するスピードの違いの境目」で切る
プラットフォームとは
巨大なサービスを管理するための基盤
16:00-16:50
#ccc_gh4
スライド:http://www.goldmansachs.com/gs-collections/documents/2015-11-28_JJUG_CCC.pdf
JavaOne 2014で発表して以降、人気急上昇中
開発者としてはかなり自信があり、Java標準のコレクションに採用されても遜色がないと考えている
ファクトリーメソッドが用意されてる mutable/immutable
より簡潔に書ける
より多くのケースでメソッド参照を活用できる
より高い可読性で記述できる
再利用が可能
メモリ効率が良い
SortedBag
キーに対して、キーのaddされた回数を保持する
shuffleThis
リストの要素の順番をランダムに入れ替える
zip
リストとリストを組み合わせてペアのリストにする
chunk
コレクションの分割処理
集合演算
intersect, union, difference, symmetricDifference (XOR)
CharAdapter
文字列のコレクションから、数字のみ抽出して別の文字列コレクション
GS Collections Kata
https://github.com/goldmansachs/gs-collections-kata
ユニットテストをひとつずつパスしていくTDD型トレーニングマテリアル
感想
GuavaやApache Commonsのコレクションで良くない?って思ってたけど、Eclipse Collection使おうと思えた。すごい。
17:00-17:50
#ccc_ef5
処理を早くするには
並列度を上げる
より近いところにデータを置く(キャッシュ)
データ・セントリック・システム
データの近くで処理(Hadoop等)
ノイマン型アーキテクチャ
CPU…OSが実行できる
GPU
非ノイマン型アーキテクチャ
ノイマン型じゃない
FPGA, ニューラルネット型コンピュータ、量子コンピュータ
2,3つ目は今のところプログラム可能ではない
FPGA
命令をメモリから読み込む必要がない
データを流すだけで回路が処理をしてくれる
JavaでCPU
Streamで並列処理
JavaでGPU
Aparapi…JavaコードをOpenCLに変換・楽だがGPUの性能を出しにくい
OpenCL…JOCLとかある・ちょっと面倒だけどGPUの性能を出せる
Project Sumatra…Stream処理を自動的にGPUで行う(今年5月で開発終了)
ディープラーニングで処理が速くなる
JavaでFPGA
Synthesijer…FPGA用のコードを自動生成してくれる
今のままのJavaで足りるのか
オブジェクトのメモリ効率が悪い
さまざまなアーキテクチャに対応した値が扱えない
- 256bit整数型、floatx4型(SIMD命令用)
高機能データ構造がメモリにやさしくない
- Genericsが基本型を扱えない
配列がハードウェアにやさしくない
ハードウェアに近付く (Close to the Metal)
sun.misc.Unsafe
並列化プリミティブとかシリアライズとかメモリ管理とかJVMとのやりとりができる
Cassandra, Ehcache, HBase, Hadoop, Hibernate, JRuby, Netty等の製品が使ってる
Java9でメンテナンス停止(仕様凍結)
Java $N-1で完全置き換え、Deprecate
Java $Nで廃止
Unsafeの代替は仕様策定中
Project Valhalla
ユーザー定義基本型
ValueType…nullを持たず、参照ではなくデータを格納する
ハードウェアに近いコードが書けるようになっていく
コンピュータは変わる
Javaも変わる
あなたは?
JJUG CCC 2015 Fall
http://www.java-users.jp/?page_id=2056
keynote-1 基調講演1 : Javaは守りに入らない、これが今のJavaだ
by 谷本 心(日本Javaユーザーグループ)10:00-11:00
#ccc_keynote1
Kids are Future.
Javaを子供向けに教える。教育に利用する。
そろそろ他の言語に行こうと思っていたが、やっぱりJavaから離れられなかった。
Spring Boot
keynote-2 基調講演2:Java EE 8 – Work in Progress
by David Delabassee(Oracle Corporation)11:00-12:00
#ccc_keynote2
進捗がいいもの
WEB層の拡張 (HTML5 Support/ Web Tier Enhancements)
JSON Binding (JSONB)
JSON Processing (JSON-P) enhancements
Server-sent events (SSE)
Action-based MVC
HTTP/2 support
Survey: https://blogs.oracle.com/ldemichiel/entry/results_from_the_java_ee
JSON-P 1.1
JsonPointer…JSONの要素へのポインタオブジェクト
immutableになってる
SSE
JAX-RSを活用していく
ストリームを使う例
@Produces("text/event-stream")
MVC
Java EE 8ではAction-based MVCを提供する (Struts2やSpringのようなアプリケーションでコントローラを実装するMVC)
今まで通りJSFのようなComponent-based MVCも提供し続ける
Model層、View層は既存の資産を利用すれば良いが、Controller層については議論された。結局JAX-RSを使うことになり、それがいい方法であった。
Controller用の新しいアノテーション
@Controller…メソッドに付与してコントローラであることをフレームワークに知らせる
HTTP/2サポート
Servlet 4.0による
ほとんどの開発者にとっては今まで通りの使い方でHTTP/2対応ができる
感想
早くJava EE 8出てほしい。
AB-1 「jOOQ と Flyway で立ち向かう、自社サービスの保守運用」
by 池田 裕介(株式会社サイバーエージェント)13:00-13:50
#ccc_ab1
DBスキーマのバージョン管理
チーム開発実践入門にも書かれてる
Flyway…DBマイグレーションツール
mavenやgradleでビルドできるようにするといい
ファイル名のバージョンは連番ではなくタイムスタンプにすると良い
マージしたときに衝突しない
outOfOrderオプションを使うことで過去のバージョンも適用できる
JOOQ
すでに存在するDBを重視
ドキュメントやチュートリアル、サンプルコードが充実している
fetch()から結果をCSV, XML, HTML, FormatedText フォーマットで出力が可能
感想
JOOQ便利そうだし可読性もすごくいいけど、JPAにあるようなentity cacheやprepared statement cacheの機能があるのかどうか。
またJPAでも、Criteria APIの可読性が低いと思ったらJPQLを使えば良いのでは。要調査。
回答を発表者から頂けた。
@shun_tak JPA のエンティティの概念とは違って、純粋な O/R mapper ではないので Entity Cache に当たる機能はないですね。EhCache や hazelcast 使う感じです。
— Yusuke Ikeda (@yukung) 2015, 11月 28
@shun_tak Prepared Statement Cache も機能としては無くて、代替案としてはこんな感じです。https://t.co/qRM4SskEAc
作者の考え方としてはここに記載があります。 https://t.co/npsB7Cy9KE
— Yusuke Ikeda (@yukung) 2015, 11月 28
EF-2 How to speed up your application using JCache[通訳有]
by gregrluck14:00-14:50
#ccc_ef2
データを2回以上参照するなら、キャッシュを使う
データベースアクセスだけでなく、データの生成など
アムダールの法則 (amdahl's law)
Cache効率(キャッシュのヒット率)
何をキャッシュにつめるか
参照データ(郵便番号など)
長期間存在するデータ
よく使われるデータ
よく変化するデータについては考慮する
メソッド
get, put, putAndGet
JSR107 annotations
感想
JCacheのセッションすごく面白かった。キャッシュのイントロダクションが長かったかも。通訳しながらなので仕方ないけど、JCacheの設計方針や実装についてもっと詳しく話を聞きたかった。
GH-3 マイクロサービスアーキテクチャ – アーキテクチャ設計の歴史を背景に
by 鈴木 雄介15:00-15:50
#ccc_gh3
時代の変化
メインフレーム→クラサバ→ウェブ
クラウドの時代(過渡期)
サーバーの処理能力が超巨大化
巨大なサービスをどのように変化させていくか
カナリアリリース(ブルー・グリーンデプロイ)
新バージョンをリリースして稼働させたサーバー群に、全体のアクセスのうち少量だけ流すことで、システム全体を停止することなくリリース時の不具合を検知することが出来る
ダークカナリアリリース (test-in-prod)
LBから新バージョンにアクセスできるのは開発者のみ
モチベーション:ステージングではなく本番でテストしたい
→連携するシステムとの整合性が取れているかは本番環境でなければわからない
Chaos Monkey
Netflixの事例
巨大なサービスをいかに管理するか
→マイクロサービスアーキテクチャ (MSA) に分割
広義には、粒度ではなく関係性に注目を
重要なのはサービス相互の関係性のあり方
- 複雑なものを、いかに管理するのか
巨大なサービスはトップダウンに管理できない
技術面:分散配置と統合
組織面:持続性と分権
ボトムアップでもうまくいかない
あるルールのもとで多様性を保証する
→プラットフォームを利用する
サービスの分割
モジュール分割の基本は「時間軸の中で変化するスピードの違いの境目」で切る
プラットフォームとは
巨大なサービスを管理するための基盤
GH-4 GS CollectionsからEclipse Collectionsへ - 機能豊富なオープンソースJavaコレクションフレームワーク
by 伊藤 博志(ゴールドマン・サックス)16:00-16:50
#ccc_gh4
スライド:http://www.goldmansachs.com/gs-collections/documents/2015-11-28_JJUG_CCC.pdf
JavaOne 2014で発表して以降、人気急上昇中
開発者としてはかなり自信があり、Java標準のコレクションに採用されても遜色がないと考えている
ファクトリーメソッドが用意されてる mutable/immutable
より簡潔に書ける
より多くのケースでメソッド参照を活用できる
より高い可読性で記述できる
再利用が可能
メモリ効率が良い
SortedBag
キーに対して、キーのaddされた回数を保持する
shuffleThis
リストの要素の順番をランダムに入れ替える
zip
リストとリストを組み合わせてペアのリストにする
chunk
コレクションの分割処理
集合演算
intersect, union, difference, symmetricDifference (XOR)
CharAdapter
文字列のコレクションから、数字のみ抽出して別の文字列コレクション
GS Collections Kata
https://github.com/goldmansachs/gs-collections-kata
ユニットテストをひとつずつパスしていくTDD型トレーニングマテリアル
感想
GuavaやApache Commonsのコレクションで良くない?って思ってたけど、Eclipse Collection使おうと思えた。すごい。
EF-5 これからのコンピューティングの変化とJava
by きしだなおき17:00-17:50
#ccc_ef5
処理を早くするには
並列度を上げる
より近いところにデータを置く(キャッシュ)
データ・セントリック・システム
データの近くで処理(Hadoop等)
ノイマン型アーキテクチャ
CPU…OSが実行できる
GPU
非ノイマン型アーキテクチャ
ノイマン型じゃない
FPGA, ニューラルネット型コンピュータ、量子コンピュータ
2,3つ目は今のところプログラム可能ではない
FPGA
命令をメモリから読み込む必要がない
データを流すだけで回路が処理をしてくれる
JavaでCPU
Streamで並列処理
JavaでGPU
Aparapi…JavaコードをOpenCLに変換・楽だがGPUの性能を出しにくい
OpenCL…JOCLとかある・ちょっと面倒だけどGPUの性能を出せる
Project Sumatra…Stream処理を自動的にGPUで行う(今年5月で開発終了)
ディープラーニングで処理が速くなる
JavaでFPGA
Synthesijer…FPGA用のコードを自動生成してくれる
今のままのJavaで足りるのか
オブジェクトのメモリ効率が悪い
さまざまなアーキテクチャに対応した値が扱えない
- 256bit整数型、floatx4型(SIMD命令用)
高機能データ構造がメモリにやさしくない
- Genericsが基本型を扱えない
配列がハードウェアにやさしくない
ハードウェアに近付く (Close to the Metal)
sun.misc.Unsafe
並列化プリミティブとかシリアライズとかメモリ管理とかJVMとのやりとりができる
Cassandra, Ehcache, HBase, Hadoop, Hibernate, JRuby, Netty等の製品が使ってる
Java9でメンテナンス停止(仕様凍結)
Java $N-1で完全置き換え、Deprecate
Java $Nで廃止
Unsafeの代替は仕様策定中
Project Valhalla
ユーザー定義基本型
ValueType…nullを持たず、参照ではなくデータを格納する
ハードウェアに近いコードが書けるようになっていく
コンピュータは変わる
Javaも変わる
あなたは?
ふと思ったこと
あくまで自分はそう感じるというだけだけど、RailsやNode.jsやGolangのコミュニティよりも、Javaの方がワクワクする。 #jjug_ccc
— しゅんたっく (@shun_tak) 2015, 11月 28