Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
TO
Uploaded by
Taisuke Oe
6,050 views
Real world android akka
Scala Kansai 2016
Software
◦
Read more
3
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 48
2
/ 48
3
/ 48
4
/ 48
5
/ 48
6
/ 48
7
/ 48
8
/ 48
9
/ 48
10
/ 48
11
/ 48
12
/ 48
13
/ 48
14
/ 48
15
/ 48
16
/ 48
17
/ 48
18
/ 48
19
/ 48
20
/ 48
21
/ 48
22
/ 48
23
/ 48
24
/ 48
25
/ 48
26
/ 48
27
/ 48
28
/ 48
29
/ 48
30
/ 48
31
/ 48
32
/ 48
33
/ 48
34
/ 48
35
/ 48
36
/ 48
37
/ 48
38
/ 48
39
/ 48
40
/ 48
41
/ 48
42
/ 48
43
/ 48
44
/ 48
45
/ 48
46
/ 48
47
/ 48
48
/ 48
More Related Content
PDF
Real World Android Akka - 日本語版
by
Taisuke Oe
PDF
Asakusa FrameworkとScalaの密かな関係
by
hishidama
PPTX
Akka actorを何故使うのか?
by
Nyle Inc.(ナイル株式会社)
PDF
WebSocket+Akka(Remote)+Play 2.1 Java
by
Kazuhiro Hara
PDF
並行処理初心者のためのAkka入門
by
Yoshimura Soichiro
PDF
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
by
TanUkkii
PDF
Sbtのマルチプロジェクトはいいぞ
by
Yoshitaka Fujii
PDF
Akka入門
by
Masashi (Jangsa) Kawaguchi
Real World Android Akka - 日本語版
by
Taisuke Oe
Asakusa FrameworkとScalaの密かな関係
by
hishidama
Akka actorを何故使うのか?
by
Nyle Inc.(ナイル株式会社)
WebSocket+Akka(Remote)+Play 2.1 Java
by
Kazuhiro Hara
並行処理初心者のためのAkka入門
by
Yoshimura Soichiro
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
by
TanUkkii
Sbtのマルチプロジェクトはいいぞ
by
Yoshitaka Fujii
Akka入門
by
Masashi (Jangsa) Kawaguchi
What's hot
PPTX
Akkaの翻訳みんなでやろう Let's translate akka doc
by
賢太郎 前多
PDF
Akka meetup 2014_sep
by
masahitojp
PDF
Akka-Streams in Production
by
Kazunobu Raita
PDF
ScalaでAndroidアプリ開発
by
papamitra
PDF
インターンシップの学生にお届けしようとしたScalaの文法(初級編)
by
Kentaro Masuda
PDF
akka-doc-ja
by
TIS Inc.
PDF
Akkaとは。アクターモデル とは。
by
Kenjiro Kubota
PPTX
【LT】akka receive とScala Javaの違い
by
賢太郎 前多
PDF
実践Akka
by
Huy Do
PDF
ScalaにまつわるNewsな話
by
Yosuke Mizutani
PDF
Akka stream
by
Masaki Toyoshima
PDF
AndroidでScalaを使う際の問題点と対策
by
Mogi Isamu
PDF
Servlet と Future の関わり方 #scala_ks
by
Kazuhiro Sera
PDF
Developing an Akka Edge6
by
saaaaaaki
PPTX
20140518 JJUG MySQL Clsuter as NoSQL
by
Ryusuke Kajiyama
PDF
沢山のスマホサービス環境を カジュアルにセキュアに運用する
by
Hirotomo Oi
PDF
アドテク×Scala×パフォーマンスチューニング
by
Yosuke Mizutani
PDF
コンテナで作れるFaaS
by
真吾 吉田
PDF
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
by
akira6592
PDF
JOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API Dragon
by
Naoto Gohko
Akkaの翻訳みんなでやろう Let's translate akka doc
by
賢太郎 前多
Akka meetup 2014_sep
by
masahitojp
Akka-Streams in Production
by
Kazunobu Raita
ScalaでAndroidアプリ開発
by
papamitra
インターンシップの学生にお届けしようとしたScalaの文法(初級編)
by
Kentaro Masuda
akka-doc-ja
by
TIS Inc.
Akkaとは。アクターモデル とは。
by
Kenjiro Kubota
【LT】akka receive とScala Javaの違い
by
賢太郎 前多
実践Akka
by
Huy Do
ScalaにまつわるNewsな話
by
Yosuke Mizutani
Akka stream
by
Masaki Toyoshima
AndroidでScalaを使う際の問題点と対策
by
Mogi Isamu
Servlet と Future の関わり方 #scala_ks
by
Kazuhiro Sera
Developing an Akka Edge6
by
saaaaaaki
20140518 JJUG MySQL Clsuter as NoSQL
by
Ryusuke Kajiyama
沢山のスマホサービス環境を カジュアルにセキュアに運用する
by
Hirotomo Oi
アドテク×Scala×パフォーマンスチューニング
by
Yosuke Mizutani
コンテナで作れるFaaS
by
真吾 吉田
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
by
akira6592
JOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API Dragon
by
Naoto Gohko
Similar to Real world android akka
PDF
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
by
TanUkkii
PDF
Android binder-ipc
by
magoroku Yamamoto
PDF
Akkaの並行性
by
TIS Inc.
PDF
197x 20090704 Scalaで並行プログラミング
by
Net Penguin
PDF
JavaからAkkaハンズオン
by
TIS Inc.
PDF
Akka/Actor introduction
by
Yuki Katada
PDF
リアルタイム処理エンジンGearpumpの紹介
by
Sotaro Kimura
PDF
Akkaで分散システム入門
by
Shingo Omura
PDF
バッチではじめてAkkaを使ってみた (refined)
by
Koji Agawa
PPTX
自作仮想化基盤 「n0stack」の紹介
by
Takeshi Take
KEY
Actor&stm
by
潤一 加藤
PDF
Netty & Apache Camel
by
ssogabe
PDF
GHC 6.12.1 マルチコア対応ランタイムシステムについて
by
Mitsutoshi Aoe
PDF
Play jjug2012spring
by
Takafumi Ikeda
PDF
About Jobs
by
Shinichi Kozake
PDF
Hadoop book-2nd-ch3-update
by
Taisuke Yamada
PDF
Spring AMQP × RabbitMQ
by
Keisuke Nishitani
PPTX
Akka Persistent FSMを使ってみる
by
Matsushita Satoshi
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
by
TanUkkii
Android binder-ipc
by
magoroku Yamamoto
Akkaの並行性
by
TIS Inc.
197x 20090704 Scalaで並行プログラミング
by
Net Penguin
JavaからAkkaハンズオン
by
TIS Inc.
Akka/Actor introduction
by
Yuki Katada
リアルタイム処理エンジンGearpumpの紹介
by
Sotaro Kimura
Akkaで分散システム入門
by
Shingo Omura
バッチではじめてAkkaを使ってみた (refined)
by
Koji Agawa
自作仮想化基盤 「n0stack」の紹介
by
Takeshi Take
Actor&stm
by
潤一 加藤
Netty & Apache Camel
by
ssogabe
GHC 6.12.1 マルチコア対応ランタイムシステムについて
by
Mitsutoshi Aoe
Play jjug2012spring
by
Takafumi Ikeda
About Jobs
by
Shinichi Kozake
Hadoop book-2nd-ch3-update
by
Taisuke Yamada
Spring AMQP × RabbitMQ
by
Keisuke Nishitani
Akka Persistent FSMを使ってみる
by
Matsushita Satoshi
More from Taisuke Oe
PDF
プレScalaMatsuri2019「スピーカー入門」
by
Taisuke Oe
PDF
How to start functional programming (in Scala): Day1
by
Taisuke Oe
PDF
Monix Taskが便利だという話
by
Taisuke Oe
PDF
How to get along with implicits
by
Taisuke Oe
PDF
What Dotty fixes @ Scala関西サミット
by
Taisuke Oe
PDF
AuxパターンをDottyで解決する
by
Taisuke Oe
PDF
Real World Android Akka
by
Taisuke Oe
PDF
多相な関数の定義から学ぶ、型クラスデザインパターン
by
Taisuke Oe
PDF
Android BLEのつらみを予防するTips
by
Taisuke Oe
PDF
BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~
by
Taisuke Oe
プレScalaMatsuri2019「スピーカー入門」
by
Taisuke Oe
How to start functional programming (in Scala): Day1
by
Taisuke Oe
Monix Taskが便利だという話
by
Taisuke Oe
How to get along with implicits
by
Taisuke Oe
What Dotty fixes @ Scala関西サミット
by
Taisuke Oe
AuxパターンをDottyで解決する
by
Taisuke Oe
Real World Android Akka
by
Taisuke Oe
多相な関数の定義から学ぶ、型クラスデザインパターン
by
Taisuke Oe
Android BLEのつらみを予防するTips
by
Taisuke Oe
BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~
by
Taisuke Oe
Real world android akka
1.
Real World Android
Akka
2.
Who am I? 麻植泰輔
/ Taisuke Oe Twitter: @OE_uia GitHub: taisukeoe 会社 - BONX INC. でAndroidアプリ書いたりスノー ボードするお仕事 - ScalaMatsuri座長 / Japan Scala Association, Inc.常務理事 個人 - Scalaを教える仕事しています
3.
スポンサー募集 CFP スタッフ募集 OPEN!!
4.
What’s the topic? 本日のお話
5.
本日のお話 Android + Scala + Akka ⇓ VoIPクライアント
6.
本日のお話 ◉ Akka ○ メッセージ駆動 ○
Actorの実行モデル ○ Actorのヒエラルキー ◉ BONX ○ BONXとは? ○ BONX VoIPクライアントの要求仕様 ◉ Android Akkaの注意点 ○ Dispatcher, Mailboxの実装など ◉ Scala Androidってどうなの?
7.
Akka?
8.
Akka ◉ メッセージ駆動で並行/分散処理するtoolkit ◉ Lightbend
CTO Jonas Bonér氏が作者 ◉ 名前の由来はスイスの先住民の神様 ◉ スイスのLaponiaという山がAkka神のシンボル
9.
Message Driven? メッセージ駆動?
10.
メッセージ駆動 Actorがメッセージを送り合い協調動作することで、システムを構成 あとはたのむ
11.
メッセージ駆動 あとはたのむ 次に手が空いてから やるわ Actorが受け取ったメッセージは、そのActorに紐付いたMailboxに入る
12.
メッセージ駆動 あとはたのむ 次に手が空いてから やるわ Actorはメッセージ一つ一つを逐次処理する => (特にスレッドセーフではない)状態管理を伴う並行プログラミングに有用
13.
メッセージ駆動 あとはたのむ 今からやるお Actorは他のActorについては、メッセージの送信先と受け取れるメッセージ の種類についてのみ知っておけばよいため、Actor同士を疎結合にしやす い
14.
Akka Dispatcher Actorの実行モデル
15.
Actorの実行モデル Thread Thread Dispatcher DispatcherがActorの実行基盤。内部にThreadPoolを保持。
16.
Actorの実行モデル Thread Thread Dispatcher 1つのActorは、同時に一つのスレッドにだけ割り振られる
17.
Actorの実行モデル Thread Thread Dispatcher Threadが空いたら、次のActorが割り振られる
18.
Actorの実行モデル Dispatcher Actorは、Mailboxにメッセージが有り、なおかつThreadが割り 当てられてるときにメッセージを処理する
19.
Actorプログラミングのアンチパターン Thread Thread Dispatcher Actorが長時間Threadをブロックすると、同じdispatcherを使用 しているActorシステム全体の処理が進みにくくなる 進捗ダメです
20.
Akka Actor Hierarchy Actorのヒエラルキー
21.
Actorの階層構造 Dispatcher Actorには親子関係が作れる ワシが育てた
22.
Actorの階層構造 Dispatcher 子ActorでThrowableが投げられると、親Actorの supervisorStrategy関数が呼ばれる _人人人人人人人人人_ > 突然のThrowable <  ̄Y^Y^Y^Y^Y^Y^Y^Y ̄
23.
Actorの階層構造 Dispatcher supervisorStrategyの実装により、その後の子Actorの処遇が 決定される Restart
24.
Akkaについて - まとめ ◉
Actorがメッセージを送り合うことでシステムを構成 ◉ 1つのActorは同時に1メッセージを1スレッドで逐次処 理するため、状態管理が楽 ◉ 実行モデル ○ Dispatcher … Thread(pool)の保持と、ActorへのThread貸 出 ○ Mailbox … Actorに送られたメッセージ置き場 ◉ ActorのヒエラルキーとSupervisorStrategyの実装を 適切に設定することで、障害からの回復力をもつ
25.
The Way We
Talk BONX
26.
BONXとは? 野外の激しい運動中でも 複数の仲間とスムーズに コミュニケーションとれるVoIPサービス VoIP = Voice
over Internet Protocol
28.
Requirement specification in
BONX VoIP client BONX VoIPクライアントの要求仕様
29.
BONX VoIPクライアントの要求仕様 ◉ 状態管理を伴う並行プログラミング ◉
(それなりに)低遅延 ◉ 障害からの回復力
30.
VoIPは音声ストリーム処理 ソケット通信録音 音量調整 発話検知
エンコード デコード再生
31.
音声ストリーム処理: 並行プログラミング ◉ 1フレームの処理が終わる前に、次のフレームの音声デー タが送られてくる ◉
必然的に並行プログラミングすることになる ◉ しかしエンコーダー・デコーダーなどのモジュールは、多く の場合Threadセーフではない Actorモデル向き
32.
低遅延 ◉ 合計の遅延:大きくなりすぎると、(特に顔が見えていると き)通話中に違和感 ◉ 個々の遅延:フレーム間の遅延が大きくなりすぎると、「ブ ツッ」という音の途切れの原因 Dispatcher,
Mailboxのカスタマイズ性は必要十分
33.
障害からの回復力 ◉ クライアントアプリとしては長時間(~8時間)の連続使用を想 定 ◉ 使用中、録音/再生のハードウェア
I/Oなど一部のモ ジュールに問題が発生するケースがある ◉ 何かの状態がおかしい場合は、関連するモジュール含め て、自動で再初期化が必要 AkkaのActorヒエラルキーを適切に設定しておくと、モジュール 群を自動で再初期化することで障害から回復できる
34.
Pitfalls in Android
Akka Android Akkaの注意点
35.
Android Akkaの注意点 ◉ Akka
version ◉ Proguard設定 ◉ Dispatcherの罠 ◉ Mailboxのサイズ
36.
Akka version ◉ AndroidはJava6/7相当の環境 ◉
Akka 2.14系はJava8要求 => Akka 2.13系を使う
37.
Proguard ● Akkaはapplication.confやPropsを基に、リフレクションで Actorなどをインスタンス化 ● Proguardは使用されていないクラス、メソッドをバイトコード から抜くpost-processingツール ●
Proguardはリフレクションを理解しない ● Android ScalaにおけるNoSuchMethodErrorの発生原因 の殆どはProguard起因 => proguard.cfgに随時指定 参考: Macroid | Akka Integration
38.
Dispatcherの罠 application.confのparallerism-factorは、(min~maxの範囲 で)availableProcessorsに乗じた数のThreadPoolを作る akka.dispatch.ThreadPoolConfig object ThreadPoolConfig { /*
… */ def scaledPoolSize(floor: Int, multiplier: Double, ceiling: Int): Int = math.min(math.max((Runtime.getRuntime.availableProcessors * multiplier).ceil.toInt, floor), ceiling) /* … */ }
39.
AndroidのavailableProcessors Androidの場合、電力消費を抑えるため、高クロックと低クロックのコア から構成されているヘテロCPUが主流。そのため、一度に全てのCPUコ アがonlineにならない端末が多い。 しかしRuntime#availableProcessorsは常に全合計コア数を返す。この 数字をそのまま使うと、Thread数がコア数に対して多くなりすぎてパ フォーマンスが低下することがある /sys/devices/system/cpu/online では 1-5,6
のようにオンライン状態の CPUのindexをチェックできる (参考:Linux kernel related to hotplug a CPU)
40.
カスタムDispatcher akka.dispatcher.ExecutorServiceConfiguratorを継承 したクラスのFQCN(フル修飾名)をapplication.confに指定 可能 my-dispatcher { type =
Dispatcher executor = "com.taisukeoe.MyExecutorConfigurator" fork-join-executor { parallerism-min = 8 parallerism-factor = 2 parallerism-max = 16 } }
41.
カスタム ExecutorServiceConfigurator class MyExecutorConfigurator(config: Config,
prerequisites: DispatcherPrerequisites) extends ExecutorServiceConfigurator(config, prerequisites) { final def createExecutorServiceFactory(id: String, threadFactory: ThreadFactory): ExecutorServiceFactory = { val c = config.getConfig("fork-join-executor") new ForkJoinExecutorServiceFactory( threadFactory.asInstanceOf[ForkJoinPool.ForkJoinWorkerThreadFactory], CPUConfig.scaledPoolSize( c.getInt("parallelism-min"), c.getDouble("parallelism-factor"), c.getInt("parallelism-max")), true) } }
42.
OnlineのCPUコア数を取得 object CPUConfig { private
lazy val rangeRegex = "([0-9]+)-([0-9]+)".r def onlineProcessors: Option[Int] = Try { val reader = new BufferedReader(new FileReader("/sys/devices/system/cpu/online")) val num = Iterator.continually(reader.readLine()).takeWhile(_ != null).toSeq.headOption map { cpu:String => cpu.split(",").map { case rangeRegex(from, to) => to.toInt - from.toInt + 1 case num => 1 }.sum reader.close() num }}.toOption.flatten def scaledPoolSize(floor: Int, multiplier: Double, ceiling: Int): Int = math.min(math.max(onlineProcessors.getOrElse(Runtime.getRuntime.availableProcessors) * multiplier).ceil.toInt, floor), ceiling) }
43.
Mailboxのサイズ ◉ Androidは(増えてきたとはいえ)基本的には低メモリ環境 ◉ 1
VM ~ 数百MB RAM ◉ サイズ制限のないMessageBoxだとOutOfMemoryErrorのおそれ ◉ できるだけ有限サイズのMailbox (BoundedMailbox) を使う方が 良い ◉ それで必要要件をみたさないときは、カスタムMailboxを作るべき 参考: Mailboxes -- Akka my-mailbox { mailbox-type = "com.taisukeoe.MyMailBox" }
44.
Android Scala Pros
& Cons ScalaでAndroidってどうなの?
45.
ScalaでAndroidってどうなの? ◉ ScalaとAndroid両方に詳しい人がチームに1人いたら選択肢として アリ。チーム2人目以降は、どちらかについて詳しければ、教育可能 ◉ sbt-androidが(クセはあるけど)とても優秀。組み合わせると便利な sbt
pluginも色々 ◉ 今回のケースではScala + Akka + Androidのメリットが存分に活き た ○ 常時1~2人分の工数の少人数チームで新規機能開発&メンテ ○ 必要な低遅延/スループットなどのパフォーマンスを達成しつ つ、モジュールの疎結合化、コードの抽象化に(それなりに)成
46.
ScalaでAndroidってどうなの? ◉ 万人にオススメはしない ◉ ScalaとAndroid両方の知識がそれなりに必要 ◉
ビルドが長い (Proguardのせい) ◉ Googleのサポート外 ○ Scala2.12 & Java8対応? ■ Jack & JillがJava8対象 ○ Jack & Jill対応? ■ sbt-androidにPullReqは一応....
47.
まとめ ◉ Akkaはメッセージ駆動で並行/分散処理を便利に行える toolkit ◉ Androidでも幾つかのポイントに注意すれば、Akkaは十分 実用的である。 ◉
VoIPアプリの音声ストリーム処理など、AndroidでもActor モデルが非常に有用となるケースがある
48.
We’re hiring! ◉ VoIPクライアントアプリに興味がある人 ◉
Android Scalaを触ってみたい人 ◉ Akkaのチューニングをゴリゴリしたい人 ◉ スノボ、サイクリング 等々が好きな人 お気軽に @OE_uia までメッセください
Download