SlideShare a Scribd company logo
1 of 64
Download to read offline
Observable Everywhere
Rxの原則とUniRxにみるデータソースの見つけ方
2015/04/16
Yoshifumi Kawai - @neuecc
@neuecc - Who, Where, When
2009/04
linq.js – LINQ to Objects for JavaScript
https://linqjs.codeplex.com/
この頃からずっとLINQを追いかけてる
2009/09/04
最初のRx記事、以降現在まで70以上は書いてる
http://neue.cc/category/programming/rx/
2011/04~
Microsoft MVP for .NET(C#)
野良C#エヴァンジェリスト(現在も継続中)
@Work, @LINQ
2012/10~
株式会社グラニ 取締役CTO
「神獄のヴァルハラゲート」「モンスターハンターロアオブカード」
サーバー/クライアント共に「最先端 C# 技術を使った」ゲーム開発
C# 5.0 + .NET Framework 4.5 + ASP.NET MVC 5 + Unity
2014/04/19
UniRx最初の公開 - https://github.com/neuecc/UniRx
現在☆286, ver 4.8.0
2014/09/24
LINQ to BigQuery - https://github.com/neuecc/LINQ-to-BigQuery/
未だにLINQへの関心は衰えずといったところ
Agenda
せつめい
基本的には言語非依存の説明です
RxJavaの人もReactiveCocoaの人もWelcome
サンプルコードはC#になりますので適宜補完してください
Rxの基本原則などを紹介
衒学趣味を蹴っ飛ばして実用的な意味合いを探る
UniRxを例にRx利用時のデータソースの実例を紹介
自分の言語、自分のプラットフォームでも応用効くはず
OnNext* (OnError | OnCompleted)?
The grammar of messages
OnNext* (OnError | OnCompleted)?
日本語でおk
OnNextがゼロ回以上の後に
OnErrorもしくはOnCompletedが一回来る(もしくはどちらも来ない)
public interface IObserver<in T>
{
void OnCompleted();
void OnError(Exception error);
void OnNext(T value);
}
foreachで考えてみる; OnNext
foreach (var x in sequence)
{
OnNext(x);
}
OnNext*
空の場合はOnNextは一度
も呼ばれないのでOnNext*
foreachで考えてみる; OnCompleted
foreach (var x in sequence)
{
OnNext(x);
}
OnCompleted();
OnNext* (OnCompleted)?
もしsequneceが無限シーケンス
(例えばunfold)だったら
OnCompletedまで行かないので
OnNext * (OnCompleted)?
foreachで考えてみる; OnError
try
{
foreach (var x in sequence)
{
OnNext(x);
}
}
catch (Exception ex)
{
OnError(ex);
// RxでonErrorをハンドルした場合
// 再スローはない、これはあくまで再現
throw;
}
OnCompleted();
OnNext* (OnError | OnCompleted)?
もし途中で例外が起きたら
OnCompletedは呼ばれずOnErrorだ
けが呼ばれることになるので
OnNext * (OnError | OnCompleted)?
意味が通る!でも、なんで?
IEnumeratorから考える
public interface IEnumerator<out T>
{
T Current { get; } // 現在の要素
bool MoveNext(); // 次の要素があるか確認しCurrentにセット
}
分解
public interface IEnumerator<out T>
{
T Current { get; }
bool MoveNext() throws Exception; // (C#にthrowsはないけどネ)
}
public interface IEnumerator<out T>
{
T Current { get; }
true|false|Exception MoveNext();
}
MoveNextを分解すると
true/false/Exceptionのどれかを返す
集約
public interface IEnumerator<out T>
{
T Current { get; }
bool MoveNext() throws Exception; // (C#にthrowsはないけどネ)
}
public interface IEnumerator<out T>
{
T Current { get; }
T|void|Exception GetNext();
}
trueの時Tを、falseの時voidを返すと考
えてCurrentも集約
そして(何故か)反転させる
public interface IEnumeratorDual<in T>
{
void GotNext(T|void|Exception);
}
public interface IEnumerator<out T>
{
T|void|Exception GetNext();
}
3つにちゃんとバラして
public interface IEnumeratorDual<in T>
{
void GotNext(T);
void GotNothing(void);
void GotException(Exception);
}
public interface IEnumeratorDual<in T>
{
void GotNext(T|void|Exception);
}
あら不思議、IObserver<T>が!
public interface IEnumeratorDual<in T>
{
void GotNext(T);
void GotNothing(void);
void GotException(Exception);
}
名前を変えれば出来上がり
public interface IObserver<in T>
{
void OnNext(T value);
void OnCompleted();
void OnError(Exception error);
}
IEnumerableのほうも勿論
public interface IEnumerable<out T>
{
IEnumerator<T> GetEnumerator();
}
IEnumerator<T> : IDisposable
public interface IEnumerable<out T>
{
IEnumerator<T> GetEnumerator();
}
public interface IEnumerable<out T>
{
IDisposable|IEnumerator<T> GetEnumerator();
}
IEnumerator<T> : IDisposable
public interface IEnumerableDual<out T>
{
IDisposable SetEnumeratorDual(IEnumeratorDual<T>);
}
public interface IEnumerable<out T>
{
IDisposable|IEnumerator<T> GetEnumerator();
}
当然のように(何故か)逆にする
public interface IEnumerableDual<out T>
{
IDisposable SetEnumeratorDual(IEnumeratorDual<T>);
}
あら不思議、IObservable<T>が!
public interface IObservable<out T>
{
IDisposable Subscribe(IObserver<T> observer);
}
名前を整えて出来上がり
Mathematical Dual
双対
なるほどわからん
ふかーい関連性がある、ぐらいでいいんじゃまいか
実用的な意味では、OnNext* (OnError | OnCompleted)?だけ覚えればいい
同じように見なすことができる、という発見
IEnumerable<T> = イテレータパターン
IObservable<T> = オブザーバーパターン
一見無関係の2つのデザインパターンに見つけた深い関連性
イテレータのためのLINQがオブザーバーにも同じように適用できる発見
Reactive Extensions= LINQ to Events / LINQ to Asynchronous
Pull(Interactive) vs Push(Reactive)
DataSource
(IEnumerable<T>)
Action
値の要求(Pull)
DataSource
(IObservable<T>)
Action
値の送信(Push)
Length or Time
IEnumerable<T> length
IObservable<T> time
event
async
IE<T>
イベント(や非同期)を時間軸に乗った
シーケンスと見なすことができる
Same Atmosphere
var query = from person in sequence
where person.Age >= 20
select person.Name;
foreach (var item in query)
{
OnNext(item);
}
var query = from person in sequence
where person.Age >= 20
select person.Name;
query.Subscribe(item =>
{
OnNext(item);
});
IEnumerble<T> IObservable<T>
コレクション処理(filter/map)が超強力で有益なのは既知の話。それと同じように
書ける、同じような挙動を取るということが注意深くデザインされている。
これがRxの革命的なポイントであり普及の一助となった
Asynchronous Futures
Synchronous Asynchronous
Single(1)Multiple(*)
var x = f(); var x = await f();
var query = from person in sequence
where person.Age >= 20
select person.Name;
foreach (var item in query)
{
OnNext(item);
}
var query = from person in sequence
where person.Age >= 20
select person.Name;
query.Subscribe(item =>
{
OnNext(item);
});
IEnumerble<T> IObservable<T>
Func<T> Task<T>
Synchronous Asynchronous
Single(1)Multiple(*)
var x = f(); var x = await f();
var query = from person in sequence
where person.Age >= 20
select person.Name;
foreach (var item in query)
{
OnNext(item);
}
var query = from person in sequence
where person.Age >= 20
select person.Name;
query.Subscribe(item =>
{
OnNext(item);
});
IEnumerble<T> IObservable<T>
Func<T> Task<T>
FutureとかPromise
とか言われるアレの
C#での表現
C# 5.0での非同期事情
C# 5.0では単発の非同期処理は全てTask<T>を返す
async/awaitという言語構文でのサポートが圧倒的に大きい
Task<T>にawaitするとTが取れるし、.NET Frameworkで全面的に非同期APIが追加された
Task is Observable, Observable is Awaitable
相互変換可能(Taskは長さ1のIObservable、IObservableはLastを取得してTaskに変
換できる)なので、適宜必要な局面で変換
Before async/await
専用構文がないTaskだけとの比較だとRxのほうが圧倒的に使いやすかった
というわけで、他言語においても事情は同じになるかな、と
専用構文が入ればそちらに寄って、それまではRxが使う上では強いはず
What is UniRx?
Welcome to the Reactive Game Architecture!
https://github.com/neuecc/UniRx Unity用のReactive Extensions実装
(.NET用のRxはUnityで動かないので自前で実装)
Official(?) ReactiveX Family
http://reactivex.io/
ReactiveX公式サイトのLanguagesにラインナップ
されています(現状、非公式Rxでは唯一)
CoreLibrary
Framework Adapter
Rx.NET
RxJS
RxJava
RxAndroid
ReactiveUI
ReactiveProperty
CoreLibrary
Framework Adapter
UniRxは全部入り
(多分ReactiveCocoaとか
もそうでしょうけど)
Port of Rx.NET
MainThreadSchedulerObservableTriggers
ReactiveProperty
Observable Everywhere
データソースを見つけよう
何はともあれObservableの源流が必要
使い方は後からついてくる
通常のLINQ(to Objects)も何がシーケンスとみなせるか(DOMの
Traverseはシーケンスになる、DatabaseのRowはシーケンスとみな
せる、などなど)がまず最初にある
シーケンスを作ろう
シーケンスのように見なせるものがあれば、そこにLINQはある
見なせそうで見なせない、ありそうでないものがあれば、作りだ
そう、そうすればそこにLINQ(to Objects/to Events = Rx)が現れる
Push Event Stream
Event Processing
Interactive/Visualize
Statndard Static Generators
Range, Repeat, ToObservable
OnNext{n} (OnError | OnCompleted)?
Return
OnNext (OnError | OnCompleted)?
Empty
OnCompleted
Never
()
Throw
OnError
単体ではそう使うこともな
い感じですが、何かと組み
合わせていく感じ
.Concat(Observable.Never)で、終
了を抑止する(OnCompletedは飛
ばさない、あるいは他のオペレー
タが飛ばす)、的な使い方ができる
AsyncCallback Converter
IEnumerator GetStringAsync(string url, Action<string> onCompleted, Action<Exception> onError);
Callback Hell!
謎のIEnumerator(Unity固有事情)
IObservable<string> Get(string url);
Callback to IObservable<T>
UniRxは組み込みの通信メソッドとして
ObservableWWW.Get/Postメソッドなどを予め用意して
あるので、ユーザーはすぐに非同期をRxで扱える
But...
あれ、一緒……?
ObservableWWW.Get("http://hogemoge").Subscribe(Action<string>, Action<Exception>)
StartCoroutine(GetStringAsync("http://hogemoge", Action<string>, Action<Exception>))
GetStringAsync("http://hogemoge", nextUrl =>
{
GetStringsAsync(nextUrl, finalUrl =>
{
GetStringsAsync(finalUrl, result =>
{
/* result handling */
}, ex => { /* third error handling */ });
}, ex => { /* second error handling */ });
}, ex => { /* first error handling */ });
Callback Hell ネスト地獄による圧倒的
な見通しの悪さ
エラーハンドリングの困難(try-
catchで囲んでも意味が無い)
ObservableWWW.Get("http://hogemoge")
.SelectMany(nextUrl => ObservableWWW.Get(nextUrl))
.SelectMany(finalUrl => ObservableWWW.Get(finalUrl))
.Subscribe(
result => { /*result handling */ },
ex => { /* error handling */ });
ネストを一段に抑える
パイプライン統合のエラー処理
Composability
var query = from nextUrl in ObservableWWW.Get("http://hogemoge")
from finalUrl in ObservableWWW.Get(nextUrl)
from result in ObservableWWW.Get(finalUrl)
select new { nextUrl, finalUrl, result };
var parallelQuery = Observable.WhenAll(
ObservableWWW.Get("http//hogehoge"),
ObservableWWW.Get("http//hugahuga"),
ObservableWWW.Get("http//takotako"));
var parallelQuery = Observable.WhenAll(
ObservableWWW.Get("http//hogehoge"),
ObservableWWW.Get("http//hugahuga"),
ObservableWWW.Get("http//takotako"))
.Timeout(TimeSpan.FromSeconds(15));
var incrementalSearch = userInput
.Throttle(TimeSpan.FromMilliseconds(250))
.Select(keyword => SearchAsync(keyword))
.Switch();
前の結果を保持したまま
の直列処理
並べるだけで済む並列処理
メソッドを足すだけのTimeout付与
ユーザー入力など他のIObservableと
の自然な融和と、複雑なPruning
UIEvent Converter
Button
IObservable<Unit>
InputField
IObservable<string>
Toggle
IObservable<bool>
Slider
IObservable<float>
var incrementalSearch = input.OnValueChangeAsObservable()
.Throttle(TimeSpan.FromMilliseconds(250))
.Select(keyword => SearchAsync(keyword))
.Switch();
from InputField
toggle.OnValueChangedAsObservable()
.Subscribe(x => button.interactable = x);
ToggleのON/OFFでボタン
の有効/非有効切り替え
ObservableTriggers
衝突 = IObservable<Collision>
cube.OnCollisionEnterAsObservable().Subscribe();
カメラに入る = OnBecameVisibleAsObservable() = IObservable<Unit>
カメラから出る = OnBecameInvisibleAsObservable() = IObservable<Unit>
などなど、あらゆるインタラクションが全てIObservableになる
Lifecycle as Observable
frame(time)
OnDestroyAsObservable = (OnNext{1} OnCompleted)
ゲームループは毎フレーム(60fpsなら1/60秒)毎
にメソッドが呼びだされる
Observable.EveryUpdate().Subscribe(); // IObservable<long>
MultiThreading
Rx = Observable + LINQ + Scheduler
Observable.Start(() =>
{
/* なにか重い処理 */
return "hogemoge";
}, Scheduler.ThreadPool)
.ObserveOn(Scheduler.MainThread) // MainThreadに戻す
.DelaySubscription(TimeSpan.FromSeconds(3), Scheduler.MainThreadIgnoreTimeScale)
.Subscribe(x => ui.text = x); // UIパーツはメインスレッドからじゃないと触れない
Schedulerは時空魔法の、時(AbsoluteTime/RelativeTime)と
空間(実行スレッド/SynchronizationContext)をコントロール
Polling
ポーリングはIObservableと「見なせる」
IObservable<string> WatchFile(string path)
{
return Observable.Interval(TimeSpan.FromSeconds(5))
.Select(_ => File.ReadAllText(path));
}
IObservable<Notification<Unit>> Ping(string path)
{
return Observable.Interval(TimeSpan.FromSeconds(5))
.SelectMany(_ =>
ObservableWWW.Get("http://ping").Timeout(TimeSpan.FromSeconds(1)))
.AsUnitObservable()
.Materialize();
}
EveryValueChanged
更に踏み込んで、値変更を常時監視する黒魔法化
原理はゲームループのUpdate監視による毎フレームチェック
常に必ず呼ばれるから監視コストが相対的に低い(ゲームエンジンならでは)
生存期間管理
無限監視は危険なので、監視対象の生存具合をチェック
GameObjectなら破壊されていたら監視終了
C#オブジェクトなら、WeakReferenceで参照保持し、GCされてたら監視終了
// Position(x,y,z)が変化したら通知するIObservable<Vector3>
this.ObserveEveryValueChanged(x => x.transform.position)
.Subscribe(x => Debug.Log("poistion changed:" + x));
Logs are EventStream
ログはInProcessにおいてもStreamとして扱えるべき
logger(“Player”)
logger(“Monster”)
logger(“Network”)
logger(“ItemResolver”)
ObservableLogger.Listener
(IObservable<LogEntry>)
SubscribeToLogConsole
SubscribeToInGameDebugWindow
SubscribeToNetWorkLogStorage
EventAggregator/MessageBroker
InProcessのMessageBus(名前はなんでもいいや)
先のObservableLoggerと同じ図式
中央がIObservable<T>なら
購読 = IObservable<T>.Subscribe()
解除 = subscription.Dispose()
最も単純な(しかし便利な)実装
public static class MessageBroker
{
public static void Publish<T>(T message)
{
Notifier<T>.Instance.OnNext(message);
}
public static IObservable<T> Receive<T>()
{
return Notifier<T>.Instance.AsObservable();
}
static class Notifier<T>
{
public static readonly Subject<T> Instance = new Subject<T>();
}
}
型(<T>)でフィルタされるグローバル
に通知可能な何か、と考える
送信側:
MessageBroker.Publish(new HogeEvent())
受信側:
MessageBroker.Receive<HogeEvent>()
Model-View-Whatever
M-V-Hell
MVVVVVV
M-V-VM
DataBinding!
バインディングに必要なもの
バインディングエンジン
Reactive Extensionsはバインディングエンジン「ではない」
RxでViewに何か処理するにはViewを知らなければならない
Unityにバインディングエンジンはない
作るか諦めるか
どうしても必要なら作るしかない
私はMVVMを選ばないことを選んだ
Unityにおいては(Rxがあれば)そこまで必要ではないと判断した
Model-View-Presenter
DataBindingがないので
ViewModelのかわりに
PresenterがViewを直接弄り、
イベントを受け取る
Rxで各レイヤーを繋げてしまえば見通
しよく構築可能
NotificationModel
Modelは通知可能でなければならない
// 変更通知付きなモデル
public class Enemy
{
// HPは変更あったら通知して他のところでなんか変化を起こすよね?
public IReactiveProperty<long> CurrentHp { get; private set; }
// 死んだら通知起こすよね?
public IReadOnlyReactiveProperty<bool> IsDead { get; private set; }
public Enemy(int initialHp)
{
// 死んだかどうかというのはHPが0以下になったら、で表現できる
CurrentHp = new ReactiveProperty<long>(initialHp);
IsDead = CurrentHp.Select(x => x <= 0).ToReadOnlyReactiveProperty();
}
}
ReactiveProperty
public class ReactivePresenter : MonoBehaviour
{
// ViewからのイベントをUIEventAsObservableで購読
Button button;
Text textView;
// ModelからのイベントをReactivePropertyで購読、SubscribeでViewにUpdate
Enemy enemy;
// 宣言的なUI記述
void Start()
{
// ボタンクリックでHPを減らす
button.OnClickAsObservable().Subscribe(_ => enemy.CurrentHp.Value -= 99);
// その変更を受けてUIに変更を戻す
enemy.CurrentHp.SubscribeToText(textView); // とりあえず現在HPをTextに表示
// もし死んだらボタンクリックできないようにする
enemy.IsDead.Select(isDead => !isDead).SubscribeToInteractable(button);
}
}
ReactivePropertyは通知付きモデルの作成を補助
値自体が変更をIObservable<T>として通知
Model-View-(Reactive)Presenter
not databinding but databinding
データバインディングっぽい
Rxの力で、かなりそれらしい感触になる
マクロがあればもっと整形できそうだけどC#はマクロないので
別にそこまでは必要じゃない
無理しない
やはりゲームなのでパフォーマンスの読みやすさは必須
バインディングエンジン作成は一朝一夕でできない、それよりMV(R)Pはシンプ
ルな、というか中間レイヤーはなにもないので挙動も読みやすくオーバヘッド
もない
既に実績あるバインディングエンジンがあるなら、それに乗っかればいい
ReactivePropertyはModelの作成を補助するのでMVVMのMやVMのレイヤーで十分使える
Conclusion
資料紹介
Event processing at all scales with Reactive Extensions
http://channel9.msdn.com/events/TechDays/Techdays-2014-the-
Netherlands/Event-processing-at-all-scales-with-Reactive-Extensions
現時点でのRx入門の決定版といえる素晴らすぃVideo
Bart氏は現在はMicrosoftのPrincipal Software Engineer(偉い)
Cloud-Scale Event Processing Using Rx
http://buildstuff14.sched.org/event/174c265e4ec350bd2e005b59bce0275e
激烈にAdvancedな内容
IReactiveProcessingModel, SubjectのDuality, 次世代のRx(3.0)などなど
更なる未来を見据えた内容なので是非一読を
まとめ
LINQ to Everywhere
Reactive Extensions is not only Asynchronous
Reactive Extensions is not only Data-Binding
Observable Everywhere
データソースさえ見つかれば、そこにRxはある
あとは無限の合成可能性を活かせばいい!
まず、データソースを探しだしてください

More Related Content

What's hot

【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説Unity Technologies Japan K.K.
 
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスターUnity Technologies Japan K.K.
 
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?京大 マイコンクラブ
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-torisoup
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作るtorisoup
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話torisoup
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 TipsTakaaki Suzuki
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化DeNA
 
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!Unity Technologies Japan K.K.
 
Doozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_ltDoozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_lttorisoup
 
【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.
 
【Unite Tokyo 2019】Render Streaming - WebRTC を用いたストリーミングソリューション
【Unite Tokyo 2019】Render Streaming - WebRTC を用いたストリーミングソリューション【Unite Tokyo 2019】Render Streaming - WebRTC を用いたストリーミングソリューション
【Unite Tokyo 2019】Render Streaming - WebRTC を用いたストリーミングソリューションUnityTechnologiesJapan002
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門torisoup
 
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみたOpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみたTakahiro Miyaura
 

What's hot (20)

【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
 
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
 
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話
 
Unityと.NET
Unityと.NETUnityと.NET
Unityと.NET
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
 
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
 
Doozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_ltDoozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_lt
 
【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 編~
 
【Unite Tokyo 2019】Render Streaming - WebRTC を用いたストリーミングソリューション
【Unite Tokyo 2019】Render Streaming - WebRTC を用いたストリーミングソリューション【Unite Tokyo 2019】Render Streaming - WebRTC を用いたストリーミングソリューション
【Unite Tokyo 2019】Render Streaming - WebRTC を用いたストリーミングソリューション
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
 
UE4とUnrealC++について
UE4とUnrealC++についてUE4とUnrealC++について
UE4とUnrealC++について
 
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみたOpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
 
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
 
Riderはいいぞ!
Riderはいいぞ!Riderはいいぞ!
Riderはいいぞ!
 

Viewers also liked

History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法Yoshifumi Kawai
 
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜Toru Nayuki
 
Interactive UI with UniRx
Interactive UI with UniRxInteractive UI with UniRx
Interactive UI with UniRxYuto Iwashita
 
はじめてのUniRx
はじめてのUniRxはじめてのUniRx
はじめてのUniRxtorisoup
 
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 - Reactive Extensions for Unity
UniRx - Reactive Extensions for UnityUniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for UnityYoshifumi Kawai
 
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践Yoshifumi Kawai
 
The History of Reactive Extensions
The History of Reactive ExtensionsThe History of Reactive Extensions
The History of Reactive ExtensionsYoshifumi 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
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Yoshifumi Kawai
 
Introduction to NotifyPropertyChangedGenerator
Introduction to NotifyPropertyChangedGeneratorIntroduction to NotifyPropertyChangedGenerator
Introduction to NotifyPropertyChangedGeneratorYoshifumi 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
 
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
 
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
 
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityRuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityYoshifumi Kawai
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践Yoshifumi Kawai
 
【Unite 2017 Tokyo】Ultimate Bowl 2017 -Timeline機能を活用したリアルタイムデモのメイキング-
【Unite 2017 Tokyo】Ultimate Bowl 2017 -Timeline機能を活用したリアルタイムデモのメイキング-【Unite 2017 Tokyo】Ultimate Bowl 2017 -Timeline機能を活用したリアルタイムデモのメイキング-
【Unite 2017 Tokyo】Ultimate Bowl 2017 -Timeline機能を活用したリアルタイムデモのメイキング-Unity Technologies Japan K.K.
 
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
 

Viewers also liked (20)

History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
 
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
 
Interactive UI with UniRx
Interactive UI with UniRxInteractive UI with UniRx
Interactive UI with UniRx
 
はじめてのUniRx
はじめてのUniRxはじめてのUniRx
はじめてのUniRx
 
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 - Reactive Extensions for Unity
UniRx - Reactive Extensions for UnityUniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for Unity
 
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
 
The History of Reactive Extensions
The History of Reactive ExtensionsThe History of Reactive Extensions
The History of Reactive Extensions
 
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の...
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
 
LINQ in Unity
LINQ in UnityLINQ in Unity
LINQ in Unity
 
Introduction to NotifyPropertyChangedGenerator
Introduction to NotifyPropertyChangedGeneratorIntroduction to NotifyPropertyChangedGenerator
Introduction to NotifyPropertyChangedGenerator
 
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
 
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
 
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#
 
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityRuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for Unity
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
【Unite 2017 Tokyo】Ultimate Bowl 2017 -Timeline機能を活用したリアルタイムデモのメイキング-
【Unite 2017 Tokyo】Ultimate Bowl 2017 -Timeline機能を活用したリアルタイムデモのメイキング-【Unite 2017 Tokyo】Ultimate Bowl 2017 -Timeline機能を活用したリアルタイムデモのメイキング-
【Unite 2017 Tokyo】Ultimate Bowl 2017 -Timeline機能を活用したリアルタイムデモのメイキング-
 
DeclarativeSql
DeclarativeSqlDeclarativeSql
DeclarativeSql
 
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 ...
 

Similar to Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方

ORTCの仕様書をざっくり斜め読みする
ORTCの仕様書をざっくり斜め読みするORTCの仕様書をざっくり斜め読みする
ORTCの仕様書をざっくり斜め読みするYusuke Naka
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ陽平 山口
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#信之 岩永
 
MlnagoyaRx02
MlnagoyaRx02MlnagoyaRx02
MlnagoyaRx02mega80b
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1mganeko
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updatemganeko
 
Web技術勉強会 第33回
Web技術勉強会 第33回Web技術勉強会 第33回
Web技術勉強会 第33回龍一 田中
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11えぴ 福田
 
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2DToshiyuki Ienaga
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
ROS Tutorial 02 - CIT
ROS Tutorial 02 - CITROS Tutorial 02 - CIT
ROS Tutorial 02 - CITDaiki Maekawa
 
AngulaとElixirの新しい関係
AngulaとElixirの新しい関係AngulaとElixirの新しい関係
AngulaとElixirの新しい関係陸 谷出
 
hbstudy#6LTyuzorock
hbstudy#6LTyuzorockhbstudy#6LTyuzorock
hbstudy#6LTyuzorockyuzorock
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61TATSUYA HAYAMIZU
 
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
 

Similar to Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方 (20)

RとWeb API
RとWeb APIRとWeb API
RとWeb API
 
MlnagoyaRx
MlnagoyaRxMlnagoyaRx
MlnagoyaRx
 
ORTCの仕様書をざっくり斜め読みする
ORTCの仕様書をざっくり斜め読みするORTCの仕様書をざっくり斜め読みする
ORTCの仕様書をざっくり斜め読みする
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
 
MlnagoyaRx02
MlnagoyaRx02MlnagoyaRx02
MlnagoyaRx02
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample update
 
Web技術勉強会 第33回
Web技術勉強会 第33回Web技術勉強会 第33回
Web技術勉強会 第33回
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
 
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
20201127 .NET 5
20201127 .NET 520201127 .NET 5
20201127 .NET 5
 
Groovyコンファレンス
GroovyコンファレンスGroovyコンファレンス
Groovyコンファレンス
 
ROS Tutorial 02 - CIT
ROS Tutorial 02 - CITROS Tutorial 02 - CIT
ROS Tutorial 02 - CIT
 
AngulaとElixirの新しい関係
AngulaとElixirの新しい関係AngulaとElixirの新しい関係
AngulaとElixirの新しい関係
 
hbstudy#6LTyuzorock
hbstudy#6LTyuzorockhbstudy#6LTyuzorock
hbstudy#6LTyuzorock
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
 
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
 

More from Yoshifumi Kawai

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
 
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によるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現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
 
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に見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法Yoshifumi 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
 
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
 
History & Practices for UniRx(EN)
History & Practices for UniRx(EN)History & Practices for UniRx(EN)
History & Practices for UniRx(EN)Yoshifumi Kawai
 

More from Yoshifumi Kawai (19)

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
 
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によるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
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)
 
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に見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
 
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
 
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
 
History & Practices for UniRx(EN)
History & Practices for UniRx(EN)History & Practices for UniRx(EN)
History & Practices for UniRx(EN)
 

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