diff slides/20180123/slide.md @ 14:deecd8254ba8

rename
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 26 Jan 2018 14:34:14 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/slides/20180123/slide.md	Fri Jan 26 14:34:14 2018 +0900
@@ -0,0 +1,88 @@
+title: 分散フレームワークakkaの調査
+author: Takahiro Shimizu
+profile:
+lang: Japanese
+
+
+# 調査目的
+* 先輩の修論の比較材料の為に行う
+* 分散フレームワークの1つであるakkaがどのような書き方、及び処理なのかを調査する
+
+
+# 今週の進捗
+* scalaの入門書を斜め読みした
+* akkaの公式チュートリアルを行った
+* Graphでn入力1出力のアクターモデルが生成出来ることを調べた
+    * ドキュメントの例題を実行した
+
+# 調査内容
+* akkaのmac osx,ubuntu上の導入
+* [公式チュートリアル](https://developer.lightbend.com/guides/akka-quickstart-java/)の例題を行う
+* 前回はJavaで実行した
+    * scalaで今回再調査を行いました
+
+# scala環境の構築
+* brewやaptで導入した
+* scalaという名前のパッケージもあるが、sbtで導入する
+    * `~/.sbt` 以下のディレクトリにバージョンごと入る為、適切に処理しないと競合する
+
+# akkaでn入力の処理
+* [GraphDSL](https://doc.akka.io/docs/akka/current/stream/stream-graphs.html?language=scala#constructing-graphs)系の命令を利用すると実行可能
+* [Github上の別のサンプル](https://github.com/pkinsky/akka-streams-example)
+
+# 出力系
+* Broadcast[T] 
+    * (1input N output) 1入力に対して全てのoutputに渡す
+* Balance[T]
+    * (1input N outputs) outputを1つ指定して出力をする
+* unzipWith[In,A,B..]
+    * 関数を受取,20までの各要素に対して実行する
+* unZip[A,B]
+    * Tupleを分割して、2つのoutputに対して送る
+
+# input系
+* Merge[In]
+* MergePreferred[In]
+* MergePrioritized[In]
+* ZipWith[A,B,...,Out]
+* Zip[A,B]
+* Concat[A]
+
+# チュートリアル
+
+```scala
+package merger
+
+import akka.NotUsed
+import akka.actor.ActorSystem
+import akka.routing.Broadcast
+import akka.stream.{ClosedShape, OverflowStrategy}
+import akka.stream.scaladsl.{Flow, GraphDSL, Merge, RunnableGraph, Sink, Source}
+
+
+object merger extends App {
+  val system: ActorSystem = ActorSystem("mergeAkka")
+
+  val g = RunnableGraph.fromGraph(GraphDSL.create() { implicit builder: GraphDSL.Builder[NotUsed] =>
+    import GraphDSL.Implicits._
+    val in = Source(1 to 10)
+    val out = Sink.ignore
+
+    val bcast = builder.add(Broadcast[Int](2))
+    val merge = builder.add(Merge[Int](2))
+
+    val f1, f2, f3, f4 = Flow[Int].map(_ + 10)
+
+    in ~> f1 ~> bcast ~> f2 ~> merge ~> f3 ~> out
+    bcast ~> f4 ~> merge
+    ClosedShape
+  })
+
+}
+
+```
+
+# 詰まっている所
+
+* 公式のサンプルコードを動かそうとすると型エラーが発生する
+* コンパニオンオブジェクトの書き方があまり理解できていない