水底

ScalaとかC#とかネットワークとか

ScalaMatsuri 2018に参加してきた

参加してきましたのでメモ書き程度に. Training Day, Day1, Day2行ってきました.

f:id:amaya382:20180318210207j:plain

Training Day

これはTraining Dayにもらったノベルティで, Day1/Day2ではメガネ拭きやパスケース等々更に増えていました (箸/靴下は重複して2膳/足に).

OSS hackathon: Aeron by Martin Thompson (@mjpt777)

Aeronプロジェクトに参加しました. UDPを利用した高速なメッセージ通信用ライブラリです. 例えばAkkaでも内部的に重用されています. Javaです. 重要なので繰り返します, Javaです.

github.com

なぜかScalaのイベントでJavaでしたが, 最適化・高速化のプロジェクトとのことで, 面白そうと思い第一希望で応募していました.

取り組んだissueは以下のやつ. 「Aeronを使って巨大なファイルを送信するサンプルプロジェクトの作成」です.

github.com

メンター含め4人だったので2人でSender, 2人でReceiverに分かれて取り組みました (私は@RemkoPopmaさんとSender担当).

最初はAeronの目的や概要を紹介してもらい, 実際の開発に移りました. 巨大なファイルはchunkに分割して扱う必要があったため, まずはサンプル用のプロトコル (chunkを扱うためのヘッダ構成等) を策定し, そのデータをAeronで扱いました. Aeronは初見でしたが, Aeronに限らず内部的に利用されている姉妹ライブラリのAgronaが強力で, アドバイスを貰いながらペアプロで進めることができました. 徹底的に最適化されていることが要所要所で垣間見れました (特に無駄なメモリコピーを許さないという強い意志を感じた).

結果として自分でPRを作るところまでは行きませんでしたが, Martinさんにコードを引き継いでもらい, 翌日には反映されていました. めでたい.

楽しかったし, Javaでも, Unsafeを使わない範囲でもここまでできるのかという学びが多くありました.

Day1

なぜ Composability は重要か by @gakuzzzz

Composabilityに関して, 問題の分割と合成について. 「問題を分割する方法は、解を合成する方法に依存する」というのが印象的だった.

関数型プログラミングによるパフォーマンス by @mjpt777

Training DayのhackathonでメンターだったMartinさんの発表. メモリの話から入って関数型どこいったと思っていたけど, 最終的に関数型でもメモリとか大事だよねというところに着地していて, 常時うんうんってなっていました. こういうことを常に意識しながらコードを書けるようになりたい.

sbt 1 by @eed3si9n_ja

初っ端lamport先生が出てきたりconcurrencyの話になって部屋を間違えたかと思ったけど, 気づいたらApplicativeやsbtのDSLの話になっていた. 面白かった.

scalaメタプログラミング今昔物語 by @TaKeZo_I

scalap? Reflection? Macro? ScalaMeta? どれがなんなの? となっていたので良い整理になった. それにしてもScalaのメタプロ事情の変化は激しい… scala.macros で落ち着くと良いな.

Akka を用いた分散システムの構築 by @anildigital

Akkaについて, Actor等の基本的なところから解説があったので良い復習になった.

Scalaらしいオブジェクト指向プログラミング by @tototoshi

この時間帯はどのセッションに行くか特に悩んだけどScalaOOP派なのでこれにした. Mix-inによるCakePatternが個人的にきれいかなーと思っていたけど, コンストラクタインジェクションでいいなと揺らいだ. DIコンテナを使わないレベルが一番幸せなのかなと思いつつも, 大規模プロジェクトだとないとつらいんだろうなぁ. ケースクラスを変な他クラスに依存させないっていう方針が地味だけど重要に見えた.

Extensible Effects in Dotty by @halcat0x15a

出直してきます.

その他

台湾から来た@pishenさんからScalaTaiwanステッカーを貰いました, ロゴカッコイイ

f:id:amaya382:20180317225114j:plain

Day2

Scala Native by @xuwei_k

ちょっとScala Nativeを使って作ろうかと考えているものがあったので. まとまった情報がなかなか見つからなかったので良かった. Multi-threadingはよ.

VS Code and Scala by @eed3si9n_ja

Scalaを取り巻くLSPについていろいろ. issueを建てるとlightbendの仕事として取り組みやすいとのこと.

Scalaの言語機構を悪用して最強のDSLを作る方法 by @phenan

リガチャ. implicitに無理させたらコンパイル時間が O(n^4) くらいになったらしい.

AmmoniteによるScala Script入門 by @blac_k_ey

スクリプト内から依存解決してjarの取得, 外部スクリプトファイルの利用等々便利そう.

JVM Webアプリケーション メトリクス、モニタリング by @krrrr38

key-value形式ではなく, key+labels-value形式が良いとのこと. JVM向けだとMicrometer (やKamon) あたりがおすすめ, Dropwizardは古い.

あと3日でJava 10がリリースですが、興味ある人いますか? by @kis

Javavar ってキーワードではなかったんですね. 個人的には, JVMが適切にDockerのリソースを扱ってくれるようになるというのが嬉しかった.

Dotty (自分)

結局しゃべりました. よしださんが目の前で終始びくびくしてました. なんとなく, 今までScalaのもどかしかったところが改善されるということが伝わっていれば幸いです. (現金な人なのできちんとパーカー貰いました)

まとめ?

楽しかった. もうちょっとエイゴしゃべれるようになりたい (hackathon中のやりとり, 英語セッション聴講, 懇親会で海外の方と話したり, ScalaMatsuriの半分以上が英語だったのを, 全てギリギリで乗り切った感がすごい).

スタッフの皆さん, スピーカー・メンターの皆さん, スポンサーの皆さん, 話に付き合って頂いた皆さんありがとうございました. 来年も楽しみにしています :)