SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
真
Intermediate Language
のキホン
2016.3.19 第六回CENTER CLR勉強会 KOUJI MATSUI (@KEKYO2)
自己紹介
けきょ (@kekyo2)
ロードバイク乗り
Microsoft MVP for Visual Studio and Development Technology
認定スクラムマスター・スクラムプロダクトオーナー
Center CLRオーガナイザー
ようこそ
最近、VRとか話題に上っておりますね。
私もGAME ONでプレステVR体感してきましたよ。
IBMとかなんちゃってSAOとかやってるようで、気合の入り方
が斜め上ですなぁ。
インサイド: http://www.inside-games.jp/article/2016/03/17/96944.html
本日は
それはさておき、本日はIntermediate Language(中間言語)の
お話です。
「よく来たなひよっこどもよ」
本日は
ILは基礎的な学問でいう所の「算数」みたいなもので、とにか
くやって理解するのが近しい。応用の事は2の次。
なので、
よく言えばワークショップ
悪く言えば算数ドリル
はじめに
導入
前回結構大変だったので、今回は最初に少しだけ抑えるべき
ところを説明しておきます。
① ILで覚えておく最初のことは、
「System.Reflection.Emit名前空間」だ。
◦ MSDNやILSpyで調べる足掛かりにする。
導入
「System.Reflection.Emit.OpCodesクラス」
◦ このクラスに「オプコード」の定義が含まれている。
コードから使えるよう
にする利便性のため
(Meta-programming)
導入
②オプコード(OpCode)とは:
◦ CLRが理解できる中間言語(バイトコード)
CLR
OpCode.Ldarg
OpCode.Add
OpCode.Ldfld
OpCode.Call
OpCode.Ret
0x20
0x58
0x7b, &_v
0x28, &ToString
0x2a
導入
③ OpCodeにはいくつか種類がある
◦ 定数系: Ldc Ldstr Ldnull Ldtoken
◦ 引数操作系: Ldarg Starg
◦ ローカル変数系: Ldloc Stloc
◦ フィールド操作系: Ldfld Stfld
◦ 配列操作系: Ldelem Stelem Newarr
◦ 計算系: Add Sub Mul Div And Or Xor Not Shl Shr
◦ 生成系: Newobj Dup
◦ 型変換系: Conv Castclass Box Unbox
◦ 遷移系: Br Call Callvirt Ret Throw Rethrow Switch
◦ その他: Ldind Stind Localloc
導入
④スタック操作・スタックマシンとは:
◦ CLRがバイトコード由来で動作するための基礎となる構造
CLR
1. Ldarg
3. Add
2. Ldfld
CLR Stack
123
456
導入
④スタック操作・スタックマシンとは:
◦ CLRがバイトコード由来で動作するための基礎となる構造
CLR
3. Add
CLR Stack
123
456
123
456
579
導入
④スタック操作・スタックマシンとは:
◦ CLRがバイトコード由来で動作するための基礎となる構造
CLR
3. Add
CLR Stack
579
579
いよいよ実践
準備
適当にチーム分けします。
チームには少なくともVisual Studioが入ったPCを。
GitHub:
https://github.com/kekyo/CenterCLR.ReflectionEmitTemplate.git
Macの人は、可能ならVisual Studio Codeと.NET Core5をインスコ
(あんまりフォローできないけど、ソースはnetcore5で動くよ
うにしてあります)
ILSpy必須(Bingる)
Part 1
引数の値に1を加算して返すようにする。
ポイント:
◦ 引数の値はどうやって取得するか
◦ 加算するにはどうするか
ヒント:
◦ 引数操作系: Ldarg Starg (MSDNのOpCodesクラスを見る)
◦ 計算系: Add Sub Mul Div And Or Xor Not Shl Shr
◦ 戻り値を返すには? 元のコードはどうなっていた?
Part 2
引数を増やして、加算して返す
ポイント:
◦ 引数を増やすためには、Emitterも変更する必要がある。
ヒント:
◦ DefineMethodとは
Part 3
引数の文字列を値に変換する
ポイント:
◦ Convert.ToInt32メソッドを使う事にする
◦ メソッドを呼び出すにはCallオプコードを使う
◦ 沢山のオーバーロードからどうやって絞り込むか?
ヒント:
◦ MethodInfoはType.GetMethodsで取得する
Part 4
二つの引数の値をstring.Formatでフォーマットする
ポイント:
◦ String.Formatメソッドのオーバーロードをどうやって特定するか?
◦ 型が違う場合は、変換する必要がある
ヒント:
◦ MethodInfoはType.GetMethodで取得する
◦ 型変換のIL命令は2種類ある
◦ object hoge = 123; という式の暗黙変換の事を何て言ったっけ?
Part 5
インスタンスメソッドを作る(仕様はPart4のまま)
ポイント:
◦ テンプレートコードはstaticメソッドを作って、そのデリゲートを返す。だか
らEmitterを変更する必要がある
◦ インスタンスメソッドを実行するには、インスタンスが必要(インスタンス
の生成はILでやらなくて良い)
◦ thisはどこにあるのか
◦ デフォルトコンストラクタを定義する
ヒント:
◦ DefineMethodのフラグによって、定義するメソッドの属性が変わる
◦ インスタンスメソッドの第0引数がthis
◦ Activatorクラス
Part 6
フィールドを作り、前回の結果も加えて結果を計算する
ポイント:
◦ TypeBuilderを使ってフィールドを定義する
◦ フィールドにアクセスするIL命令
ヒント:
◦ 「フィールドの値を読み書き」と言うより、「フィールドの値をス
タックに積んだり出したり」
Part 7
C#で書いたクラスを継承する
ポイント:
◦ クラスはpublicでnon-sealedで定義する
◦ クラスのコンストラクタは呼び出し可能でなければならない
ヒント:
◦ 「継承するクラス型の指定」は、どこで定義される情報なのか?
Part 8
継承クラスのインスタンスメソッドを呼び出す
ポイント:
◦ 継承元のクラスのメソッド定義を入手して呼び出す
◦ 呼び出しにthisが必要
ヒント:
◦ なし
Part 9
継承してオーバーライドされた仮想メソッドを呼び出す
ポイント:
◦ 基底クラスのメソッド情報を使う
◦ オーバーライドされたメソッドが呼び出される
ヒント:
◦ 仮想メソッドを呼び出すIL命令
Part 10
オーバーライドされた仮想メソッドを無視し、基底メソッド
を呼び出す
ポイント:
◦ C#では実現できない
ヒント:
◦ IL命令は実直
Part 11
クラスのインスタンスを生成する
ポイント:
◦ newするには?
◦ コンストラクタとは
ヒント:
◦ newに対応するIL命令と、その引数
Part 12
プロパティを読み書きする
ポイント:
◦ プロパティ情報を取得する
◦ Getter/Setterメソッドとは
ヒント:
◦ なし
Part 13
Windows Formを表示し、タイトルバーに”Hello IL”と表示する
ポイント:
◦ Formクラスを使い、インスタンスを生成し、プロパティにアクセスす
る
◦ ShowDialogメソッドを呼び出して表示する
ヒント:
◦ なし
その他のトピック
デリゲートの生成:
◦ Delegate.CreateDelegateとかをいじってからILに望むと吉。
イベント:
◦ プロパティと非常によく似ている。実態はadd/removeメソッド。
仮想メソッドのオーバーライド:
◦ まずDefineMethodでメソッドを定義してから、DefineMethodOverrideで
基底メソッド定義と関連付ける。
インターフェイス型定義と実装:
あとはほとんど応用だ!
ILで書く範囲を少なくできるように工夫する。
◦ 例:基底クラスやユーティリティクラスをC#で書いておき、複雑だがIL
書かなくてもよい処理をオフロードする
Emitは色々つらいので、他の方法も理解しておく。
◦ Emitは実行環境が限られる。Standard CLRやCore5ではサポートされてい
るが、UWPとかダメ
◦ Emitでコードを量産しようとしている → T4テンプレートを使うと、似
たようなソースコードをマクロ的に大量生産できる
◦ 動的型定義はなく、単に高速実行可能な動的言語がほしい → 式木を
使う(式木構造について理解が必要だが、不正なILを作ってしまう危険
はない)
◦ サードパーティライブラリを使う(Mono.CecilはCLRに依存しないでバ
イナリを生成できる・Emit定義が楽になる各種補助ライブラリとか)
がんばりました!!

Weitere ähnliche Inhalte

Was ist angesagt?

Final LINQ extensions III
Final LINQ extensions IIIFinal LINQ extensions III
Final LINQ extensions IIIKouji Matsui
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理Kouji Matsui
 
Win32 APIをてなずけよう
Win32 APIをてなずけようWin32 APIをてなずけよう
Win32 APIをてなずけようKouji Matsui
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN LinkingKouji Matsui
 
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 20174 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017Takaaki Suzuki
 
ぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽ拓弥 遠藤
 
WebStormでできること
WebStormでできることWebStormでできること
WebStormでできることkamiyam .
 
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!Jun-ichi Sakamoto
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Narami Kiyokura
 
この実装には問題がある!
この実装には問題がある!この実装には問題がある!
この実装には問題がある!GOMI NINGEN
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 ClojureYoshitaka Kawashima
 
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信之 岩永
 
KotlinでWebアプリ開発
KotlinでWebアプリ開発KotlinでWebアプリ開発
KotlinでWebアプリ開発Ryo Nakagawa
 
TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2kamukiriri
 
TypeScriptはいいぞ
TypeScriptはいいぞTypeScriptはいいぞ
TypeScriptはいいぞJun Suzuki
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発慎一 古賀
 

Was ist angesagt? (20)

Final LINQ extensions III
Final LINQ extensions IIIFinal LINQ extensions III
Final LINQ extensions III
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
 
Win32 APIをてなずけよう
Win32 APIをてなずけようWin32 APIをてなずけよう
Win32 APIをてなずけよう
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN Linking
 
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 20174 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
 
ぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽ
 
IDEALIZE YOU
IDEALIZE YOUIDEALIZE YOU
IDEALIZE YOU
 
WebStormでできること
WebStormでできることWebStormでできること
WebStormでできること
 
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
 
TypeScript超入門
TypeScript超入門TypeScript超入門
TypeScript超入門
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
この実装には問題がある!
この実装には問題がある!この実装には問題がある!
この実装には問題がある!
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
 
リアルビジネスRuby
リアルビジネスRubyリアルビジネスRuby
リアルビジネスRuby
 
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
 
Lt 110416
Lt 110416Lt 110416
Lt 110416
 
KotlinでWebアプリ開発
KotlinでWebアプリ開発KotlinでWebアプリ開発
KotlinでWebアプリ開発
 
TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2
 
TypeScriptはいいぞ
TypeScriptはいいぞTypeScriptはいいぞ
TypeScriptはいいぞ
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 

Ähnlich wie 真Intermediate languageのキホン

Soramame.Block 100行のJavaScriptで ビジュアルプログラミング言語(のフロントエンド)を作ってみた:
Soramame.Block 100行のJavaScriptで ビジュアルプログラミング言語(のフロントエンド)を作ってみた: Soramame.Block 100行のJavaScriptで ビジュアルプログラミング言語(のフロントエンド)を作ってみた:
Soramame.Block 100行のJavaScriptで ビジュアルプログラミング言語(のフロントエンド)を作ってみた: Yutaka Kachi
 
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~典子 松本
 
マーケティングオートメーション&Mauticとは(WordBench Nagoya 2017年2月勉強会)
マーケティングオートメーション&Mauticとは(WordBench Nagoya 2017年2月勉強会)マーケティングオートメーション&Mauticとは(WordBench Nagoya 2017年2月勉強会)
マーケティングオートメーション&Mauticとは(WordBench Nagoya 2017年2月勉強会)takashi ono
 
解り方と教え方
解り方と教え方解り方と教え方
解り方と教え方健人 井関
 
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryLetsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryNobuhiro Sue
 
20101127 Android Usability Seminar
20101127 Android Usability Seminar20101127 Android Usability Seminar
20101127 Android Usability SeminarVisso株式会社
 
WordPressの進化とWordPress名古屋コミュニティの進化
WordPressの進化とWordPress名古屋コミュニティの進化WordPressの進化とWordPress名古屋コミュニティの進化
WordPressの進化とWordPress名古屋コミュニティの進化takashi ono
 
フロントエンドというカオスな世界について
フロントエンドというカオスな世界についてフロントエンドというカオスな世界について
フロントエンドというカオスな世界についてmikakane
 
HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話suno88
 
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)parrotstudio
 
Microsoft機械学習の簡単な紹介
Microsoft機械学習の簡単な紹介Microsoft機械学習の簡単な紹介
Microsoft機械学習の簡単な紹介A AOKI
 
プログラミングの学習方法 | How To Learn The Programming 14.05.31 WP-D Fes #02 Interviews ...
プログラミングの学習方法 | How To Learn The Programming 14.05.31 WP-D Fes #02 Interviews ...プログラミングの学習方法 | How To Learn The Programming 14.05.31 WP-D Fes #02 Interviews ...
プログラミングの学習方法 | How To Learn The Programming 14.05.31 WP-D Fes #02 Interviews ...Yoshinori Kobayashi
 
Lync でできる? 仕事効率化
Lync でできる? 仕事効率化Lync でできる? 仕事効率化
Lync でできる? 仕事効率化Manato KAMEYA
 
AIがビジネスを変える!​ ゑびやなど事例から学ぶマイクロソフトのAI技術とビジネスでの活用​
AIがビジネスを変える!​ ゑびやなど事例から学ぶマイクロソフトのAI技術とビジネスでの活用​AIがビジネスを変える!​ ゑびやなど事例から学ぶマイクロソフトのAI技術とビジネスでの活用​
AIがビジネスを変える!​ ゑびやなど事例から学ぶマイクロソフトのAI技術とビジネスでの活用​Microsoft Azure Japan
 
C言語講習会資料(前半)
C言語講習会資料(前半)C言語講習会資料(前半)
C言語講習会資料(前半)Yuki Sako
 
ひとまずHoloLensと自分の周辺技術(WEB・IoT)と混ぜた話
ひとまずHoloLensと自分の周辺技術(WEB・IoT)と混ぜた話ひとまずHoloLensと自分の周辺技術(WEB・IoT)と混ぜた話
ひとまずHoloLensと自分の周辺技術(WEB・IoT)と混ぜた話Seigo Tanaka
 
くらう道 オフライン道場 ~ Azure インフルエンサー養成講座 ~
くらう道 オフライン道場 ~ Azure インフルエンサー養成講座 ~くらう道 オフライン道場 ~ Azure インフルエンサー養成講座 ~
くらう道 オフライン道場 ~ Azure インフルエンサー養成講座 ~Takashi Ushigami
 
Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LLRubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LLUchio Kondo
 
Trailheadでサクサク!新人研修
Trailheadでサクサク!新人研修Trailheadでサクサク!新人研修
Trailheadでサクサク!新人研修Satoru Ishikawa
 

Ähnlich wie 真Intermediate languageのキホン (20)

SIMD.js(ECMAScript 7)
SIMD.js(ECMAScript 7)SIMD.js(ECMAScript 7)
SIMD.js(ECMAScript 7)
 
Soramame.Block 100行のJavaScriptで ビジュアルプログラミング言語(のフロントエンド)を作ってみた:
Soramame.Block 100行のJavaScriptで ビジュアルプログラミング言語(のフロントエンド)を作ってみた: Soramame.Block 100行のJavaScriptで ビジュアルプログラミング言語(のフロントエンド)を作ってみた:
Soramame.Block 100行のJavaScriptで ビジュアルプログラミング言語(のフロントエンド)を作ってみた:
 
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
 
マーケティングオートメーション&Mauticとは(WordBench Nagoya 2017年2月勉強会)
マーケティングオートメーション&Mauticとは(WordBench Nagoya 2017年2月勉強会)マーケティングオートメーション&Mauticとは(WordBench Nagoya 2017年2月勉強会)
マーケティングオートメーション&Mauticとは(WordBench Nagoya 2017年2月勉強会)
 
解り方と教え方
解り方と教え方解り方と教え方
解り方と教え方
 
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryLetsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous Delivery
 
20101127 Android Usability Seminar
20101127 Android Usability Seminar20101127 Android Usability Seminar
20101127 Android Usability Seminar
 
WordPressの進化とWordPress名古屋コミュニティの進化
WordPressの進化とWordPress名古屋コミュニティの進化WordPressの進化とWordPress名古屋コミュニティの進化
WordPressの進化とWordPress名古屋コミュニティの進化
 
フロントエンドというカオスな世界について
フロントエンドというカオスな世界についてフロントエンドというカオスな世界について
フロントエンドというカオスな世界について
 
HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話
 
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
 
Microsoft機械学習の簡単な紹介
Microsoft機械学習の簡単な紹介Microsoft機械学習の簡単な紹介
Microsoft機械学習の簡単な紹介
 
プログラミングの学習方法 | How To Learn The Programming 14.05.31 WP-D Fes #02 Interviews ...
プログラミングの学習方法 | How To Learn The Programming 14.05.31 WP-D Fes #02 Interviews ...プログラミングの学習方法 | How To Learn The Programming 14.05.31 WP-D Fes #02 Interviews ...
プログラミングの学習方法 | How To Learn The Programming 14.05.31 WP-D Fes #02 Interviews ...
 
Lync でできる? 仕事効率化
Lync でできる? 仕事効率化Lync でできる? 仕事効率化
Lync でできる? 仕事効率化
 
AIがビジネスを変える!​ ゑびやなど事例から学ぶマイクロソフトのAI技術とビジネスでの活用​
AIがビジネスを変える!​ ゑびやなど事例から学ぶマイクロソフトのAI技術とビジネスでの活用​AIがビジネスを変える!​ ゑびやなど事例から学ぶマイクロソフトのAI技術とビジネスでの活用​
AIがビジネスを変える!​ ゑびやなど事例から学ぶマイクロソフトのAI技術とビジネスでの活用​
 
C言語講習会資料(前半)
C言語講習会資料(前半)C言語講習会資料(前半)
C言語講習会資料(前半)
 
ひとまずHoloLensと自分の周辺技術(WEB・IoT)と混ぜた話
ひとまずHoloLensと自分の周辺技術(WEB・IoT)と混ぜた話ひとまずHoloLensと自分の周辺技術(WEB・IoT)と混ぜた話
ひとまずHoloLensと自分の周辺技術(WEB・IoT)と混ぜた話
 
くらう道 オフライン道場 ~ Azure インフルエンサー養成講座 ~
くらう道 オフライン道場 ~ Azure インフルエンサー養成講座 ~くらう道 オフライン道場 ~ Azure インフルエンサー養成講座 ~
くらう道 オフライン道場 ~ Azure インフルエンサー養成講座 ~
 
Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LLRubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LL
 
Trailheadでサクサク!新人研修
Trailheadでサクサク!新人研修Trailheadでサクサク!新人研修
Trailheadでサクサク!新人研修
 

Mehr von 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
 
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 basics
Async DeepDive basicsAsync DeepDive basics
Async DeepDive basicsKouji Matsui
 
不健康なIt戦士を健康的にするアレの話
不健康なIt戦士を健康的にするアレの話不健康なIt戦士を健康的にするアレの話
不健康なIt戦士を健康的にするアレの話Kouji Matsui
 
SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南Kouji Matsui
 
Final LINQ Extensions II
Final LINQ Extensions IIFinal LINQ Extensions II
Final LINQ Extensions IIKouji Matsui
 
Final LINQ Extensions
Final LINQ ExtensionsFinal LINQ Extensions
Final LINQ ExtensionsKouji Matsui
 
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級Kouji Matsui
 
抽象太郎ものがたり そして伝説へ
抽象太郎ものがたり そして伝説へ抽象太郎ものがたり そして伝説へ
抽象太郎ものがたり そして伝説へKouji Matsui
 
プロ生ちゃんをひろっちゃう!
プロ生ちゃんをひろっちゃう!プロ生ちゃんをひろっちゃう!
プロ生ちゃんをひろっちゃう!Kouji Matsui
 

Mehr von Kouji Matsui (19)

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
 
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 basics
Async DeepDive basicsAsync DeepDive basics
Async DeepDive basics
 
不健康なIt戦士を健康的にするアレの話
不健康なIt戦士を健康的にするアレの話不健康なIt戦士を健康的にするアレの話
不健康なIt戦士を健康的にするアレの話
 
SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南
 
Final LINQ Extensions II
Final LINQ Extensions IIFinal LINQ Extensions II
Final LINQ Extensions II
 
Final LINQ Extensions
Final LINQ ExtensionsFinal LINQ Extensions
Final LINQ Extensions
 
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級
 
抽象太郎ものがたり そして伝説へ
抽象太郎ものがたり そして伝説へ抽象太郎ものがたり そして伝説へ
抽象太郎ものがたり そして伝説へ
 
プロ生ちゃんをひろっちゃう!
プロ生ちゃんをひろっちゃう!プロ生ちゃんをひろっちゃう!
プロ生ちゃんをひろっちゃう!
 

真Intermediate languageのキホン