Enviar pesquisa
Carregar
Akka と Typeの話
•
3 gostaram
•
2,737 visualizações
Huy Do
Seguir
Akka と Typeの話
Leia menos
Leia mais
Engenharia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 28
Baixar agora
Baixar para ler offline
Recomendados
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
ke-m kamekoopa
Scalaはじめました!
Scalaはじめました!
Asami Abe
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Asami Abe
Scala is-unscared
Scala is-unscared
Kota Mizushima
こわくないScala
こわくないScala
Kota Mizushima
型無しラムダ計算―OCamlによる実装―
型無しラムダ計算―OCamlによる実装―
Proktmr
こわくないScala
こわくないScala
FScoward
Java使いにとっての関数
Java使いにとっての関数
amkt922
Recomendados
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
ke-m kamekoopa
Scalaはじめました!
Scalaはじめました!
Asami Abe
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Asami Abe
Scala is-unscared
Scala is-unscared
Kota Mizushima
こわくないScala
こわくないScala
Kota Mizushima
型無しラムダ計算―OCamlによる実装―
型無しラムダ計算―OCamlによる実装―
Proktmr
こわくないScala
こわくないScala
FScoward
Java使いにとっての関数
Java使いにとっての関数
amkt922
Dark vol4 for_slideshare
Dark vol4 for_slideshare
ara_ta3
Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門
yujiro_t
Scala超入門 - 2014/12/13 Scala関西勉強会
Scala超入門 - 2014/12/13 Scala関西勉強会
Asami Abe
AWS Amplify XRを動かしてみたら、、、
AWS Amplify XRを動かしてみたら、、、
Tsuyoshi Yamamoto
Build Dockferile with Haskell
Build Dockferile with Haskell
Nobutada Matsubara
Scalaで学ぶ関数型超入門
Scalaで学ぶ関数型超入門
Yuichiro Takahashi
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Takeuchi Yuichi
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
Rxjavaとoptionalで関数型androidしよう
Rxjavaとoptionalで関数型androidしよう
Fumihiko Shiroyama
Scalaプロジェクトへの未経験者の円滑なジョインへ
Scalaプロジェクトへの未経験者の円滑なジョインへ
Kenji Doi
[Scalameetup]spark shuffle
[Scalameetup]spark shuffle
Huy Do
Consistent Hashingの小ネタ
Consistent Hashingの小ネタ
Huy Do
Itlc2015
Itlc2015
Huy Do
Thriftを用いた分散型のNyancatを作ってきた
Thriftを用いた分散型のNyancatを作ってきた
Huy Do
DI in ruby
DI in ruby
Huy Do
実践Akka
実践Akka
Huy Do
中島裕介「最強のリベラルアーツとしての短歌Ⅱ」(於・大阪大学)1日目 2015年11月27日
中島裕介「最強のリベラルアーツとしての短歌Ⅱ」(於・大阪大学)1日目 2015年11月27日
yukashima
中島裕介「最強のリベラルアーツとしての短歌Ⅱ」(於・大阪大学)2日目 2015年12月4日
中島裕介「最強のリベラルアーツとしての短歌Ⅱ」(於・大阪大学)2日目 2015年12月4日
yukashima
NoSQL for great good [hanoi.rb talk]
NoSQL for great good [hanoi.rb talk]
Huy Do
【D3 公開用】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜
【D3 公開用】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜
dcubeio
Akka Cluster and Auto-scaling
Akka Cluster and Auto-scaling
Ikuo Matsumura
Spark GraphX で始めるグラフ解析
Spark GraphX で始めるグラフ解析
Yosuke Mizutani
Mais conteúdo relacionado
Mais procurados
Dark vol4 for_slideshare
Dark vol4 for_slideshare
ara_ta3
Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門
yujiro_t
Scala超入門 - 2014/12/13 Scala関西勉強会
Scala超入門 - 2014/12/13 Scala関西勉強会
Asami Abe
AWS Amplify XRを動かしてみたら、、、
AWS Amplify XRを動かしてみたら、、、
Tsuyoshi Yamamoto
Build Dockferile with Haskell
Build Dockferile with Haskell
Nobutada Matsubara
Scalaで学ぶ関数型超入門
Scalaで学ぶ関数型超入門
Yuichiro Takahashi
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Takeuchi Yuichi
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
Rxjavaとoptionalで関数型androidしよう
Rxjavaとoptionalで関数型androidしよう
Fumihiko Shiroyama
Mais procurados
(9)
Dark vol4 for_slideshare
Dark vol4 for_slideshare
Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門
Scala超入門 - 2014/12/13 Scala関西勉強会
Scala超入門 - 2014/12/13 Scala関西勉強会
AWS Amplify XRを動かしてみたら、、、
AWS Amplify XRを動かしてみたら、、、
Build Dockferile with Haskell
Build Dockferile with Haskell
Scalaで学ぶ関数型超入門
Scalaで学ぶ関数型超入門
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
Rxjavaとoptionalで関数型androidしよう
Rxjavaとoptionalで関数型androidしよう
Destaque
Scalaプロジェクトへの未経験者の円滑なジョインへ
Scalaプロジェクトへの未経験者の円滑なジョインへ
Kenji Doi
[Scalameetup]spark shuffle
[Scalameetup]spark shuffle
Huy Do
Consistent Hashingの小ネタ
Consistent Hashingの小ネタ
Huy Do
Itlc2015
Itlc2015
Huy Do
Thriftを用いた分散型のNyancatを作ってきた
Thriftを用いた分散型のNyancatを作ってきた
Huy Do
DI in ruby
DI in ruby
Huy Do
実践Akka
実践Akka
Huy Do
中島裕介「最強のリベラルアーツとしての短歌Ⅱ」(於・大阪大学)1日目 2015年11月27日
中島裕介「最強のリベラルアーツとしての短歌Ⅱ」(於・大阪大学)1日目 2015年11月27日
yukashima
中島裕介「最強のリベラルアーツとしての短歌Ⅱ」(於・大阪大学)2日目 2015年12月4日
中島裕介「最強のリベラルアーツとしての短歌Ⅱ」(於・大阪大学)2日目 2015年12月4日
yukashima
NoSQL for great good [hanoi.rb talk]
NoSQL for great good [hanoi.rb talk]
Huy Do
【D3 公開用】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜
【D3 公開用】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜
dcubeio
Akka Cluster and Auto-scaling
Akka Cluster and Auto-scaling
Ikuo Matsumura
Spark GraphX で始めるグラフ解析
Spark GraphX で始めるグラフ解析
Yosuke Mizutani
Spark Security
Spark Security
Yifeng Jiang
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Kazuhiro Sera
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
Tuna: Elect the Perfect Protein Catch [INFOGRAPHIC]
Tuna: Elect the Perfect Protein Catch [INFOGRAPHIC]
Food Insight
Chap004
Chap004
BHUOnlineDepartment
Types of music videos and adverts
Types of music videos and adverts
Tom Lord
你沒看到的北京奧運開幕式
你沒看到的北京奧運開幕式
honan4108
Destaque
(20)
Scalaプロジェクトへの未経験者の円滑なジョインへ
Scalaプロジェクトへの未経験者の円滑なジョインへ
[Scalameetup]spark shuffle
[Scalameetup]spark shuffle
Consistent Hashingの小ネタ
Consistent Hashingの小ネタ
Itlc2015
Itlc2015
Thriftを用いた分散型のNyancatを作ってきた
Thriftを用いた分散型のNyancatを作ってきた
DI in ruby
DI in ruby
実践Akka
実践Akka
中島裕介「最強のリベラルアーツとしての短歌Ⅱ」(於・大阪大学)1日目 2015年11月27日
中島裕介「最強のリベラルアーツとしての短歌Ⅱ」(於・大阪大学)1日目 2015年11月27日
中島裕介「最強のリベラルアーツとしての短歌Ⅱ」(於・大阪大学)2日目 2015年12月4日
中島裕介「最強のリベラルアーツとしての短歌Ⅱ」(於・大阪大学)2日目 2015年12月4日
NoSQL for great good [hanoi.rb talk]
NoSQL for great good [hanoi.rb talk]
【D3 公開用】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜
【D3 公開用】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜
Akka Cluster and Auto-scaling
Akka Cluster and Auto-scaling
Spark GraphX で始めるグラフ解析
Spark GraphX で始めるグラフ解析
Spark Security
Spark Security
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Tuna: Elect the Perfect Protein Catch [INFOGRAPHIC]
Tuna: Elect the Perfect Protein Catch [INFOGRAPHIC]
Chap004
Chap004
Types of music videos and adverts
Types of music videos and adverts
你沒看到的北京奧運開幕式
你沒看到的北京奧運開幕式
Mais de Huy Do
Distributed Tracing, from internal SAAS insights
Distributed Tracing, from internal SAAS insights
Huy Do
Write on memory TSDB database (gocon tokyo autumn 2018)
Write on memory TSDB database (gocon tokyo autumn 2018)
Huy Do
Some note about GC algorithm
Some note about GC algorithm
Huy Do
Engineering Efficiency in LINE
Engineering Efficiency in LINE
Huy Do
GOCON Autumn (Story of our own Monitoring Agent in golang)
GOCON Autumn (Story of our own Monitoring Agent in golang)
Huy Do
Story Writing Byte Serializer in Golang
Story Writing Byte Serializer in Golang
Huy Do
CA15卒勉強会 メタプログラミングについて
CA15卒勉強会 メタプログラミングについて
Huy Do
Making CLI app in ruby
Making CLI app in ruby
Huy Do
CacheとRailsの簡単まとめ
CacheとRailsの簡単まとめ
Huy Do
[Htmlday]present
[Htmlday]present
Huy Do
Mais de Huy Do
(10)
Distributed Tracing, from internal SAAS insights
Distributed Tracing, from internal SAAS insights
Write on memory TSDB database (gocon tokyo autumn 2018)
Write on memory TSDB database (gocon tokyo autumn 2018)
Some note about GC algorithm
Some note about GC algorithm
Engineering Efficiency in LINE
Engineering Efficiency in LINE
GOCON Autumn (Story of our own Monitoring Agent in golang)
GOCON Autumn (Story of our own Monitoring Agent in golang)
Story Writing Byte Serializer in Golang
Story Writing Byte Serializer in Golang
CA15卒勉強会 メタプログラミングについて
CA15卒勉強会 メタプログラミングについて
Making CLI app in ruby
Making CLI app in ruby
CacheとRailsの簡単まとめ
CacheとRailsの簡単まとめ
[Htmlday]present
[Htmlday]present
Akka と Typeの話
1.
Akkaとtypeの話 CyberAgent アドテクスタジオ RightSegment @dxhuy
2.
自己紹介 • サイバーエージェントの15卒 • RightSegmentという子会社にいます •
ベトナム出身 • Haskellわから無い • Ruby好き • ScalaをRubyぽく書きたい
3.
Akkaって 型ないですよね
4.
trait Request case class
Command(msg: String) extends Request trait Reply case object CommandSuccess extends Reply case class CommandFailure(msg: String) extends Reply val requestProcessor = someActor requestProcessor ! Command 違う型送っているじゃん!!
5.
あなた本当にScala 使っているの????
6.
Why akka need
type? • scalaエンジニアは型が好き、コンパイル時に チェックが好き • Actorに自由にMessage送ってもおっけ? • AskするときのFuture[AnyRef]で間違ってmapToして もおっけ? • sender()の雑扱い(相手わからないけど、まずReply するw) • Actor間の「契約」(Contract)的なもの欲しい • それでリファクタリングも楽に
7.
Actor間の「契約」 (Contract)的なもの 欲しい
8.
やっぱり型ある方 がいいよね
9.
どうやって?
10.
今の時点で選択肢3つ • akka projectのExperimental
「akka-typed」 • (古い)akkaの2.3系に存在した「typed- channel」 • http://doc.akka.io/docs/akka/snapshot/ scala/typed.html • 3rdのプロジェクト「typed-actors」 • https://github.com/knutwalker/typed- actors
11.
akka projectでの昔の Typed Channelの話 •
Actorの上にparameterizedされている層を作る • 「Channel」と呼ぶ • Channelの型定義:type Channel[I, O] = (I, O) • Channelの合成もできる: • (MsgA, MsgB) :+: (MsgC, MsgD) :+: TNil • 型計算はmacroで実装されている • 理論はπ-代数をベースしたみたい(process calculus) (https://en.wikipedia.org/wiki/%CE%A0- calculus) val requestProcessor = new ChannelRef[(Request, Reply) :+: TNil](someActor) requestProcessor <-!- Command //コンパイルされていないよ ^o^/
12.
• メリット • Actorを合成できる
(Streamみたい) • デメリット • 型を使いたいだけで完全新しいConcept生み出す? • 結果的に2.4からtyped-channelサポートドロップさ れました msg -?-> firstActor -?-> secondActor -?-> client msg -?-> someService -*-> (_ map httpOk) -!-> client
13.
akka projectでの現在の akka-typedの話 • Behavior
is King! No more actor trait • extends ActorでPartialFunctionの定義をやめ、 挙動をBehaviorクラスで表現する • 型Tは直接にActorRef[T]に渡す(つまり元の ActorRefを廃棄) • Behavior[T], Props[T] • sender()も廃棄
14.
じゃ簡単コードを 見ましょう
15.
他の機能 • TotalのDSLでパターンマッチングのExhaustive チェックができる • ↑の機能は型がないと絶対できないのでかなり嬉 しい機能 •
narrowメソッドにより型のContravariant実装可能 • || と && のDSLでBehaviorの合成 • ただ同じ型のBehaviorしか合成できない • かなり不思議 ( •̀ ω•́ )σ def narrow[U <: T]: Behavior[U] = this.asInstanceOf[Behavior[U]]
16.
akka-typedの感想 • sender()とか使えないとかなり不便 (╬
Ò ‸ Ó) • そのせいでメッセージ毎にreplyToをパラメータ として追加しないといけない、あるいは List[ActorRef]みたいにActorRef登録 • Behaviorの合成便利そうだけど、使ってみると全く 便利じゃないw(自分のイメージの合成と違う) • 個人的に一番デメリットは • 型が無いAkkaを慣れている人だとすっごい使いづ らい
17.
他に選択肢ある?
18.
typed-actor! https://github.com/ knutwalker/typed-actors
19.
突然の結論 typed-actorが 一番使い易い!
20.
typed-actorとは? • akkaプロジェクトに関係無い3rdパーティライ ブラリ • ライブラリの目的 •
既存のActorの上に、最小のオーバーヘッド の型実装 • 既存のActorとの互換性
21.
そんなできるの?
22.
さっそく 使ってみよ!
23.
めっちゃくちゃ使 いやすく無いです か?
24.
type-actorで嬉しいこと • 既存のAkkaプロジェクトの用語・概念が一致なので Akka職人達は絶対嬉しい • 型のUnionわかり易いし、使い易い •
UnionはshapelessのAuxパターンで実装され、ソー スも短くわかり易い • Total DSLでreceiveのexhaustiveチェックも可能 • Type/Untyped, Safe/Unsafe Actorの切り替えも簡単
25.
すごいLiteライブラリ cur-project/readsource/typed-actors master ✗ 66d
⚑ ▶ cloc . 351 text files. 254 unique files. 200 files ignored. http://cloc.sourceforge.net v 1.64 T=3.29 s (54.2 files/s, 5646.3 lines/s) ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- XML 137 0 0 14175 Scala 23 440 881 1680 XSLT 1 30 16 468 CSS 2 72 29 316 SASS 4 35 12 188 HTML 6 7 0 128 YAML 3 7 0 48 Javascript 2 0 1 16 ------------------------------------------------------------------------------- SUM: 178 591 939 17019 -------------------------------------------------------------------------------
26.
typed-actorのメリット • 既存の実装と合わすのが簡単 • 手軽の型Actor実装 •
すごい軽い • Experimentalではない • やっぱりもうやめたいと思ったらすぐ切り離せ る
27.
結論 typed-actorが 一番使い易い!
28.
みんなさんtyped- actor使いましょう!
Baixar agora