SlideShare a Scribd company logo
Xamarin で
ReactiveUI を使ってみた
2014.4.19
すまべん特別編「Xamarin 2.0であそぼう!」@関東
1
自己紹介
• @amay077
• 位置情報エンジニア、

モバイルアプリエンジニア、etc
• VB6→VC6→C#2.0

→Java/Obj-C→C#5.0
• Cosmoroot,Inc(Nagoya,
Tokyo)
2
地図, 位置情報,
オープンデータ,
C#, Android, iOS,
Xamarin
Now Hot topics
•        (ロジネビュラ)
• 千年先まで費用ゼロのクラウド型倉庫管理システム
•       (ジクウ)
• リアルタイム位置データ収集プラットフォーム
• Nepula(ネプラ)
• 基幹業務システム向けPaaS
おもにココ担当
クラウドサービスプロバイダ
3
HexRinger developed at
ハマッカソン #2
ref http://blog.airs.co.jp/2010/12/06/hamackathon-20101204.html
4
しゃべPOI developed for
OpenStreetMappers
続きは… 位置情報系Androidアプリケーションの開発 - Togetterまとめ
5
富士フォト with ふじのくにオープンデータ
MashupAward9, アーバンデータチャレンジ東京2013
ref シビックハックの広まりと地方エンジニアの躍進 ‒ MA9総括 ¦ finder
6
富士フォト with ふじのくにオープンデータ
MashupAward9, アーバンデータチャレンジ東京2013
7
iOS版は Xamarin で
作りました
おことわり
• 資料内の C# コードはスペース節約のため「後
ろ { カッコ」にしています
• Xamarin の勉強会なので iOS/Android 中心の
話をします
• Mac が主PC なので Xamarin Studio を使って
います
8
目次
• MvvmCross ではダメ?
• Reactive Extensions について
• ReactiveUI とは
• まとめ
9
MvvmCross
ViewModel Model
View(Droid) View(iOS)
IHogeService
HogeDroid HogeTouch
PCL
PF毎のView+DataBinding
PF固有機能(カメラ、アプリ連
携、GPS…)
10
MvvmCross
• Xamarin でクロスプラットフォームアプリを開
発する際の事実上標準のMVVMフレームワーク
• Android, iOS, WinStore, WP, Mac などに対応
• M-VM を PCL で共通にできる
• プラットフォーム依存機能は IoCコンテナで
11
これで良くね?
12
MvvmCross のデメリット
• 全方位&高機能が故にFat!
• アセンブリ数:15(プラグインも入れると
40over)
• チュートリアル動画が40本以上もある
• ルールたくさん(Binding、ValueConverter、
Service、Plugin…)
13
MvvmCross のデメリット
• クロスプラットフォームな為、機能が最大公約数
• 前の画面からの戻り値を受け取れない(Android
の onActivityResult)とか
• 各PFの最新機能に追いつけない
• iOS - Storyboard
• Android - Fragment
14
MvvmCross 以外の
選択肢
15
QuickCross
• https://github.com/MacawNL/QuickCross
• No-Binary!
• PowerShell でコマンド叩くとコードを生成
• Mac なので試せませんでした…
16
propertycross.com
各SDKでクロスPF開発するための指針が書いてあるみたい
圧倒的じゃないか…
17
そして ReactiveUI
18
…の前に
!
Reactive Extensions
!
について
19
Reactive Extensionsとは
• https://rx.codeplex.com/
• 非同期処理やイベントを LINQ っぽく書いてチェ
インできるスゴイやつ
• TPL(async/await含む) と比べると、複数の結果
を返せるのでストリーム処理に便利
20
私とRx
• Android の非同期処理でコールバック地獄
• jQuery.Deferred みたいなの欲しい
• 「.NET には Rx がある」というのを知る

ref:Reactive Extensionsで非同期処理を簡単に by @neueccさん

「なにこれスゴイ!」
• Java には Rx ないの?
21
Java でも Rx
• reactive4java - 開発終了
• Androidアプリ開発で使ってます
• LINQ to Objects もあるよ
• RxJava
• 事実上標準の Rx for Java になる気配
• Netflix なので安心なんじゃないでしょうか
22
こうなる事は分かってた
// Java - reactive4java!
ObservableBuilder.range(0, 9)!
.where(new Func1<Integer, Boolean>() {!
@Override public Boolean invoke(Integer x) {!
return x % 2 == 0;!
}!
}).select(new Func1<Integer, Float>() {!
@Override public Float invoke(Integer x) {!
return x / 2f;!
}!
}).register(new Observer<Float>() {!
@Override public void next(Float x) { !
System.out.println(x); !
}!
@Override public void finish() { }!
@Override public void error(Throwable arg0) { }!
});
23
// C#!
Observable.Range(0, 10)!
.Where(x => x % 2 == 0)!
.Select(x => x / 2f)!
.Subscribe(Console.WriteLine);
で ReactiveUI とは
24
ReactiveUI
• http://www.reactiveui.net/
• Reactive Extensions を全面的に採用した
MVVMフレームワーク
• WPF, WP, WinStore, iOS, Android, Mac 対応
• 元Microsoft で GitHub の中の人が作ってる
25
MvvmCross のこれ…
ViewModel Model
View(Droid) View(iOS)
IHogeService
HogeDroid HogeTouch
PCL
26
ReactiveUI でもできます
ViewModel Model
View(Droid) View(iOS)
IHogeService
HogeDroid HogeTouch
PCL
IObservable
IObservable
IObservable
M-V-VM の「つなぎ」に
Rx を使ったら…
…もっと COOL に!
27
基本的なクラス構成
MvxViewModel
: INotifyPropertyChanged
MvxActivity
MvxViewController
…
MvvmCross
ReactiveObject
: INotifyPropertyChanged
ReactiveActivity
ReactiveViewController
…
ReativeUI
View ViewModel
28
ViewModel の例
public class HogeViewModel : ReactiveObject {!
string _myName;!
public string MyName {!
get { return _myName; }!
set { this.RaiseAndSetIfChanged(ref _myName, value); }!
}!
!
public HogeViewModel() {!
this.MyName = "amay077";!
}!
}
29
View と Binding の例
public partial class HogeViewController : !
ReactiveViewController, IViewFor<HogeViewModel> {!
public override void ViewDidLoad() {!
base.ViewDidLoad();!
!
this.OneWayBind(this.ViewModel, !
vm => vm.MyName, !
v => v.lblMyName.Text, !
x => x.ToUpper());!
!
this.ViewModel = new HogeViewModel();!
}!
}
30
View と Binding の例
この ViewModel の…
MyName プロパティを…
Viewのラベルに表示する…
…大文字に変換してからね
31
public partial class HogeViewController : !
ReactiveViewController, IViewFor<HogeViewModel> {!
public override void ViewDidLoad() {!
base.ViewDidLoad();!
!
this.OneWayBind(this.ViewModel, !
vm => vm.MyName, !
v => v.lblMyName.Text, !
x => x.ToUpper());!
!
this.ViewModel = new HogeViewModel();!
}!
}
Binding いろいろ
// this = ReactiveViewController!
!
// 双方向 Binding!
this.Bind(this.ViewModel, !
vm=> vm.MyName, v => v.EditMyText.Text);!
!
// コマンドに Bind!
this.BindCommand(this.ViewModel, !
vm => vm.MyCommand, !
v => v.MyButton);
32
Rx っぽい ViewModel
public class HogeViewModel : ReactiveObject {!
ObservableAsPropertyHelper<DateTime> _time;!
public DateTime Time {!
get { return _time.Value; }!
}!
!
public HogeViewModel() {!
_time = Observable.Interval(!
TimeSpan.FromSeconds(1))!
.Select(x => DateTime.Now)!
.ToProperty(this, vm => vm.Time);!
}!
}
33
public class HogeViewModel : ReactiveObject {!
ObservableAsPropertyHelper<DateTime> _time;!
public DateTime Time {!
get { return _time.Value; }!
}!
!
public HogeViewModel() {!
_time = Observable.Interval(!
TimeSpan.FromSeconds(1))!
.Select(x => DateTime.Now)!
.ToProperty(this, vm => vm.Time);!
}!
}
Rx っぽい ViewModel
1秒毎に…
現在時間を…
プロパティに設定する
34
Property を IObservable へ
public class HogeViewModel : ReactiveObject {!
bool _isAgreed;!
public bool IsAgreed {!
get { return _isAgreed; }!
set { this.RaiseAndSetIfChanged(ref _isAgreed, value); }!
}!
!
public HogeViewModel() {!
IObservable<bool> agreed = !
this.ObservableForProperty(vm => vm.IsAgreed)!
.Select(x => x.Value);!
}!
}
35
Reactive な Command
public class HogeViewModel : ReactiveObject {!
public bool IsAgreed { // 省略!
public ICommand Register { get; private set; }!
!
public HogeViewModel() {!
IObservable<bool> agreed = !
this.ObservableForProperty(vm => vm.IsAgreed)!
.Select(x => x.Value);!
var cmd = new ReactiveCommand(agreed);!
cmd.Subscribe(_ => /* 実行した時の処理 */);!
this.Register = cmd;!
}!
}
36
View で使う
public partial class HogeViewController : !
ReactiveViewController, IViewFor<HogeViewModel> {!
public override void ViewDidLoad() {!
!
this.Bind(this.ViewModel, !
vm=> vm.IsAgreed, v => v.ToggleAgreed);!
!
this.BindCommand(this.ViewModel, !
vm=> vm.Register, v => v.RegisterButton);
37
Registerコマンドの CanExecute が true の時のみ押せる
実行したところ
38
vm.Register.Subscribe(
_=> /* 実行した時の処理 */)
Command実行∼
Property更新を
流れるように
39
シナリオ
40
Model
!
.GpsAvailable
.GetLocations()
ViewModel
!
.Location
.StartGps()
View
bind
notify
listen
notify
Model(適当)
public class MyLocationModel {!
public IObservable<bool> GpsAvailable() {!
return Observable.Return(true);!
}!
!
public IObservable<LatLon> GetLocation() {!
var r = new System.Random();!
!
return Observable.Interval(TimeSpan.FromSeconds(1))!
.Select(x => new LatLon(!
34d + r.NextDouble(), !
135d + r.NextDouble()));!
}!
}
41
ViewModel
public class FourthViewModel : ReactiveObject {!
MyLocationModel _model = new MyLocationModel();!
!
ObservableAsPropertyHelper<LatLon> _location;!
public LatLon Location { get { return _location.Value; } }!
!
public ICommand StartGps { get; private set; }!
!
public FourthViewModel() {!
var cmd = new ReactiveCommand(_model.GpsAvailable());!
!
_location = cmd.SelectMany(_ => _model.GetLocation())!
.ToProperty(this, vm => vm.Location);!
!
this.StartGps = cmd;!
}!
}
42
public class FourthViewModel : ReactiveObject {!
MyLocationModel _model = new MyLocationModel();!
!
ObservableAsPropertyHelper<LatLon> _location;!
public LatLon Location { get { return _location.Value; } }!
!
public ICommand StartGps { get; private set; }!
!
public FourthViewModel() {!
var cmd = new ReactiveCommand(_model.GpsAvailable());!
!
_location = cmd.SelectMany(_ => _model.GetLocation())!
.ToProperty(this, vm => vm.Location);!
!
this.StartGps = cmd;!
}!
}
ViewModel
43
Execute されたらモデルで測位開始、
結果を逐次 Property へ
GPS が使えるなら
CanExecute = true
View は普通に Binding
public override void ViewDidLoad() {!
base.ViewDidLoad();!
!
this.OneWayBind(this.ViewModel, !
vm => vm.Location, v => v.LatLabel.Text, !
x => x.Lat.ToString("0.00"));!
!
this.OneWayBind(this.ViewModel, !
vm => vm.Location, v => v.LonLabel.Text, !
x => x.Lon.ToString("0.00"));!
!
this.BindCommand(this.ViewModel, !
vm => vm.StartGps, v => v.StartGpsButton);!
!
this.ViewModel = new FourthViewModel(); !
}
44
複合条件
(Rx を活かして)
45
シナリオ
46
ViewModel
!
.Red
.Green
.Blue
.Color
View
bind
notify
depends
ViewModel
public class FifthViewModel : ReactiveObject {!
float _red;!
public float Red {!
get { return _red; } set { this.RaiseAndSetIfChanged(ref _red, value); }!
}!
/* Blue, Green は省略 */!
!
ObservableAsPropertyHelper<Color> _color;!
public Color Color { get { return _color.Value; } }!
!
public FifthViewModel() {!
var r = this.ObservableForProperty(vm => vm.Red).Select(x => x.Value);!
var g = this.ObservableForProperty(vm => vm.Green).Select(x => x.Value);!
var b = this.ObservableForProperty(vm => vm.Blue).Select(x => x.Value);!
!
_color = Observable.CombineLatest(r, g, b, !
(x, y, z) => new Color(x, y, z)).ToProperty(this, vm => vm.Color);!
}!
}
47
public class FifthViewModel : ReactiveObject {!
float _red;!
public float Red {!
get { return _red; } set { this.RaiseAndSetIfChanged(ref _red, value); }!
}!
/* Blue, Green は省略 */!
!
ObservableAsPropertyHelper<Color> _color;!
public Color Color { get { return _color.Value; } }!
!
public FifthViewModel() {!
var r = this.ObservableForProperty(vm => vm.Red).Select(x => x.Value);!
var g = this.ObservableForProperty(vm => vm.Green).Select(x => x.Value);!
var b = this.ObservableForProperty(vm => vm.Blue).Select(x => x.Value);!
!
_color = Observable.CombineLatest(r, g, b, !
(x, y, z) => new Color(x, y, z)).ToProperty(this, vm => vm.Color);!
}!
}
ViewModel
48
3つの値が ったら初回設定、
以降はいずれかが変わったら設定
View と Binding
public override void ViewDidLoad() {!
this.Bind(this.ViewModel, vm => vm.Red, v => v.RedSlider.Value);!
this.Bind(this.ViewModel, vm => vm.Green, v => v.GreenSlider.Value);!
this.Bind(this.ViewModel, vm => vm.Blue, v => v.BlueSlider.Value);!
!
this.OneWayBind(this.ViewModel, !
vm => vm.Color, !
v => v.ColorView.BackgroundColor, !
x => new UIColor(x.R, x.G, x.B, 1f));!
}
49
iOSなのでUIColorに変換
View で MultiBinding でも
public override void ViewDidLoad() {!
var r = this.ObservableForProperty(v => v.ViewModel.Red)!
.Select(x => x.Value);!
var g = this.ObservableForProperty(v => v.ViewModel.Green)!
.Select(x => x.Value);!
var b = this.ObservableForProperty(v => v.ViewModel.Blue)!
.Select(x => x.Value);!
!
Observable.CombineLatest(r, g, b, !
(x, y, z) => new UIColor(x, y, z, 1f))!
.ObserveOn(RxApp.MainThreadScheduler)!
.Subscribe(x => this.ColorView.BackgroundColor = x);!
}
50
UIThread で
ところで
今まで紹介したこれ
51
ReactiveProperty の方が
イケてますよね
52
http://reactiveproperty.codeplex.com/
スッキリ!
public class FifthViewModel {!
public ReactiveProperty<float> Red { get; private set; }!
public ReactiveProperty<float> Green { get; private set; }!
public ReactiveProperty<float> Blue { get; private set; }!
!
public ReactiveProperty<Color> Color { get; private set; }!
!
public FifthViewModel() {!
!
this.Color = Observable.CombineLatest(Red, Green, Blue, !
(x, y, z) => new Color(x, y, z)).ToReactiveProperty();!
!
}!
}
53
ReactiveUI で画面遷移
• MvvmCross では
• ShowViewModel<NextViewModel>()
• ReactiveUI だと
• Router.NavigateCommandFor<NextViewMo
del>() - 参照
• が、iOS/Android では未対応のようで…
54
画面遷移
• 画面遷移はプラットフォーム毎に仕組みが違って、
しかも進化が早い
• MvvmCross も、iOS の Storyboard に対応し
切れていない
• 割りきって View に画面遷移コードを書くか、

Resolver(後述)を使って自作する
55
IoC というか DI というか
• MvvmCross では
• Service を使う by @iseebiさん
• ルールに従えば Resolver を意識することない
• ReactiveUI では
• RxApp.MutableResolver を使う
• 全てコードを書く必要あり
56
Resolver の仕組み
r = RxUI.Resolver
HogeDroid
(Android)
HogeTouch
(iOS)
Model
IHogeService
r.Register(()=>new HogeDroid(), typeOf(IHogeService))
var svc = r.GetService<IHogeService>()
…PCL
57
public partial class AppDelegate : UIApplicationDelegate {!
public override bool FinishedLaunching(!
UIApplication app, NSDictionary options) {!
!
var r = RxApp.MutableResolver;!
!
r.Register(!
() => new HogeTouch(), !
typeof(IHogeService));!
または!
r.RegisterLazySingleton(!
() => new HogeTouch(), !
typeof(IHogeService));
Resolver へ登録
58
都度インスタンスを生成
初回1回だけ、あと使い回し
Resolver を使って
インスタンス化
// Model(PCL) にて!
!
IHogeService svc = !
RxApp.MutableResolver.GetService<IHogeService>();!
!
svc.SomeMethod(); // 実体は Resolver に登録したクラス
59
まとめ
60
ReactiveUI のメリット
• Rx で、(主に)ViewModel のコードを削減
• IoCコンテナ(Resolver)でPF固有機能を解決
• iOS/Android/WPF などの DataBinding が用意
されている
61
参考リンク
• neue cc 

http://neue.cc/
• かずきのBlog@hatena

http://okazuki.hatenablog.com/
• Rx入門 ¦ xin9le.net

http://xin9le.net/rx-intro
• GitHub's Xamarin starter apps

http://log.paulbetts.org/open-source-githubs-xamarin-
starter-apps/
62
ありがとうございました
63
おまけ
• Rx も PCL 化されましたが、
• Android用、iOS用のSystem.Reactive.PlatformServices.dll

は、どこに?

あるいはどうやってビルドしたらよいでしょう?
• あと PlatformServices.dll は

iOS の AOT で問題なく使えるのでしょうか?
• ref:https://twitter.com/atsushieno/status/
457399573363712000
64
おまけ
• PCL の Profile に Silverlight を含めると
IObservable が無くなってしまうので実質SLは
(ry
• Profile78 

This is Xamarin's current preferred profile.

とのこと。
65

More Related Content

What's hot (20)

Usb接続するアプリを開発した時に試行錯誤した事
Usb接続するアプリを開発した時に試行錯誤した事Usb接続するアプリを開発した時に試行錯誤した事
Usb接続するアプリを開発した時に試行錯誤した事
Masataka Kono
 
GraphQL入門
GraphQL入門GraphQL入門
GraphQL入門
Kent Ohashi
 
JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法
Chihiro Ito
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタ
l_b__
 
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
Yoshiro Tokumasu
 
Media Art II openFrameworks 複数のシーンの管理・切替え
Media Art II openFrameworks 複数のシーンの管理・切替えMedia Art II openFrameworks 複数のシーンの管理・切替え
Media Art II openFrameworks 複数のシーンの管理・切替え
Atsushi Tadokoro
 
C#で速度を極めるいろは
C#で速度を極めるいろはC#で速度を極めるいろは
C#で速度を極めるいろは
Core Concept Technologies
 
Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト
Akio Ishida
 
LAMPもDockerもKubernetesも数クリックでデプロイ! Nutanix & Calmによるインフラとアプリ展開の自動化
LAMPもDockerもKubernetesも数クリックでデプロイ! Nutanix & Calmによるインフラとアプリ展開の自動化LAMPもDockerもKubernetesも数クリックでデプロイ! Nutanix & Calmによるインフラとアプリ展開の自動化
LAMPもDockerもKubernetesも数クリックでデプロイ! Nutanix & Calmによるインフラとアプリ展開の自動化
Satoshi Shimazaki
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
Jun-ichi Sakamoto
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
 
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたものFlutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
 
シーケンス図とアクティビティ図と状態遷移図
シーケンス図とアクティビティ図と状態遷移図シーケンス図とアクティビティ図と状態遷移図
シーケンス図とアクティビティ図と状態遷移図
akipii Oga
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
 
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
ネットワーク自動化ツール紹介(Ansible・NAPALM編)ネットワーク自動化ツール紹介(Ansible・NAPALM編)
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
akira6592
 
Android タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on Linux 2
Android タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on Linux 2Android タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on Linux 2
Android タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on Linux 2
Netwalker lab kapper
 
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方
wata2ki
 
Usb接続するアプリを開発した時に試行錯誤した事
Usb接続するアプリを開発した時に試行錯誤した事Usb接続するアプリを開発した時に試行錯誤した事
Usb接続するアプリを開発した時に試行錯誤した事
Masataka Kono
 
JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法
Chihiro Ito
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタ
l_b__
 
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
Yoshiro Tokumasu
 
Media Art II openFrameworks 複数のシーンの管理・切替え
Media Art II openFrameworks 複数のシーンの管理・切替えMedia Art II openFrameworks 複数のシーンの管理・切替え
Media Art II openFrameworks 複数のシーンの管理・切替え
Atsushi Tadokoro
 
Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト
Akio Ishida
 
LAMPもDockerもKubernetesも数クリックでデプロイ! Nutanix & Calmによるインフラとアプリ展開の自動化
LAMPもDockerもKubernetesも数クリックでデプロイ! Nutanix & Calmによるインフラとアプリ展開の自動化LAMPもDockerもKubernetesも数クリックでデプロイ! Nutanix & Calmによるインフラとアプリ展開の自動化
LAMPもDockerもKubernetesも数クリックでデプロイ! Nutanix & Calmによるインフラとアプリ展開の自動化
Satoshi Shimazaki
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
Jun-ichi Sakamoto
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
 
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたものFlutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
 
シーケンス図とアクティビティ図と状態遷移図
シーケンス図とアクティビティ図と状態遷移図シーケンス図とアクティビティ図と状態遷移図
シーケンス図とアクティビティ図と状態遷移図
akipii Oga
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
 
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
ネットワーク自動化ツール紹介(Ansible・NAPALM編)ネットワーク自動化ツール紹介(Ansible・NAPALM編)
ネットワーク自動化ツール紹介(Ansible・NAPALM編)
akira6592
 
Android タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on Linux 2
Android タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on Linux 2Android タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on Linux 2
Android タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on Linux 2
Netwalker lab kapper
 
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方
wata2ki
 

Viewers also liked (20)

Xamarin バッドノウハウ大全
Xamarin バッドノウハウ大全Xamarin バッドノウハウ大全
Xamarin バッドノウハウ大全
Yoshito Tabuchi
 
Xamarin基礎講座 Xamarinハンズオン(2016.09 浜松) #JXUG #jaghama
Xamarin基礎講座 Xamarinハンズオン(2016.09 浜松) #JXUG #jaghamaXamarin基礎講座 Xamarinハンズオン(2016.09 浜松) #JXUG #jaghama
Xamarin基礎講座 Xamarinハンズオン(2016.09 浜松) #JXUG #jaghama
Hironov OKUYAMA
 
Xamarin & Google Maps SDKでクロスプラットフォーム地図アプリ
Xamarin & Google Maps SDKでクロスプラットフォーム地図アプリXamarin & Google Maps SDKでクロスプラットフォーム地図アプリ
Xamarin & Google Maps SDKでクロスプラットフォーム地図アプリ
Kohei Otsuka
 
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメXamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Yoshito Tabuchi
 
続Xamarinはじめました
続Xamarinはじめました続Xamarinはじめました
続Xamarinはじめました
Yuya Yamaki
 
Jxugc#22 lt古川
Jxugc#22 lt古川Jxugc#22 lt古川
Jxugc#22 lt古川
F. Syam
 
Xamarinは辛いよ
Xamarinは辛いよXamarinは辛いよ
Xamarinは辛いよ
Takkiiii
 
Xamarin.Forms概要
Xamarin.Forms概要Xamarin.Forms概要
Xamarin.Forms概要
Hironov OKUYAMA
 
Xamarin.Formsで鉄道模型を制御してみた
Xamarin.Formsで鉄道模型を制御してみたXamarin.Formsで鉄道模型を制御してみた
Xamarin.Formsで鉄道模型を制御してみた
ayasehiro
 
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 EastiOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
irgaly
 
Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性
Atsushi Nakamura
 
Visual Studio + xamarin で始めるモバイル アプリ開発
Visual Studio + xamarin で始めるモバイル アプリ開発Visual Studio + xamarin で始めるモバイル アプリ開発
Visual Studio + xamarin で始めるモバイル アプリ開発
インフラジスティックス・ジャパン株式会社
 
カメラアプリ開発入門3
カメラアプリ開発入門3カメラアプリ開発入門3
カメラアプリ開発入門3
Takashi Ohtsuka
 
ゆるふわ Xamarin Tips
ゆるふわ Xamarin Tipsゆるふわ Xamarin Tips
ゆるふわ Xamarin Tips
Daiki Kawanuma
 
JXUGC 13 東京 はじめに
JXUGC 13 東京 はじめにJXUGC 13 東京 はじめに
JXUGC 13 東京 はじめに
Yoshito Tabuchi
 
かけ算で使いこなす Xamarin
かけ算で使いこなす Xamarinかけ算で使いこなす Xamarin
かけ算で使いこなす Xamarin
Tatsuji Kuroyanagi
 
Xamarin開発環境の選択
Xamarin開発環境の選択Xamarin開発環境の選択
Xamarin開発環境の選択
Miho Kurosawa
 
Xamarinはじめました
XamarinはじめましたXamarinはじめました
Xamarinはじめました
Yuya Yamaki
 
この辺でXamarin導入による 効果と限界をしっかり把握してみよう MVP Community Camp 2015
この辺でXamarin導入による 効果と限界をしっかり把握してみよう  MVP Community Camp 2015 この辺でXamarin導入による 効果と限界をしっかり把握してみよう  MVP Community Camp 2015
この辺でXamarin導入による 効果と限界をしっかり把握してみよう MVP Community Camp 2015
Shinichi Hirauchi
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
信之 岩永
 
Xamarin バッドノウハウ大全
Xamarin バッドノウハウ大全Xamarin バッドノウハウ大全
Xamarin バッドノウハウ大全
Yoshito Tabuchi
 
Xamarin基礎講座 Xamarinハンズオン(2016.09 浜松) #JXUG #jaghama
Xamarin基礎講座 Xamarinハンズオン(2016.09 浜松) #JXUG #jaghamaXamarin基礎講座 Xamarinハンズオン(2016.09 浜松) #JXUG #jaghama
Xamarin基礎講座 Xamarinハンズオン(2016.09 浜松) #JXUG #jaghama
Hironov OKUYAMA
 
Xamarin & Google Maps SDKでクロスプラットフォーム地図アプリ
Xamarin & Google Maps SDKでクロスプラットフォーム地図アプリXamarin & Google Maps SDKでクロスプラットフォーム地図アプリ
Xamarin & Google Maps SDKでクロスプラットフォーム地図アプリ
Kohei Otsuka
 
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメXamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Yoshito Tabuchi
 
続Xamarinはじめました
続Xamarinはじめました続Xamarinはじめました
続Xamarinはじめました
Yuya Yamaki
 
Jxugc#22 lt古川
Jxugc#22 lt古川Jxugc#22 lt古川
Jxugc#22 lt古川
F. Syam
 
Xamarinは辛いよ
Xamarinは辛いよXamarinは辛いよ
Xamarinは辛いよ
Takkiiii
 
Xamarin.Formsで鉄道模型を制御してみた
Xamarin.Formsで鉄道模型を制御してみたXamarin.Formsで鉄道模型を制御してみた
Xamarin.Formsで鉄道模型を制御してみた
ayasehiro
 
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 EastiOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
irgaly
 
Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性
Atsushi Nakamura
 
カメラアプリ開発入門3
カメラアプリ開発入門3カメラアプリ開発入門3
カメラアプリ開発入門3
Takashi Ohtsuka
 
ゆるふわ Xamarin Tips
ゆるふわ Xamarin Tipsゆるふわ Xamarin Tips
ゆるふわ Xamarin Tips
Daiki Kawanuma
 
JXUGC 13 東京 はじめに
JXUGC 13 東京 はじめにJXUGC 13 東京 はじめに
JXUGC 13 東京 はじめに
Yoshito Tabuchi
 
かけ算で使いこなす Xamarin
かけ算で使いこなす Xamarinかけ算で使いこなす Xamarin
かけ算で使いこなす Xamarin
Tatsuji Kuroyanagi
 
Xamarin開発環境の選択
Xamarin開発環境の選択Xamarin開発環境の選択
Xamarin開発環境の選択
Miho Kurosawa
 
Xamarinはじめました
XamarinはじめましたXamarinはじめました
Xamarinはじめました
Yuya Yamaki
 
この辺でXamarin導入による 効果と限界をしっかり把握してみよう MVP Community Camp 2015
この辺でXamarin導入による 効果と限界をしっかり把握してみよう  MVP Community Camp 2015 この辺でXamarin導入による 効果と限界をしっかり把握してみよう  MVP Community Camp 2015
この辺でXamarin導入による 効果と限界をしっかり把握してみよう MVP Community Camp 2015
Shinichi Hirauchi
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
信之 岩永
 
Ad

Similar to Xamarin で ReactiveUI を使ってみた (20)

Prism + ReactiveProperty入門
Prism + ReactiveProperty入門Prism + ReactiveProperty入門
Prism + ReactiveProperty入門
一希 大田
 
RxJava on Android
RxJava on AndroidRxJava on Android
RxJava on Android
yo_waka
 
Xamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツXamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツ
Masuda Tomoaki
 
BindableProperty 書くのクソダリーんだけど、 あいつなんやねん(仮)
BindableProperty書くのクソダリーんだけど、あいつなんやねん(仮)BindableProperty書くのクソダリーんだけど、あいつなんやねん(仮)
BindableProperty 書くのクソダリーんだけど、 あいつなんやねん(仮)
Takashi Kawasaki
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
伸男 伊藤
 
RxSwiftをバインディングツールとして使ってみる
RxSwiftをバインディングツールとして使ってみるRxSwiftをバインディングツールとして使ってみる
RxSwiftをバインディングツールとして使ってみる
Hironytic
 
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
Yoshifumi Kawai
 
20130412 titanium meetupvol7
20130412 titanium meetupvol720130412 titanium meetupvol7
20130412 titanium meetupvol7
Hiroshi Oyamada
 
Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
Shun Nakahara
 
Building Silverlight Large Scale Application Using MVVM
Building Silverlight Large Scale Application Using MVVMBuilding Silverlight Large Scale Application Using MVVM
Building Silverlight Large Scale Application Using MVVM
Shotaro Suzuki
 
【Techbuzz】titanium資料
【Techbuzz】titanium資料【Techbuzz】titanium資料
【Techbuzz】titanium資料
洋平 前田
 
One night Vue.js
One night Vue.jsOne night Vue.js
One night Vue.js
Masahiro Kyuden
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
tamtam180
 
Sansan様 登壇資料
Sansan様 登壇資料Sansan様 登壇資料
Sansan様 登壇資料
Daisuke Nagata
 
Clean Architectureで設計してRxJSを使った話
Clean Architectureで設計してRxJSを使った話Clean Architectureで設計してRxJSを使った話
Clean Architectureで設計してRxJSを使った話
_kondei
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会
Yukihiro Kitazawa
 
Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発
Daizen Ikehara
 
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
decode2016
 
Prism + ReactiveProperty入門
Prism + ReactiveProperty入門Prism + ReactiveProperty入門
Prism + ReactiveProperty入門
一希 大田
 
RxJava on Android
RxJava on AndroidRxJava on Android
RxJava on Android
yo_waka
 
Xamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツXamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツ
Masuda Tomoaki
 
BindableProperty 書くのクソダリーんだけど、 あいつなんやねん(仮)
BindableProperty書くのクソダリーんだけど、あいつなんやねん(仮)BindableProperty書くのクソダリーんだけど、あいつなんやねん(仮)
BindableProperty 書くのクソダリーんだけど、 あいつなんやねん(仮)
Takashi Kawasaki
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
伸男 伊藤
 
RxSwiftをバインディングツールとして使ってみる
RxSwiftをバインディングツールとして使ってみるRxSwiftをバインディングツールとして使ってみる
RxSwiftをバインディングツールとして使ってみる
Hironytic
 
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
Yoshifumi Kawai
 
20130412 titanium meetupvol7
20130412 titanium meetupvol720130412 titanium meetupvol7
20130412 titanium meetupvol7
Hiroshi Oyamada
 
Building Silverlight Large Scale Application Using MVVM
Building Silverlight Large Scale Application Using MVVMBuilding Silverlight Large Scale Application Using MVVM
Building Silverlight Large Scale Application Using MVVM
Shotaro Suzuki
 
【Techbuzz】titanium資料
【Techbuzz】titanium資料【Techbuzz】titanium資料
【Techbuzz】titanium資料
洋平 前田
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
tamtam180
 
Sansan様 登壇資料
Sansan様 登壇資料Sansan様 登壇資料
Sansan様 登壇資料
Daisuke Nagata
 
Clean Architectureで設計してRxJSを使った話
Clean Architectureで設計してRxJSを使った話Clean Architectureで設計してRxJSを使った話
Clean Architectureで設計してRxJSを使った話
_kondei
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会
Yukihiro Kitazawa
 
Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発
Daizen Ikehara
 
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
decode2016
 
Ad

More from Hironov OKUYAMA (9)

Xamarin advent calendar 2016 参加者募集
Xamarin advent calendar 2016 参加者募集Xamarin advent calendar 2016 参加者募集
Xamarin advent calendar 2016 参加者募集
Hironov OKUYAMA
 
Xamarin によるクロスプラットフォームモバイルアプリ開発(2014.06)
Xamarin によるクロスプラットフォームモバイルアプリ開発(2014.06)Xamarin によるクロスプラットフォームモバイルアプリ開発(2014.06)
Xamarin によるクロスプラットフォームモバイルアプリ開発(2014.06)
Hironov OKUYAMA
 
給食献立×オープンデータでアレルギー事故を防ぐ
給食献立×オープンデータでアレルギー事故を防ぐ給食献立×オープンデータでアレルギー事故を防ぐ
給食献立×オープンデータでアレルギー事故を防ぐ
Hironov OKUYAMA
 
Xamarin によるクロスプラットフォームモバイルアプリ開発
Xamarin によるクロスプラットフォームモバイルアプリ開発Xamarin によるクロスプラットフォームモバイルアプリ開発
Xamarin によるクロスプラットフォームモバイルアプリ開発
Hironov OKUYAMA
 
HexRinger needs GeoHex #gms2012
HexRinger needs GeoHex #gms2012HexRinger needs GeoHex #gms2012
HexRinger needs GeoHex #gms2012
Hironov OKUYAMA
 
HexRinger と FOSS4G の紆余曲折
HexRinger と FOSS4G の紆余曲折HexRinger と FOSS4G の紆余曲折
HexRinger と FOSS4G の紆余曲折
Hironov OKUYAMA
 
AdMob やってみた for 2011.7.9 #jaghama #3
AdMob やってみた for 2011.7.9 #jaghama #3AdMob やってみた for 2011.7.9 #jaghama #3
AdMob やってみた for 2011.7.9 #jaghama #3
Hironov OKUYAMA
 
HexRinger for 2011.5.14 #jaghama
HexRinger for 2011.5.14 #jaghamaHexRinger for 2011.5.14 #jaghama
HexRinger for 2011.5.14 #jaghama
Hironov OKUYAMA
 
HexRinger
HexRingerHexRinger
HexRinger
Hironov OKUYAMA
 
Xamarin advent calendar 2016 参加者募集
Xamarin advent calendar 2016 参加者募集Xamarin advent calendar 2016 参加者募集
Xamarin advent calendar 2016 参加者募集
Hironov OKUYAMA
 
Xamarin によるクロスプラットフォームモバイルアプリ開発(2014.06)
Xamarin によるクロスプラットフォームモバイルアプリ開発(2014.06)Xamarin によるクロスプラットフォームモバイルアプリ開発(2014.06)
Xamarin によるクロスプラットフォームモバイルアプリ開発(2014.06)
Hironov OKUYAMA
 
給食献立×オープンデータでアレルギー事故を防ぐ
給食献立×オープンデータでアレルギー事故を防ぐ給食献立×オープンデータでアレルギー事故を防ぐ
給食献立×オープンデータでアレルギー事故を防ぐ
Hironov OKUYAMA
 
Xamarin によるクロスプラットフォームモバイルアプリ開発
Xamarin によるクロスプラットフォームモバイルアプリ開発Xamarin によるクロスプラットフォームモバイルアプリ開発
Xamarin によるクロスプラットフォームモバイルアプリ開発
Hironov OKUYAMA
 
HexRinger needs GeoHex #gms2012
HexRinger needs GeoHex #gms2012HexRinger needs GeoHex #gms2012
HexRinger needs GeoHex #gms2012
Hironov OKUYAMA
 
HexRinger と FOSS4G の紆余曲折
HexRinger と FOSS4G の紆余曲折HexRinger と FOSS4G の紆余曲折
HexRinger と FOSS4G の紆余曲折
Hironov OKUYAMA
 
AdMob やってみた for 2011.7.9 #jaghama #3
AdMob やってみた for 2011.7.9 #jaghama #3AdMob やってみた for 2011.7.9 #jaghama #3
AdMob やってみた for 2011.7.9 #jaghama #3
Hironov OKUYAMA
 
HexRinger for 2011.5.14 #jaghama
HexRinger for 2011.5.14 #jaghamaHexRinger for 2011.5.14 #jaghama
HexRinger for 2011.5.14 #jaghama
Hironov OKUYAMA
 

Xamarin で ReactiveUI を使ってみた