例によっていつものメモ書き。最近この手のカンファレンス来てなかったから、メモ取る速度が遅くて自分の考えを書き込めなかったのでつらい。
Why Composability Matters
- Scalaはマルチパラダイム言語
- でも他の言語も大なり小なり関数型言語のエッセンスはある
- Scalaと他の言語の違い
- Composability
- 意味は?
- Composition 合成とは
- いろいろある
- 同じ概念の異なる要素を合成することで新しい要素を生成する
- Composition 合成とは
- 合成する方法が多い方がComposabilityが高いとこの発表では高いと定義
- なぜ重要か?
- プログラミング言語の進化の歴史は問題の「分割統治」の歴史
- 分割したら集約する => なので大事
- Custom Typeを変換する例
- Scalaだと他の言語よりComposabilityが高い
- 高いと逆に全体の見通しが難しいのではないかという質問
- HowとWhatがうまく分離できないと大変になるのはある
- 意識的に切り分けていけば可読性は上がると思う
- 高いと逆に全体の見通しが難しいのではないかという質問
How to get along with implicit
- implicitはふたつある
- 有名なimplicit
- JavaConverters
- implicitはなぜ難しいと思われるのか
- 3つ
- 明示的でない
- スコープが複雑
- しばしば導出を前提にデザインされる
- 3つ
- Seq(2,1,3).sortedをもとに例示
- IntelliJでImplicit Parameterを調べる機能があるので、それがおすすめ
- 動いているものが必要
- 暗黙の値を複数つかっているようなものでも解析できる
- 暗黙の型変換
- Enrich my libraryパターン
- 動いてるサンプルを見つけて調べるのがよい
- 最終的にComposability的な話になってきた
- 既存のものでやっていく
あなたの集計クエリをお金をかけることなく14倍高速化するには?
- 他と毛色が違うタイトルなので気になった
- データウェアハウスなどなどでかいデータの集約
- データが大量なのでクエリ遅い
- full scanの発生
- ユーザーに気づかせないことが大事
- それほどScalaに関連する話じゃなかった、けど面白い
- 内容はスライド見るとわかったが、英語のなまりが結構強く、しかもかなり早口だったので通訳のレシーバー借りとけばよかったと思った
もしScala初心者がMonoidを投げ込まれたら
- 突如投げ込まれるコミット
- どう対処していくのか
- チームビルディングの最中でコンテキストの共有が不十分
- 地道な勉強会、教育、コンテキストの共有
- モチベーション大事
- 自分がなにをすべきかが見える
- 試行錯誤してやっていくしかない
- 何事もやっていくしかない感じ
Scalaでの部分的な関数型プログラミング
- Pureな部分とSideEffectのある部分をなるべくわけるようにしていく
- 2つの層がでてきた pure layer effectful layer
- 作用の起こす層はpure layerに依存する逆はだめ
- pure layerはcore business rules
scalaメタプログラミング今昔物語
- メタプロ
- プログラムをデータとして扱うプログラム
- 歴史
- ScalaGen
- 静的コード生成
- 注目していく価値あり
- 質問
- Standard abstract syntaxとQuasiquateとのちがい
- 回答に質問者あまり納得していなかったようだが……
- Standard abstract syntaxとQuasiquateとのちがい
Haskell + Scala ハイブリッド開発大作戦
- https://speakerdeck.com/ytaka23/operation-haskell-plus-scala
- Scalaは純粋か非純粋な関数かが関数名からわからない
- Haskellはわかる(IO Stringの例)
- EtaからScala呼ぼうとすると隠れたものがあるので、書くのはやめたほうがいい
- 日本では数人しか持っていない知見
- JavaからEta, EtaからJava, 最終的にEtaのみでマイクロサービスにしてしまうという移行順序はよさげ
- 純粋な関数にちょっとログみたいとIOをいれてしまうと大変そうという質問
- もうそういうものとして考えるしかなさそう
リアクティブDDD実践入門
- AkkaをつかったリアクティブDDDの話
- メッセージ駆動をつかったactor + DDD = リアクティブDDD
- Akkaつかうとイベントソーシングも扱える
- CQRS+ESだとreadとwriteのストレージはわける
- 論理的でも物理的でもOK
- そこまで
- ドメインモデルの候補は言葉にするとでてきやすい
- Akka persistenceだとDDD Repositoryの実装がいらない
- Aggregateはインターフェイス層に、関心事がライフサイクル管理や整合性の保証なのでドメイン層ではない
- CQRS
- queryが多い場合にpayできる
- 徐々に疲れで意識が一瞬飛ぶ
会場のWiFiがかなり不安定でその点はちょっと不満でした。明日はどうなるかな。
Scala関数型デザイン&プログラミング ―Scalazコントリビューターによる関数型徹底ガイド (impress top gear)