Scala Matsuri 2018 Day 1

お疲れ様です!まっちゃんです!
さっそく本日参加致しました Scala Matsuri 2018 Day 1について書いていきます!

昨日の Training Day はこちらから

blog.engineer.adways.net

ノベルティとTシャツ

朝、会場に到着後、受付を済ませるとノベルティとTシャツを受け取りました。

f:id:AdwaysEngineerBlog:20180317233955j:plain

今年は赤いトートバッグにたくさんのノベルティが入っていました!
Training Dayよりも多いです。

またTシャツは紺色です。
昨年は紫色でした。

f:id:AdwaysEngineerBlog:20180317234002j:plain

セッション

Day 1 のセッションは下記の通りです。

会場A 会場B 会場C
9:50 - 10:10 オープニング
10:10 - 10:50 なぜ Composability は重要か Purely Functional Play Framework Application 量子コンピュータをScalaでかわいくシミュレーションしてみよう♪
11:10 - 11:50 関数型プログラミングによるパフォーマンス 1日目からレガシー化 『暗黙』とうまく付き合うためのTips
12:10 - 12:50 仕事で役立つモナド変換子 あなたの集計クエリをお金をかけることなく14倍高速化するには? sbt 1
ランチセッション もしScala初心者がMonoidを投げ込まれたら
Scalaでの部分的な関数型プログラミング
Recursive Schemeを用いた量子アニーリングマシン専用言語(DSL)の開発
14:00 - 14:40 実用的な圏論入門 scalaメタプログラミング今昔物語 Haskell対Scala
15:00 - 15:40 実用的な圏論入門 Akka を用いた分散システムの構築 Haskell + Scala ハイブリッド開発大作戦
16:00 - 16:40 Scala OSS プロジェクトを 6 年以上続けるために必要なこと Scala製システムを3年間運用することで起きた様々なことへの対処 Scalaらしいオブジェクト指向プログラミング
17:00 - 17:40 リアクティブDDD実践入門 ブロックチェーンはどうやって動くのか、オレを5歳児だと思って説明してくれ Extensible Effects in Dotty

前日同様、簡単ではありますが参加したセッションの概要をお伝えしたいと思います。
(チームメンバーも参加しているため、同じ時間帯で重ならなかったセッションもあります)

オープニング

f:id:AdwaysEngineerBlog:20180320144824p:plain

Scala Matsuri について唯一話せるセッションかもだと言うことでした。
そして3つの数字についてお話がありました。
5 ... Scala Matsuri の開催回数
12 ... 昨日のOSSハッカソンのPR数
661 ... 今年の Scala Matsuri の参加者数

なぜ Composability は重要か

f:id:AdwaysEngineerBlog:20180320144842p:plain

Why "Composability" Matters

Composability について、それがなぜ重要なのか、具体例について
といった内容でした。 Composability ... ある性質を持ったものを合成した際、合成後も同一の性質を保つ なぜ重要なのか? ... 問題を分割する方法は、解を合成する方法に依存する
つまりComposabilitygが高いほど、問題を分割しやすくなり、処理が簡単になる(処理が小分けできるので、実装も簡単になる)
例として独自型の変換や、JSON変換についての説明がありました。

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

f:id:AdwaysEngineerBlog:20180320145444p:plain

理論から始まり、実際のメッセージングの処理について
といった内容です。
データ構造によって、パフォーマンスが大きく変動し、単純にコア数を上げるだけでは、パフォーマンス改善できるわけでもない
データ構造を考えれば、例外処理やエラー処理も綺麗に対処することができる。 との事でした。

1日目からレガシー化

f:id:AdwaysEngineerBlog:20180320144946p:plain

Legacy code from day one

どうすればコードレビュー、開発、運用でプロジェクトをダメにできるのかという逆アプローチで紹介されていました。
完璧でとても美しいコードなのでコードレビューはしなくても良い。その方が時間が確保でき、もっと開発ができる。
すべて独自で実装しよう。bugfixも自分で書くから早い。リリースも制御できる。
仕様が変わらないのだから文章化なんかしなくて良い。
などなどアンチパターンについてトークが進んでいました。

『暗黙』とうまく付き合うためのTips

implicitにつまづいてしまう初心者向けの内容でした
暗黙が何故、難しいのから暗黙の概要について
初心者が打開するためのTIPSを紹介してくれました。
1 ... OSSなど、動いているサンプルで確かめてみる
2 ... Map, Contramap と言った暗黙のスコープに加える代表的な例を見てみる
3 ... できるだけ既存のものをつかう

あなたの集計クエリをお金をかけることなく14倍高速化するには?

f:id:AdwaysEngineerBlog:20180320145515p:plain

1つの解決策として、事前集約という提案が出されていました。
FULL SCAN はもちろん遅く、単位がTB以上になるとどうしようもなくなるため、事前集約が必要となる。
つまりクエリを事前集計をしておく。そのために、要件(やりたいこと、出力したいデータ)の明確化は大事。
サンプルでは3000万レコードに対して、クエリが平均 70s -> 0.7s まで短縮しました。

sbt 1

f:id:AdwaysEngineerBlog:20180320145035p:plain

分散システムにおける時間についての理解のため、時空図、平行線の定義と言った内容から始まりました。
例として、「東京は晴れ、これは黒色」は関係ないので並行性 concurrent している事になり、 build.sbtは 並行 concurrent なタスクを自動的に 並列実行 parallel しているとの事でした sbt server, LSPについての紹介もあり、今後の展望も聞く事ができました。

もしScala初心者がMonoidを投げ込まれたら

f:id:AdwaysEngineerBlog:20180320145110p:plain

ランチセッションその1
知らない概念に初めて触れた時にどう対処すればいいのかという問題があり、
コンテキストの共有、取捨選択、教育、モチベーションを軸に最善を一緒に探す。という内容でした。

Scalaでの部分的な関数型プログラミング

f:id:AdwaysEngineerBlog:20180320145144p:plain

speakerdeck.com

ランチセッションその2
関数型プログラミングについての内容とそのテクニック、始めやすい戦略についての内容でした。
テクニックについては、純粋なプログラムのためのもの、作用を扱うものの2つがあり前者が簡単ということでした 戦略1. 避けられない作用を確認する
戦略2. 作用に依存しない部分を見つける
戦略3. その部分を純粋関数で抜き出す

Recursive Schemeを用いた量子アニーリングマシン専用言語(DSL)の開発

f:id:AdwaysEngineerBlog:20180320145206p:plain

ランチセッションその3
断熱量子コンピュータ(AQC)、QUBO形式の組み合わせ最適化問題を高速に解くという内容です。
ほとんどの離散最適化問題はQUBOで実現でき、DSLを使えば、ほぼ数式と同じ表現で問題を記述することができるとの事でした。

ランチ

お弁当が10種類ありましたが、2種類残念ながらもうなくなっていました...
私は彩り弁当というのを選択しました。

f:id:AdwaysEngineerBlog:20180318230236j:plain

f:id:AdwaysEngineerBlog:20180318230300j:plain

おいしく頂きました。
ごちそうさまでした。

実用的な圏論入門

speakerdeck.com

圏論はいいコードを書くために知る必要な書く、関数型コードを書くためにも必要ではない
あくまで深い知見を得るための手段との事です。
ハンズオン形式で圏論とは何か、圏論のさわりを聞けたのでわかりやすかった内容でした。

Haskell + Scala ハイブリッド開発大作戦

f:id:AdwaysEngineerBlog:20180320145240p:plain

speakerdeck.com

eta について、etaとJava/Scalaとのハイブリッドについて紹介されていました。
eta とは Haskell on JVM で Haskell と高い互換性を持っている。
難しいイメージを持っているが風評被害で、実際に書いてみるとそうでもない。 Java/Scalaからetaを呼び出す事は簡単ですが、その逆は難しく、特にetaからScalaの呼び出しはやめた方がいいとの事でした。

Scala OSS プロジェクトを 6 年以上続けるために必要なこと

ScalikeJDBCのオープンソースプロジェクトがどのように貢献してきたかという内容です。
当初、始めたきっかけから、実用的なものとは、大切にしている事などを知る事ができました。 貢献しているプロジェクトの条件 ... 動かしやすさ、理解しやすさ、安全な変更、テストコード、明記されたルール

Scala製システムを3年間運用することで起きた様々なことへの対処

f:id:AdwaysEngineerBlog:20180320145321p:plain

はてなさんのScalaプロダクトについてと、ScalaプロダクトであるMackerelの運用についての内容です。
Scalaのお話ではPlayのバージョンアップから、sbtのバージョンアップ、使われなくなった機能の削除についてのお話がありました。
Playのバージョンアップではコネクションプールの標準ライブラリ変更や、ORMのライブラリバージョンアップもあり苦労したとのことでした。
使われなくなった機能の削除については、苦戦するかと思いきや、コンパイラが全て教えてくれるのでそこまで苦戦しなかったとのことです。 サービスの成長に伴うインフラ変更のお話もありました。

懇親会

今年は会場が2つに分かれての懇親会です!
私は昨年と同様、セミナー会場での懇親会に参加しました!

f:id:AdwaysEngineerBlog:20180318230409j:plain

まとめ

私は昨年も参加をしましたが、自分の知識の無さを痛感し、もっと知る事をしないと行けないと感じました。
Scala Matsuriに初参加者にとっては始めて知る事も多く、わからないことも多く、とても刺激的な1日にもなったようです!
明日のアンカンファレンスも楽しみですね!