SlideShare a Scribd company logo
1 of 25
Download to read offline
Linq to XXXX
第二回 LINQ勉強会
@Posaune
1
自己紹介
Posauneです。@Posauneです。まえかわです。
C#ラブ、F#すげえ、Ruby好き、Powershell好
き、Haskellがんばりたい
京都アジャイル勉強会(#京アジャ)やってま
す。
最近はテストとか品質とかUXとかも好きで
す。節操がない系エンジニア。
2
3
資料は来てから作りました
資料は少ないのでコードを沢山書こうと思い
ます
適宜ツッコミをすることにより初めて成立す
るセッションです
僕もRxは勉強中なので、一緒に勉強しましょ
4
Linq to ...
Linq to Object
メモリ上のデータをクエリする
Linq to XML
XMLテキストをクエリする
Linq to SQL (Entity)
DB上のデータを書く
5
Linq to ...
基本的に、「同じ型のデータが連なって出て
くる」というものならOK
フィルタリング(Where, Take, Skip)
加工(Select)
合成(Zip, SelectMany)
6
同じ型のデータが
連なるもの・・・?
7
Linq to Event
Eventも同じ型のデータが大量に列挙される
だからEventHandlerが使える、ですよね
8
とはいえ。。。
Event は非同期呼び出しなので、IEnumerable
とは本質的に合わない
同期呼び出し(Pull型)
非同期のものをPullで呼ぶと、いつ終わる
かわからないものがメインスレッドに来る
こわい
9
Pull型の呼び出し
10
そこでIObservable!
Push型の列挙を行う
非同期列挙
最初に、「これが起きたらどうするか」を
登録しておき、実際に発生した時に呼び出さ
れる、というイメージ。
11
Push型の呼び出し
12
Reactive Extensions!
IObservable / IObserver は.NET標準クラス
でも、実装したクラスは存在しない!
実装したクラスを簡単に作るのが、Reactive
Extensions
略称:Rx
13
まず基本から
Observableなデータソースをとりあえず作っ
てみる。
Observable.Rangeメソッド
Subject<T>型
14
HotとCold
ObservableにもHotとColdがある
Hot:”動的”なIObservable
何が起こるのかは繋いでみないと
わからない
すべてのつないだものに同じ列挙をPushする
Cold:”静的”なIObservable
つないだ瞬間に発火する
何が起こるか事前に決まっている
つないだもの毎に列挙をPushする
15
HotとColdは
時間余ったらデモします
16
いよいよEventにつなぐ
Observable.FromEventというのがあるのです
17
Linq to Event
大量のデータをLinq的メソッドチェーンによりさばける
見やすい(鍛えれば)
書きやすい(慣れれば)
イベントの登録・解除も楽に
ラムダでも解除できるよ!
イベントのモックが簡単にできるようになる!
UI系の単体テストが書きやすくなる
System.Reactive.Testあたりを参照すべし
イベントがFirst Classオブジェクトに!
18
さて何しましょう?
最初はマウスイベントをもう少しガッツリや
ろうかとおもっていた
D&Dとかも割とスッキリ書ける
昨日見たセッションビデオが面白くて
ですね…
19
Curing Your Event Processing
Blues with Reactive Extensions
20
ホントはKINECTでやりたいお(´・ω・`)
でもKINECT高いんだお(´;ω;`)
だからLEAPでやるお!(`・ω・´)
21
DEMO:LeapでRx!
22
まとめ
Rx:Linq to Event
Event処理を簡潔に書けるようになる、かも
Eventだけじゃなく、非同期にデータが飛んで
くるものにはなんでも有効
23
学習リソース
neueccさんのBlog:http://neue.cc/category/
programming/rx
okazukiさんのBlog:http://okazuki.hatenablog.com/
entry/20120324/1330956809
xin9leさんのBlog:http://xin9le.net/rx-intro
動画
http://channel9.msdn.com/Blogs/codefest/
DC2010T0100-Keynote-Rx-curing-your-
asynchronous-programming-blues
http://channel9.msdn.com/Events/TechEd/Europe/
2012/DEV413
24
おまけ:
Interactive Extensions
Rxで便利げだったものがIEnumerableに逆輸入
されたもの
略称Ix
便利らしいけれど、殆ど見れていない…
@gushwellさんの学習リソース:http://
gushwell.ldblog.jp/archives/52257023.html
http://www.nuget.org/packages/
Ix_Experimental-Main/
25

More Related Content

Similar to Linq to XXXX(Reactive Extensionsの紹介)

Flang kkd1
Flang kkd1Flang kkd1
Flang kkd1florets1
 
おとなのテキストマイニング
おとなのテキストマイニングおとなのテキストマイニング
おとなのテキストマイニングMunenori Sugimura
 
パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"Keisuke Takahashi
 
徳丸本ができるまで
徳丸本ができるまで徳丸本ができるまで
徳丸本ができるまでHiroshi Tokumaru
 
RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」
RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」
RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」Kosuke Tanabe
 
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLShinichiAoyagi
 
DBFluteハンズオンで学んだこと etc.
DBFluteハンズオンで学んだこと etc.DBFluteハンズオンで学んだこと etc.
DBFluteハンズオンで学んだこと etc.Masato Tokuda
 
How to read linux kernel
How to read linux kernelHow to read linux kernel
How to read linux kernelNaoya Ito
 
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pmsphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pmTakeshi Komiya
 
Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門yujiro_t
 
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるPHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるTakuya Sato
 

Similar to Linq to XXXX(Reactive Extensionsの紹介) (13)

Flang kkd1
Flang kkd1Flang kkd1
Flang kkd1
 
おとなのテキストマイニング
おとなのテキストマイニングおとなのテキストマイニング
おとなのテキストマイニング
 
パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"
 
徳丸本ができるまで
徳丸本ができるまで徳丸本ができるまで
徳丸本ができるまで
 
Build Dockferile with Haskell
Build Dockferile with HaskellBuild Dockferile with Haskell
Build Dockferile with Haskell
 
RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」
RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」
RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」
 
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
 
DBFluteハンズオンで学んだこと etc.
DBFluteハンズオンで学んだこと etc.DBFluteハンズオンで学んだこと etc.
DBFluteハンズオンで学んだこと etc.
 
How to read linux kernel
How to read linux kernelHow to read linux kernel
How to read linux kernel
 
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pmsphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
 
Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門
 
LINQ to なにがし
LINQ to なにがしLINQ to なにがし
LINQ to なにがし
 
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるPHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考える
 

More from Hiroshi Maekawa

新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜Hiroshi Maekawa
 
老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間Hiroshi Maekawa
 
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ーHiroshi Maekawa
 
第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CI第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CIHiroshi Maekawa
 
Visual Studio Online as a CI Service
Visual Studio Online as a CI ServiceVisual Studio Online as a CI Service
Visual Studio Online as a CI ServiceHiroshi Maekawa
 
Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0Hiroshi Maekawa
 
Getting Start with React Native
Getting Start with React NativeGetting Start with React Native
Getting Start with React NativeHiroshi Maekawa
 
「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆 「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆 Hiroshi Maekawa
 
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜Hiroshi Maekawa
 
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜Hiroshi Maekawa
 
ドメイン『駆動』『開発』
ドメイン『駆動』『開発』ドメイン『駆動』『開発』
ドメイン『駆動』『開発』Hiroshi Maekawa
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略Hiroshi Maekawa
 
iOSのCI as a Service事情
iOSのCI as a Service事情iOSのCI as a Service事情
iOSのCI as a Service事情Hiroshi Maekawa
 
テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -Hiroshi Maekawa
 
テスト自動化のパターンと実践
テスト自動化のパターンと実践テスト自動化のパターンと実践
テスト自動化のパターンと実践Hiroshi Maekawa
 
ホントは楽しいエイブンポー
ホントは楽しいエイブンポーホントは楽しいエイブンポー
ホントは楽しいエイブンポーHiroshi Maekawa
 
テスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour Osakaテスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour OsakaHiroshi Maekawa
 
雑食系エンジニアの作りかた
雑食系エンジニアの作りかた雑食系エンジニアの作りかた
雑食系エンジニアの作りかたHiroshi Maekawa
 

More from Hiroshi Maekawa (20)

新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
 
老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間
 
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
 
第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CI第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CI
 
Visual Studio Online as a CI Service
Visual Studio Online as a CI ServiceVisual Studio Online as a CI Service
Visual Studio Online as a CI Service
 
Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0
 
Dockerとdev ops
Dockerとdev opsDockerとdev ops
Dockerとdev ops
 
Getting Start with React Native
Getting Start with React NativeGetting Start with React Native
Getting Start with React Native
 
「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆 「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆
 
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
 
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
 
ドメイン『駆動』『開発』
ドメイン『駆動』『開発』ドメイン『駆動』『開発』
ドメイン『駆動』『開発』
 
なれる!IL
なれる!ILなれる!IL
なれる!IL
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
 
iOSのCI as a Service事情
iOSのCI as a Service事情iOSのCI as a Service事情
iOSのCI as a Service事情
 
テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -
 
テスト自動化のパターンと実践
テスト自動化のパターンと実践テスト自動化のパターンと実践
テスト自動化のパターンと実践
 
ホントは楽しいエイブンポー
ホントは楽しいエイブンポーホントは楽しいエイブンポー
ホントは楽しいエイブンポー
 
テスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour Osakaテスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour Osaka
 
雑食系エンジニアの作りかた
雑食系エンジニアの作りかた雑食系エンジニアの作りかた
雑食系エンジニアの作りかた
 

Recently uploaded

論文紹介: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
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
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
 
論文紹介: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
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介: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
 
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
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 

Recently uploaded (8)

論文紹介: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
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
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
 
論文紹介: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...
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介: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
 
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」の紹介
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 

Linq to XXXX(Reactive Extensionsの紹介)