11月18日に開催されたJJUG CCC 2017 Fallに、スタッフとして参加、およびセッションでしゃべってきました。
一日中セッション部屋担当で、なんかアナウンスしたり、「N分前」の紙を出したり、Twitterのハッシュタグを賑わしたりしていました。
AsciiDocとPlantUMLでドキュメント作成 by 梅澤雄一郎さん #ccc_a1
軽量マークアップ言語であるAsciiDocと、ドキュメント生成系の基盤一式について。
Kinkのマニュアル生成にはreStructuredText+Sphinxを使っているのですが、記述の素直さという点ではAsciiDocに軍配が上がるようです。機能面で便利だと思ったのはコード内にアンカーが付けられるところ。
「GitHub Flowを使いたいがためにGitを使っている」には大賛成です。商用システムの開発において、分散SCMの利点はブランチ・マージがしやすいところにあります。ブランチ・マージを効率的・安全に回すフローを定義して、フローを支援する環境を整備しなければ、宝の持ち腐れどころか、野放図なバージョン管理(管理?)という害悪をもたらすだけだと思っています。
Apache Cassandraを使ったJavaアプリケーションの作り方 by 森下雄貴さん #ccc_a2
CassandraのサンプルアプリケーションであるKillrVideoを題材にして、今風のシステム間連携のやり方を見ていこうぜ、というセッション。
GuavaのEventBusというクラスの存在を知りました。プロセス内のPub/Sub型メッセージバスみたいです。なんか便利かも。
Spring Bootの本当の理解ポイント by 多田真敏さん #ccc_e3
Springコンテナの仕組みと、Spring Bootの役割。Spring Bootは、Springの世界でCoC (Code over Configuration, 設定よりも規約)を実現するための設定ファイル群だよ、という話でした。
スライドも話も実に分かりやすく、ツボをおさえて、さすがはプロの講師、という感じでした。直後の登壇者としては大プレッシャーです。
Java SE 9の紹介: モジュール・システムを中心に by 宮川拓 #ccc_e4
自分のセッション。Java SE 9のモジュール・システムの話+おまけ程度にその他のアップデート、という内容です。どうにもごちゃっとした話をしてしまったなあ、と思いつつ、しかし実際問題ごちゃっとした領域なわけで、もやもやしています。
モジュール・システムについて、理想形を話すのであれば綺麗にまとめられるはずなのですが、聴衆の期待を考えると、むしろ導入時につまづきの石になるだろう部分に重点を置きたい。つまづきの石について話すためには、既存の仕組みとのあいだの弥縫策や、ワークアラウンド的な道具立てについて、ひととおり触れなきゃいけない。分量も多くなるし、ややこしい話にもなる。結局、ひととおりブチ込んで頑張ってしゃべる、という方針でのぞんだのですが、果たしてよかったのかどうか。
目にする反応は総じて悪くなかったので、救われました。
また、一点スライドの補足。
p. 47に「Oracle JDKでは、外部モジュールの非公開メンバへのリフレクションが可能」とありますが、これはOpenJDKでも同じ動作です。「HotSpot系の」とすべきところでした。 *1
速いソートアルゴリズムを書こう!! 松原正和さん #ccc_m8
1. クイックソート+ワークメモリによる安定ソート化変種、 2. マージソートの分割を3分割にすることによる高速化、 3. マージソートの省メモリ化、という3つのアルゴリズムについてのお話でした。
マージソートって3分割でも計算量変わらないんですね。へーと思ったけど理屈は分かっていない。
Design Pattern in Presto source code by 曾臻さん #ccc_m9
- スライド: まだ公開されてない?
分散クエリエンジンであるPrestoの実装を題材として、Template MethodパターンとVisitorパターンを紹介する、という内容でした。
「Visitorパターンはデータ構造があまり変わらず、適用する処理が多岐にわたる場合に有効」というような整理がされていて、なるほど、と思いました。Visitorインタフェースはデータクラスに依存するので、データ構造の変更には弱いわけですね。
Javaで使えるもう一つのコンパイル方式 - AOT by 西川彰広さん #ccc_m10
JDK9 on Linuxでは、ネイティブバイナリへのコンパイル (Ahead-of-Time Compilation) ができるよ!という話。
AWS LambdaやCloud FunctionsのようなServerless環境や、その他コンテナ環境では、プロセス起動が速いことが重要だけど、この点Javaは弱かった。AOTコンパイルであらかじめバイナリを作っとくことで、若干マシになる、ということです。モジュール・システムの導入にも、同様の問題意識が反映されているものと認識しています。
ただ、サーバサイドJavaは、エコシステム全体が常駐型プロセスを指向しているので、処理系の工夫だけでは足りない面もありそうです。
DBのTCPプロトコルとJDBC by Yohei Yamanaさん #ccc_m11
- スライド: https://docs.google.com/presentation/d/1xSwS73_iTPyMKdtXUUiwawJ05XaS-gFRkOeYLgu8mLI/edit#slide=id.p
MySQLとPostgreSQLの、リモートクライアント接続プロトコルの中身の話。
SQLってそのままポコンとDBMSに送られるんですね。クエリエンジンはDBMS側にあるんだからそりゃそうか。あとでYamanaさんに伺ったところ、クライアント側でも最低限のチェックはしているけど、結局サーバ側に行かないと十分な解析・チェックはできない、とのことでした。
Java x ArduinoのIoT アーキテクチャパターン by 山本ユースケさん #ccc_m12
- スライド: まだ公開されてない?
楽しいArduinoデモ。LEDをチカチカさせたり、プレゼン用マウス的なものを作ったり。
Arduinoのプログラムは独自言語で書くのでJavaは使えません。しかし、FirmataというプロトコルでArduinoデバイスをホストコンピュータから叩くことができ、firmata4jというJava実装もあるよ、という話でした。
総括
一緒に部屋担当についたボランティアスタッフの方々の活躍により、かなりスムースに運営できたと思います。ありがとうございます。おかげで、スタッフとしての参加でありながら、上述のとおり聴講者としても満喫してしまいました。知恵熱が出そうです。
それから、朝晩ちょっとした荷物を運んだだけで、上半身がえらい筋肉痛です。ふだんいかに運動していないか思い知らされます。
*1:Slideshareがスライド再アップロードできない仕様になっているため、訂正できませんでした。