2018年4月23日月曜日

WinGo-Maps の紹介

イランのお兄ちゃん達が作っているGoogle Map のUWP Client です。

https://www.microsoft.com/store/productId/9NMJ42V775GT
https://github.com/MahStudio/WinGo-Maps

Reddit の/r/Windows Apps で紹介されていたので知ったのですが、
https://www.reddit.com/r/windowsapps/comments/8b0hrz/wingo_maps_is_an_unofficial_google_map_open/
楽しげだったので日本語リソースの追加で協力しました。


日本語化した画面
与野が中心なのは、たまたま埼玉県の中心だからです


PC・HoloLens 等各Win10 Device Family で使えますが、主なターゲットはWindows 10 Mobile であるようです。
特にオフラインで使う場合、このアプリのマップDL機能がかなり便利と思われます。予め必要になりそうな領域を選択してマップの保存・またバックアップとリストアが可能です。イラン、中東はオフライン運用対応へのデマンドが多いのかも。


マップのダウンロード画面




一方、PC で使う場合はStreet View や3D表示が不可能、検索が微妙等、Webブラウザでの表示に比べると劣る部分が目立ってしまう所はあります。PCで普段使いするかと言われると…うーんそれは無いかな…という。
現時点ではまだ粗が多いのですが、実装の体力は備えている人達に見えるので…その内何とかしてしまうのではと思います。


※「このアプリをイランで購入するには」ですが、カードが使えない場合このページから購入手続きを行うと、開発者からプロモーションコード…ストアで特定のアプリ支払いに使えるクーポン、が届くという仕組みのようです。珍しい使い方。ストアの規約的にはびみょいかもしれない。


2018年3月24日土曜日

Twitter が採用したHosted Web Apps とは

2018年3月、Twitter社が Win10 IP RS4向けに新しいバージョンのTwitter Appをリリースしました。順次自動更新されているのですが、それが今までのUWP Appではなく、Hosted Web App だったことで少し話題になっています。

最初はRichard Hay さんのTwitterで知りました。その後記事にされています。

Official Twitter App for Windows 10 Finally Updated
https://www.windowsobserver.com/2018/03/23/official-twitter-app-for-windows-10-finally-updated/


どれどれ、とインストールしてアプリのフォルダを見ると…


既定だと、Program Files\WindowsApps 以下にインストールされます。
管理者権限付きのConsoleで探すのが楽です。


おお、まさにHosted Web Apps でした。

Hosted Web Apps って何?


HostされたWebアプリ
https://developer.microsoft.com/ja-jp/windows/bridges/hosted-web-apps

所謂UWP App …C#/VB/JS/C++ で動かすNative App とは根本的に世界が違います。

Hosted Web Appを構成する要素に、いわゆるソースコードとなるものは実はローカルには存在しません。AppxManifest.xml によるアプリの定義があるだけです。

AppxManifest の一部 
全部見たい人はAppをインストールするとアプリのフォルダに入ってます。


ここに書いてある mobile.twitter.com をそのまま表示する 100%Webブラウザの窓、というのが正しいです。Twitter のAppをインストールするとわかりますが、表示されるのは100%、mobile.twitter.com そのままです。これに何かUIをXAMLで追加する、ローカルのコードビハインドで処理をする、等の世界では無いわけです。

「TwitterのHosted Web App」の画面。
mobile.twitter.comそのままです。

なお、ストアに乗せるにはマイクロソフトのテストを通す必要があり、他のUWP Appとまったく同様に掲載されます。特に何か差がつけられるという事はありません。


それって…ただのブックマークでは?


いや、それは明らかに違います。上のAppxManifestで定義したサイト内のHTMLから、ローカルのWinRT APIを直で使うことが可能だからです。

今回のTwitter Appでは、この機能を使ってRTやいいねがされた場合に通知トーストを送信しています。

(Chrome等ブラウザでも許可すれば似たような事出来るじゃん、というのはありますが)

「普通のWeb」ではもちろん、ローカルのAPIを叩くなど絶対許されないのですが、Hosted Web Appでは良いよ!という事になっています。
「普通のWeb」とは異なり、
  • ストアに出す時点で製作者の身元が明らかになっている
  • Microsoft によるコンプライアンス テストが行われる(※1)
  • ユーザーがインストールする時点で同意している
等々…でOK…なのかしら。
ただ、※1には抜け穴があります。後述します。

ソースは全部Webの上


上で説明したように、ローカルにインストールされるのは定義ファイルと、タイルのアイコンに使うビットマップくらいです。他…WebViewで表示されるHTML、その中で使うリソース…画像、CSS、その他色々、そしてJavaScript、全てWeb上のものがそのままロードされ、使われます。 「Hosted Web App」、Webでホストされたアプリという…MS先生にしては珍しく、名が正しく体を表しているネーミングです。 なおキャッシュなどの仕組みは特にないため、ネットから切れていると動きません。こちらについてはProgressive Web Apps のService Worker で使えるようになる…はず。


UWP App に対するアドバンテージ


UWP App の場合、ストアに乗せているアプリを変更する際は、原則、マイクロソフトの人力、人の目によるコンプライアンス チェックが行われます。変更の多少にかかわらずチェックはアプリ全ての部分で行われ、人力の場合2、3日かかります。このタイムラグがUWP App 稼業の大変つらいところです。そしてたまに意味の分からないいちゃもんをつけられたり。消耗すること甚だしいです。

(原則、というのは、場合によっては自動化テストのみ、数十分で通過する場合があるからです。アプリによります。ちなみにF10は毎回100%人力テストです。なんで…)



ですが、Hosted Web Appsの場合、上で説明したようにソースは全てWebであり、MSのストアに載っている訳ではありません。
つまり、アプリの改変がマイクロソフトのチェックを通さずにやりたい放題という事になっています。これは別に開発者が見つけた抜け穴ではなく、MS自身がアドバンテージとしてアピールしています。それでいいの?という気はちょっとしますが…
それと、さすがにあまり無茶するとお取りつぶしなどは当然あると思います。教育アプリがある日突然ふたばのJun君を表示するとかそういう。


Progressive Web Apps とは違うの?


基本的にはネーミングの話かなと思います。Hosted Web Apps の進化系がProgressive Web Apps (以下PWA)と言うのが正しいはずですが、ただ他のメディアの紹介を見ているとTwitterはPWA だ!という所もありました。どちらもそれはそれで正しい気がします。

また、PWA 自体、別にMSの持ち物という訳ではなく…AndroidにはAndroid のPWA があります。おそらく、これに大体そろえる感じで各機能入れるんだろうなと思います。Service Workerが入り、オフラインで使用可能なもっと「ちゃんとした」アプリになる…のだと思います。 ちなみに、WindowsでのPWA の情報自体まだ出きっていないのが実情です。おそらくは2018年5月のBuild 2018 でお披露目・・かな?と思います。今のところは以下、2018年2月のBlogの情報が詳しいです。


Welcoming Progressive Web Apps to Microsoft Edge and Windows 10
https://blogs.windows.com/msedgedev/2018/02/06/welcoming-progressive-web-apps-edge-windows-10/



私はいいと思う




Progressive Web Apps 、前身のHosted Web Appsも含めてなんつうかこう…Windows 開発者の間ではあんまり人気が無い、気がします。理由はなんとなくわかります。ただWeb表示してるだけじゃん?アプリじゃねえじゃん、という。ある程度正しいと思います。

また、Win10 のUWP、Win8.1のStore App でもそうでしたが…ストアを埋め尽くす低品質アプリの代表格が、アプリのメインウィンドウにWebViewを張り付けてWebのコンテンツを表示するだけの「アプリ」でした。こういう嫌な経験も影響しているのだろうと思います。私も何度DLして起動して脱力したことか…あ、WebViewアプリ様だ……


ただ、だがしかし。私はPWA、いいと思っています。
「アプリ」の主戦場がローカルからWebに移行して随分経ちました。個人的にも、GMail、Google Maps, あすけん(カロリーチェックのWebです), Slack, Twitter, OneDrive, Office Web Apps, ふたば, etc, etc... 一日を過ごすPC体験の殆どはWebです。そのうち一部…ふたばはF10を使っていますが、あれもWebのコンテンツを再解釈してXAMLで表示しているアプリであり、本質的にはWebアプリのVariationと思っています。
このようにWeb側の表現力、機能が十分に進化している場合、それをAPIを使って再解釈して「ローカルアプリ」として仕立てるのって…本当に要るのかな?という疑問は常にあるわけです。

もちろん、今回のHosted Web Apps のTwitterを見ればわかるように、今のレベルではローカルアプリと同じとは言いづらいです。ですが、今後のPWA、そしてまた進化していくであろう次のバージョンを考えると…「PWAでいいよね」となるエリアは今後拡大していくんだろうな、と思います。

※追記 2018/04/02 ... 常用に挑戦してみたけど…結構キツいですねこれ。まずリロードのやり方が良く分からないょぅ…通知等他のタブに一旦切り替えて戻るしか無くない? Twitter PWA, 思った以上に将来性の塊(マイルド表現)でした。これRS4向けに本当に一般公開するんだろうか…



2018年3月17日土曜日

MVP Global Summit 2018 に参加してきました

この記事は

  • 前半 MVP Global Summit 行ってきたーうわーーーたーのーーしーーーいーーーーーー
  • 後半 MVP制度って何なんだろねという考察

の二段構成です。お好きな順でどうぞ。


※MVP?  Microsoft MVPって何?という話は以前の記事をどうぞ。
Microsoft MVP for Windows Development を受賞しました
http://ddlgjp.blogspot.jp/2017/06/microsoft-mvp-for-windows-development.html


MVP Global Summit は、約2000人のMicrosoft MVPが世界中から集まるイベントです。日程は三日間+α…大体皆参加するのが日曜の登録+月火水の四日間で、私もこのスケジュールでした。

会場はワシントン州レドモンドにあるMicrosoft 本社と、その近郊の都市 ベルビューです。
シアトルの中心部、ダウンタウンから車で30分程の所にあるベルビューは、ショッピングモールやオフィスビル、ホテルが集積したそこそこの都会です。今回MVP Summit に参加する人達は、皆このベルビューエリアのホテル数軒に分かれて宿泊します。参加登録、また多人数のパーティ等はこのホテルの中の一つ、Hyatt Regency Bellevueで開かれます。私はこのHyattに泊まりました。


Bellevue Downtown Park から中心部を望む




妙にカモが偉そうな公園でした

そして、毎朝ホテルからシャトルバスで20~30分かけてMicrosoft 本社に移動します。セッションは朝8時から。このためホテルの朝食は朝6時から。余談ですが、今回に限らずUS開催のIT系のイベントって大体朝が早いですよね。


Hyatt の朝食会場。朝一番乗りだった日です(お腹減ってたので)。




朝食 野菜が足りない フルーツはあるんだけど



早朝からバスに揺られて移動


Microsoft 本社はほぼ街です。10年程前に一度出張で来た事があるのですが、その頃と比べても三倍くらい大きくなってる気がします。当時は520号の西側はもっと狭く、Nintendo America HQの北側に位置するキャンパスも無かったはずです(※1)。集積度…建物の密度、階数等が全然違うので日本と比較しにくいのですが、敢えて言うと…緑地帯の間に低層の研究施設が点在する筑波研究学園都市・筑波大学に似た雰囲気です。







Lake Bill
木立ちでは猫くらい大きいリスが走り回っていました


※1…この件検索すると、Seattle Timesに2006年当時、520号の両側をこれから開発していこうという記事が残っていました。この結果として、現在西側にはThe Commons, Visitor Center等が建っています。Nintendo Americaの北側は元はSafecoだったんですね。

2006年当時の将来計画図
http://old.seattletimes.com/html/microsoft/2002796093_microsoft10.html

そして2018年からまた大規模な再開発が始まり、Redmond Campusの中では一番古いエリア(例の十字型のビル群…Visual C++のアイコンで使ってましたよねこれ)を全て建て直すようです。



車道と駐車場は全部地下に入れて地上の道は全て歩行者+自転車用、そして520号の東と西+建設中のLink Light Rail 鉄道駅を専用の歩道橋で繋げるとの事。豪気な話ですなぁ。
寄り道でした。

セッションの多くはBuilding 33, Microsoft Conference Centerで行われます。







昼ごはんはケータリングが来ます。



お昼は野菜あり。嬉しい。
そのほかセッションの合間合間にはおやつが来ます。全体に食事は良かったです。


移動を終えるとGlobal Summit の本体、セッションが始まるのですが…この内容は全てNDA、秘密です。漏らすとバターサンドにされると言われています。この記事でも内容には一切触れられません。
一日のセッションを終えると、また送迎バスでホテルに戻ります。このルーチンを三日間続けます。


NDAを破った者の末路


現地での移動には、何度かUBER・Lyftを使いました。ホテルに帰るのにも一度。
スマホのアプリで目的地を入力して連れてって、と登録すると、GPSの位置情報で今待っている所に数分で車が来ます。目的地はドライバーのスマホに転送されるので車に乗ってから特に会話が要らないのが、床屋ですぐに会話に詰まり石のように沈黙するタイプ(僕)には最高です。タクシーと違って、普通の人が普段使いで乗ってる車に同乗できるのが車好きには楽しいです。プリウス多いですけどね。








ホテルに戻った後はそれぞれ晩御飯にするなり、パーリーがあったりします。MVP同士のネットワークを広げましょう!コミュニティ!!的なのが求められている訳ですが、そういうのいいよ…一人がいい…独り飯さいこう…という僕のような人には、Hyattから西に数分歩いた所にあるスーパー、QFCが便利です。24時間営業+セルフレジ完備なので西武線沿線住民の僕にしてみればほぼ西友です。セルフレジが良いのは、カード通すだけでお買い物できるので会話の必要が無いところ。ただ24時間と言っても夜に歩いていくのはちょっと怖いです。




レインボーロールセット 次の日お腹壊しました。生もの注意。


最終日の夜は全出席者合同の一大パーリーです。出席者の年齢層(おじさん)に合わせているのか、80年代・90年代ポップスがDJブースからどんがどんがと鳴り響きます。洋画でよく見る奴。






個人的にふおおおお!となったのはこれ。昔のアーケードゲームやピンボールが賑やかしに並んでいるのですが、その中にあの!ベクタースキャンのアタリ・スターウォーズがありました!キャーーーーー////  80年代、岩見沢の金市館でやりこんだ思い出の一品です。





ただ…私は日本だろうとUSだろうとパーティーには馴染めないおじさんなので、夕飯の分を頂いた後はホテルのフィットネスセンターでトレッドミルを漕いでいました。たのちい。日月火水、毎日きっかり一時間歩いてしまった。何しに行ったのか。


Fitness Centerは宿泊客無料
Cascade Towerの2F, Cedar Ballroom近くに隠し扉みたいな入り口があります



🍙🍙🍙



以下はMVP Programって何なんだろうと今回すこし考えた事です。


個人的には、MVP Summit に出られるのは超嬉しいのですが、その仕組みには少し違和感がありました。
何がかと言うと…MVP というのは基本的にコミュニティへの貢献が評価されて受賞するものです。イベントを開く、講演する、本を書く、等。他の人に何かを伝える活動をする人、という自己定義です。
ですが、MVP Global Summit のSession内容は全てNDAです。他のどこにも出せませんし、MVP同士で揉むことも出来ません。このため、この内容を持って帰ってコミュニティにフィードバックする…例)「今度のバージョンでこんな機能追加されるらしいよ!」という道は最初から無い訳です。
この、「Summitで得られた知識をコミュニティ側に還元できない」…言い換えると、MVP受賞理由とSummitで得られる便益が繋がっていない所に何かホワワワーンと釈然としない所を持ったまま会場に向かいました。

🍜🍜🍜


そこで目にしたのは、MVP、開発者を全力で「もてなす」Microsoft の様子でした。まじか。大変驚き、正直少し退きました。いや、君普段はそんなじゃないじゃん!という。どうしちゃったの・・・
この驚きを理解して頂くには少し説明が必要かもしれません。

🐡🐡🐡


Microsoft と ユーザー、または開発者の関係はもちろん対等ではありません。圧倒的に非対称な関係です。
分かりやすい例がWindows 10 のフィードバックHubでしょう。何を入れても何を言ってもなしのつぶて、自動応答の「受け取りました」マークが立つだけです。内部で色々ご苦労があるのだろうとは推察しますが、外形的には賽の河原です。他のコミュニティ…MSDN ForumやUservoice等でもそれほど変わりません。エグいバグが報告されたとしてもMicrosoft のエンジニアが出てきて何か言うことは少なく、協力会社スタッフのモデレーション担当が出てきて担当部署に繋げますと言ってくれれば良い方で、FollowUpが入ることも少ないです。サポートに連絡しても木で鼻を括る対応、と額に入れて飾りたい場合が多いです。そういう「関係」でやっているわけです。

※一応言っておくと、Platform商売している所はだいたいこんな感じです。特にMicrosoft が意地悪!という事では無いと思います。

そういう頭でこの十数年やってきた僕にとって、MVP Global Summit の光景はいやいやいや…というものでした。Session以外での歓待の様子は、この記事上半分で伝えられたかと思います。Session については前掲の通り一切触れられません。


🍛🍛🍛


Microsoft MVPは現時点で世界で4000人程度、今回のSummitに参加したのは2000人弱×(宿泊費4泊+飯+シャトルバス+各種パーティ)、どの会場もスタッフ完備で人手の足りなさを感じさせる事は無かったです。そして手ぶらで返す訳でもありません。また、三日間+αの期間、各プロダクトグループの主要メンバーが出てくると。結構なコストが掛かってますよね。

そして、このイベントは今年で25回目、四半世紀続けてこられたという事はこのスキームに自信があり、またコストに見合うだけのリターンをMicrosoft 側が得られているという事なのでしょう。

そのリターンとは何だろうか。そしてこのある意味特別待遇を「世界で4000人」に区切る理由って何なんだろうか。…ここまで考えたところで今回はギブアップです。
足りない頭を使い過ぎました。


2018年2月8日木曜日

Win10 Fall Creators Update + F10 で、ふたばへの書き込みに不具合が生じている場合の対処法

Windows 10 Fall Creators Update で F10 image bbs browser をお使いの場合、一部に以下のような問題が発生しています。


  • 最近 Fall Creators Update に更新したら、F10でふたばに書き込もうとすると「送信に失敗しました。cookieを有効にしてもう一度送信して下さい」エラーが出るようになった
  • でもEdge・Chrome のような他のWebブラウザだと普通に書き込めてしまう

この問題は F10 v1.5 (Fall Creators Update 以降用)と ネットワーク環境 の組み合わせで発生していることが判っています。この場合、こちらにご連絡頂く事で問題を回避できる可能性があります。

メールアドレス  tickets @ ddlg.uservoice.com 宛に、今回の件と、「お使いのWindows 10にログオンするのに使っているマイクロソフト アカウントのメールアドレス」 を書いて送ってください。
私が受け取り次第、こちらでストア上のリストに追加します。
リストに載っているアカウントに対してはOSが最新であっても例外的にF10 v1.4.x (Creators Update用) が配信され、問題の回避が可能になります。


※この件、2016年・今回ともにUservoice・フィードバックHub に報告して頂いたユーザー様のおかげで対処が可能になりました。有難うございました。



背景の説明


この問題、原因は判っていません。ただこれまでに頂いた状況報告と調査から、以下の事が確認出来ています。


  1. ネットワーク環境による。… 起こる人の所では起こり、起こらない人の所では全く発生しません。
  2. F10 で問題があっても、Edge・ChromeのようなWebブラウザでは正常に書き込める。… この事から、ふたばでのいわゆる「規制」とは無関係です。
  3. ライブラリ Microsoft.NETCore.UniversalWindowsPlatform を 5.1.0 より新しいものに上げると発生する。

1によりデバッグが中々困難であり、直すのは正直諦めています。また、これまでこの問題を報告して下さった方は二人だけです。

※ Edge・Chromeでも問題が発生する場合…それは本当に規制されている可能性が大です。この記事で言っているF10の問題ではありません。


この問題、最初に判明したのは2016年、Microsoft.NETCore.UniversalWindowsPlatform を5.2.0に更新しようとしたときでした。この時は更新を中止してお茶を濁したのですが、Fall Creators Update のタイミングで(.NET Standard 2.0を使うために)更新したらまた発生してしまいました。困った。今後の事を考えると、今回また更新を諦める==.NET Standard 2.0 を諦める、というのは選択しづらいです。

今回はストアの「フライト パッケージ」…特定のMicrosoft Account グループに対して一般向けとは別のアプリ パッケージを展開する仕組み、本来はテスト用…を使い、こういう特殊な処理に使っています。

ただこの扱いの場合、対象となるユーザーさんにはこの先ずっとCreators Update レベルのF10 が配信され、今後の機能追加等からは置いて行かれることになります。
それについてはごめんなさい、堪忍して下さいと言うしかないです。






2018年1月28日日曜日

App を Windows Timeline に対応させる 2/2

UWP App のTimeline 対応、実践編です。拙作のApp F10 image bbs browser で行った作業に即して説明してみます。

この記事は
App を Windows Timeline に対応させる 1/2
の続きです。

Windows Timeline 表示例


前準備


Fall Creators Update レベルのAPIを使うため、App のプロジェクト プロパティ→アプリケーションでMinVersionを 10.0.16299 にします。





必須では無いですが、このNuGetパッケージも追加します。後述するAdaptive Cards のJson 生成はこれが無いとやってられないです。

AdaptiveCards - NuGet Gallery

https://www.nuget.org/packages/AdaptiveCards/
※注意!!! (Added 7 March 2018)
NuGet には上のものとは別に、"Microsoft.AdaptiveCards" が存在します。こちらは既に更新が終了しており、もう使われていません。ただ困ったことにGoogleで"NuGet AdaptiveCards" で検索するとこちらが表示されてしまうようです。気を付けてくださいね。

Microsoft.AdaptiveCards (Deprecated)
https://www.nuget.org/packages/Microsoft.AdaptiveCards/


UserActivity を生成するClassには以下二つのusingを追加します。

using Windows.ApplicationModel.UserActivities;
using AdaptiveCards;


User Activity の作成とOS への登録


前の記事でも触れましたが、App 上の作業の節目…ドキュメントを開いた時など…のタイミングでUserActivity を生成し、OSに登録します。OS はTimeline 上にこのUserActivity をタイルとして表示します。


UserActivity の作成と登録



基本、これだけでUserActivityの登録が可能です。ただこの例では Adaptive Cards を使っていないため、Timeline 上の表示は以下のように大変シンプルなものになります。実際には殆どの場合、これから説明するAdaptive Cards を使ってタイルの中身を組み立てていくことになるでしょう。



Adaptive Cards を使わない表示例





Adaptive Cards


詳しい説明は省きますが、Microsoft が考える通知カードの標準形といったところです。カードの中身…データのJSONスキームと、コンテナ…カードを表示するデバイスの能力を記述するスキームが分離してあるのが特徴でしょうか。
Microsoft のAdaptive Cards 紹介ページを見て頂くと感じが判るかと思います。

Weather Compact - AdaptiveCards Sample



画面の右ペインにコンボボックスがあり、ここから表示するコンテナを選択できます。共通のJSONデータに対して、各デバイス…Windows の通知トースト、タイル、Teams, FacebookにKik、そしておそらくは他プラットフォーム…で「大体」意味が伝わるように表示しますよ、という。

その各デバイスの中にWindows Timeline も並んでいます。触っていると、表現力は他のデバイスと比べてそれほど高くはないようです。また、入力系のようにそもそもTimeline の使用方法にそぐわないものもあります。

さて、F10 ではこのようなJSONを渡しています。以下のような背景画像付きのTileになります。

Adaptive Cards を使った例



このJSON文字列、素から文字列を足し合わせて気合で作っても良いのですが…上品に行うために 、「前準備」で触れた AdaptiveCards NuGet パッケージがあります。このパッケージ、別にUWP App用というわけでも無いので…Xamarin、その他 Desktop App等でも、.NET 環境でAdaptive Cards を作る場合は全部これでいけるはずです。

これで、この一つ上で貼ったJSON文字列が生成されます。


Protocol Activation によるAppの起動・アクティベーション対応


ここは特にTimeline ユニークな話でもないので省略しますが、このような作業になります。

  • Package.AppxManifest で自アプリのプロトコル名を登録する
  • Appx.Xaml.cs にOnActivate を追加し、args.Kind == ActivationKind.Protocol だったらばパラメータを拾ってページを作る・または渡す


URI のアクティブ化の処理


注意など


  • たまに、Timeline 上の表示が正しく行われない場合があります。特にこちらでAppのUserActivity 生成コードを弄った場合等に多いようです。この場合、一旦ログオフ→ログオンで元に戻る場合が多いです。
  • 良くあるのは、作成したAdaptive Cards JSON文字列が不正で登録に失敗する場合です。この場合 userActivity.SaveAsync() で黙って落ち、特に例外が発生しないため大変分かりにくいです。 はまりがち。
  • 上でも触れましたが、Timeline 上のAdaptive Card ではあまり凝った表現は出来ないようです。先にAdaptiveCards.io のテストサイトで表現が実現可能かどうか確認すると良いでしょう。
  • Windows Timeline 上の画面からインクリメンタルサーチが可能ですが、ここで検索対象となるのはuserActivity.VisualElements.DisplayText と、Applicationの名前です。Adaptive Cards の中身は使われないようです。逆にAdaptive Cards を使用する場合 DisplayText は表示されませんので、ここに検索で拾ってほしいキーワードを追加しておくと良いです。


2018年1月3日水曜日

App を Windows Timeline に対応させる 1/2

まとめ

  • Windows Timeline は対応が簡単な割に得られる物が大きい
  • ただ、アプリにより向き不向きがある

Windows Timeline、最近のWindows 10 Insider Preview で使えるようになりました。UWP App をこのWindows Timelineに対応させる開発者向けガイドも出ています。今回自分のApp を対応させる機会があり、作業量が少ない割には効果が大きかったので紹介しようという趣旨の記事です。

※この記事には続きがあります。
App を Windows Timeline に対応させる 2/2


Windows Timeline とは


Windows 10 の次期大規模更新(RS4?)に入ると言われている新機能です。2018年1月時点では Insider Preview Build 17063 で使うことが可能です。アプリではWebブラウザ Edge、フォト等が対応しています。宣伝になりますが、拙作の画像掲示板ブラウザ F10 も対応しています。

F10 Image bbs browser
https://www.microsoft.com/store/apps/9nblggh1ntrd

なお、API 自体はWindows 10 Fall Creators Update (FCU) から入っており、SDKもFCUレベルの16299から既に対応しています。このため、現時点でもWindows Timeline 対応アプリをビルドし、ストアに上げることが可能になっています。


Windows Timeline
タスクバー左から3番目のアイコン、またはWin+Tabで表示されます


※以降、仕組みについては推測込みです。ウソが混じっているかもしれません。またIP 17063 の動作を元に書いているため、今後変わるかもしれません。


対応に必要な作業と得られる効果


仕組み・方法を説明する前に、得られる効果を書きましょう。Timeline に対応するためにアプリ側でやる事は主に二つで、


  • 適切なタイミングでUserActivityをOSに投げる
  • Protocol Activation …Uriを使った起動・アクティベーションに対応する


前者はかなり楽に済みます。後者は…アプリに依るのですが、いわゆるブラウザ系、URLのように文字列一本でアプリの状態を記述できる場合は楽に対応できるのではと思います。ここは後でまた触れます。

これらを行うだけで、アプリの操作履歴の同期がデバイス間で、OS組み込みの洗練されたUIで可能になります。PC+ノート+タブレット…PC複数持ちが当たり前の昨今、簡単に作業状態をデバイス間で引き継げるのは使ってみると大変に便利です。

この操作履歴の同期、Timeline無しで自分でやるのは結構手間でして…

  • Roaming Folder を使ってデバイス間で同期する…Appの履歴DBから一部をRoamingFolderに書き出し、変更を検知してDBに取り込む等
  • Project Romeを使う…リモートデバイスを列挙し履歴データを送受信する仕掛けをRemote AppServiceで作る

等を行う事になります。どちらもある程度安定動作させるにはそこそこ工数がかかります。拙作のブラウザ F10ではこの両方を実装してあるのですが、それに比べると今回のUserActivity を使ったWindows Timeline への対応は圧倒的に簡単、そしてユーザビリティは優れています。お得過ぎる。


右上の検索ボックスからインクリメンタルサーチが出来ます。便利。
検索対象になるのはVisualElements.Title と Appの名前で、AdaptiveCardの中は見てくれないようです。
この例ではVisualElements.Titleにスレ名+板名+BBS名をまとめて登録していますが、表示しているのはAdaptiveCard になっています。


同じMicrosoft Account を使うデバイスにFall Creators Update のシステムが居る場合、
UserActivityはこのようにActionCenter上に表示されます。
クリックするとTimeline同様にAppが起動します。
FCUから登録したUserActivityは、他の17063 システムのTimeline上に表示されます。


他のデバイスで登録されたUserActivityは、右上にそのデバイス名が表示されます。



Windows Timeline の仕組み


アプリケーションはOSに対し、自分の状態を「UserActivity」という単位で投げます。
OSはそのアプリ毎の「UserActivity」を時系列に並べて表示します。それが「Windows Timeline」です。

ユーザーがWindows Timeline 上のタイルをクリックすると、OS はUserActivity内のプロパティ ActivateUri をパラメータにしてアプリを起動又はアクティベートします。

UserActivityを「どのタイミングで」OSに投げるかはアプリ設計者に任されています。Webブラウザなら新しいタブを開いた、Officeならドキュメントを開いた、という操作の節目でUserActivityを発行するものが多いようです。

OSは、この投げられたUserActivity を一台のローカルマシンだけではなく同じMicrosoft Account でログインしている複数のシステムで共有します。この同期、Project Rome と呼ばれる Microsoft Graph ベースの仕組みを使っているようです。このため、Microsoft Graph に対してRESTで直接叩く事により、プラットフォーム非依存で使う事が可能…というように見えます(ただ、Timeline の「表示」自体は別にアプリが必要でしょう。Android ならば Microsoft Launcher あたりが適任っぽいですが。また、Rome系のAPIはGraph上だとBeta扱いのが多いので使っていいのか少し微妙)。


UserActivity 


UserActivity、色々プロパティはついているのですが、まずは一発表示してみたい時に必須なのは以下二つです。


  • UserActivity.ActivationUri … Appをアクティベートするときに使うUri
  • UserActivity.VisualElements.Title 名前 表示・検索に使われます(後述のAdaptiveCardを使う場合表示はそちらになる)


ActivationUri は一番大事なもので、ユーザーがTimeline 上のタイルをクリックするとOSはこれを使ってAppを起動します。

UWP Appでは、App 毎に独自のActivation Protocol をOSに登録することが出来ます。
例えばF10 が入っている環境ですと、Win+Rの名前をつけて実行、で

ddlgf10://a.4cdn.org/a/thread/166549698.json&view=post

とするとF10が起動し、そのスレが開きます。
これは、

  1. OSは ddlgf10:// をプロトコルとして認識し、(AppxManifestで指定する)
  2. パラメータをF10に渡し、
  3. F10 はOnActivate でそれを受け取り処理する(というコードを自分で書く)

という仕組みになっています。Windows Timeline はこのActivationUriを含むオブジェクトUserActivity を折々のタイミングでOSが記憶し、リストとして表示するという仕掛けになります。


Timeline への向き・不向き


上で説明したように、このTimeline の核は


  • アプリの状態…アプリが使うリソースも含めて…が、一行のUri で示される


事にあります。これが出来ないアプリの場合、あまり役に立てる事ができないです。

例を挙げると、

・F10 の場合… これはブラウザアプリです。Web上の画像掲示板のスレッドを取得し、XAMLでレンダリングします。
このため、アプリの状態は「表示するスレのURL」+「F10上の表示形式オプション」で完全に記述することが可能です。
そしてこれは、システムユニークでは無く…どのシステムでも共通に(ネットに繋がれば)使用可能です。リソースはネット上のスレだからです。

・画像ブラウザの場合
例えばピクチャライブラリ上の画像 hoge.jpg を表示する場合を考えます。これをURLとして持ち、UserActivityとして登録する事は可能でしょう。ただ、このリソースはローカル…このデバイス上でのみ参照可能であるため、他のデバイス上でUserActivity をWindows Timeline に表示する意味がありません。
こういう場合、Timeline 上に表示するActivity としては不適切かもしれません。
逆にリソースがクラウド上にある場合…例えば画像がOneDrive上にある場合はTimelineで扱うにはピッタリでしょう。
他にもブックリーダー等、OneDriveとTimelineとの食い合わせはかなり良いです。OneDrive上の本のUri+リーダーでの読書位置、を合わせた物をUriとしてUserActivityに入れれば、かなり良い感じになりそうです。

・ゲーム
ゲームの場合、状態をマシンAからBにポンと渡して引き続き遊べるのは魅力かもしれません。ただ、状態の区切りをどこに置くかという問題と、状態をUriとして一本にシリアライズできるのかという。Uri が長さどれくらいまで行けるのかはわかりませんが、あまり無理はしない方がいい気はします。

次の記事では、F10 を Windows Timeline 対応させた実作業の様子をコード例を挙げて書いてみます。

App を Windows Timeline に対応させる 2/2

2018年1月1日月曜日

あけましておめでとうございます

あけましておめでとうございます。
本年も宜しくお願い致します。

…この記事、あけおめの体で去年を振り返ろうという趣旨です。
昨年のトピックを発生順に並べてみますと…

Xamarin に手を出した  (2月)


Xamarin.Android を使ったApp Wheel World Clock for Android をリリースできました。
http://ddlgjp.blogspot.jp/2017/05/wheel-world-clock-android.html
元々はWin8/WinPhone8.1, UWP用に出していたアプリです。
F10 for Xamarin.Forms ...は少し動いた所で手が止まっています。無念。

Win10 Mobileを諦めた (4月)


Windows 10 Mobile について
http://ddlgjp.blogspot.jp/2017/04/windows-10-mobile.html
ムリダナ

Microsoft MVP for Windows Development を受賞した (6月)


(*´▽`*)ウラー 
http://ddlgjp.blogspot.jp/2017/06/microsoft-mvp-for-windows-development.html
受賞のベネフィット、特典には色々あるのですが、今の所一番楽しいのはMVP専用のメーリングリストです。濃い話がドコドコ流れてきてとても良いです。


ただ、後半は個人的な事、家族の事(故郷の父に介護が必要になるという…都会に出て働いてるおじさんなら誰もが通ると聞いてはいましたが私にも来ました。今は落ち着いておりますが)もあり、中々開発活動に力を入れられなかったなという所があります。

今年は…まずは3月にRedmond・Bellevue で開かれるMVP Global Summit に出られるのが楽しみです。また、Xamarin.Formsと.NET Core, serverでも遊びたいナーと思っています。