たこぶろ

エンジニアははてなでブログを書くものだそうなので作ったブログです。

歌舞伎座.tech#7「Reactive Extensions」に参加してきました!

kbkz.connpass.com

 

以下、メモ程度ですがメモったものを記しておきます。

 

 

Reactive Extensions はじめました @okazukiさん

オブザーバーパターン

 監視対象⇄監視者

 IObservable⇄Observer

変わった時に通知する

監視される人は状態が変化したら値を発行する

そしたら、監視者が値を受け取って処理をする

IObservable<T>とは→

Push型のコレクション

・イベント

クリック(時系列でイベントが起きる)

・非同期処理(単一処理)

・普通のコレクションも0秒間に一気に値が発行される

 

コレクションでできること

 ・フィルタ

 ・射影(変換)

 ・合成

マウスイベントを組み合わせる

mousemoveをPush型のコレクションにして

1つ前のコレクションの要素と合成して

mousedownまでスキップする(フィルタ)

mouseupまで拾う

とお絵描きアプリ

 

Observable Everywhere -Rxの原則とUniRxにみるデータソースの見つけ方 @neueccさん

http://t.co/EXNwy5POUD

onnextが0回以上発生した後に

oncompletedかonerrorが発生する

一見無関係のイテレータパターンとオブザーバーパターンに深い関連性がある

イテレータのためのLINQがオブザーバーにもできる

 

Observableの源流が必要

DOM、DBのRowはシーケンスになる

→シーケンスを見出す

 

Rxをつかうとネストを1段に抑えることができる

→callback地獄の回避

 

直列処理や並列処理やタイムアウト付与などをメソッドを足すだけで簡単にできる

 

UIEventもいろんなメソッドを流し込むことができる

ボタン

インプットフィールド 

トグル

スライダー

 

衝突もIObservable<Collection>

 

ゲームループは毎フレームごとにメソッドが呼び出される

 

Rx = Observable + LINQ + scheduler

schedulerは時空魔法の、時と空間(実行スレッド...)をコントロール

 

PollingはIObservableと「見なせる」

 

ログはInProcessにおいてもStreamとして扱えるべき

 

nicocasのwebフロントで使ってみた @crexistaさん

http://www.slideshare.net/kaorashibacaki/kabuki-rx2

 

RxJSの中を追う @wilfremさん

http://www.slideshare.net/wilfrem/tech-rxjs

RxのHot/Cold

Rxが中で何をやっているかがわかればハマりどころを回避できる?

言語ごとの実装に大きな違いはない

 

「doはColdなObservableだ」

RxはonNextが0個以上

そのあとにonCompleted or onError

オペレーターはObservableを返す

オーペーレータは繋げられる

メッセージはオペーレータに加工されて伝達する

 

オペレーターがオペレーターをsubscribeする方法とは?

オペレーターはObserverを「生成」する

 

AnnonimousObservable

 

 

Hot=Observerのチェーンを作ること

チェーンを作るからメッセージが流れる

Hotとはsubscribeしてチェーンを作ること

一番先頭まで

 

タイプ1”非保持型”

 Observerを保持しない

 何回subscribeしても同じ結果となる

 大抵のオペレータ

 Cold Observable

 

タイプ2”保持型”

 observableをキャプチャする

 必要になった時にメッセージを流す

 流す対象をリストとして持ち、分配機能を持つ

 

 publish, fromEvent, Subject

Hot Observable Hotな性質

 

SubjectはObserverをリストとして持つ

Observerとしてメッセージを受け取る

Observableとしてメッセージを配信する

すBジェcTを挟むと”保持型”になる

Cold→Hot変換

 

Rxは中で

 (乱暴目に言うと)5つの要素で構成されている

 Observableとオペレータ→手前の参照を持つ→Cold

 subscribe差し替え

  filter 

      map

Subscribeによって後ろのObserverを知る→Hot

 

disposeを呼ぶかストリームが終了で消滅

 

Schedular

 実行する関数をイベントキューに積む機構

 メッセージの送信タイミングを変えられる

 実装方法は言語によって違いはない

 RxJSはイベントループに積む/積まないのみ

 Schedular.defaultが使える

 積む関数は適切に選ばれる

 

使い所

 重たい処理

 処理を一息つかせたい時

 スレッド切り替え/同期したい時

 

testing RxJS @erukitiさん

http://www.slideshare.net/erukiti/testing-rxjs

 

Clean Architectureで設計してRxJSを使った話 @_kondeiさん

http://www.slideshare.net/_kondei/clean-architecturerxjs

 

iOS+SwiftFRP @shun_fuさん

Swiftは一番愛されている言語

HotかColdか、完全に無限か潜在的に有限か、を型で表現できるようにしたい

 

UniRxを使ってみた話 @toRisouPさん

話が頭に入ってこない

UnityでRxが使えるのは本当に素晴らしい

 

・感想

Rxに関してはざっくりとした理解しかしてなかったんですが、今回でしっかりと理解できたと思います。

概念的な話も、実際に使ってみた話もどれもとても分かりやすく、ためになりました。