SlideShare a Scribd company logo
前置き
HOW TO PLAY HADO ‑ YouTube
実は
昔はシールド出す瞬間、固まってた
どうやって改善したか
=> ObjectPool
HADOにおけるUniRxの
ObjectPool
Kado Yasuyuki
自己紹介
がうる @Gaur24
2015 ‑ 2016 富士通株式会社
2016 ‑ 株式会社meleap
やってること
サーバーサイド全般(Scala, JavaScript, Python)
Unityの基盤ライブラリ(C#)
4
今回話すこと
ObjectPoolについて
UniRx.Toolkit.ObjectPoolの紹介
ObjectPoolを運用して困ったこと/解決方法の紹介
5
ObjectPoolとは
オブジェクトを再利用するパターン
オブジェクトの生成・破棄のコストが高い場合に
有効な最適化手法
動的メモリ割り当てとガベージコレクションを 
排除できる
ヒープメモリの使用によるオーバーヘッドとの 
トレードオフ
再利用時に初期化が必要でバグが発生しやすい
スクリプトの最適化 ‑ Unity マニュアル
Unityでよく使うデザインパターン ‑ KAYAC engineers' blog
6
つまり
7
事前にオブジェクトを生成しておく
8
使用時はオブジェクトプールから取得
9
使用後にオブジェクトプールに返却
10
UniRx.Toolkit.ObjectPoolの解説
ソースコード
UniRx.Toolkit.ObjectPool ‑ neuecc/UniRx
参考
neue cc ‑ UniRx 5.4.0 ‑ Unity 5.4対応とまだまだ
最適化
UniRxのObjectPoolを利用する ‑ Qiita
11
1. UniRx.Toolkit.ObjectPool<T> where T :
UnityEngine.Componentを継承したクラスを実装
// ObjectPoolの実装
public class ObjectPoolImpl : UniRx.Toolkit.ObjectPool<Rigidbody>
{
readonly Rigidbody prefab;
public ObjectPoolImpl(Rigidbody prefab)
{
this.prefab = prefab;
}
protected override Rigidbody CreateInstance()
{
return UnityEngine.Object.Instantiate(prefab);
}
}
12
2. ObjectPool.PreloadAsync()で事前にオブジェク
トを生成
public class Sample_1 : MonoBehaviour
{
[SerializeField]
Rigidbody _rigidbody;
ObjectPoolImpl objectPool;
void Start()
{
objectPool = new ObjectPoolImpl(_rigidbody);
// 1フレームに1個、3個オブジェクトを生成
objectPool.PreloadAsync(preloadCount: 3, threshold: 1)
.Subscribe();
}
}
13
3. Instantiate()/Destroy()の代わりに
ObjectPool.Rent()/ObjectPool.Return()を使う
void Update()
{
if (Input.GetKeyDown(KeyCode.Return))
Fire();
}
void Fire()
{
Rigidbody obj = objectPool.Rent(); // オブジェクト取得z
obj.AddForce(new Vector3(0, 300, 0));
Observable.Timer(TimeSpan.FromSeconds(2)) // 2秒後に返却
.Subscribe(_ => objectPool.Return(obj));
}
オブジェクトプールが空になっても動的生成する
14
4. オブジェクトプールの
初期化 ObjectPool.Clear()
破棄 ObjectPool.Dispose()
void Update()
{
if (Input.GetKeyDown(KeyCode.Return))
Fire();
if (Input.GetKeyDown(KeyCode.Escape))
objectPool.Clear(); // プールサイズを0に
// objectPool.Dispose(); // もう使用しないなら破棄
}
15
5. プールサイズの調整 ObjectPool.Shrink()
void Update()
{
...
if (Input.GetKeyDown(KeyCode.Space))
// プールサイズを1個に縮小
objectPool.Shrink(instanceCountRatio: 0f, minSize: 1);
}
プールサイズを50%にしたい、かつ最低でも10個は
オブジェクトを残したい場合は
objectPool.Shrink(instanceCountRatio: 0.5f, minSize: 10);
定期的にプールサイズを縮小
ObjectPool.StartShrinkTimer(TimeSpan.FromSeconds(1), 0.5f, 10);
16
6. Callbackによるカスタマイズ
protected abstract T CreateInstance() // 生成
protected virtual void OnBeforeRent(T instance) // 取得
protected virtual void OnBeforeReturn(T instance) // 返却
protected virtual void OnClear(T instance) // 破棄
オブジェクトの生成、取得、返却、破棄
それぞれのタイミングで呼ばれるCallbackをオーバ
ーライドして独自の処理を実行できる
17
6. Callbackによるカスタマイズ
例えばRigidbodyの初期化処理をしてあげる
protected override void OnBeforeRent(Rigidbody instance)
{
base.OnBeforeRent(instance);
InitializeRigidbody(instance); // 初期化処理
}
static void InitializeRigidbody(Rigidbody instance)
{
instance.transform.SetPositionAndRotation(
Vector3.zero,
Quaternion.identity
);
instance.velocity = Vector3.zero;
instance.angularVelocity = Vector3.zero;
}
}
18
オレオレフレームワークつくりました
UniRx.Toolkit.ObjectPoolはシンプル
HADOで使っていく上で欲しい機能が増えてきた
=> HadoObjectPoolの実装
複雑なので、ある意味ObjectPoolのアンチパターン
19
動的生成・破棄で警告を出したい
事前に生成するオブジェクト数の最適化の参考にした
い
動的生成が発生したときに警告を出す
Shrink時に破棄したオブジェクト数を警告で出す
Development Build, Editor上でだけ警告を出す
20
public class ObjectPoolImpl : UniRx.Toolkit.ObjectPool<Rigidbody>
{
readonly int numberOfInstances;
bool isLoaded = false; // PreloadAsyncが完了したらtrue
protected override Rigidbody CreateInstance()
{
#if UNITY_EDITOR || DEVELOPMENT_BUILD
if (isLoaded && Count <= 0) // オブジェクト生成で警告
Debug.LogWarning("pool is empty.");
#endif
return UnityEngine.Object.Instantiate(prefab);
}
public void Shrink()
{
#if UNITY_EDITOR || DEVELOPMENT_BUILD
var num = Count - numberOfInstances;
if (num > 0) // プール縮小時に削除したオブジェクト数を警告
Debug.LogWarning("Shrink " + num + " instances");
#endif
this.Shrink(0, numberOfInstances);
}
// 諸々省略してます
...
21
シーン遷移時に一括でプールに戻す
Vuforia, ARKit, Tango, HoloLens等様々なARプラ
ットフォームで位置情報を他者と同期させる仕組
みをつくっている
どのARプラットフォームもだいたい癖がある
複雑なScene運用をせざるを得ない
=> 特定SceneのObjectをプールに戻す便利関数
がほしい
22
シーン遷移時に一括でプールに戻す
各ObjectPoolにidを持たせる
オブジェクト生成時にPoolObjectController を動的
にくっつける
Scene.GetRootGameObjects から
PoolObjectController を全探索
1つずつ元のプール(idで判定)に返却
Scene.GetRootGameObjects はGameObjectがActiveじゃ
ないと見つけられない
=> Disableの監視が必要
23
親子対応
ObjectPoolで生成したオブジェクト同士を親子に
=> 親子になったままプールを出入りできてしまう
デモ
24
親子対応
PreloadAsync後の状態
オブジェクトを2つ借りて、親子関係にする
親を返却する。元の状態に戻らない。
子のオブジェクトはプールに戻っていないまま
25
親子対応
子を先にプールに返却してSetParent(null)
その後に親を返却すればきれいに戻る
=> ヒエラルキーの深さ優先探索の逆順に
プールに返却する
26
親子対応
深さ優先探索
27
親子対応
深さ優先探索の逆順にプールに返却
28
親子対応
public static IEnumerable<PoolObjectController>
ResolveNestedPoolObjects(PoolObjectController controller)
{
// GetComponentsInChildrenはDeepFirstSearch
return controller
.GetComponentsInChildren<PoolObjectController>()
.Where(c => c.IsRenting)
.Reverse(); // 逆順
}
この順番でプールに返却すればOK!
29
Startで重たいオブジェクト対策
Startで重たい処理をするComponent
ex. Exploder (deprecated)
事前にStartメソッドが呼ばれていれば、2回目の
SetActive(true)は軽い、みたいなComponent
=> 事前にStartを呼んでおけばいい
30
Startで重たいオブジェクト対策
ObjectPool.PreloadAsync()の挙動
prefabがtrueのとき  Awake ,  OnEnable ,  OnDisable を
呼ぶ
prefabがfalseのとき 何も呼ばれない
イベント関数の実行順 ‑ Unity マニュアル
Start: スクリプトのインスタンスが有効になる
と、最初のフレームのアップデート前に Start が
呼び出されます。
“
“
31
Startで重たいオブジェクト対策
プールからオブジェクトを取得
1フレーム待ってから返す
=> Startが呼ばれる!
カメラはオブジェクトの反対を向いておく
PlayOnAwakeに設定されているAudioが鳴るの
で、AudioListener.volumeを0にしておく
32
Startで重たいオブジェクト対策
IEnumerator PreactivateAsyncCoroutine()
{
var count = Count;
var array = new PoolObjectController[count];
for (var i = 0; i < count; i++)
array[i] = Rent();
// wait 1 frame to call MonoBehaviour.(Awake|OnEnable|Start)
yield return null;
for (var i = 0; i < count; i++)
Return(array[i]);
}
33
Destroy監視
チームで開発する以上
Destroyするなを徹底させるのは難しい
=> 例外を出して気づいてもらう & 修正してもらう
OnDestroyを実装して監視
ObjectPoolのOnClearを呼ぶときだけセーフ
それ以外は例外を吐く
34
親の再設定について
UnityEditorで開発中、ヒエラルキーがとっ散らかる
親オブジェクトを設定してまとめたい
SetParent([nullじゃないtransform])よりも
SetParent(null)ほうが速い
=> ifdefで切り分け
Editorでは親オブジェクト生成 / 実機では親なし
35
おまけ
UniRxで使われているunit test framework
超使いやすかった
neuecc/RuntimeUnitTestToolkit
neue cc ‑ UniRxを支えるユニットテスト ‑
RuntimeUnitTestToolkit for Unity
36
おまけ
UniRxとコルーチンの組み合わせで非同期処理を簡単
にかける
UniRx入門 その5 ‑コルーチンとの併用‑ ‑ Qiita
IEnumerator Start()
{
var config = new ObjectPoolConfig(1, 1, false);
var objectPool = new ObjectPoolImpl(id, prefab, config);
ObjectPoolManager.Instance.RegisterPool(id, objectPool);
yield return ObjectPoolManager.Instance
.PreloadAsync().ToYieldInstruction();
yield return ObjectPoolManager.Instance
.PreactivateAsync().ToYieldInstruction();
Debug.Log("OnLoaded");
}
37
最後に
HadoObjectdPoolをMITライセンスで公開しました
https://github.com/meleap/HadoObjectPool
HadoObjectPoolを使ったHADO
この後ご体験いただけます!
“”” ObjectPoolを肌で感じてください “””
38

More Related Content

What's hot

「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
Masahiko Nakamura
 
UIElements+UI BuilderでEditor拡張を作ろう
UIElements+UI BuilderでEditor拡張を作ろうUIElements+UI BuilderでEditor拡張を作ろう
UIElements+UI BuilderでEditor拡張を作ろう
Unity Technologies Japan K.K.
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
Takahito Tejima
 
ObserverパターンからはじめるUniRx
ObserverパターンからはじめるUniRx ObserverパターンからはじめるUniRx
ObserverパターンからはじめるUniRx
torisoup
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
torisoup
 
UniTask入門
UniTask入門UniTask入門
UniTask入門
torisoup
 
50分でわかるブループリントについて
50分でわかるブループリントについて50分でわかるブループリントについて
50分でわかるブループリントについて
Masahiko Nakamura
 
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
Unity Technologies Japan K.K.
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
 
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
UnityTechnologiesJapan002
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
モノビット エンジン
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
 
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
Unity Technologies Japan K.K.
 
UE4で作成するUIと最適化手法
UE4で作成するUIと最適化手法UE4で作成するUIと最適化手法
UE4で作成するUIと最適化手法
エピック・ゲームズ・ジャパン Epic Games Japan
 
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
まべ☆てっく運営
 
UE4におけるエフェクトの為のエンジン改造事例
UE4におけるエフェクトの為のエンジン改造事例UE4におけるエフェクトの為のエンジン改造事例
UE4におけるエフェクトの為のエンジン改造事例
エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4とBlenderでランニングコストを抑えるモダンなワークフロー
UE4とBlenderでランニングコストを抑えるモダンなワークフローUE4とBlenderでランニングコストを抑えるモダンなワークフロー
UE4とBlenderでランニングコストを抑えるモダンなワークフロー
エピック・ゲームズ・ジャパン Epic Games Japan
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
Game Tools & Middleware Forum
 
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-
torisoup
 

What's hot (20)

「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
 
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
 
UIElements+UI BuilderでEditor拡張を作ろう
UIElements+UI BuilderでEditor拡張を作ろうUIElements+UI BuilderでEditor拡張を作ろう
UIElements+UI BuilderでEditor拡張を作ろう
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
 
ObserverパターンからはじめるUniRx
ObserverパターンからはじめるUniRx ObserverパターンからはじめるUniRx
ObserverパターンからはじめるUniRx
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
 
UniTask入門
UniTask入門UniTask入門
UniTask入門
 
50分でわかるブループリントについて
50分でわかるブループリントについて50分でわかるブループリントについて
50分でわかるブループリントについて
 
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
 
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
 
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
 
UE4で作成するUIと最適化手法
UE4で作成するUIと最適化手法UE4で作成するUIと最適化手法
UE4で作成するUIと最適化手法
 
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
 
UE4におけるエフェクトの為のエンジン改造事例
UE4におけるエフェクトの為のエンジン改造事例UE4におけるエフェクトの為のエンジン改造事例
UE4におけるエフェクトの為のエンジン改造事例
 
UE4とBlenderでランニングコストを抑えるモダンなワークフロー
UE4とBlenderでランニングコストを抑えるモダンなワークフローUE4とBlenderでランニングコストを抑えるモダンなワークフロー
UE4とBlenderでランニングコストを抑えるモダンなワークフロー
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
 
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-
 

Similar to HADOにおけるUniRxのObjectPool

DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼうDELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
Kaz Aiso
 
ユーザーストーリーワークショップ
ユーザーストーリーワークショップユーザーストーリーワークショップ
ユーザーストーリーワークショップ
You&I
 
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へオブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ
Everforth Co., Ltd.
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshopDaisuke Sugai
 
Creators'night#3今井
Creators'night#3今井 Creators'night#3今井
Creators'night#3今井
Daisuke Imai
 
SoftLayerオブジェクトストレージと連携サービスPBOXについて
SoftLayerオブジェクトストレージと連携サービスPBOXについてSoftLayerオブジェクトストレージと連携サービスPBOXについて
SoftLayerオブジェクトストレージと連携サービスPBOXについてShuichi Yukimoto
 
Google Product
Google ProductGoogle Product
Google Product
Daisuke Sugai
 
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
Hori Tasuku
 
ユーザーストーリーワークショップ
ユーザーストーリーワークショップユーザーストーリーワークショップ
ユーザーストーリーワークショップ
You&I
 
チームで開発するための環境を整える
チームで開発するための環境を整えるチームで開発するための環境を整える
チームで開発するための環境を整える
onozaty
 
勉強会 Cvml python基礎
勉強会 Cvml python基礎勉強会 Cvml python基礎
勉強会 Cvml python基礎
真哉 杉野
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
AdvancedTechNight
 
ユーザーストーリーワークショップ実践編
ユーザーストーリーワークショップ実践編ユーザーストーリーワークショップ実践編
ユーザーストーリーワークショップ実践編
You&I
 
Drupal Info Catalog 2018
Drupal Info Catalog 2018Drupal Info Catalog 2018
Drupal Info Catalog 2018
Masahiro Nishio
 
2010/8/27 TechEd2010 ライトニングトーク
2010/8/27 TechEd2010 ライトニングトーク2010/8/27 TechEd2010 ライトニングトーク
2010/8/27 TechEd2010 ライトニングトーク
Sunao Tomita
 
協調フィルタリング with Mahout
協調フィルタリング with Mahout協調フィルタリング with Mahout
協調フィルタリング with Mahout
Katsuhiro Takata
 
go-apt-cacher/mirror
go-apt-cacher/mirrorgo-apt-cacher/mirror
go-apt-cacher/mirror
yutannihilation
 
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
SaitoTsutomu
 
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
Yusuke Ando
 
Customize the openstack horizon as you like
Customize the openstack horizon as you likeCustomize the openstack horizon as you like
Customize the openstack horizon as you like
Takahiro Shida
 

Similar to HADOにおけるUniRxのObjectPool (20)

DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼうDELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
 
ユーザーストーリーワークショップ
ユーザーストーリーワークショップユーザーストーリーワークショップ
ユーザーストーリーワークショップ
 
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へオブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
 
Creators'night#3今井
Creators'night#3今井 Creators'night#3今井
Creators'night#3今井
 
SoftLayerオブジェクトストレージと連携サービスPBOXについて
SoftLayerオブジェクトストレージと連携サービスPBOXについてSoftLayerオブジェクトストレージと連携サービスPBOXについて
SoftLayerオブジェクトストレージと連携サービスPBOXについて
 
Google Product
Google ProductGoogle Product
Google Product
 
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
 
ユーザーストーリーワークショップ
ユーザーストーリーワークショップユーザーストーリーワークショップ
ユーザーストーリーワークショップ
 
チームで開発するための環境を整える
チームで開発するための環境を整えるチームで開発するための環境を整える
チームで開発するための環境を整える
 
勉強会 Cvml python基礎
勉強会 Cvml python基礎勉強会 Cvml python基礎
勉強会 Cvml python基礎
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
 
ユーザーストーリーワークショップ実践編
ユーザーストーリーワークショップ実践編ユーザーストーリーワークショップ実践編
ユーザーストーリーワークショップ実践編
 
Drupal Info Catalog 2018
Drupal Info Catalog 2018Drupal Info Catalog 2018
Drupal Info Catalog 2018
 
2010/8/27 TechEd2010 ライトニングトーク
2010/8/27 TechEd2010 ライトニングトーク2010/8/27 TechEd2010 ライトニングトーク
2010/8/27 TechEd2010 ライトニングトーク
 
協調フィルタリング with Mahout
協調フィルタリング with Mahout協調フィルタリング with Mahout
協調フィルタリング with Mahout
 
go-apt-cacher/mirror
go-apt-cacher/mirrorgo-apt-cacher/mirror
go-apt-cacher/mirror
 
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
 
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
 
Customize the openstack horizon as you like
Customize the openstack horizon as you likeCustomize the openstack horizon as you like
Customize the openstack horizon as you like
 

Recently uploaded

FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
fisuda
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
ooishi1
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
yamamotominami
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
Yoshitaka Kawashima
 

Recently uploaded (6)

FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
 

HADOにおけるUniRxのObjectPool