SlideShare a Scribd company logo
1 of 47
Download to read offline
Reactive Extensionsで
WP7の非同期処理を簡単に

             @neuecc – 2011/5/21
Profile
 Twitter
        => @neuecc
 Blog => http://neue.cc/
 HNはneuecc 読むときは“のいえ”と読ませてます
     ドメイン繋いだだけなので発音するの考えてなかっ
      た(のでccは抜きで←発音しにくいですから)
 Microsoft   MVP for Visual C#(2011/4-)

 WP7で作った物
     ReactiveOAuth, Utakotoha
 WP7の好きなtheme
     light + lime
Agenda
 LINQの概要/LINQとしてのReactive
                      Extensions
 非同期処理の面倒さと如何にRxが癒すか
 .NETにおける非同期パターンの説明
 Rxの基本(購読, キャンセル, 例外処理)
 非同期処理で使うRxのメソッド概略
 作った物紹介
Linq to Introduction
Language INtegrated Query
// クエリ構文
var query = from x in source
            where x % 2 == 0
            select x * x;

// メソッド構文
var query = source
    .Where(x => x % 2 == 0)
    .Select(x => x * x);
LINQって何?
 データソースを統一的な書法で処理できる
 WhereでフィルタしてSelectで射影できるならそれ
  はLINQって言えます!
 SQL関係ないし、C#も飛び越えて生きる概念
 JavaScript移植もあるしね
    linq.js – http://linqjs.codeplex.com/
    RxJS(Reactive Extensions for JavaScript)
LINQのデータソースとは
to Objects      to Xml      to Sql
  配列             XML          Database
  List<T>        (JSON)
  Stream
  無限リスト

to Events       to Asynchronous
  TextChanged    IO – WebRequest
  ジェスチャー         Timer – ポーリング
  センサー           Thread – 長時間かかる処理
  MusicPlayer

                             Reactive Extensions
Reactive Extensions =
  Linq to Events
  Linq to Asynchronous
LINQにおけるデータソースの拡張
……というだけじゃない
時間という軸を中心にした基盤
Rxの基本軸は時間
IE<T>                           length




                        IE<T>


                async
        event

IO<T>                           time


=> IE<T>も乗っかることで「全てのデータソース」が合成可能に!
Async Programming Blues
古き良き同期コード
var req = WebRequest.Create("http://hoge/");
var res = req.GetResponse();
var str = new StreamReader(res.GetResponseStream()).ReadToEnd();



 簡単。でも、Silverlight/WP7には同期APIは無い。
     UIがブロックされるのダメ絶対
 Thread立ててそっちで実行させれば?
     まあそうです
     でもないものはないのでしょうがない
     そのかわり特に気を使わなくても必ずUIノンブロッ
      キングになる(※但しCPUヘヴィな処理は除く)
しょうがないので非同期で書く
var req = WebRequest.Create("http://hoge");
req.BeginGetResponse(ar =>
{
    var res = req.EndGetResponse(ar);
    var str = new StreamReader(res.GetResponseStream())
        .ReadToEnd();

    Dispatcher.BeginInvoke(() => MessageBox.Show(str));
}, null);



           -> EndHoge
 非同期はBeginHoge
 基本、クロージャ全開で書く
 面倒くさいけれど、まあこれぐらいなら?
ネストするとかなりヤバい
var req = WebRequest.Create("http://hoge");
req.BeginGetResponse(ar =>
{
    var res = req.EndGetResponse(ar);
    var url = new StreamReader(res.GetResponseStream())
        .ReadToEnd();
    var req2 = WebRequest.Create(url);
    req2.BeginGetResponse(ar2 =>
    {
        var res2 = req2.EndGetResponse(ar2);
        var str = new StreamReader(res2.GetResponseStream())
            .ReadToEnd();
        Dispatcher.BeginInvoke(() => MessageBox.Show(str));
    }, null);
}, null);
通信箇所に例外処理は必須
 WP7ではネットワーク周りのコードでは100%例外
  発生の可能性がある
 圏外だったり通信が超低速だったりすると?
    Hello, Timeout.
    山崎春のWebException祭り
    何の手立てもしないとアプリ落ちるよ
 予期される例外だし、固有の後処理もあるだろう
 し、復帰可能にすべきなので、その場その場で
 catchして始末するのが無難
内側なのは見た目だけ
var req = WebRequest.Create("http://hoge");
req.BeginGetResponse(ar =>
{                                  非同期中に起こる例外はEnd時に戻される
    try
    {
        var res = req.EndGetResponse(ar);
        var url = new StreamReader(res.GetResponseStream()).ReadToEnd();
        var req2 = WebRequest.Create(url);
        req2.BeginGetResponse(ar2 =>           ここの例外をcatchしてない
        {
             var res2 = req2.EndGetResponse(ar2);
             var str = new StreamReader(res2.GetResponseStream()).ReadToEnd();
             Dispatcher.BeginInvoke(() => textBlock1.Text = str);
        }, null);
    }                        catchできるのは同じ関数のブロック内だけ
    catch(WebException e)
    {
          Dispatcher.BeginInvoke(() => MessageBox.Show(e.ToString()));
    }
}, null);
もはやカオスすぎて頭痛い
var req = WebRequest.Create("http://hoge");
req.BeginGetResponse(ar =>
{
    try
    {
        var res = req.EndGetResponse(ar);
        var url = new StreamReader(res.GetResponseStream()).ReadToEnd();
        var req2 = WebRequest.Create(url);
        req2.BeginGetResponse(ar2 =>
        {
             try
             {
                 var res2 = req2.EndGetResponse(ar2);
                 var str = new StreamReader(res2.GetResponseStream()).ReadToEnd();
                 Dispatcher.BeginInvoke(() => MessageBox.Show(str));
             }
             catch (WebException e)
             {
                 Dispatcher.BeginInvoke(() => MessageBox.Show(e.ToString()));
             }
        }, null);
    }
    catch (WebException e)
    {
          Dispatcher.BeginInvoke(() => MessageBox.Show(e.ToString()));
    }
}, null);
Reactive Extensionsを使うと
ネストが消滅し完全フラット
                                 拡張メソッド(後で説明します)

 WebRequest.Create("http://hoge")
 .GetResponseAsObservable()
 .Select(res =>
     new StreamReader(res.GetResponseStream()).ReadToEnd())
 .SelectMany(s => WebRequest.Create(s).GetResponseAsObservable())
 .Select(res =>
     new StreamReader(res.GetResponseStream()).ReadToEnd())
 .ObserveOnDispatcher()
 .Subscribe(
     s => MessageBox.Show(s),
     e => MessageBox.Show(e.ToString()));


                内部で発生する例外は全てここで扱える
Rxを使うことの利点
 ネストがなくなって平らに
 統一的な例外処理が可能


+   その他の機能もいっぱい
    リトライ処理
    イベントやシーケンスとの合成など
Asynchronous Patterns
非同期のもと
 非同期パターンは概ね二つ
    APM(Asynchronous Programming Model)
        BeginXxx-EndXxx
        WebRequest.BeginGetResponseとか
    EAP(Event-based Asynchronous Pattern)
        XxxAsync-XxxCompleted
        WebClient.DownloadStringAsync/Copletedとか


 将来的には?
    Rx(WP7では標準搭載ですが.NET4ではまだ)
    Task(.NET4では標準搭載ですがWP7ではまだ)
    C# 5.0 Async(まだCTP, 恐らく2年ぐらい先)
どっちがいいの?
 Rxで使うならAPMのほうが相性良い
 APMは上から下まで流れてるが、EAPは最後に発火
  させなければならない
 これはネストする場合に致命的に面倒


// APM
WebRequest.Create("http://hoge")
    .GetResponseAsObservable()
    .Subscribe();
// EAP
                                         Subscribe後に発火
var wc = new WebClient();
wc.DownloadStringCompletedAsObservable()
    .Subscribe();
wc.DownloadStringAsync("http://hoge");
拡張メソッドのすゝめ
 APM,WebRequest->WebResponseはプリミティブ
  すぎて、一々Stream扱ったり面倒くさい
 WebClientのDownloadString的なのが欲しい


 なら拡張メソッドで自作すれば解決
 FromEventやFromAsyncPatternは定型句なので、こ
 ちらも拡張メソッドで隔離するのがお薦め
FromEvent(FromEventPattern)
       戻り値はIEvent<EventArgs>のIO<T>


public static
IObservable<IEvent<DownloadStringCompletedEventArgs>>
    DownloadStringCompletedAsObservable(this WebClient webClient)
{
    return Observable.FromEvent<
            DownloadStringCompletedEventHandler,
            DownloadStringCompletedEventArgs>(
        h => h.Invoke, // おまじない
        h => webClient.DownloadStringCompleted += h,
        h => webClient.DownloadStringCompleted -= h);
}

                      FromEvent<EventHandler,EventArgs>
FromAsyncPattern
 FromAsyncPatternの戻り値はデリゲート
     つまり自分でInvokeするまで実行されない
 拡張メソッドにするなら即実行のほうが便利?
 Task.Factory.StartNew的なイメージで

public static IObservable<WebResponse>
    GetResponseAsObservable(this WebRequest request)
{
    return Observable.FromAsyncPattern<WebResponse>(
            request.BeginGetResponse, request.EndGetResponse)
        .Invoke();
}
DownloadStringAsync(の自作)
 Stringが戻ったほうが便利ですよね
 POSTなども同じように作っておくと楽になる
public static IObservable<string>
    DownloadStringAsync(this WebRequest request)
{
    return request.GetResponseAsObservable()
        .Select(res =>
        {
            using (var stream = res.GetResponseStream())
            using (var sr = new StreamReader(stream))
            {
                return sr.ReadToEnd();
            }
        });
}
最初の例もこんなにスッキリ
 Rxが提供してくれているのは基本的な道具
 Rxは「分離しやすい」のも特徴的なメリット
 <T>への拡張メソッドや、IO<T>->IO<T>の拡張メ
  ソッドなどを作って、すっきりさせよう

WebRequest.Create("http://hoge")
    .DownloadStringAsync()
    .SelectMany(s => WebRequest.Create(s).DownloadStringAsync())
    .ObserveOnDispatcher()
    .Subscribe(
        s => MessageBox.Show(s),
        e => MessageBox.Show(e.ToString()));
Basics of Rx
書き方の基本
 System.Observableを参照する
 Microsoft.Phone.Reactiveを参照する
    WP7には標準搭載
    NET4版は別途インストールしてSystem.Reactiveを

 定形的な流れは
 FromEvent/FromAsyncして(IO<T>の生成)
 SelectなりWhereなりLINQでデータを加工して
 ObserveOnDispatcherして(値をUIスレッドに戻す)
 Subscribeする
ところでキャンセルしたい
// Subscribeの戻り値はIDisposableなので、Disposeすればおk
var disposable = AsyncMethod().Subscribe();
disposable.Dispose();

// イベントの場合はデタッチになるよ
var buttonClick = button.ClickAsObservable().Subscribe();
buttonClick.Dispose();

// Listに入れてまとめてDisposeとか
var disposables = new List<IDisposable>();
disposable.Add(button.ClickAsObservable().Subscribe());
disposable.Add(button.ClickAsObservable().Subscribe());
disposable.ForEach(d => d.Dispose());

// IList<IDisposable>はCompositeDisposableというのもある
var disposables = new CompositeDisposable();
disposable.Dispose();
例外処理は?
 何も書かない
    例外はcatchせずスローされてくる
 SubscribeのonErrorに書く
    Rxのチェーンで発生した例外を全てcatchする
    ここに空のものを書けば例外無視が成立とかも
        ※Tips:一部メソッドが間に挟まれていると(Publishなど)
         場合によってはcatchされなくなることも(Publishは内部
         で自前でSubscribeしているためチェーンが途切れてる)
 Catchメソッドを使う
    例外の型を指定した通常のtry-catchに近いもの
    戻り値にEmptyを返せば終了、何か別の値を返せばそ
     れを代替として流すということになる
基本的なのはこの3つ
// 何も書かないので例外がスローされてくる
WebRequest.Create("http://hoge")
    .DownloadStringAsync()
    .Subscribe(Debug.WriteLine);

// SubscribeのonErrorで全てcatch
WebRequest.Create("http://hoge")
    .DownloadStringAsync()
    .Subscribe(Debug.WriteLine, e => { });

// CatchでWebExceptionだけcatch
WebRequest.Create("http://hoge")
    .DownloadStringAsync()
    .Catch((WebException e) => Observable.Empty<string>())
    .Subscribe(Debug.WriteLine);
Compose Patterns
SelectMany - 直列の結合

     AsyncA          AsyncB




Zip - 並列の結合

     AsyncA

                      Result

     AsyncB
SelectMany + Zip - 合成の例

      AsyncA              AsyncB

                                           Result

      AsyncC




    AsyncA().SelectMany(a => AsyncB(a))
        .Zip(AsyncC(), (b, c) => new { b, c });
ForkJoin - 並列同時実行

         AsyncA


         AsyncB
                                   Result
         AsyncC


         AsyncD




Observable.ForkJoin(AsyncA(), AsyncB(), AsyncC(), AsyncD())
    .Select(xs => new { a=xs[0], b=xs[1], c=xs[2], d=xs[3] });
多重from(SelectMany)



      AsyncA        AsyncB          AsyncC       Result




    var asyncQuery = from a   in AsyncA()
                     from b   in AsyncB(a)
                     from c   in AsyncC(a, b)
                     select   new { a, b, c };
Conclusion
まとめ
 FromEvent/Asyncは拡張メソッドで隔離
 ついでにReadToEndなんかも隔離
 とりあえずSubscribeの前にObserveOnDispatcher
 onErrorとCatchで例外をコントロール
 色々な合成メソッドで流れをコントロール


 もう非同期なんて怖くない!
 Rxで書くと実は同期で書くよりも柔軟
 むしろもう同期でなんて書きたくない!
Real World Rx
ReactiveOAuth
 http://reactiveoauth.codeplex.com/
 TwitterとかのOAuth認証/通信用ライブラリ
 以下のWP7アプリで使われています!


     SongTweeter @iseebi
     NumberPush @mitsuba_tan
     Utakata TextPad @kaorun
     HirganaTwit @hatsune_
どんな時に使えるの?
 Twitterクライアントを作るわけではないけれど、
  ステータスだけTwitterに投稿したい、などはよく
  あること(特に最近は何でもTwitterだし)

new OAuthClient(ConsumerKey, ConsumerSecret, accessToken)
{
    MethodType = MethodType.Post,
    Url = "http://api.twitter.com/1/statuses/update.xml",
    Parameters = { { "status", "ここに投稿する文章" } }
}
.GetResponseText()      // 投稿して、戻り値を得る
.Select(XElement.Parse) // xmlの場合はパースしたいよね
.Subscribe();           // なにか処理するなり例外処理入れるなり
ポータビリティ
 WP7だけじゃなく.NET4/SL4向けもあり
 コードの99%をWP7と共有している
    残り1%は最近の更新で.NET版Rxが一部WP7版と互換
     なくなったため
 Rxをベースに置くと、コードの可搬性が圧倒的に
 高まる

 機能面でもRxにタダ乗り出来るので(エラー・リト
  ライ・タイムアウトなど全部Rxにおまかせ)
 ライブラリ本体はシンプルなコードのままで強力
  な機能を持てる
Utakotoha
 http://utakotoha.codeplex.com/
 再生中の曲に応じて日本語歌詞を表示する
 マーケットプレイスで公開中(Free)
 ソースコードも公開中
コードの中身
 コードは無理やり全部Rxで割と実験的
 GUI周りは強引でボロボロで酷い
 イベント周りなどは面白く仕上がったかも


 Modelを別に立てた.NET4クラスライブラリにリン
  クで参照することによりMSTestでユニットテスト
 Molesというモックライブラリを使ってWP7のイベ
  ント自体を乗っ取り(音楽再生の情報をテストのた
  めに任意に生成したり)

 上手くいってるかはノーコメント
Deep Dive Rx
公式見るのがいいよやっぱり
 Data  Developer Center - Rx
 http://msdn.microsoft.com/en-us/data/gg577609


 二つのドキュメントが出ています
     Hands-on-Lab
         チュートリアル式で触りながら分かりやすく
         まず見て欲しい


     Design Guidelines
         マニュアルみたいなもの
         更に深くへ
日本語情報は?
 ねぇよんなもん
 うちのサイトでも見てください:)
    http://neue.cc/
    http://neue.cc/category/rx

More Related Content

What's hot

20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチンyohhoy
 
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~Unity Technologies Japan K.K.
 
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法Yoshifumi Kawai
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Yoshifumi Kawai
 
UniTask入門
UniTask入門UniTask入門
UniTask入門torisoup
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践Yoshifumi Kawai
 
Reactive extensions入門v0.1
Reactive extensions入門v0.1Reactive extensions入門v0.1
Reactive extensions入門v0.1一希 大田
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理torisoup
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#Yoshifumi Kawai
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術Unity Technologies Japan K.K.
 
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術Unity Technologies Japan K.K.
 
A quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSA quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSYoshifumi Kawai
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能Kohei Tokunaga
 
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのかC#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのかYoshifumi Kawai
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解したtorisoup
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャtorisoup
 

What's hot (20)

20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
 
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
UniTask入門
UniTask入門UniTask入門
UniTask入門
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
Reactive extensions入門v0.1
Reactive extensions入門v0.1Reactive extensions入門v0.1
Reactive extensions入門v0.1
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理
 
Riderはいいぞ!
Riderはいいぞ!Riderはいいぞ!
Riderはいいぞ!
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
 
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
 
A quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSA quick tour of the Cysharp OSS
A quick tour of the Cysharp OSS
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのかC#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解した
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
 

Viewers also liked

How to Make Own Framework built on OWIN
How to Make Own Framework built on OWINHow to Make Own Framework built on OWIN
How to Make Own Framework built on OWINYoshifumi Kawai
 
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-torisoup
 
The History of Reactive Extensions
The History of Reactive ExtensionsThe History of Reactive Extensions
The History of Reactive ExtensionsYoshifumi Kawai
 
Reactive Programming by UniRx for Asynchronous & Event Processing
Reactive Programming by UniRx for Asynchronous & Event ProcessingReactive Programming by UniRx for Asynchronous & Event Processing
Reactive Programming by UniRx for Asynchronous & Event ProcessingYoshifumi Kawai
 
はじめてのUniRx
はじめてのUniRxはじめてのUniRx
はじめてのUniRxtorisoup
 
UniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for UnityUniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for UnityYoshifumi Kawai
 

Viewers also liked (6)

How to Make Own Framework built on OWIN
How to Make Own Framework built on OWINHow to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
 
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-
 
The History of Reactive Extensions
The History of Reactive ExtensionsThe History of Reactive Extensions
The History of Reactive Extensions
 
Reactive Programming by UniRx for Asynchronous & Event Processing
Reactive Programming by UniRx for Asynchronous & Event ProcessingReactive Programming by UniRx for Asynchronous & Event Processing
Reactive Programming by UniRx for Asynchronous & Event Processing
 
はじめてのUniRx
はじめてのUniRxはじめてのUniRx
はじめてのUniRx
 
UniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for UnityUniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for Unity
 

Similar to Reactive Extensionsで非同期処理を簡単に

実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive ExtensionsShin Ise
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE).NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)Tusyoshi Matsuzaki
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情takezoe
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめYu Nobuoka
 
明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7Yuichi Sakuraba
 
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」Kohsuke Kawaguchi
 
Reactive Extensions v2.0
Reactive Extensions v2.0Reactive Extensions v2.0
Reactive Extensions v2.0Yoshifumi Kawai
 
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみようSlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみようShigeo Ueda
 
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptlinq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptYoshifumi Kawai
 
20141017 introduce razor
20141017 introduce razor20141017 introduce razor
20141017 introduce razordo_aki
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門spring_raining
 

Similar to Reactive Extensionsで非同期処理を簡単に (20)

実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
 
MlnagoyaRx
MlnagoyaRxMlnagoyaRx
MlnagoyaRx
 
Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
 
Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方
 
densan2014-late01
densan2014-late01densan2014-late01
densan2014-late01
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
Java EE8 Report
Java EE8 ReportJava EE8 Report
Java EE8 Report
 
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE).NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7
 
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
 
Reactive Extensions v2.0
Reactive Extensions v2.0Reactive Extensions v2.0
Reactive Extensions v2.0
 
RとWeb API
RとWeb APIRとWeb API
RとWeb API
 
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみようSlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptlinq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScript
 
20141017 introduce razor
20141017 introduce razor20141017 introduce razor
20141017 introduce razor
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 

More from Yoshifumi Kawai

A Brief History of UniRx/UniTask, IUniTaskSource in Depth
A Brief History of UniRx/UniTask, IUniTaskSource in DepthA Brief History of UniRx/UniTask, IUniTaskSource in Depth
A Brief History of UniRx/UniTask, IUniTaskSource in DepthYoshifumi Kawai
 
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#Yoshifumi Kawai
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能Yoshifumi Kawai
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーYoshifumi Kawai
 
Implements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNetImplements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNetYoshifumi Kawai
 
Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)Yoshifumi Kawai
 
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnionThe Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnionYoshifumi Kawai
 
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
True Cloud Native Batch Workflow for .NET with MicroBatchFrameworkTrue Cloud Native Batch Workflow for .NET with MicroBatchFramework
True Cloud Native Batch Workflow for .NET with MicroBatchFrameworkYoshifumi Kawai
 
Memory Management of C# with Unity Native Collections
Memory Management of C# with Unity Native CollectionsMemory Management of C# with Unity Native Collections
Memory Management of C# with Unity Native CollectionsYoshifumi Kawai
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Yoshifumi Kawai
 
RuntimeUnitTestToolkit for Unity(English)
RuntimeUnitTestToolkit for Unity(English)RuntimeUnitTestToolkit for Unity(English)
RuntimeUnitTestToolkit for Unity(English)Yoshifumi Kawai
 
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityRuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityYoshifumi Kawai
 
How to make the Fastest C# Serializer, In the case of ZeroFormatter
How to make the Fastest C# Serializer, In the case of ZeroFormatterHow to make the Fastest C# Serializer, In the case of ZeroFormatter
How to make the Fastest C# Serializer, In the case of ZeroFormatterYoshifumi Kawai
 
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCYoshifumi Kawai
 
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...Yoshifumi Kawai
 
Photon Server Deep Dive - View from Implmentation of PhotonWire, Multiplayer ...
Photon Server Deep Dive - View from Implmentation of PhotonWire, Multiplayer ...Photon Server Deep Dive - View from Implmentation of PhotonWire, Multiplayer ...
Photon Server Deep Dive - View from Implmentation of PhotonWire, Multiplayer ...Yoshifumi Kawai
 
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Yoshifumi Kawai
 
Clash of Oni Online - VR Multiplay Sword Action
Clash of Oni Online - VR Multiplay Sword Action Clash of Oni Online - VR Multiplay Sword Action
Clash of Oni Online - VR Multiplay Sword Action Yoshifumi Kawai
 
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
LINQPad with LINQ to BigQuery - Desktop Client for BigQueryLINQPad with LINQ to BigQuery - Desktop Client for BigQuery
LINQPad with LINQ to BigQuery - Desktop Client for BigQueryYoshifumi Kawai
 

More from Yoshifumi Kawai (20)

A Brief History of UniRx/UniTask, IUniTaskSource in Depth
A Brief History of UniRx/UniTask, IUniTaskSource in DepthA Brief History of UniRx/UniTask, IUniTaskSource in Depth
A Brief History of UniRx/UniTask, IUniTaskSource in Depth
 
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
 
Implements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNetImplements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNet
 
Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)
 
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnionThe Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
 
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
True Cloud Native Batch Workflow for .NET with MicroBatchFrameworkTrue Cloud Native Batch Workflow for .NET with MicroBatchFramework
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
 
Memory Management of C# with Unity Native Collections
Memory Management of C# with Unity Native CollectionsMemory Management of C# with Unity Native Collections
Memory Management of C# with Unity Native Collections
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
 
Binary Reading in C#
Binary Reading in C#Binary Reading in C#
Binary Reading in C#
 
RuntimeUnitTestToolkit for Unity(English)
RuntimeUnitTestToolkit for Unity(English)RuntimeUnitTestToolkit for Unity(English)
RuntimeUnitTestToolkit for Unity(English)
 
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityRuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for Unity
 
How to make the Fastest C# Serializer, In the case of ZeroFormatter
How to make the Fastest C# Serializer, In the case of ZeroFormatterHow to make the Fastest C# Serializer, In the case of ZeroFormatter
How to make the Fastest C# Serializer, In the case of ZeroFormatter
 
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
 
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
 
Photon Server Deep Dive - View from Implmentation of PhotonWire, Multiplayer ...
Photon Server Deep Dive - View from Implmentation of PhotonWire, Multiplayer ...Photon Server Deep Dive - View from Implmentation of PhotonWire, Multiplayer ...
Photon Server Deep Dive - View from Implmentation of PhotonWire, Multiplayer ...
 
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
 
Clash of Oni Online - VR Multiplay Sword Action
Clash of Oni Online - VR Multiplay Sword Action Clash of Oni Online - VR Multiplay Sword Action
Clash of Oni Online - VR Multiplay Sword Action
 
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
LINQPad with LINQ to BigQuery - Desktop Client for BigQueryLINQPad with LINQ to BigQuery - Desktop Client for BigQuery
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
 

Recently uploaded

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 

Recently uploaded (8)

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 

Reactive Extensionsで非同期処理を簡単に