第70回 CLR/Hに参加しました。
最近サボり気味の勉強会レポです。
2012/05/12に清田区民センターで70回目CLR/Hに参加してきました。
「Windows 8」時代のUXを支える非同期プログラミング
八巻さんのセミナーでした。
テーマがUXなので、デザイン方面かなとおもいきや、
タイトルから分かる通りテーマは「非同期プログラミング」
同期処理と非同期処理の例として、
「電話サポート」と「Eメールサポート」のお話がすごくわかり易かった
「電話サポート」の場合、質問者がオペレーターに聞きたいことを言って、
オペレーターが解決策を探してる間、質問者は返答が帰ってくるまで何も出来ない。
「Eメールサポート」の場合、質問者がオペレーターにメールを送った後は、
メールの返答をじっと待つ間、質問者は様々なタスクを消化することが出来る。
これまでの非同期処理の必要性、需要はそんなに高くなく、
プログラミングでの実装難易度が非常に高かった。
しかしこれからの時代は
- タッチUIにおける応答継続の重要性
- ネット世代におけるUX
- マルチコア時代
により、非同期処理の需要が高まってくる。
大丈夫.NETは非同期処理を楽に実装できるようになるよ!
これまで、.NETは様々な非同期処理のラッパーを容易してきた。
しかし、「UIスレッド」の問題点を完璧に解消してるものがなかった
- UIスレッドの3つの問題点
- UIスレッドはブロックされていないが、そのかわりバックグラウンドスレッドがブロックされている
- スレッドの浪費はパフォーマンスと電力消費に影響
- UIスレッド以外からUIコンポーネントにアクセスしてはいけない
- UIスレッド上に制御を戻す必要がある
- 複数の非同期操作をまとめて行うのが困難
- 非同期操作の完了を待機する手段や競合問題の回避が必要
これらの問題を解決したのが、.NET4.5からでるasync/await構文パターン!
コレを使うと同期処理の関数を非同期処理の関数へ書き換えるのが容易になる。
更に.NET for Metroスタイルアプリ/Windows Runtimeの関数は、
実行に50ミリ以上時間がかかる可能性のあるメソッドが
非同期処理を行えるように書き換わっている。
開発者側は否応なしに非同期処理を行うプログラム書くことを強いられるんだ!
(まぁ、書かなくてもいいけど、時代に取り残される可能性がある)
「Windows 8」時代に向けて
- Metroスタイルアプリ開発では多くの処理を非同期にせざるを得ない
- Windows 8時代はフリーズしないUIが当たり前
- Metroスタイルアプリの開発では、JavaScript、C++、.NET言語(C#/VB)の3種類がありますが、async/awaitのように同期操作とほぼ同等の記述ができるのは.NET言語だけ
ということでした。
Virtual Desktop InfrastructureにおけるUXとか
小塚さんのセミナーでした。
VM環境での作業はすれど、VDI環境で作業を構築・操作をしたことがなかったので、
とても興味深いお話でした。
VDIアプリを出しているのは、主に3社で
スピーカーさんの偏見まみれの性能評価は以下の感じらしい。
(M→Microsoft VDI、V→VMware View、C→Citrix Xen Desktop)
- 省帯域性能 M・V<<<C
- 表現力 C<M・V
- 管理機能 M<<V・C
それぞれを選ぶ指標として
- イントラ限定で安く構築したい(中規模程度)ならMicrosoft VDI
- モバイル利用、iOS/Androidからの利用を考えてるならCitrix Xen Desktop
- 同様の使用目的でVMware ESX(i)の運用に手馴れてる人はVMware View
VMware ViewとCitrix Xen Desktopの差は、
それぞれ設定のチューニングによって差が埋まるらしい。
時代の流れで何が変わった?
インフラエンジニアの評価は減点法
- 可用性の低いシステムは減点
- 性能の低いシステムは減点
- エラーが起きるシステムは減点
- データの消えるシステムは減点
また、華がある職種でもないので、評価が上がることは難しい。
そこで、VDIを管理する人が注意しなければ鳴らないのは、
「VDI利用者にストレスを感じさせてはいけない」。減点されるから。
しかし、悲しきインフラエンジニア。
どんなにチューニングしても、
どんなに落ちないシステムを作っても、
最終的にアプリが重要になってくる。
環境の変化で困った事としては、
タッチUIデバイスが増えて操作オブジェクトが小さいと使いづらい、
でも表示領域も狭い。
また、VDIの動作とタッチUIとの関連付けが乏しい。
(Windows Server 2012 のRDPで豊富になった?)
細い回線での利用が辛い、3G回線では無理がある。
LTE、WiMAXの普及に期待。
もしくは、帯域を食う原因をなるべく排除する。
- 画面の変化
- 音声
- クライアントデバイス制御
最近のアプリでは
- エフェクト効かせた画面遷移
- Movie
- 音声案内
- カメラ・マイク
等ある。
しかしモバイル回線等で回線が細くなるので、
- 大きめなGUIオブジェクトで作る
- 画面変化は最小限
- わかりやすい・直感的UI(UX?)
が必要となるが、これらには欠点もあり
- 一度に表示できる情報量が減る
- 昔のWEBアプリ見たい
- 「わかりやすい・直感的」は永遠の課題
などなど挙げられる。
また、VDIクライアントも多種多様で
- デスクトップ
- ノートパソコン
- スレート・タブレット
- スマートフォン
のアクセスに対応したアプリが必要なので、
タッチ操作に特化して、マウス操作やキーボード操作がやりにくい物だったり、
GUIオブジェクトを大きくしても、高解像度のモニタで見るとしょぼかったりするので注意が必要。
なので、アプリケーション設計で
- どんなクライアントデバイス?
- どれくらいの帯域で想定されてるのか?
- どんな人が使うのか?
をかっちり決めて開発するのがとても大事
※出来れば、幅広い対応が出来るアプリ設計が大切