SlideShare a Scribd company logo
1 of 57
Download to read offline
遂に完結
さらば、LINQ…
Final LINQ Extensions Ⅲ
Center CLR Part.4 – 2015.05.10 Kouji Matsui @kekyo2
自己紹介
 けきょ (@kekyo2 Kouji Matsui)
 Microsoft MVP for .NET (2015.04~)
 LINQ, Async, .NETとか
 Center CLRオーガナイザーです
 会社やってます
 アーキとかフレームワーク設計とか
アジェンダ
 LINQソース
 式木の使われ方
 IEnumerableへのフォールバック
 並列化
 Pick it up for Multiple!
 TPLとの関係
フフフ、メモリを救いたいか? ヒントをやろう
らんどせるさん曰く:
Final LINQ Extensionsでは、
ずっと「オンメモリ」の話
をしてきたヨネ?
デリゲートによる条件式
 フィルタ式(Where)の等価実装
フィルタ式を指定するデリゲート
こんな風に使える
デリゲートを実行
仮の話
 LINQで指定したフィルター式をサーバーに送信し、サーバー側で解
釈すれば、クライアント側の非力なPCじゃなくて、剛力なサーバー
でフィルター処理が実行できるのでは?
(例えばSQL Server)
フォーン的な何か
サーバーで実行
仮の話
 LINQで指定したフィルター式を、動的に論理的に解釈できれば良い
のでは?
ここの式が、「value変数を2で割った余りが0である」と、
動的に解釈できれば…
こーんなSQL文(疑似)に変換して、サーバー側で
実行できる
式を動的に解釈できるようにしたい
 フィルタ式(Where)の等価実装
デリゲート…. ?
使い方は変わらず
式木の宣言
記述するラムダ式は同じ
式木の構造
ラムダ式を示す式木
Expression<Func<int, bool>>
int BinaryExpression (Equal)
ConstantExpression (0)intBinaryExpression (Modulo)int
ParameterExpression (v)int ConstantExpression (2)int
ParameterExpression[0] (v)
式木の探索
式木の探索
式木の探索
そんなわけで….
 式木(ExpressionTree)を使うと、式の構造自体を動的に解析できま
す。
 そして、式木を書かせるためには、「Expression<Func<…>>」のような
形式の「ラムダ式木」型を受けるようにしておけばOK。
 使う側は、普段通りにLINQクエリを書いているつもりで、実は式木
を書かされている事に気が付かない。
 式木を解析して、SQL文に変換できれば、サーバーに送って直接クエ
リを実行できます。つまり、クライアント側のメモリ上で、超大量
のデータをフィルターしたりソートしたりする、というような、非
現実的なことはやらなくても済みます。
IQueryableインターフェイス
 引数にデリゲートを受けるのではなく、ラムダ式木を受け取る一連
の拡張メソッドとして、「IQueryable」インターフェイスと
「Queryableクラス(の拡張メソッド群)」が、標準で用意されてい
ます。
Queryable.Where。条件式が
ラムダ式木となっている
Enumerable.Where。条件式
がデリゲートとなっている
そして、Queryable.WhereはIQueryableを返すので、
次に連なるLINQ式は自動的にQueryableの拡張メ
ソッドを使うことになります。
IQueryableの理想郷
 クエリプロバイダーの実装は省略(複雑なので:変換できることが
分かってもらえればOK)
 ブログのAdvent LINQ 2013を見てください。
 実際、自分で書かなくても、「EntityFramework」という、こなれたラ
イブラリがあります。
 昔はLINQ to SQLという、SQL Server向けの実装もありましたが、今は完全に
Obsoleteです。
IQueryableの現実
 IQueryableインターフェイスとQueryableによる標準の拡張メソッド群
と、この背景で動作するクエリプロバイダーを実装すると、LINQの
計算を完全にアウトソースする、独自のシステムを構築できます。
 しかし….
 Queryableクラスの標準演算子は、対象のシステムをうまく表現出来ていない
可能性があります。例えば、リモートシステムは、検索条件に独自の制限が
あったり、グループ化(GroupBy)という概念は無かったりとか。
 そういう場合でもLINQでコードは書けてしまう(== コンパイル時にエラーを
検出出来ない・実行時に式木解析中に発見し、エラー)。
 逆に、LINQの標準演算子では定義されていないような演算が出来ない(クエ
リヒントとか。独自にIQeuryableの拡張メソッドを定義すれば不可能ではない
が…)
LINQ、ダメなのかよ、終わっちまうのかよ…
 えーとですね、つまり、IQueryableに頼らなければ良いのです。
 この問題の核心は、Queryableに定義された拡張メソッドが、外部シ
ステムとして「LINQ to Objectっぽいシステム」や「SQL Serverのよう
なRDBもの」 を想定している事が問題なのです。
え?
 まだ、ピンとこない?
IQueryableに頼らないLINQ
 IQueryableやクエリプロバイダーに頼らないLINQソース(供給源)を
書いてみます。
 何となくO/Rマッパー的な物を想定して、最終的に限定的なSQL文
(WHEREとSELECT)を生成する所までを実現してみましょう。
 え、そうです、このセッションで説明できる程度の事ですよ。
OreOreテーブルの構造を
モデル化したクラス
カラムを定義
テーブルを司るクラス
テーブル名を保持
テーブルだけが指定されて
いるので、全件取得のSQL
行けますね?
え、当たり前だって?
いやいや、ここからですよ
フィルター(Where)のサポート
Whereメソッドを追加:
式木を指定させて、
WhereSqlGeneratorを生成
Where演算結果を司るクラス
受け取ったテーブルと
式木をそのまま保存
とりあえず、式木はそのままダンプ
(式木はラムダ式なので、右辺のBodyだけ使う)
なんか、それっぽくなった
フィルター式がSQL文に
盛り込まれた!
ちゃんとLINQっぽく
Whereが使える
クエリ構文でも行けますよ
 前回、条件さえ満たしていれば、クエリ構文が使えることを説明
しました。だから...
そのまま射影するなら、Whereのサポート
だけでクエリ構文が使える!
射影したいからSelectをサポート
WhereSqlGeneratorに
Selectメソッドを追加
例によってSelectSqlGeneratorに
情報を渡す
Select結果を司るクラス
全部の情報がそろったので、
SQLを生成
射影も可能に!
マルチカラムは?
匿名クラスを使用して
マルチカラムに射影
なんかちょっと変
匿名クラスを生成するNew式
Selectの式木はNew式と
仮定して...
Newのメンバ初期化式は全て(モデルの)
フィールド参照式と仮定して、名前を取得
NewExpression
int FieldExpression[0] (ID) FieldExpression[1] (Name)string
 newを使って匿名クラスに射影すると、式木上はNewExpressionとい
う式木に格納されます。だから:
これで、かなりそれっぽく
WHEREの式を本物に近づけるには、ラムダ式
のBodyを更に細かく解析してSQL式に変換す
る必要がある
結果はどうやって得るのか? IEnumerableを実装して
列挙可能に
サーバーにSQL文を送信して実行
(非同期待機してないのは課題)
結果はJSON配列で返される
(仮定)ので、逆シリアル化
して列挙子を返す
LINQ to OreOre O/Rマッパー
クエリの列挙(実行)が可能に
LINQ to OreOreの展望
 このデモはあくまで「SQLモドキ文」の生成なので、色々不備はあり
ます:
 フィルター式が本物のSQL式と違う(式木の解析が必要)
 連結されたWhere・Whereのないクエリ・Selectしないで列挙など、LINQクエ
リの柔軟性に対応していない(多態性使ったりして、より柔軟にSQL文を構
築させる)
 IEnumerableと拡張メソッドのように分離されていない(必要であれば)
 必要な演算子のサポート(OrderBy・Joinなど)
 このデモコードは、GitHubに上げておきます:
https://github.com/kekyo/CenterCLR.CustomLINQProviderDemo
 まあ、しかし、LINQでクエリを書くと、RDB等のリモートサーバーに
クエリを送信して実行させる事も出来る、って事が分かってもらえ
ましたか?
LINQと式木のまとめ
 LINQ to Objectsでは、演算子の条件式などをデリゲート(ラムダ式)
で指定する。標準演算子はEnumerableクラスに定義されている。
 一方、IQueryableに対応する演算子は、Queryableクラスに定義されて
おり、一見すると殆ど標準演算子と同じ。但し、Queryableの方はデ
リゲートではなく「式木」が渡されるようになっている。
 式木がクエリプロバイダーに渡され、様々に独自解釈可能なインフ
ラが構築できる。
 しかし、構造的に大げさすぎる場合は、式木を使った独自解釈可能
なインフラを、一から作る事が出来る。
 むしろ汎用性のないシステム向けにLINQをサポートさせるなら、
IQueryableを使わない方が色々柔軟に設計できる。
IEnumerableへのフォールバック
 IQeuryableはIEnumerableを継承しています。だから、IQueryableに対
して直接foreach等で列挙することも出来ます。
IEnumerable
IEnumerable<T>
IQueryable
IQueryable<T>
foreachすると、IEnumerable<T>の
GetEnumeratorメソッドが呼び出される。
SelectSqlGeneratorでもやりましたね?
IEnumerableへのフォールバック
 IQueryableに対して演算子を適用すると、Queryableクラスのメソッド
が使われ、クエリプロバイダーが管理するシステムで動作します。
しかし、AsEnumerableメソッドでIEnumerableに変換しておくと、以
後の操作はLINQ to Objectsの世界で行われます。
 実はキャストでもOK
IQueryable<T> (LINQ to Entities) の世界
(クエリプロバイダーが管理するシステム)
IEnumerable<T> (LINQ to Objects) の世界
(オンメモリ)
AsEnumerable()
IEnumerableへのフォールバック
ここまではIQueryableのバックグラウンドに存在する
クエリプロバイダーが処理
ここ以降、foreachの列挙もLINQ to Objectsが
オンメモリで処理
AsEnumerableの前も後も、パイプライン結合
されているから、必要ない限りは
バッファリングされない!
アジェンダ
 LINQソース
 式木の使われ方
 IEnumerableへのフォールバック
 並列化
 Pick it up for Multiple!
 TPLとの関係
並列LINQ - PLINQ
 PLINQとは、LINQクエリの指定した演算子から、スレッド並列化を使
用して、演算子を並列実行するインフラです。
 使っているシステムのコアスレッド数が多いほど、演算子が並列実行
されます。
 「AsParallel」演算子を挟むだけで、以降の演算子は並列実行されます。
 超イージーでマルチコアに対応出来る!!
(表向きには)
並列LINQ - PLINQ
 PLINQは超お手軽。「AsParallel」付けるだけ!
 PLINQも実は、一種の独自クエリプロバイダーです。
 以下はただのLINQ to Objects
並列LINQ - PLINQ
 PLINQは、ParallelEnumerableに定義された拡張メソッドを使います。
そしてクエリはIEnumerable<T>でもIQueryable<T>でもない、
「ParallelQuery<T>」です。
ParallelQuery<T> AsParallel<T>(IEnumerable<T> e)
ParallelQuery<T> ParallelEnumerable.Where(ParallelQuery<T> q)
IEnumerable<T> Enumerable.Select<T>(IEnumerable<T> e)
ParallelQuery<T>は、IEnumerable<T>を実装
しているので、foreachで列挙出来る
さぞかし速くなっ.....
 てない?! むしろ遅くなった orz
何が起きているのか?
 そもそも、並列化される演算子がWhere一個だけなので:
 高速化させるには、もっともっと大量のデータを裁く必要がある。
 PLINQのオーバーヘッドが大きいので、相殺されてかえって遅くなる。
2654
19243 558
AsParallel()
データ分割
Where() Where()
72389
GetEnumerator()
データ再集約
PLINQ区間
高速化のポイント
2654
19243 558
AsParallel() 前のデータを
如何に「大量」に「高速に」
投入できるか?
Where() Where()
72389
並列演算する計算量を
如何に増やすか?
まずは分かりやすく計算量を増やす
計算量が多くなる
シミュレート
飢餓状態のPLINQに食わすメシ
xor-shiftベースにして
高速化
供給が高速化されると
結果にも影響
更に並列計算量を増やす
一桁増加
ようやく大幅に
向上する結果に
PLINQの高速化は:
 演算子にどれだけ負荷をかけられるか
 RDBでWHERE句やJOIN句を工夫するのと同じように、LINQでも演算子に計算
量を集約することが重要。
 LINQソースとなるデータの供給源を高速化する
 そもそも供給される(時間当たりの)データ量が少ないと意味がない。
 PLINQは、データの分散と集約を完全に自動処理しているので、オー
バーヘッドが大きい。ParallelQuery<T>のお蔭で非常に透過的で扱いや
すいが、クエリの工夫は往々にして必要。
まぁ、パラダイスは無いって事ですね。
出たり入ったり
 AsEnumerable()を使って、並列処理を「終わらせる」事が可能。
GetEnumerator()が呼び出されると、LINQ to Objectsの世界に戻る。
 data.AsParallel().OrderBy(value => value).
AsEnumerable().
Where(value => (value % 2) == 0).
....
 ParallelQuery<T>はIEnumerable<T>を実装しているので、IQueryable<T>
とか他の独自LINQから、パイプライン結合でPLINQに持ち込むことも
可能(つまり、バッファリング不要)。
 oreores.Where(oreore => oreore.ID == 123).Distinct().
AsParallel().
OrderBy(oreore => oreore.Name).
.... バッファリング不要を強調してるけ
ど、まさか大量のデータを扱う時に
ToList()とかしてないわよね?
別の方法を考える
 TPL (Task Palallel Library) は、ちょっと古い方法だけど、並列化の粒度
とか、並列化すべき手段がある程度分かっている場合は、却って扱
いやすい(== PLINQの並列化は、効果を読むのが難しい)。
データの供給は、
IEnumerableベースで可能
しかし、ここからはただのブロックな
ので、LINQで処理させる事は出来ない
(従来型の手続き実装・ココが痛い)
オーバーヘッドが
低いので多少速い
Awaitableを応用する
 TPLっぽいですが、非同期処理を並列化します。
 C# 5.0のasync-awaitを使って、スレッドではなくタスクベースで並列
化します。Task.WhenAll()を使うのがポイント。
Task.Runでワーカースレッドとして
実行しているが、
ワーカースレッドベースではない
何からの非同期処理でもOK
全てのTaskが完了するのを待機する
ワーカースレッドは上限を制限している
ので、無制限に生成されることはない
まとめ
 自分でワーカースレッド作ってデータをキューに溜めて、とか、そ
ろそろ馬鹿らしくなってきましたか?
くっ、まだ負けを認めたわけではないぞ
LINQのような顔をした何かとして、
我はいつかまた必ず復活する。
その時を楽しみにしておれ。
しばしの別れだ...
お疲れ様でした!
 スライドはブログに掲載します。
http://www.kekyo.net/

More Related Content

What's hot

これからの「async/await」の話をしよう
これからの「async/await」の話をしようこれからの「async/await」の話をしよう
これからの「async/await」の話をしようKouji Matsui
 
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性Yamamoto Reki
 
SignalRブートキャンプ
SignalRブートキャンプSignalRブートキャンプ
SignalRブートキャンプKouji Matsui
 
async/awaitダークサイド is 何
async/awaitダークサイド is 何async/awaitダークサイド is 何
async/awaitダークサイド is 何Kouji Matsui
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All ThingsUnityTechnologiesJapan002
 
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたいまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたKouji Matsui
 
Async DeepDive basics
Async DeepDive basicsAsync DeepDive basics
Async DeepDive basicsKouji Matsui
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6信之 岩永
 
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化Shinnosuke Tokuda
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム信之 岩永
 
Eclipse xtext 紹介
Eclipse xtext 紹介Eclipse xtext 紹介
Eclipse xtext 紹介Akira Tanaka
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと信之 岩永
 
TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介Takeo Imai
 
C#言語機能の作り方
C#言語機能の作り方C#言語機能の作り方
C#言語機能の作り方信之 岩永
 
プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版信之 岩永
 
「ディープラーニングでは、エコシステムが大切よ!」
 「ディープラーニングでは、エコシステムが大切よ!」 「ディープラーニングでは、エコシステムが大切よ!」
「ディープラーニングでは、エコシステムが大切よ!」Mr. Vengineer
 

What's hot (20)

これからの「async/await」の話をしよう
これからの「async/await」の話をしようこれからの「async/await」の話をしよう
これからの「async/await」の話をしよう
 
Bluetoothでgo!
Bluetoothでgo!Bluetoothでgo!
Bluetoothでgo!
 
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性
 
SignalRブートキャンプ
SignalRブートキャンプSignalRブートキャンプ
SignalRブートキャンプ
 
async/awaitダークサイド is 何
async/awaitダークサイド is 何async/awaitダークサイド is 何
async/awaitダークサイド is 何
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたいまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitした
 
Net fringejp2016
Net fringejp2016Net fringejp2016
Net fringejp2016
 
Async DeepDive basics
Async DeepDive basicsAsync DeepDive basics
Async DeepDive basics
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
 
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 
Eclipse xtext 紹介
Eclipse xtext 紹介Eclipse xtext 紹介
Eclipse xtext 紹介
 
C#で速度を極めるいろは
C#で速度を極めるいろはC#で速度を極めるいろは
C#で速度を極めるいろは
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと
 
Xtext 紹介
Xtext 紹介Xtext 紹介
Xtext 紹介
 
TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介
 
C#言語機能の作り方
C#言語機能の作り方C#言語機能の作り方
C#言語機能の作り方
 
プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版
 
「ディープラーニングでは、エコシステムが大切よ!」
 「ディープラーニングでは、エコシステムが大切よ!」 「ディープラーニングでは、エコシステムが大切よ!」
「ディープラーニングでは、エコシステムが大切よ!」
 

Similar to Final LINQ extensions III

LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~典子 松本
 
LibreOffice Conference 2014 Bern, Switzerland Report (in Japanese)
LibreOffice Conference 2014 Bern, Switzerland Report (in Japanese)LibreOffice Conference 2014 Bern, Switzerland Report (in Japanese)
LibreOffice Conference 2014 Bern, Switzerland Report (in Japanese)Naruhiko Ogasawara
 
Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Fujio Kojima
 
TFLite_and_PyTorch_Mobile
TFLite_and_PyTorch_MobileTFLite_and_PyTorch_Mobile
TFLite_and_PyTorch_Mobileyusuke shibui
 
JUIZ DLK: 組込み向け Deep Learning コンパイラ
JUIZ DLK: 組込み向け Deep Learning コンパイラJUIZ DLK: 組込み向け Deep Learning コンパイラ
JUIZ DLK: 組込み向け Deep Learning コンパイラTakeo Imai
 
MfcLightToolkit for small MFC apps
MfcLightToolkit for small MFC appsMfcLightToolkit for small MFC apps
MfcLightToolkit for small MFC appsTakaaki Suzuki
 
TensorFlow XLA とハードウェア
TensorFlow XLA とハードウェアTensorFlow XLA とハードウェア
TensorFlow XLA とハードウェアMr. Vengineer
 
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみたakira6592
 
JUIZ DLK 組込み向けDeep Learningコンパイラ
JUIZ DLK 組込み向けDeep LearningコンパイラJUIZ DLK 組込み向けDeep Learningコンパイラ
JUIZ DLK 組込み向けDeep LearningコンパイラLeapMind Inc
 
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3Fuminobu Takeyama
 
大人の基礎C#【Niigat.NET 2015-10】
大人の基礎C#【Niigat.NET 2015-10】大人の基礎C#【Niigat.NET 2015-10】
大人の基礎C#【Niigat.NET 2015-10】Mitsuhito Ishino
 
TensorFlowで遊んでみよう!
TensorFlowで遊んでみよう!TensorFlowで遊んでみよう!
TensorFlowで遊んでみよう!Kei Hirata
 
TensorFlow XLAは、 中で何をやっているのか?
TensorFlow XLAは、 中で何をやっているのか?TensorFlow XLAは、 中で何をやっているのか?
TensorFlow XLAは、 中で何をやっているのか?Mr. Vengineer
 
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発Shuto Suzuki
 
20180831 [DeLTA TECH] 新・深層の世紀 〜第3集 ディープラーニング・時代はAIを求めた 〜
20180831 [DeLTA TECH] 新・深層の世紀 〜第3集 ディープラーニング・時代はAIを求めた 〜20180831 [DeLTA TECH] 新・深層の世紀 〜第3集 ディープラーニング・時代はAIを求めた 〜
20180831 [DeLTA TECH] 新・深層の世紀 〜第3集 ディープラーニング・時代はAIを求めた 〜LeapMind Inc
 
DockerでJupyter使おうぜ
DockerでJupyter使おうぜDockerでJupyter使おうぜ
DockerでJupyter使おうぜSatoshi Yazawa
 
OSC Tokyo/Spring NETMF 170311
OSC Tokyo/Spring NETMF 170311OSC Tokyo/Spring NETMF 170311
OSC Tokyo/Spring NETMF 170311Atomu Hidaka
 
マイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tyeマイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project TyeYuta Matsumura
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMFAtomu Hidaka
 

Similar to Final LINQ extensions III (20)

LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
 
LibreOffice Conference 2014 Bern, Switzerland Report (in Japanese)
LibreOffice Conference 2014 Bern, Switzerland Report (in Japanese)LibreOffice Conference 2014 Bern, Switzerland Report (in Japanese)
LibreOffice Conference 2014 Bern, Switzerland Report (in Japanese)
 
Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化
 
TFLite_and_PyTorch_Mobile
TFLite_and_PyTorch_MobileTFLite_and_PyTorch_Mobile
TFLite_and_PyTorch_Mobile
 
JUIZ DLK: 組込み向け Deep Learning コンパイラ
JUIZ DLK: 組込み向け Deep Learning コンパイラJUIZ DLK: 組込み向け Deep Learning コンパイラ
JUIZ DLK: 組込み向け Deep Learning コンパイラ
 
MfcLightToolkit for small MFC apps
MfcLightToolkit for small MFC appsMfcLightToolkit for small MFC apps
MfcLightToolkit for small MFC apps
 
TensorFlow XLA とハードウェア
TensorFlow XLA とハードウェアTensorFlow XLA とハードウェア
TensorFlow XLA とハードウェア
 
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた
 
Lt 20130302 1
Lt 20130302 1Lt 20130302 1
Lt 20130302 1
 
JUIZ DLK 組込み向けDeep Learningコンパイラ
JUIZ DLK 組込み向けDeep LearningコンパイラJUIZ DLK 組込み向けDeep Learningコンパイラ
JUIZ DLK 組込み向けDeep Learningコンパイラ
 
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
 
大人の基礎C#【Niigat.NET 2015-10】
大人の基礎C#【Niigat.NET 2015-10】大人の基礎C#【Niigat.NET 2015-10】
大人の基礎C#【Niigat.NET 2015-10】
 
TensorFlowで遊んでみよう!
TensorFlowで遊んでみよう!TensorFlowで遊んでみよう!
TensorFlowで遊んでみよう!
 
TensorFlow XLAは、 中で何をやっているのか?
TensorFlow XLAは、 中で何をやっているのか?TensorFlow XLAは、 中で何をやっているのか?
TensorFlow XLAは、 中で何をやっているのか?
 
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発
 
20180831 [DeLTA TECH] 新・深層の世紀 〜第3集 ディープラーニング・時代はAIを求めた 〜
20180831 [DeLTA TECH] 新・深層の世紀 〜第3集 ディープラーニング・時代はAIを求めた 〜20180831 [DeLTA TECH] 新・深層の世紀 〜第3集 ディープラーニング・時代はAIを求めた 〜
20180831 [DeLTA TECH] 新・深層の世紀 〜第3集 ディープラーニング・時代はAIを求めた 〜
 
DockerでJupyter使おうぜ
DockerでJupyter使おうぜDockerでJupyter使おうぜ
DockerでJupyter使おうぜ
 
OSC Tokyo/Spring NETMF 170311
OSC Tokyo/Spring NETMF 170311OSC Tokyo/Spring NETMF 170311
OSC Tokyo/Spring NETMF 170311
 
マイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tyeマイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tye
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
 

More from Kouji Matsui

パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理Kouji Matsui
 
Making archive IL2C #6-55 dotnet600 2018
Making archive IL2C #6-55 dotnet600 2018Making archive IL2C #6-55 dotnet600 2018
Making archive IL2C #6-55 dotnet600 2018Kouji Matsui
 
Matrix signal controller and BrainPad overview
Matrix signal controller and BrainPad overviewMatrix signal controller and BrainPad overview
Matrix signal controller and BrainPad overviewKouji Matsui
 
What's Functional?
What's Functional?What's Functional?
What's Functional?Kouji Matsui
 
Pitfall for WioLTE
Pitfall for WioLTEPitfall for WioLTE
Pitfall for WioLTEKouji Matsui
 
How to make the calculator
How to make the calculatorHow to make the calculator
How to make the calculatorKouji Matsui
 
Write common, run anywhere
Write common, run anywhereWrite common, run anywhere
Write common, run anywhereKouji Matsui
 
Locality of Reference
Locality of ReferenceLocality of Reference
Locality of ReferenceKouji Matsui
 
Nespのコード生成
Nespのコード生成Nespのコード生成
Nespのコード生成Kouji Matsui
 
You will be assimilated. Resistance is futile.
You will be assimilated. Resistance is futile.You will be assimilated. Resistance is futile.
You will be assimilated. Resistance is futile.Kouji Matsui
 
How to meets Async and Task
How to meets Async and TaskHow to meets Async and Task
How to meets Async and TaskKouji Matsui
 
Beachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JITBeachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JITKouji Matsui
 
Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:codeKouji Matsui
 
Thread affinity and CPS
Thread affinity and CPSThread affinity and CPS
Thread affinity and CPSKouji Matsui
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN LinkingKouji Matsui
 
真Intermediate languageのキホン
真Intermediate languageのキホン真Intermediate languageのキホン
真Intermediate languageのキホンKouji Matsui
 
Win32 APIをてなずけよう
Win32 APIをてなずけようWin32 APIをてなずけよう
Win32 APIをてなずけようKouji Matsui
 
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式Kouji Matsui
 
不健康なIt戦士を健康的にするアレの話
不健康なIt戦士を健康的にするアレの話不健康なIt戦士を健康的にするアレの話
不健康なIt戦士を健康的にするアレの話Kouji Matsui
 

More from Kouji Matsui (20)

パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
 
Making archive IL2C #6-55 dotnet600 2018
Making archive IL2C #6-55 dotnet600 2018Making archive IL2C #6-55 dotnet600 2018
Making archive IL2C #6-55 dotnet600 2018
 
Matrix signal controller and BrainPad overview
Matrix signal controller and BrainPad overviewMatrix signal controller and BrainPad overview
Matrix signal controller and BrainPad overview
 
Fun with BrainPad
Fun with BrainPadFun with BrainPad
Fun with BrainPad
 
What's Functional?
What's Functional?What's Functional?
What's Functional?
 
Pitfall for WioLTE
Pitfall for WioLTEPitfall for WioLTE
Pitfall for WioLTE
 
How to make the calculator
How to make the calculatorHow to make the calculator
How to make the calculator
 
Write common, run anywhere
Write common, run anywhereWrite common, run anywhere
Write common, run anywhere
 
Locality of Reference
Locality of ReferenceLocality of Reference
Locality of Reference
 
Nespのコード生成
Nespのコード生成Nespのコード生成
Nespのコード生成
 
You will be assimilated. Resistance is futile.
You will be assimilated. Resistance is futile.You will be assimilated. Resistance is futile.
You will be assimilated. Resistance is futile.
 
How to meets Async and Task
How to meets Async and TaskHow to meets Async and Task
How to meets Async and Task
 
Beachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JITBeachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JIT
 
Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:code
 
Thread affinity and CPS
Thread affinity and CPSThread affinity and CPS
Thread affinity and CPS
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN Linking
 
真Intermediate languageのキホン
真Intermediate languageのキホン真Intermediate languageのキホン
真Intermediate languageのキホン
 
Win32 APIをてなずけよう
Win32 APIをてなずけようWin32 APIをてなずけよう
Win32 APIをてなずけよう
 
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
 
不健康なIt戦士を健康的にするアレの話
不健康なIt戦士を健康的にするアレの話不健康なIt戦士を健康的にするアレの話
不健康なIt戦士を健康的にするアレの話
 

Final LINQ extensions III