Scala関西Summit 2019 に参加しましてきました!Day-2 #scala_ks
2日目
1時くらい?まで飲んでいたので流石にちょっと眠いw
Day-2 はアンカンファレンス形式で、朝会でやるないようを決める。
見たセッションは下記。
After Effects
リチャード 伊真岡 さん : @RichardImaokaJP
リチャードさんのスライドは毎回アニメーションを導入されていて、どうやって作っているのかを紹介してくれました。
After Effects は adobe 製品で、毎月4,000円 くらいで利用できるとのこと。
実際にリチャードさんが作成された動画
こういう動画は Explainer Video というらしい。
台本を書き起こす => 絵コンテ => Illustrator => After Effects => 録音 => 動画ファイル(.mp4)
実践MONIX導入
おえ さん : @OE_uia
MONIX とは
cats-effect のコントリビューション1位であるアレクサンドルさん( @alexelcu )が開発者。
Rx にインスパイアされて作成された、 observable sequence による非同期プログラミングライブラリ。
会場内では実際に利用している方が居なかったので、使い方を中心に発表してくださった。
最近( 2019/09 ) v3.0.0 が出た。
構成
- monix-execution: 並行処理で副作用を上手く扱うための Low Level API。 Schedulerなど。
- monix-eval: 並行処理で副作用をうまく扱うための、純粋関数型データ構造。Task, Coeval など。
- monix-reactive: Rx の Scala 実装。
- monix-tail: Pull型ストリームの純粋関数型データ構造。
- monix-catnap: cats-effectの型クラスを元にした純粋関数型並行処理ユーティリティー。
など。
sbt で monix-eval
を入れる。monix
にすると構成に挙げたものが全部入る。
Monix Task のときは runAsync 等をするときに必要
Task.apply ( Task.eval の alias ) は、Cats-Effectsと併せるためと、作者の意思決定で v3.0.0 から同期に。
非同期境界?
サンプルコードでは Task.evalAsync
を呼び出すところで非同期境界となっているらしい。
スレッドをできるだけまとめることによって、コンテキストスイッチのオーバーヘッドが軽減されるため、Future の100倍くらい早いらしい。
Task.deferFutureActionA => Future[A]): Task[A]
Scheduler ( ExecutionContext ) を受け取り、 Futureを返す関数を引数にとり、Future から遅延評価される Task を作る処理。
Task.deferFutureAction[A](f: (Scheduler) => Future[A]): Task[A]
エラーハンドリング
Exponential Backoff: リトライ時間を倍にしながらリトライする
onErrorRestartLoop
を利用すると、Future で実装しようとするとめんどくさい Exponential Backoff
が簡単に(1メソッドで)実装できる。
並列計算API
Task.sequence
/ Task.gather
/ Task.gatherN
など、並列処理を柔軟に実行できるAPIが存在する
MONIX Task の嬉しいところまとめ
さいご
居心地が良すぎて帰るのが億劫になってしまうまえの16時くらいに、先に離脱させていただきました。
開催にあたってはいろいろ大変なこともあったかと思いますが、参加した僕としては登壇者さんの発表のおかげで、特にモナドを中心に理解が進んだように思います!
会場提供などでご協力いただいた会社さま、登壇者さん、そしてスタッフさん、本当にお疲れさまでした!
とても楽しかったです!
来年もまた行きたいな。