SlideShare a Scribd company logo
1 of 48
Download to read offline
時代の を支える
非同期プログラミング


グレープシティ株式会社
八巻 雄哉
本日のお話し


         2
これまで
非同期処理の必要性、および需要
低                 高



非同期処理実装の難易度
低                 高




                      3
これから(     時代)
非同期処理の必要性、および需要
低                 高



非同期処理実装の難易度
低                 高




                      4
“非同期処理”って何?

              5
“非同期処理”って何?
同期処理
一つの処理が終わるまで次の処理が行われない
非同期処理
前の処理とは関係なく次の処理が行われる




                        6
人間とプログラムの違い
人間は意識しなくとも非同期的に動いている
プログラムは何もしないと同期的にしか動かない


      この違いが
ユーザーエクスペリエンスの低下を生む




                       7
もしも人間がプログラムのように動いたら
レストランの業務をプログラム化してみる




                      8
元ネタ
非同期プログラミング 新しい
  により容易になった非同期プログラミング




                        9
「   」イベントハンドラ




                10
「注文が決定する」イベントハンドラ
     注文が決定する 注文決定イベント引数

   注文 注文を得る テーブル番号
   材料 材料を得る 注文
   レシピ レシピを得る 注文
   料理 レシピ 作成する 材料
 提供する 料理 テーブル番号




                      11
料理が完成するまでは一切何もできません
  お客さん       料理店の人

 「呼び出しボタン」
    を押す         注文が決定する 注文決定イベント引数

               注文 注文を得る テーブル番号
               材料 材料を得る 注文
               レシピ レシピを得る 注文
               料理 レシピ 作成する 材料
             提供する 料理 テーブル番号
    料理が
  運ばれてくる




                                     12
ボタンを押すと結果が返るまで は応答不能
 ユーザー      メインスレッド

  ボタン
  を押す         注文が決定する 注文決定イベント引数

             注文 注文を得る テーブル番号
             材料 材料を得る 注文
             レシピ レシピを得る 注文
             料理 レシピ 作成する 材料
           提供する 料理 テーブル番号
 結果がUI上に
  表示される




                                   13
非同期処理の種類
①   非ブロッキング    (非同期   )
    をブロックしないための非同期処理
②   並列処理(計算)
    データ並列
    タスク並列




                          14
非同期化する方法

           15
非同期化する方法
マルチスレッド化
メインスレッドはユーザーの入力( からの指示)を
待ち受けるためのスレッドとし、料理を作る処理は
別のスレッドにお願いする
レストランの例では
接客専任のホールスタッフを雇う




                           16
スレッドを使用
SynchronizationContext ctx = SynchronizationContext.Current;
ThreadPool.QueueUserWorkItem(_ =>
{
      var 注文 = 注文を得る(e.テーブル番号);
      var 材料 = 材料を得る(注文);
      var レシピ = レシピを得る(注文);
      var 料理 = レシピ.作成する(材料);
      ctx.Post(state =>
      {
          提供する(料理, e.テーブル番号);
      }, 料理);
});




                                                               17
非同期プログラミングの難しさ

                 18
①新しくスレッドを生成するのは
    思った以上にコストがかかる
注文を受ける度に
   新しくスレッドを生成するのは効率が悪い
  ではあらかじめ用意されたスレッドをできる限り
再利用するスレッドプールという仕組みがある
レストランの例では
新しく人を雇うのには意外とコストがかかる




                           19
②順序やタイミングが大切な処理は
           必ず存在する
別スレッドで実行した処理の継続処理、および完了待ち
お互いがスレッドの完了を待ち続けるデッドロックや共
有メモリへのアクセスによる競合状態
レストランの例では
一人のときは全部自分がやっていたから問題が起きな
かったが、二人以上では協調して動かなければならない




                        20
③ コンポーネントへのアクセスは、
その コンポーネントを作成した
スレッドで行わなければならない
実行結果を 上に表示するといった場合、
     必ず スレッドに処理を委譲する必要がある
レストランの例では
料理人が自分で料理をお客さんに出したほうが早いのに、
運ばせてくれない




                        21
④スレッドプログラミングの怖さは
         テストのしにくさ
 回動作したから正しいという保証もないし、
       回動作したから正しいという保証もない
レストランの例では
人を管理するのはとても大変で、
   想像もしない行動を起こすこともある




                            22
非推奨
 よほどのことがない限り、直接スレッドをどうこ
うしようと思ってはいけない

 マイクロソフト株式会社コンサルティング
サービス統括本部プリンシパルコンサルタント
赤間信幸氏いわく
 やはり個人的におすすめしたいのは、
 マルチスレッドアプリケーションはなるべく作らない。
 これに尽きます。




                         23
.NETにおける非同期処理簡便化

                   24
ライブラリとコンパイラの進化
非同期動作を公開するためのパターン
IAsyncResultパターン(.NET 1.0~)
イベントベースの非同期パターン(.NET 2.0~)
タスクベースの非同期パターン(.NET 4.0 ~ )
タスクベースの非同期パターンを
      簡便に記述するための新たな構文
async/await構文(.NET 4.5、Windows Runtime)




                                          25
タスク並列ライブラリ

             26
タスク並列ライブラリ
        (    )
            名前空間
               名前空間
タスクとして思考すればよく、
       スレッドに対する深い知識は不要
 タスク並列ライブラリを使うことで、処理が
簡略化されるだけでなく、効率よく実行できる
非同期処理を簡単に操作、
       および構成するメソッドを持つ
タスクを使用
var uiTaskScheduler = TaskScheduler.FromCurrentSynchronizationContext();
Task<Meal> task = Task.Factory.StartNew(() =>
    {
          var 注文 = 注文を得る(e.テーブル番号);
          var 材料 = 材料を得る(注文);
          var レシピ = レシピを得る(注文);
          var 料理 = レシピ.作成する(材料);
          return 料理;
    });
task.ContinueWith(t =>
    {
          提供する(t.Result, e.テーブル番号);
    }, uiTaskScheduler);




                                                                      28
タスクベースの非同期パターン

                 29
タスクベースの非同期パターン
               (     )
 標準クラスライブラリには、時間のかかる処理に
おいてタスクベースの非同期メソッドが用意され
ている
  を返す         、および
           メソッド
タスクの継続と待機
継続           メソッド
     一つのタスクに対して、継続タスクを指定する
                 メソッド
     継続元タスクが複数存在する状態で、その全てが完了した場合に継続する
                 メソッド
     継続元タスクが複数存在する状態で、そのどれかが完了した場合に継続する



待機    メソッド
     タスクを待機させる
           メソッド
     指定された複数のタスクを待機させる
            メソッド
     指定された複数のタスクの内、どれかが完了するまで待機させる
肉を焼いてから野菜を切る
var ターキー = (肉)材料[0];
味をつける(ターキー);
オーブンで焼く(40, ターキー);


var サラダ用野菜 = (野菜)材料[1];
切る(サラダ用野菜);


皿に盛り付ける(サラダ用野菜);
皿に盛り付ける(ターキー);




                          32
肉を焼いている間に野菜を切る
var ターキー = (肉)材料[0];
味をつける(ターキー);
Task task1 = オーブンで焼くAsync(40, ターキー);
var サラダ用野菜 = (野菜)材料[1];
Task task2 = 切るAsync(サラダ用野菜);

task2.ContinueWith(_ =>
    {
          Task task3 = 皿に盛り付けるAsync(サラダ用野菜);

    });
Task.WaitAll(task1, task2);
皿に盛り付ける(ターキー);




                                               33
async/await構文

                34
構文
 メソッドに   修飾子、
非同期処理(タスクベースの非同期版メソッド)
の手前に   キーワードをつけるだけ
 同期処理とほぼ同様のコードをコンパイラが
機械的にタスクを使った非同期処理へと
変換してくれる
 スレッドをブロックすることなくメソッドの実行を
 一時停止したり再開したりできるポイントを
 メソッドに埋め込む
同期版
      注文が決定する 注文決定イベント引数

   注文 注文を得る テーブル番号
   材料 材料を得る 注文
   レシピ レシピを得る 注文
   料理 レシピ 作成する 材料
 提供する 料理 テーブル番号




                           36
非同期版
       注文が決定する 注文決定イベント引数

 var 注文 = await 注文を得るAsync(e.テーブル番号);
 var 材料 = await 材料を得るAsync(注文);
 var レシピ = await レシピを得るAsync(注文);
 var 料理 = await レシピ.作成するAsync(材料);
 提供する(料理, e.テーブル番号);




                                   37
async/await構文使用時の実行順序

                        38
同期版メソッド
private void Button_Click_1(object sender, RoutedEventArgs e)
{
    Download();
    debugList.Items.Add("コアラ");
}
private void Download()
{
    debugList.Items.Add("パンダ");
     HeavyTask();
    debugList.Items.Add("うさぎ");
}




                                                        39
同期版の実行順序
private void Button_Click_1(…)

  Download();
                    private void Download()

                      debugList.Items.Add("パンダ");

                      HeavyTask();

                      時間のかかる処理

                      debugList.Items.Add("うさぎ");

  debugList.Items.Add("コアラ");




                                                    40
非同期版メソッド
private void Button_Click_1(object sender, RoutedEventArgs e)
{
    Download();
    debugList.Items.Add("コアラ");
}
private async void Download()
{
    debugList.Items.Add("パンダ");
    await HeavyTaskAsync();
    debugList.Items.Add("うさぎ");
}

                                                        41
非同期版の実行順序
private void Button_Click_1(…)

  Download();
                    private async void Download()

                      debugList.Items.Add("パンダ");

                      await HeavyTaskAsync();
                                   中断
  debugList.Items.Add("コアラ");


                                    時間のかかる処理

                                   再開

                      debugList.Items.Add("うさぎ");

                                                    42
非同期プログラミングの重要性

                 43
高まる非同期処理の重要性
①   タッチ における応答継続の重要性
    “  ” (指に吸い付く )
    タッチ は基本的に全画面
②   ネット世代における
      ブラウザーは常に非同期
③   マルチコア時代
    ムーアの法則の恩恵を受けるためにも




                        44
高まる非同期の必然性
    側から
    の場合
 非同期版メソッドが用意されているのは、
               主に通信&データにおける   のみ
          スタイルアプリ/            の場
合
 実行に ミリ秒以上の時間がかかる可能性のあるメソッドは
 すべて非同期化されている

システム(     )側から
    では、メインスレッドが 秒以上
               応答しなければ強制終了



                                   45
Metroスタイルアプリ用のWinRT API
                       ユーザー インターフェイス
HTML5/CSS       XAML               DirectX   コントロール      データバインディング


   SVG          タイル                 入力       アクセシビリティ       印刷


         デバイス                                通信 & データ
地理位置情報 プリンター           NFC                       XML        Web
                                   コントラクト
 センサー       ポータブルデバイス
                                   ネットワーク        通知       ストリーム
         メディア
                                    ローカル & クラウドストレージ       AtomPub
 キャプチャ        視覚効果
                                       バックグラウンド転送           SMS
リモート再生        コード変換

                               基礎部分
 アプリの                                    グローバリ
 有効期間
             認証              暗号化
                                         ゼーション
                                                  .NET      Win32

                                                                  46
時代に向けて
   スタイルアプリ開発では
 多くの処理を非同期にせざるを得ない
     時代はフリーズしない が当たり前
    スタイルアプリの開発では、
     、   、  言語( / )
の 種類がありますが、
   /   のように同期操作と
ほぼ同等の記述ができるのは    言語だけ




                        47
Windows 8時代のUXを支える非同期プログラミング

More Related Content

Similar to Windows 8時代のUXを支える非同期プログラミング

イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化Gosuke Miyashita
 
PHP on Windows Azure
PHP on Windows AzurePHP on Windows Azure
PHP on Windows AzureMicrosoft
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識shigeya
 
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてNAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてTakuji Kawata
 
Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Yuki Higuchi
 
CEDEC 2013 Unity on Windows 8
CEDEC 2013 Unity on Windows 8CEDEC 2013 Unity on Windows 8
CEDEC 2013 Unity on Windows 8Akira Onishi
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTeruo Kawasaki
 
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上Tatsuya Ishikawa
 
ボット開発でも DevOps! BotBuilder のテスト手法
ボット開発でも DevOps! BotBuilder のテスト手法ボット開発でも DevOps! BotBuilder のテスト手法
ボット開発でも DevOps! BotBuilder のテスト手法Kenichiro Nakamura
 
Tizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native apiTizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native apiNaruto TAKAHASHI
 
pi-1. プログラミング入門
pi-1. プログラミング入門pi-1. プログラミング入門
pi-1. プログラミング入門kunihikokaneko1
 

Similar to Windows 8時代のUXを支える非同期プログラミング (20)

イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 
Clrh 110827 wfho
Clrh 110827 wfhoClrh 110827 wfho
Clrh 110827 wfho
 
PHP on Windows Azure
PHP on Windows AzurePHP on Windows Azure
PHP on Windows Azure
 
PHP on Windows Azure
PHP on Windows AzurePHP on Windows Azure
PHP on Windows Azure
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてNAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
 
前期講座08
前期講座08前期講座08
前期講座08
 
Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.
 
Ldd13 present
Ldd13 presentLdd13 present
Ldd13 present
 
CEDEC 2013 Unity on Windows 8
CEDEC 2013 Unity on Windows 8CEDEC 2013 Unity on Windows 8
CEDEC 2013 Unity on Windows 8
 
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
 
C#の書き方
C#の書き方C#の書き方
C#の書き方
 
C#の書き方
C#の書き方C#の書き方
C#の書き方
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoop
 
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
 
ボット開発でも DevOps! BotBuilder のテスト手法
ボット開発でも DevOps! BotBuilder のテスト手法ボット開発でも DevOps! BotBuilder のテスト手法
ボット開発でも DevOps! BotBuilder のテスト手法
 
Tizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native apiTizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native api
 
pi-1. プログラミング入門
pi-1. プログラミング入門pi-1. プログラミング入門
pi-1. プログラミング入門
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 

More from Yuya Yamaki

Basic言語でiOSアプリを作る
Basic言語でiOSアプリを作るBasic言語でiOSアプリを作る
Basic言語でiOSアプリを作るYuya Yamaki
 
続Xamarinはじめました
続Xamarinはじめました続Xamarinはじめました
続XamarinはじめましたYuya Yamaki
 
Xamarinはじめました
XamarinはじめましたXamarinはじめました
XamarinはじめましたYuya Yamaki
 
TypeScript入門してみた
TypeScript入門してみたTypeScript入門してみた
TypeScript入門してみたYuya Yamaki
 
Windowsの画面スケーリングを きちんと理解しよう
Windowsの画面スケーリングをきちんと理解しようWindowsの画面スケーリングをきちんと理解しよう
Windowsの画面スケーリングを きちんと理解しようYuya Yamaki
 
.Net技術でこれからも食べていくための技術戦略
.Net技術でこれからも食べていくための技術戦略.Net技術でこれからも食べていくための技術戦略
.Net技術でこれからも食べていくための技術戦略Yuya Yamaki
 
.NET技術でこれからも食べていくための技術戦略
.NET技術でこれからも食べていくための技術戦略.NET技術でこれからも食べていくための技術戦略
.NET技術でこれからも食べていくための技術戦略Yuya Yamaki
 
Developers Summit 2013【14-E-3】Windows 8デザインガイド
Developers Summit 2013【14-E-3】Windows 8デザインガイドDevelopers Summit 2013【14-E-3】Windows 8デザインガイド
Developers Summit 2013【14-E-3】Windows 8デザインガイドYuya Yamaki
 
今さらWPF? いいえ、今こそWPF!
今さらWPF?いいえ、今こそWPF!今さらWPF?いいえ、今こそWPF!
今さらWPF? いいえ、今こそWPF!Yuya Yamaki
 
デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革
デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革
デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革Yuya Yamaki
 
デスクトップアプリ開発者が押さえておくべき Windows 8時代の変革
デスクトップアプリ開発者が押さえておくべきWindows 8時代の変革デスクトップアプリ開発者が押さえておくべきWindows 8時代の変革
デスクトップアプリ開発者が押さえておくべき Windows 8時代の変革Yuya Yamaki
 
どうなる?Windows 8時代の業務アプリ開発
どうなる?Windows 8時代の業務アプリ開発どうなる?Windows 8時代の業務アプリ開発
どうなる?Windows 8時代の業務アプリ開発Yuya Yamaki
 
Metroスタイルで花開くか? XAMLベースのUIフレームワーク
Metroスタイルで花開くか?XAMLベースのUIフレームワークMetroスタイルで花開くか?XAMLベースのUIフレームワーク
Metroスタイルで花開くか? XAMLベースのUIフレームワークYuya Yamaki
 
WPF/Silverlight視点で視る MetroスタイルのXAML
WPF/Silverlight視点で視るMetroスタイルのXAMLWPF/Silverlight視点で視るMetroスタイルのXAML
WPF/Silverlight視点で視る MetroスタイルのXAMLYuya Yamaki
 
77回スピーカーを経験して分かったこと」共有します
77回スピーカーを経験して分かったこと」共有します77回スピーカーを経験して分かったこと」共有します
77回スピーカーを経験して分かったこと」共有しますYuya Yamaki
 
Silverlight 5でぶり返すWPF不要論
Silverlight 5でぶり返すWPF不要論Silverlight 5でぶり返すWPF不要論
Silverlight 5でぶり返すWPF不要論Yuya Yamaki
 
Windowsフォームで大丈夫か?一番良いのを頼む。
Windowsフォームで大丈夫か?一番良いのを頼む。Windowsフォームで大丈夫か?一番良いのを頼む。
Windowsフォームで大丈夫か?一番良いのを頼む。Yuya Yamaki
 
半透明は飾りです 偉い人にはそれがわからんのですよ
半透明は飾りです偉い人にはそれがわからんのですよ半透明は飾りです偉い人にはそれがわからんのですよ
半透明は飾りです 偉い人にはそれがわからんのですよYuya Yamaki
 
60分でわかる!SilverlightとWPFの入力チェック
60分でわかる!SilverlightとWPFの入力チェック60分でわかる!SilverlightとWPFの入力チェック
60分でわかる!SilverlightとWPFの入力チェックYuya Yamaki
 
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~Yuya Yamaki
 

More from Yuya Yamaki (20)

Basic言語でiOSアプリを作る
Basic言語でiOSアプリを作るBasic言語でiOSアプリを作る
Basic言語でiOSアプリを作る
 
続Xamarinはじめました
続Xamarinはじめました続Xamarinはじめました
続Xamarinはじめました
 
Xamarinはじめました
XamarinはじめましたXamarinはじめました
Xamarinはじめました
 
TypeScript入門してみた
TypeScript入門してみたTypeScript入門してみた
TypeScript入門してみた
 
Windowsの画面スケーリングを きちんと理解しよう
Windowsの画面スケーリングをきちんと理解しようWindowsの画面スケーリングをきちんと理解しよう
Windowsの画面スケーリングを きちんと理解しよう
 
.Net技術でこれからも食べていくための技術戦略
.Net技術でこれからも食べていくための技術戦略.Net技術でこれからも食べていくための技術戦略
.Net技術でこれからも食べていくための技術戦略
 
.NET技術でこれからも食べていくための技術戦略
.NET技術でこれからも食べていくための技術戦略.NET技術でこれからも食べていくための技術戦略
.NET技術でこれからも食べていくための技術戦略
 
Developers Summit 2013【14-E-3】Windows 8デザインガイド
Developers Summit 2013【14-E-3】Windows 8デザインガイドDevelopers Summit 2013【14-E-3】Windows 8デザインガイド
Developers Summit 2013【14-E-3】Windows 8デザインガイド
 
今さらWPF? いいえ、今こそWPF!
今さらWPF?いいえ、今こそWPF!今さらWPF?いいえ、今こそWPF!
今さらWPF? いいえ、今こそWPF!
 
デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革
デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革
デスクトップアプリ開発者が押さえておくべきWindows 8 時代の変革
 
デスクトップアプリ開発者が押さえておくべき Windows 8時代の変革
デスクトップアプリ開発者が押さえておくべきWindows 8時代の変革デスクトップアプリ開発者が押さえておくべきWindows 8時代の変革
デスクトップアプリ開発者が押さえておくべき Windows 8時代の変革
 
どうなる?Windows 8時代の業務アプリ開発
どうなる?Windows 8時代の業務アプリ開発どうなる?Windows 8時代の業務アプリ開発
どうなる?Windows 8時代の業務アプリ開発
 
Metroスタイルで花開くか? XAMLベースのUIフレームワーク
Metroスタイルで花開くか?XAMLベースのUIフレームワークMetroスタイルで花開くか?XAMLベースのUIフレームワーク
Metroスタイルで花開くか? XAMLベースのUIフレームワーク
 
WPF/Silverlight視点で視る MetroスタイルのXAML
WPF/Silverlight視点で視るMetroスタイルのXAMLWPF/Silverlight視点で視るMetroスタイルのXAML
WPF/Silverlight視点で視る MetroスタイルのXAML
 
77回スピーカーを経験して分かったこと」共有します
77回スピーカーを経験して分かったこと」共有します77回スピーカーを経験して分かったこと」共有します
77回スピーカーを経験して分かったこと」共有します
 
Silverlight 5でぶり返すWPF不要論
Silverlight 5でぶり返すWPF不要論Silverlight 5でぶり返すWPF不要論
Silverlight 5でぶり返すWPF不要論
 
Windowsフォームで大丈夫か?一番良いのを頼む。
Windowsフォームで大丈夫か?一番良いのを頼む。Windowsフォームで大丈夫か?一番良いのを頼む。
Windowsフォームで大丈夫か?一番良いのを頼む。
 
半透明は飾りです 偉い人にはそれがわからんのですよ
半透明は飾りです偉い人にはそれがわからんのですよ半透明は飾りです偉い人にはそれがわからんのですよ
半透明は飾りです 偉い人にはそれがわからんのですよ
 
60分でわかる!SilverlightとWPFの入力チェック
60分でわかる!SilverlightとWPFの入力チェック60分でわかる!SilverlightとWPFの入力チェック
60分でわかる!SilverlightとWPFの入力チェック
 
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~
 

Recently uploaded

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Recently uploaded (9)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

Windows 8時代のUXを支える非同期プログラミング