Submit Search
Upload
Reactive
•
Download as PPTX, PDF
•
1 like
•
1,200 views
Akihiro Ikezoe
Follow
Reactive vs Promise勉強会
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 20
Download now
Recommended
Reactive Systems と Back Pressure
Reactive Systems と Back Pressure
Akihiro Ikezoe
RxSwift x Realm
RxSwift x Realm
Kosuke Usami
クラスメソッド第4回登壇資料 RxRealm
クラスメソッド第4回登壇資料 RxRealm
Daisuke Nagata
Rx swift,Repro framewolrk
Rx swift,Repro framewolrk
Daisuke Nagata
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Koichi Sakata
RxSwift
RxSwift
Kosuke Usami
Sansan様 登壇資料
Sansan様 登壇資料
Daisuke Nagata
RxSwift x APIKit
RxSwift x APIKit
Kosuke Usami
Recommended
Reactive Systems と Back Pressure
Reactive Systems と Back Pressure
Akihiro Ikezoe
RxSwift x Realm
RxSwift x Realm
Kosuke Usami
クラスメソッド第4回登壇資料 RxRealm
クラスメソッド第4回登壇資料 RxRealm
Daisuke Nagata
Rx swift,Repro framewolrk
Rx swift,Repro framewolrk
Daisuke Nagata
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Koichi Sakata
RxSwift
RxSwift
Kosuke Usami
Sansan様 登壇資料
Sansan様 登壇資料
Daisuke Nagata
RxSwift x APIKit
RxSwift x APIKit
Kosuke Usami
Rx入門
Rx入門
Takaaki Suzuki
Flowtype Introduction
Flowtype Introduction
Teppei Sato
RxSwift
RxSwift
Kosuke Usami
LabVIEW NXG Current Status @ 2020
LabVIEW NXG Current Status @ 2020
Yusuke Tochigi
UniRx勉強会 reactive extensions inside(公開用)
UniRx勉強会 reactive extensions inside(公開用)
wilfrem
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Teppei Sato
Introduction to GraalVM
Introduction to GraalVM
Koichi Sakata
RxSwiftのデータバインディングだけ
RxSwiftのデータバインディングだけ
Hironytic
Async DeepDive basics
Async DeepDive basics
Kouji Matsui
お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方
Shunji Konishi
Embulkを活用したログ管理システム
Embulkを活用したログ管理システム
Akihiro Ikezoe
Incremental DOM and Recent Trend of Frontend Development
Incremental DOM and Recent Trend of Frontend Development
Akihiro Ikezoe
Deconstruction of Serverless and blockchain
Deconstruction of Serverless and blockchain
Takahiro Hayashida
RubyistのためのSilverlight2
RubyistのためのSilverlight2
Akihiro Ikezoe
Silverlight2でつくるリッチなTrac用UI
Silverlight2でつくるリッチなTrac用UI
Akihiro Ikezoe
【Potatotips #30】RxJavaを活用する3つのユースケース
【Potatotips #30】RxJavaを活用する3つのユースケース
Hiroyuki Kusu
Domain Event - The Hidden Gem of DDD
Domain Event - The Hidden Gem of DDD
Henrik Møller Rasmussen
Gradle a new Generation Build Tool
Gradle a new Generation Build Tool
Shinya Mochida
今なぜサーバーレスなのか
今なぜサーバーレスなのか
真吾 吉田
Closure Toolsの紹介
Closure Toolsの紹介
Yusuke Amano
Zoetrope
Zoetrope
Ellie Buchan
Webアプリケーションをもっと楽しく! 〜フロントエンドのお仕事〜
Webアプリケーションをもっと楽しく! 〜フロントエンドのお仕事〜
Yusuke Amano
More Related Content
What's hot
Rx入門
Rx入門
Takaaki Suzuki
Flowtype Introduction
Flowtype Introduction
Teppei Sato
RxSwift
RxSwift
Kosuke Usami
LabVIEW NXG Current Status @ 2020
LabVIEW NXG Current Status @ 2020
Yusuke Tochigi
UniRx勉強会 reactive extensions inside(公開用)
UniRx勉強会 reactive extensions inside(公開用)
wilfrem
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Teppei Sato
Introduction to GraalVM
Introduction to GraalVM
Koichi Sakata
RxSwiftのデータバインディングだけ
RxSwiftのデータバインディングだけ
Hironytic
Async DeepDive basics
Async DeepDive basics
Kouji Matsui
お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方
Shunji Konishi
What's hot
(10)
Rx入門
Rx入門
Flowtype Introduction
Flowtype Introduction
RxSwift
RxSwift
LabVIEW NXG Current Status @ 2020
LabVIEW NXG Current Status @ 2020
UniRx勉強会 reactive extensions inside(公開用)
UniRx勉強会 reactive extensions inside(公開用)
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Introduction to GraalVM
Introduction to GraalVM
RxSwiftのデータバインディングだけ
RxSwiftのデータバインディングだけ
Async DeepDive basics
Async DeepDive basics
お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方
Viewers also liked
Embulkを活用したログ管理システム
Embulkを活用したログ管理システム
Akihiro Ikezoe
Incremental DOM and Recent Trend of Frontend Development
Incremental DOM and Recent Trend of Frontend Development
Akihiro Ikezoe
Deconstruction of Serverless and blockchain
Deconstruction of Serverless and blockchain
Takahiro Hayashida
RubyistのためのSilverlight2
RubyistのためのSilverlight2
Akihiro Ikezoe
Silverlight2でつくるリッチなTrac用UI
Silverlight2でつくるリッチなTrac用UI
Akihiro Ikezoe
【Potatotips #30】RxJavaを活用する3つのユースケース
【Potatotips #30】RxJavaを活用する3つのユースケース
Hiroyuki Kusu
Domain Event - The Hidden Gem of DDD
Domain Event - The Hidden Gem of DDD
Henrik Møller Rasmussen
Gradle a new Generation Build Tool
Gradle a new Generation Build Tool
Shinya Mochida
今なぜサーバーレスなのか
今なぜサーバーレスなのか
真吾 吉田
Closure Toolsの紹介
Closure Toolsの紹介
Yusuke Amano
Zoetrope
Zoetrope
Ellie Buchan
Webアプリケーションをもっと楽しく! 〜フロントエンドのお仕事〜
Webアプリケーションをもっと楽しく! 〜フロントエンドのお仕事〜
Yusuke Amano
企業向けクラウドサービスの開発・運用 悩みどころのパターンと対策
企業向けクラウドサービスの開発・運用 悩みどころのパターンと対策
Ryo Mitoma
こだわりのkintone
こだわりのkintone
Yusuke Amano
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
Yuta Okamoto
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
Akihiro Ikezoe
kintoneフロントエンド開発 モダン化への道
kintoneフロントエンド開発 モダン化への道
Yusuke Amano
サイボウズの方向性
サイボウズの方向性
naoki ando
オウンドメディア企画書
オウンドメディア企画書
naoki ando
kintoneチームのKAIZEN文化
kintoneチームのKAIZEN文化
Ryo Mitoma
Viewers also liked
(20)
Embulkを活用したログ管理システム
Embulkを活用したログ管理システム
Incremental DOM and Recent Trend of Frontend Development
Incremental DOM and Recent Trend of Frontend Development
Deconstruction of Serverless and blockchain
Deconstruction of Serverless and blockchain
RubyistのためのSilverlight2
RubyistのためのSilverlight2
Silverlight2でつくるリッチなTrac用UI
Silverlight2でつくるリッチなTrac用UI
【Potatotips #30】RxJavaを活用する3つのユースケース
【Potatotips #30】RxJavaを活用する3つのユースケース
Domain Event - The Hidden Gem of DDD
Domain Event - The Hidden Gem of DDD
Gradle a new Generation Build Tool
Gradle a new Generation Build Tool
今なぜサーバーレスなのか
今なぜサーバーレスなのか
Closure Toolsの紹介
Closure Toolsの紹介
Zoetrope
Zoetrope
Webアプリケーションをもっと楽しく! 〜フロントエンドのお仕事〜
Webアプリケーションをもっと楽しく! 〜フロントエンドのお仕事〜
企業向けクラウドサービスの開発・運用 悩みどころのパターンと対策
企業向けクラウドサービスの開発・運用 悩みどころのパターンと対策
こだわりのkintone
こだわりのkintone
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
kintoneフロントエンド開発 モダン化への道
kintoneフロントエンド開発 モダン化への道
サイボウズの方向性
サイボウズの方向性
オウンドメディア企画書
オウンドメディア企画書
kintoneチームのKAIZEN文化
kintoneチームのKAIZEN文化
Similar to Reactive
CMDBuildを中心とした運用管理自動化基盤OpenPIEの事例紹介
CMDBuildを中心とした運用管理自動化基盤OpenPIEの事例紹介
OSSラボ株式会社
Swift bond コードリーディング
Swift bond コードリーディング
Shun Nakahara
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
2020/12/03 SaaS を正しい方向へ加速するフィードバックループ
2020/12/03 SaaS を正しい方向へ加速するフィードバックループ
Issei Hiraoka
Uapcfb
Uapcfb
Sei Takayuki
HTML5 クロスプラットフォームアプリ開発の現実解
HTML5 クロスプラットフォームアプリ開発の現実解
Monaca
Real World Android Akka - 日本語版
Real World Android Akka - 日本語版
Taisuke Oe
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
Takuji Kawata
【NGINXセミナー】 Ingressを使ってマイクロサービスの運用を楽にする方法
【NGINXセミナー】 Ingressを使ってマイクロサービスの運用を楽にする方法
NGINX, Inc.
Istio, Kubernetes and Cloud Foundry
Istio, Kubernetes and Cloud Foundry
Kazuto Kusama
C#の書き方
C#の書き方
信之 岩永
C#の書き方
C#の書き方
信之 岩永
LogicFlow 概要
LogicFlow 概要
Tomoyuki Obi
Google Cloud でアプリケーションを動かす.pdf
Google Cloud でアプリケーションを動かす.pdf
Google Cloud Platform - Japan
RxJava on Android
RxJava on Android
yo_waka
Reactive extensions
Reactive extensions
yone64
20190731 Azure Functions x Line at Azure Tech Lab #4
20190731 Azure Functions x Line at Azure Tech Lab #4
Issei Hiraoka
ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版
Fumiya Sakai
TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016
TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016
RWSJapan
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
kan-notice
Similar to Reactive
(20)
CMDBuildを中心とした運用管理自動化基盤OpenPIEの事例紹介
CMDBuildを中心とした運用管理自動化基盤OpenPIEの事例紹介
Swift bond コードリーディング
Swift bond コードリーディング
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
2020/12/03 SaaS を正しい方向へ加速するフィードバックループ
2020/12/03 SaaS を正しい方向へ加速するフィードバックループ
Uapcfb
Uapcfb
HTML5 クロスプラットフォームアプリ開発の現実解
HTML5 クロスプラットフォームアプリ開発の現実解
Real World Android Akka - 日本語版
Real World Android Akka - 日本語版
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
【NGINXセミナー】 Ingressを使ってマイクロサービスの運用を楽にする方法
【NGINXセミナー】 Ingressを使ってマイクロサービスの運用を楽にする方法
Istio, Kubernetes and Cloud Foundry
Istio, Kubernetes and Cloud Foundry
C#の書き方
C#の書き方
C#の書き方
C#の書き方
LogicFlow 概要
LogicFlow 概要
Google Cloud でアプリケーションを動かす.pdf
Google Cloud でアプリケーションを動かす.pdf
RxJava on Android
RxJava on Android
Reactive extensions
Reactive extensions
20190731 Azure Functions x Line at Azure Tech Lab #4
20190731 Azure Functions x Line at Azure Tech Lab #4
ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版
TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016
TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
Reactive
1.
2015/2/18 アリエル・ネットワーク 池添
2.
3.
非同期処理の重要性 C10K問題
Node.jsでは、I/Oに関するAPIはすべて非同期 UX スマホでは、しばらく応答のないアプリは強制終了 WinRT APIでは、50msec以上かかりそうな処理はすべて非同期 非同期処理を扱う機会が増えている。 非同期処理をきれいに書くためにPromiseやReactiveに注目が集まっている。
4.
最近、いろんな人たちがいろんな意味でリアク ティブという言葉を使っている。 それぞれ若干意味が異なっている。
バズワード化 FRP Reactive Manifesto React.js Rx Google Trends
5.
時間や外部の入力と共に変化する値を、 反応的(reactive)に処理するプログラミ ングパラダイム。 アニメーション、GUIプログラミング、セ ンサやロボット制御プログラムなどを実 現するときに役立つ。
2種類の入力の概念を扱う Behavior 時間に伴い連続的に変化する値 Signal 時間順に並ぶ離散的なイベント var a = 1 var b = a + 1 a = 10 // aを書き換える print b // => 11 時間[t] よくある例 イベントストリームの例 xs:[e1, e2, e3,e4, e5] 非同期に発生するイベントを 無限リストのように扱う
6.
Reactive Programmingを関数型プログラミング言語で実現したもの。 let result
:: Behavior t (Maybe Int) result = f <$> input1 <*> input2 where f x y = liftA2 (+) (readNumber x) (readNumber y)
7.
Microsoft ResearchでErik
Meijer(Haskell仕様策定者の一人)が中心となって開発。 FRPを実用レベルに落とし込んだ。 C#実装 Signalのみに特化 エラーハンドリング リソース管理 スケジューラ テストのための機能 Hot Observable, Cold Observable 豊富な関数群
8.
Rxを好むプログラマーが多く、他のプログラミ ング言語への移植が進んでいる。 Rx開発者の1人がNetflix社に移り、RxJavaを 開発。Rxの普及に大きな貢献。
Rx実装を取りまとめたReactiveXというコミュ ニティも誕生。 Microsoft Rx (C#) RxJS RxCpp RxPy Rx.ObjC ReactiveX RxJava RxRust Rx.rb RxScala RxAndroid RxKotlin RxGroovy RxGo RxClojure そのほか ReactiveCocoa BaconJS
9.
Scalaを開発しているTypesafe社が提唱 下記の特徴を持ったアーキテクチャを リアクティブシステムと呼ぶ。
即応性 耐障害性 弾力性 メッセージ駆動 リアクティブシステムを構築するためにAkkaの利用を推奨している。 Akkaのマーケティングとしてリアクティブという言葉に便乗したのではという一部批判も。 Reactive Streams 非同期ストリーム処理のAPIの標準化 Akka Streams, Reactor, RxJava, Ratpack, vert.xなどが対応。
10.
Facebook社の開発するクライアントサイド向けのアプリケーションフレームワーク。 今もっとも勢いがあるフレームワークのひとつ。
Reactという名前ではあるが、リアクティブプログラミングとはあんまり関係ない。 GUIにおけるデータバインド機能は古くから存在する。 データバインド機能は、一種のリアクティブプログラミングであるといえる。
11.
12.
イベントを時間的に流れてくるデータの無限リ ストとして扱う。 イベントに対しても、普通のリストと同じよう にmap,
reduce, filterなどの処理が使える Iterator Action側からデータソースに対してデータを取 りにいく(Pullスタイル) Observable データソース側からActionに対してデータを通 知する(Pushスタイル) Iterator <T> Observable <T> Action Action T next() onNext(T) Pullスタイル Pushスタイル
13.
Observer イベントを受け取る人。監視する人。
3種類のイベントを利用 onNext: データ通知 onError: エラー通知 onCompleted: 完了通知 Observable イベントを発行する人。監視対象。 observable.subscribe(observer); いろんなメソッドをつなげてかける observable .filter(x -> x > 5) .map(x -> x * x) .subscribe(x -> print(x)); Subscription(Disposable) subscribeの戻り値 監視を解除することができる。 var s = observable.subscribe(observer) s.unsubscribe(); unsubscribeを呼ばなくても、onCompleted発生 時点で監視は解除される Scheduler コールバック関数を実行するスレッドを切り替え ることができる。 GUIアプリの場合、subscribeを実行するスレッ ドをUIスレッドに切り替えて、画面の描画をおこ なう場合などに使える。 テスト用スケジューラを使うと、実行タイミング を自在に制御できる。
14.
Promiseも非同期処理を書きやすくするための手段。 Promiseが主に1回きりのイベントを取り扱うのに対して、Reactiveではイベントストリームを扱 う。
RxではPromiseとの相互変換のAPIも用意している。 Promiseの強み ジェネレータ(yield)との相性がよい。 非同期処理を同期処理のように書くことができる。 C#, JavaScript, TypeScript, Python JavaScriptではブラウザ組み込みになる。 Javaでも標準ライブラリに入ってる。 async void func() { try { var x = await something1(); var y = await something2(x); } catch (Exception ex) { // エラー処理 } }
15.
fileSystem.open(fileName, result ->
{ if (result.succeeded()) { result.result().write(buf, 100, x -> { if (x.succeeded()) { result.result().close(v -> { if (v.succeeded()) { // 正常処理 } else { // エラー処理 } }); } else { // エラー処理 } }); } else { // エラー処理 } }); fileSystem.open(fileName) .flatMap(file -> file.write(buf, 100) .flatMap(v -> file.close())) .subscribe( x -> /* 正常処理 */, e -> /* エラー処理 */ ); ノンブロッキングI/OのAPI を利用してファイル操作をし ていると、ネストが深くなり エラー処理も分散してしまう RxJavaで書き換えると 見通しがよくなった
16.
clickEvents .buffer(clickEvents.throttle(250)) .map(es -> es.length()) .filter(len
-> len == 3) .subscribe(x -> { print("トリプルクリック"); }); 時間[t] クリックイベント throttle map filter buffer 1 3 2 3 250ms
17.
リトライ処理 Observable.defer(() -> httpClient.get("/api/products") ) .retry(5) .subscribe( x
-> /* 正常に取得できた*/, e -> /* 5回以上失敗した */ ); タイムアウト処理 httpClient.get("/api/products") .timeout(1000) .take(1) .subscribe( x -> /* 正常に取得できた*/, e -> /* 1秒待っても結果が得られなかった */ );
18.
textChangedEvents .throttle(250) .map(data -> data.newValue) .distinctUntilChanged() .flatMap(text
-> search(text)) .switchLatest() .subscribe(x -> print(x)); 時間[t] テキスト入力 throttle flatMap(search) switchLatest distict a a ab a a ar ariel arielar 検索ワード 検索結果
19.
非同期処理を書くときにはPromiseとかReactiveとか使いましょう。 PromiseとReactiveは競合するものではない。適材適所で使いましょう。
Reactive Programingはとても楽しいので、ぜひ一度ためしてみてください。 あなたの好きなプログラミング言語でもRx実装があるかも。(なければつくろう!)
20.
なぜリアクティブプログラミングは重要か。 やさしいFunctional
reactive programming(概要編) 【翻訳】あなたが求めていたリアクティブプログラミング入門 The History of Reactive Extensions ReactiveX "The Reactive Manifesto v2.0" 日本語訳 非同期ストリーム処理の標準化を目指す "Reactive Streams" とは RxMarbles
Download now