https://reactive-shinjuku.connpass.com/event/49818/
- @eed3si9n
- Lightbend
- に入るまでは独学でScalaをやっていた
- Lightbend Production Suite
- 技術サポートもやっている
開発プロセスをスケールさせるにはどうしたらいいか
- 組織をスケールさせるのがいちばんはやい
- 1000人問題
- エンジニア10人→100人→1000人と増えていくにつれて全員がコードを書くのが難しくなっていく
- 企業そのものをスケールしていくしかない
- その方策としての マイクロサービス
- ただの技術アプローチではない
- ジェフ・ベゾス http://homepages.dcc.ufmg.br/~mtov/pmcc/modularization.pdf (AWSが出る前)
- メールをだした
- developmentそのものをスケールすること
- マネジメントにもささる
- 1000人問題
Brief history of JSON libraries
2008
- 文学的解析
- 文字を読むだけではなく背景をさぐるのが文学の楽しみ
- それを読み解くのがいちばん楽しいのがJSON という持論
- Programming in Scala/Real world Haskell in 2008
- それまでは論文を読み漁るしかなかった
- Scalaでは10行でパーサコンビネータが作れる
- Haskellは1章を割いてJSONを解説している
- ASTをデータとしてあらわす
- JSONをデータとしてあらわす
- Dispatch JSON
- literaljson
- literaljsonをLiftへ寄付する
- sjson
- それまではプログラミングのASTにあらわすだけ
- sjsonは型クラスを定義する
- アドホックなポリモーフィズムを実現するのが型クラス
- typeclass
- e.g. trait Eq[A]
- ===の実装
- e.g. trait Eq[A]
2011
- spray-json
- Dispatch JSONの後継
- sjsonの後継
- Play JSON
ウェブフレームワークごとにJSONライブラリがあるようなかんじ
2012
- Arngonaut
- Scalaz/猫をつかっている
- json4s
- Lift-json Liftがなくなったけどこのライブラリの出来はよかったのでforkされた
- ウェブフレームワークには使われなかった
2014
- Jawn
- Erik Osheim
- Scala最速のパーサ
- カリカリかつfunctionalなコードを書くのが好き
- 型クラスの抽象化
- いろいろなウェブフレームワークで使える
- backend independent
- Rapture JSON
- Jawnより高機能をめざした
- Circe
- Argonautのport
- パーシングのぶぶんはJawnに影響をうけている
- 機能が豊富
2016
- SLIP-28(Scala JSON AST)
- ASTが使えるといってもライブラリが分かれているのはしんどい
- Scalaのモジュールをめざす
- sjson-new
- 著者作
- 独自の型クラスにいろいろマッピングしたい
- 意識しないで抽象化できる
Contract-first approach
- 永続化(serialization)
data binding
- XML/Apache Thrift/Google Protocol Buffer/Facebook GraphQL
データをScalaで表現する
- sealed traits
- case classes
- データの表現方法としてはあまりよくない
- ひとつフィールドを足すと型が変わってしまう
- バイナリ互換性の点で、APIを進化させることができない
- (それでもcase classは便利 便利メソッドを自動的に生成してくれるから)
- contraband
- 擬似case classをJava/Scalaで表現する
- GraphQLを実装
- Enum
- Interface
- annotation
- record type
- contraband can derive sjson-new codecs
- 擬似case classを定義すると、JSONにも行き来できる
contrabandのおもしろいところ
- JSON以外にも使える
- message packでのバイナリ生成
- Int型(Murmurhash support) IntがJSON ASTであるかのように振る舞う
- Builder API is used to build on-way hash
IDL