そうしないと忘れちゃうので。
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/P4086http://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/B8012Building 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/B8100https://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つ
- Real-world UI
- Natural Motion
- UI Controls
- 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/P4173http://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 件のコメント:
コメントを投稿