2017年5月20日土曜日

Build2017 Session視聴メモ その2

Build 2017, 見たセッションの内容をメモしておこうという記事です。
そうしないと忘れちゃうので。

Build2017 Session視聴メモ その1
http://ddlgjp.blogspot.jp/2017/05/build-2017-session.html


P4086 Beyond App Containers: Gaining privileged access to hardware inside your Windows app using custom capabilities
P4102 UWP Apps file access improvements
B8012 Tip, tricks, and secrets: Building a great UWP app for PC
B8100 What's new and coming for Windows UI: XAML and composition
P4173 Tips and tricks for creating performant UI in UWP


P4086 Beyond App Containers: Gaining privileged access to hardware inside your Windows app using custom capabilities

https://channel9.msdn.com/Events/Build/2017/P4086
http://video.ch9.ms/sessions/c1f9c808-82bc-480a-a930-b340097f6cc1/build/2017/P4086.pptx

Creators Update ではUWP で Device Apps が作りやすくなりました!という話

Hardware App を例にして考える


デバイス屋さんが自分のハードウェアとセットで売るアプリの話 HWの設定、初期化、ドライバ、色々…
大抵はWin32で作るもの
問題

Win32であるがゆえに…



  • Desktopでしか使えない(Win32だからね)
  • アプリ更新の仕組みが無い(自前でやるの結構大変)


じゃあUWPなら、というと、これはこれでApp Container の制限があり作りづらいところがあった このあたりをCUで変えたよ!という話

ここでUWP App のおさらい


UWP Appとは何でしたっけ?
Windows10 では複数のDeviceFamily …PC、Mobile、Hololens、等があるけども、それらの最小公倍数、どのファミリも共通に持つApplicationの基盤が「Universal Windows Platform」、UWP
この上で動くのがUWP App だからUWP Appの最大の特徴「Windows 10なら基本どこでも動く」が成立する

UWP 他の特徴…
Isolatedで、システムに影響を与えづらいApp ContainerのSandbox

今迄のDevice App…Windows 8時代のWSDA、Windows Store Device Appsを考える


幾つか問題があった

  • Desktopでしか動かない(UWP前だから当たり前だが)
  • 作るの面倒(たしかMSとお話して権限貰う必要があった)
  • デバイスのメタデータをMSの鯖にUploadする必要があった HardwareIDと紐づくから
  • NTサービスを触れなかった(ドライバは触れた 一応UWP・StoreAppにもIoctl触るAPIはあるので)



(感想 これ、Win8出たころにプリンタ屋さんとかのベンダー向けに色々説明あったんですけど 覚えてる? あんまり流行らなかった印象あります)

このように使いづらい部分があったので、Win10 CUで変えました!

Custom Capability のご紹介



  • uap4!!!
  • 今迄のSpecial・Restricted Capability の扱いと似ている
  • AppxManifestの中で宣言してサービス・ドライバ・ハードウェアへのアクセスを許す


実際どうやってるのん?



  • UWP AppからNTサービスへはRPC で繋げる (なので多分サービス側にもRPCの口を開ける必要アリ)(もちろん普通のUWPはRPCでNTサービスに繋げるとか無理で、このCustom Capability をManifestで宣言しているアプリのみが使える)
  • ドライバへはWindows.Devices.Custom を使う


(感想 極めて個人的な思い出になるんですが…15年くらい前にPC用のユーティリティソフトを作っていたころ、まさにこの構造を採用していました NTサービスに管理者権限の必要な機能を全部集めて、UserModeのWin32 ApplicationからRPCでそれらを呼ぶという あーあの構造やっぱ正しかったわ、と今になって安心しました)

具体的には…ドライバ


  • .INFでCapabilityのIDコミのプロパティエントリを作る ,又は
  • ドライバにプロパティアクセスの口を開ける


具体的には…NTサービス


  • RPCの口を開ける

誰でも使えるの?…NO!承認されたAppのみ



DevCenter経由でSCCDを請求

承認を得たAppはSCCDをPackageに含める
OSはSCCDをチェックしてOKなら動かす

Hardware access for Universal Windows Platform apps


P4102 UWP Apps file access improvements

https://channel9.msdn.com/Events/Build/2017/P4102

(感想 これPre-recorded な短いセッションなんだけど、UWP App のFileAccessに関するSandbox知ってた人にとっては結構びっくりする話だと思います)

(右の眼鏡の人の声がヨーダみたい)

Next version of windows ではUWP App でもDesktop AppみたいにFileAccessが出来るようになるんだぜ という話

FindFirstFile, CreateFile2, PathIO...


Demo おお使えてるわ まじか

Enumerationするには…



  • FindFirstFile and FindNextFile .. ディレクトリのファイルを全舐めするとき、CreateFile2やPathIOを使ってファイルにアクセスするとき、DesktopAppのCodeをUWPに持ってくるとき にお勧め
  • StorageItem .. プロパティアクセス、サムネイルアクセス、共有コントラクト にお勧め


(感想 プロパティとサムネイルはWindows.Storage はかなり良く出来ているのでNative APIを使う理由は無い んが、それ以外…いわゆるFileAccess は上側のNative使った方がそりゃ早いよねという)

CreateFile2 / PathIO Demo

CreateFile2は…アプリのローカルストレージ(LocalFolder, tempFolderなど例のフォルダ)だけでなく、アクセス可能な全てのフォルダに対して使用可能(!!

FALやMRUなどでアクセス履歴管理するあたりは今迄と同じ

(感想 これは結構びっくりで 今迄は、アプリローカルストレージ以外は基本Broker Process 経由のAccessになるのでこういうNative APIは使えなかったんですが 今度から使えるよ!という話)
(感想 とは言いつつ…全く初めての話でも無くて 前にStackoverflowでMSの人がある程度AUでも出来るよ?と言っていて驚いたことがありました https://stackoverflow.com/questions/42799235/  )

Demo ファイルアクセスの書き方だいぶスッキリしそう


B8012 Tip, tricks, and secrets: Building a great UWP app for PC

https://channel9.msdn.com/Events/Build/2017/B8012

Building great UWP app for PC

次にPCにAppを作るならUWP Appでしょう!というUWPをがんがん推すSession


  • MultiWindow
  • Enterprise Controls
  • D&D
  • Modern Deployment like as differential update,etc 


ひとくさりWin32 AppをDisるSpeaker

Deployment、Uninstall、Privileges, etc

UWPで今出来ない事…色々言われてきましたよね、ええ ここ面白いので全部書いておこう

「UWPはモバイルのためのもの」「UWPはデータのブラウズにはいいけど作るものではないよね」「MSだってUWP使ってないのになぜ俺が!?」「UWPは.NET に比べると普通サイズアプリのパフォーマンスが充分じゃないよ」「UWPでは現実世界のLOB Appでやりたいことが出来ないんだ」「UWP AppはWebAppに比べるとインストールと更新が難しいよね」「UWPを始めるのは難しいな・・」「LOB Appで必要なデータビューの部品が足りてないよ」「UWPで出来るのはおもちゃ…ゲーム、デモ、トイアプリくらいだね!」「UWPはタッチ操作には便利だけど僕の顧客が必要なのはキーボード・マウス操作なんだ」

(感想 良く集めた)

まず最初「MSだってUWP使ってないのになぜ俺が!?」


→ Win10 同梱のAppは大体UWP Appです Paint3D, OneNote, Adobe Xd, ..

今日はUWPで出来る事色々を紹介しよう



  • Jumplists
  • Multiple Windows Instances
  • Overlay views
  • Long running operations

Demo


毎度おなじみNorthwind DBを使ったデモ


  • ToolTip付きのHotkey ... このあたりはCUから入ってる
  • MultiWindow and Drag'n Drop, PinP .. PinPを動画でなく、入力用の常駐フォーム用に使ってる この使い方は面白い
  • Windows Form Appから UWP App へのDrag'nDrop (88888)
  • MS Wallet の呼び出し


このDemoのおねえちゃん(マダム)のアプリはMultiWindowの使い方上手だね

DataGridはTerelikの奴かな

使い方デモ


Hotkey

  • MultiWindow CoreApplication から直でWindow作ってるね これ前からあったっけか?
  • ApplicationViewSwitcher これも偉いあっさり使ってる F10で頑張ってやってた頃に比べるとえらいスッキリしている
  • Drag'nDrop
  • "SqlBridge" ... このデモで使ってるSqlClient AppService経由?これどうやってんだろう?よくわからない


「UWPを始めるのは難しい」

→ Windows Template Studio のご紹介 デモ


  • VSからTemplate Selectorでベースを選ぶとコード生成
  • VSのTaskListにこれからやることリストがもう入ってる
  • TerelikのDataGrid使えばそれっぽいAppがすぐできますよねーーーー


今迄の説明であったのは全部Creators Updateで出来るんですよ!

「UWPはまだ完全じゃない」


これからも改善していきます

「UWPはおもちゃだぜ」


UWP App コマンドラインサポートだってできる パラメータにファイルとオプションを渡すデモ


  • UWP App、インスタンス二つ実行してる!!えーーーーー びっくり 電卓はMultiViewだけど
  • !!!AppxManifestの中でAppExecutionAlias を作って中でuap5:ExecutionAlias Alias="tpsviewer.exe'    なーに楽しそうな事をしているのか・・・
  • uap5は色々楽しそうなの入ってるね…
  • uap5:Extension Category="windows.startupTask" これも楽しそう つまりUWP Appでスタートアップに設定しようという 必要なやつ
  • MultiInstance=True をApplication Element で設定してる これはFallCUから?CUから?

※ 追記 この辺りのAppxManifestの拡張は Fall CUから、Insiderで順次入るそうです (コメント欄で聞きました)


UWPを拡張する


デモ
今度はSqlClientを.NET Standard 2.0 直で使う キャーーーーー awesome!(拍手)
よかったね!セッション中にライブでUservoiceのStateを「Complete」に変更するおじさん

UWPは未来

UWPのアドバンテージ (DesktopAppに対して、という事だろう)

  • Best User Confidence
  • Trustworthy app deployment and management
  • Sufrace Hub & Windows 10 S
  • Expanded Store monetization models
  • Engaging, intuitive experiences
  • Fluent, Ink and Cortana
  • Project Rome
  • Windows Hello & Goodbye

今日からUWP App書こうぜ!
終わり

Q&A

PinPはMobileで使える? → Desktopだけ
demo前半のAppSerivceどうやってんの?→謎い CommandLineAppをFullTrustでキックしてるみたいだけど
MultiWindowはいいけど…MultiMonitorで表示するMonitor選べる?→Uservoiceへ

(感想 MSさんはUWPこれからどうすんのかな…と若干不安要素はあるんだけど やる気はありますよ!というアピールと受け取りました ただ個人的にはまだまだ直してほしいところはある いわゆる常駐アプリが作れないのはUWP App Modelの弱点ですし、他にも色々 改善していって欲しい)


B8100 What's new and coming for Windows UI: XAML and composition

https://channel9.msdn.com/Events/Build/2017/B8100
https://sec.ch9.ms/sessions/c1f9c808-82bc-480a-a930-b340097f6cc1/build/2017/B8100.pptx

XAML親分、Tim Heuer のSession

We love great experience


Fluent Design のデモムービー

(感想 ほかのFluent Designセッションでも思ったが…動画デモで提示されるリッチなExperienceと、Fall CU で実現できるWave1との落差がでかすぎてつらい なんでも一歩ずつとはいえ)

Craftsmanship & Polish, Personal,Confidence, Fluid  このあたりのキーワードはTimさんのPresentationには必ず出てくる そういう意味では一貫してる

Windows UIの3 Layer - Framework Layer, Visual Layer, DirectX このあたりは今迄のUI.Composition の話でお馴染みのやつ


CU, Fall CU and Beyond
Fluent demoで目を引くDepth UIはFallの先、という話
また、ModernUI in Win32とかも書いてありますね なんでしょう

今日のテーマ4つ




  1. Real-world UI
  2. Natural Motion
  3. UI Controls
  4. Scale: Up and Out


Real-world UI

Lighting (reveal)
Userの注意を惹き、ガイドとなる
「フォーカス」…四角い枠付け表示に代わるもの、という見方もできる 
コンシュマーだけでなく、Enterpriseでも役に立つ
Fall CU では大体のControlに入る

Lightingのデモ

(感想 App WindowがDeactivateすると半透明処理がOffになる・・これはCUのなんちゃってAcrylicと同じだ)

Materials and Effects

Acrylic
基本的にはアクリリックブラシをXamlでセットするだけ 超楽
アクリリック以外にもXamlCompositionBaseBrush を作ってもいいのよ?画像ベースとか
VisualLayer 詳細Session B8037 Explore the next generation of innovative UI in the Visual Layer

デモ Materials and Effects
アクリリックブラシのカスタマイズ

  • アプリケーション内の背景ベースと
  • デスクトップの背景ベース、

二種類のアクリルブラシを見せる BackgroundSourceがHostBackdropと、Backdropになってる FallbackColorは(多分)Deactivateで色のみ表示の時の色

ぬこかわいい

Shapes

SVG Support お前らがくれくれというので入れてやった!(888888)
ただしCUのはStatic
この先ではAnimatable Vector Graphics をサポートしますよ!!!(88888)(多分SVGで)
これが上のほうで言ってた「Micro-Animations
Adobe xDで作れるにょ ほかのツールもサポートしたい

Natural Motion


正しい反応のアニメーションでUserConfidenceを増そうぜという

Seamless transitions

Demo... Page遷移でキーとなるビジュアルが表示されたままアニメーションして遷移するうやつ 最近よくある
例としては…音楽アプリでジャケットを一覧表示→クリックすると、そのジャケット画像をアニメーションさせながら拡大してそのジャケットのCDの再生画面に移行、みたいなやつ

(感想 この「Connected Animation」、AUのころからVisual Layerのデモでは必ずあった奴)
(感想 でもこれ、MultiViewと食い合わせ悪いんだよね…どうしようF10)

Coreographed ui ... connected animationだけじゃないよ!

(停滞するデモ そんなに時間かけるところでは無いと思う)

このVisual Layerなアニメーション、全部OS側にAnimation処理をOffloadできるのが今までのXAMLのAnimationと全く違う所 一度セットすると以降App側のCPU Timeを使わない なので上手に使えばぬるぬるしたカッコいいUIになる

(感想 このあたり、もっと楽に…吊るしで動く仕組みが要る気がする Nice to have な機能にリソースを割く順番は低い)

Dynamic Motion
Pull to refresh, parallax, Conscious Headers, ... insider buildにもうすぐで入ります
Future: Integrating Physics engines ...
(感想 Havok神がUIに)

Semantic animations

UI Contorls

Fall CU で出てくるUI Contorls総ざらえ
  • ParallaxView
  • Pull to refresh - RefreshContainer / RefreshVisualizer (やっと・・ついに・・・・)
  • SwipeContainer (ListViewのItemを左右ににゅるっとSwipeするやつ)
  • TreeView
  • ContentDialog
  • ContextFlyout
  • AccessKey (あれ、ToolTipも描いてくれる?のかな???今迄はお前ら各自で描きなさいと言われていたが)
  • Rating
  • ColorPicker
  • Repeater (よくわからなかった)


Performance as great UX


Respect animations
Limit background UI
Get to content fast .. Extended splashscreen "Optional=true" 新属性
Power Conditions
Optimize UI Creation Code
遅いXAML書いてる奴は手を上げて? おいおい全員上げれや、俺はTelemetryで君らのXAMLのスピード分かってるんだが!!!(笑い)
x:Load でロードを遅らせる あのコントロールの後にこれをロード、的な
詳しくはSession P4173 Tips and tricks for creating performant UI in UWP

Modern UI in Win32 apps

今迄説明してきたようなModern UIをWin32・WPF Worldに持ち込みたい

デモ 丸出しのWin32 C++ であるところの7zipを弄る
Opensourceなので弄るのにちょうどよかった?
Aclyric Brushの上にWin32のDialogがAnimationで表示されている 笑える




詳しくはB8110 Modernize Windows Forms and WPF apps へ!

Mobile

Mobile App はもちろん.NET なXamarinを使うよね!(あっハイ)
XAML Standard 1.0 ちらっと紹介

Wrap-up


その他諸々あるのでInsiderになってFeedbackすれや!!!!




終わり

(感想 やはりというか 2015・2016年で多かったAdaptive UIへの言及は消えていた XAML UIの版図からMobileが実質無くなってしまった影響がここにも感じられる… 最後にわざわざMobile=Xamarinって言うくらいだしね まぁそれはそれとして まだまだUIを改善する気満々なのが良く分かって安心はできた SVG Animation なんて結構いい感じになりそうです ただ、Fluent Designについてはまだまだ海の物とも山の物とも・・・Wave2からが本番な気がします それよりも、Fall CU に向けてContorlの新規追加・改良が期待できる点、こっちは恩恵大きいはずです)



P4173 Tips and tricks for creating performant UI in UWP

https://channel9.msdn.com/Events/Build/2017/P4173
http://video.ch9.ms/sessions/c1f9c808-82bc-480a-a930-b340097f6cc1/build/2017/P4173.pptx



  • x:Load 
  • Image Loading Optimization
  • LoadedImageSurface


x:Load


AUからのx:DeferLoadStrategy を置き換える奴 x:Load はこれのSuperset

https://docs.microsoft.com/en-us/windows/uwp/xaml-platform/x-deferloadstrategy-attribute
https://docs.microsoft.com/en-us/windows/uwp/xaml-platform/x-load-attribute

x:Load で Elementのロードタイミングを指定できる あのコントロールの次、みたいに 「あのコントロール」はBindingで設定できる

このため、画面一発出す時点で全部作る…のを避けられる 表示するときにロード、という作り方が可能になる

x:Loadとx:DeferLoadStragegy の一番の違いはUnload もできるところ Wao!!


Image Loading Optimizations


Image Practices refreshed


  • SVGの使用で各種サイズのImage Assetを減らせる (CUからSVGサポート)
  • BitmapをロードするときはDecode PixelWidth / Height をセットすれ(もう百万回言われてる奴だが)
  • ListViewBaseではx:Phase使えよな


この三つは今迄も口酸っぱく言ってきたところであるが!(ハイ)

デモ VisualLayerで使うImagesurfaceの話

Image LoadとSurfaceの生成がだいぶ楽になってる
今迄Visual LayerにBitmapをロードしてSurface作って…みたいのは結構コード量多かった  Suspendでのリソース管理も自前であった AU時代のVisual Layerはこのあたり全部手動だったんだよね・・・
それが!CUでは1行で済むんですよお客さん!!!
var _loadedImageSurface = LoadedImageSurface.StartLoadFromUri(IMAGE_URI);
8888888

(感想 これは超便利)

Adaptive Lights and Effects


新しいEffects, Lights
使いすぎ注意 Less is more
Power Management API

デモ Connected / Disconnected

Brushをコードで作るときにOnConnected / OnDisconnected ハンドラを付け、その中でcompositionCapabilitiesをチェック エフェクトサポートしてる?エフェクトファースト?とか
これでダメならEffectBrushでなくて、SolidColorBrushを使うなどする
また、ここでPowerManager.EnergySaverStaus をチェックする事も可能 


Visual Layer: Relative Sizing and Offset


Visual の中でのサイジングの話 Parentに対してRelativeという事みたい
(感想 これ、いわゆるVisual LayerでXAML UI Contorlの描画を弄るみたいな使い方ではあまり意識しないんだけど Visual Layerの中で独自の物を描きたい場合に意味がある)


(感想 x:Load はXamlのPerformance Tuningにはかなり役に立ちそう)




































0 件のコメント:

コメントを投稿