やったこととか思ったこと

やったことを忘れないように気が向いたら書きます

Akka Streamについてのリンクとか色々

Akka Streamについて毎回調べるのが面倒だからリンク集

基本はここを見た方が早そう
Akka Streams についての基礎概念 - Qiita

Documentations

オペレータ
Operators • Akka Documentation

グラフの部品とか
Working with Graphs • Akka Documentation

自分で部品を作る
Custom stream processing • Akka Documentation

Flowの並列処理
Pipelining and Parallelism • Akka Documentation

Pick up Operators

状態を持つFlow
statefulMapConcat • Akka Documentation

他に何か見つけたりしたら随時更新します。

spray-jsonでケースクラスをトレイトでシリアライズ・デシリアライズする

spray-jsonでケースクラスをトレイトでシリアライズ・デシリアライズしようと思ったときに悩んだのでメモ。

trait Animal
case class Cat(name: String) extends Animal // Animalで変換したい

こんな感じのを変換したい場合

import spray.json._
import DefaultJsonProtocol._

trait Animal
case class Cat(name: String, kind: String = "cat") extends Animal

implicit val CatFormat = jsonFormat2(Cat)
implicit object AnimalFormat extends RootJsonFormat[Animal] {
  def write(obj: Animal): JsValue = obj match {
    case cat: Cat => cat.toJson
  }
  def read(json: JsValue): Animal = json.asJsObject.fields("kind") match {
    case JsString("cat") => json.convertTo[Cat]
  }
}
 
val animal: Animal = Cat("tama")
val json = animal.toJson
val animal2 = json.convertTo[Animal]

println(animal)  // Cat(tama,cat)
println(json)    // {"kind":"cat","name":"tama"}
println(animal2) // Cat(tama,cat)

こうすればできる
AnimalFormatオブジェクトのreadメソッドのjson.asJsObject.fields("kind")の部分は最初に見つけたのを使っているだけなのでもっといいやり方があるかもしれないです。

IntelliJ IDEAで日本語が文字化けした

IntelliJ IDEAでscalaを勉強しているときに文字化けしました。
前にもこんなことがあって2回目なのでまた文字化けしたときに見返せるようにメモ

f:id:yuuki38:20190122130311p:plain

IntelliJ IDEAフォルダの /bin/idea64.exe.vmoptions を管理者として実行したメモ帳などで開き、-Dfile.encoding=UTF-8 を追加する。

f:id:yuuki38:20190122133120p:plain

直りました。

原因はよくわからないけどこれからも何か起きたらそのとき調べて直していければいいなって感じでがんばります。