2016年12月29日木曜日

Geofence Logger Test版リリース

2017/1/15 追記: 開発と公開を終了しました。

現在ストア上の公開は停止しています。テスト期間中にインストールされた方は使い続けることが出来ますが、再インストールはできません。

理由は、アプリ側では修正や回避のできない問題が発覚したためです。

この件、一ヶ月程度のロングランテストで発生せず、もう大丈夫だろう、と一度リリースしたのですが…2017年1月初頭にまた問題が発生してしまいました。
この問題が発生する場合、アプリの本質的な価値に関わる部分が達成できないため、終了する事にしました。
テストにお付き合いいただいた方には申し訳ないです。無念。

----------------

2017/1/10 追記: テストを終了しました。ご協力ありがとうございました。テスト中にインストール頂いたアプリについては料金無しでそのままお使い頂けます。

----------------

ジオフェンスの出入りを記録するアプリのテスト中です。
Windows 10 でお使い頂けるUniversal Windows Platform App で、主にWindows 10 Mobileでの使用を想定しています。

12月30日追記: 以下二件の問題を修正したver 1.3.24 をストアに置きました。以下のリンクからストアを起動し「更新」ボタンを押すとインストールされます。
  • NuAns NEO等、ソフトキー機種(電話下部の「戻る・ホーム・検索」ボタンが画面上に表示される機種)で、ジオフェンスの追加UIが隠れてしまう事がある
  • 起動に失敗する事がある




現在は機能は大体入った状態で、今後は複数環境で動作確認を行いつつ、見た目をもう少しかわいらしくしたいなと思っています。

  • Windows 10 Mobile を普段持ち歩いてお使いの方
  • 位置情報の記録に興味のある方

に、お試しで入れていただけると有り難いです。
動作報告、感想等ございましたら、設定→このアプリについて…からフィードバックHubに飛べるようになっていますので、こちらに入力して頂ければと思います。


メニュー→設定→このアプリについて


現在はテスト期間中につき無料でお使い頂けます。
終了後は有料(500円程度)を予定していますが、期間中にDLした人はそのまま無料で使い続けられますので少しオトクです(迷惑料)。


🍔🍔🍔

特徴




Geofence Logger は、予め設定したエリア「ジオフェンス」への進入・退出 を電話の位置情報を元に記録します。記録はバックグラウンドで自動的に行われるため、アプリを操作する必要はありません。

エリア・エリアのカテゴリ毎に、月毎の合計滞在時間を表示できます。

  • 日々のライフログ
  • 職場の個人的な出退勤記録 (原理上、正確な時間記録は難しいです…※1)

等にお使い頂けます。


進入・退出データは設定を行うことで、一日一回自動的にDropbox にバックアップできます。
バックアップしたデータは、別のシステム上のGeofence Logger アプリから参照することができます。
普段持ち歩くWindows 10 Mobile にアプリをインストールして記録を行い、その情報を自宅のWindows 10 PC にインストールしたアプリから閲覧する、という使い方が可能です。


お使い頂けるシステム


  • 進入・退出の記録 … Windows 10 Mobile
  • 記録の閲覧 … Windows 10 PC, Mobile

※ アプリ側では特にPC / Mobile での機能差はありません。しかし、進入・退出の記録に用いるにはスリープ中もジオフェンス情報取得が可能となるハードウェアが必要であり、PCでこういう使い方が出来る機種は少ないと思われます(instant-on が有効であり、スリープ中にGPSが生きているシステムならば可能かもしれないですが、実際テストしたことはありません)。


使い方


先ずは、記録したいエリアをジオフェンスとして登録する作業が必要になります。


ジオフェンス追加画面


地図上に青い半透明の円で表示されているのがジオフェンスです。このエリアへの進入・退出が記録されます。

この画面で、
  • ジオフェンスの場所
  • ジオフェンスの半径
  • 名前
  • カテゴリ
を設定します。

  • ジオフェンスの場所 … 地図を直接ドラッグ・スクロールしてください。地図左上の「場所を検索」で地点を検索できます。
  • ジオフェンスの半径 … 半径をプリセットの4種類、またはスライダで手動設定できます。

半径設定と測位の注意点


ジオフェンスへの進入・退出の記録は、数分~十数分に一度地点を測位する事で行われます。
このため、
  • 半径設定が小さすぎる
  • 移動速度が速い
場合、測位から次の測位への間に通過してしまい、進入・退出の記録に失敗する場合があります。

安定した記録を行うには、半径を広めに設定するのが効果的です。
また、広く設定しても…電車等での通過・乗り換え、地下鉄での移動等では記録に失敗する場合があります。

※1 このため、ある地点への「正確な」出入りの時間記録は難しいです。

測位手段はOSにより自動的に選択されますが、衛星の測位情報が使われることが多いです。このため、同じ地点でも受信状態により記録に失敗する場合があります。

十数分以上の滞在を伴う場合、安定した進入・退出の記録を行う事が可能です。



2016年10月6日木曜日

Windows Hello 対応 UWP Appの作成

この件、私から申し上げることはあまり無く…なぜかというと、以下二つの日本MS 松崎氏のBlog記事で過不足なく全て説明されているからです。
この二つのURLを貼るためにこの記事は存在しています。


Windows Hello を使った App 開発
https://blogs.msdn.microsoft.com/tsmatsuz/2015/07/30/windows-hello-app/

Web Authentication API 紹介 (Windows Hello を使ったEdge 開発)
https://blogs.msdn.microsoft.com/tsmatsuz/2016/06/08/w3c-web-authentication-api-javascript/


拙作 F10 image bbs browser のWindows Hello 対応も、ほぼ上掲の案内に沿ったものです。アプリ固有のKey Name/Valueを指定してKeyCredentialManager.OpenAsync で開き、帰ってきたopenResutでopenResult.Credential.RequestSignAsyncでDialogを出す…という。


◇◇◇


このBlog では何度かWindows Hello について扱ってきました。
  1. UBF-Hello について (DDS社の指紋認証モジュールについて)
  2. UWP App の Microsoft Passport 対応例 (F10 を Windows Hello に対応させた話)
  3. Windows Hello 対応 UWP アプリの作成 について(この記事)
リンクだけも何なので、Windows Hello 絡みの話・Twitterで話してた事などもここにまとめてみます。


Microsoft Passport と Windows Hello の違いって何?


これは答えるのが大変な奴でして…個人的には
  • Windows Hello ... Windows 10 から使える生体認証フレームワーク
  • Microsoft Passport ... Windows Hello も使う多要素認証フレームワーク、話としてはもっと引いた絵の奴
等と答えてごまかしていたのですが、今年、2016年の夏あたりから雲行きが変わってきまして…Anniversary Update のタイミングで、以下の表記がTechNetのWindows Hello / Microsoft Passport のあらゆるドキュメントに差し込まれました。


『初回リリース時の Windows 10 には Microsoft Passport と Windows Hello が含まれており、これらが連携して多要素認証を提供していました。 展開を簡略化してサポート性を向上するために、Microsoft ではこれらのテクノロジを Windows Hello という名前で 1 つのソリューションに統合しました。 これらのテクノロジを既に展開済みのお客様に対しては、機能の変更はありません。 Windows Hello ではポリシー、マニュアル、およびセマンティクスが簡略化されているため、Windows Hello をまだ評価していないお客様でも容易に展開できます。 』


「Windows Hello for Business を使った本人確認の管理」 より
https://technet.microsoft.com/ja-jp/itpro/windows/keep-secure/manage-identity-verification-using-microsoft-passport


つまりブランドとしてのMicrosoft Passport はそっと下げて、これからはまとめてWindows Hello と呼びましょう!という話ですね。一件落着!!!!

(MSDN やTechNet にはまだまだMicrosoft Passport表記があります。また、結局呼び方変わっただけなので実体はそのままです。)


Windows Hello 対応作業 にあたって必要なデバイスは?


特にありません。
Windows Hello では、対応する生体認証…

  • 指紋認証 ... PC / Mobile 内蔵 または外付けの指紋センサ
  • 顔認証 ... PC 内蔵または外付けの IR顔認証センサ
  • 虹彩認証 ... Mobile 内蔵 の虹彩(瞳の中のパターン)を見るセンサ

に加えて、

  • PIN ... Personal Identification Number, つまりキーボードで入力する暗証番号

が使用できます。
API 上、UWP App から認証に使うデバイスの違いは見えないため、何を使っていても同じように実装・テストの作業が可能です。PIN でも同じです。

…もちろん、実際に動作する生体認証デバイスが有った方が作業は楽しいです。
そんな時はマウスコンピュータさんの顔認証・指紋認証デバイスを使うといいですね :)

Windows Hello 対応 セキュリティデバイス (マウスコンピュータ)
http://www.mouse-jp.co.jp/abest/windows_hello/


※あまりないとは思うのですが…明示的にTPM を使うコードを書く・テストする場合、TPM対応のハードウェアが必要になります。
Intel 系はCore も Atom も大体大丈夫なのですが、実はAMDのA10等統合系チップが未対応です。TPM対応作業が必要な人は注意です。


Windows Hello の顔認証、写真を表示したスマホ見せれば破れるんじゃん?


MSさんのWindows Hello 顔認証 解説ページで説明されています。

Windows Hello 顔認証
日本語  https://msdn.microsoft.com/ja-jp/library/windows/hardware/mt450467
英語  https://msdn.microsoft.com/en-us/library/windows/hardware/mt450467

赤外線カメラを使うため、写真やモニタの像を見る「可視光」はカメラに映りません。





2016年9月21日水曜日

UWP App の Xbox One 対応でやったこと

今回、F10 Image bbs browser をXbox One に対応させる機会がありました。
やった事を忘れないうちにメモしておこう、という記事です。

この記事で触れない所


  • UWP 「ゲーム」アプリのXbox One対応 … ご承知とは思いますが、UWPゲームだけは別扱い、ID@XBOX でゲームのコンセプト確認プロセスがあるので全く別ルートです。今回は扱いません。
  • Xbox One 実機を使ったテスト・デバッグ … 私はXbox One 実機を持っていないのでこのあたりの経験が全くありません。PC+ゲームパッドでなるべく頑張り、後は持っている人に助けを仰ぐスタイルです。


参考になるドキュメント


今回、UWP App をXbox One 対応するにあたって、こなれたかなり良い文書(英語・日本語共に)が出ています。
これらを読みながら作業すればほぼ間違いないはずです。

Xbox およびテレビ向け設計 / Designing for Xbox and TV
日本語 https://msdn.microsoft.com/ja-jp/windows/uwp/input-and-devices/designing-for-tv
英語 https://msdn.microsoft.com/en-us/windows/uwp/input-and-devices/designing-for-tv

Xbox の ベストプラクティス / Xbox best practices
日本語 https://msdn.microsoft.com/ja-jp/windows/uwp/xbox-apps/tailoring-for-xbox
英語 https://msdn.microsoft.com/en-us/windows/uwp/xbox-apps/tailoring-for-xbox

※日本語情報は二か月ほど古く、いくつか間違いもあるようなので適宜英語版も参照するのがお勧めです。

この記事では、(基本的過ぎて)上の文書にあまり出てこない所を中心に、作業順に書いてみます。

xInput 対応ゲームパッドを入手する


PC上で作業するには、何は無くともまずこのxInput 対応ゲームパッドを用意するのがお勧めです。

UWP App とそのUI Controlは、既定でxInput ゲームパッドである程度操作可能になっています。
そして、ゲームパッドでの操作・フォーカス移動等重要な部分はPC+ゲームパッド と、Xbox One+ゲームパッドでほぼ同じです(※1)。
Xbox One 実機をお持ちであっても、まずPC上でゲームパッドでの操作を詰めてからXbox One 実機に転送・デバッグを行うことで、かなりの手間を省くことが可能です。

(Xbox One 実機をお持ちの場合、そのゲームパッドがそのままPCで使えます)


Amazonで「Xbox ゲームパッド」で検索した結果
どれでもOKです
私が使ってるのはエレコムの安いの


※1 完全に互換、では無いです。今回F10 のXbox One 対応では1件、Xbox Oneで発生するがPC上で再現しない、という問題がありました。この件は後でもう一度触れます。

※2 xInput ... UWP App が対応しているのはこの形式です。今お店で買えるXbox 360 以降用のパッドは全て xInput に対応しています。「大昔の」Windows用ゲームパッド…Microsoft Sidewinder 等、Win9xの頃のものはDirect Input 形式で、UWP Appでは使えません。


UWP App のターゲットバージョンを Anniversary Update (14393) に変更する


そもそも UWP App が Xbox One に対応できるのは AU SDK 以降なので、必須の作業です。

ここではTarget/Min両方を14393に設定しています。


マウスモードを無効にする


マウスモードを無効にする / How to disable mouse mode
日本語 https://msdn.microsoft.com/ja-jp/windows/uwp/xbox-apps/how-to-disable-mouse-mode
英語 https://msdn.microsoft.com/en-us/windows/uwp/xbox-apps/how-to-disable-mouse-mode


最低限これはやらないとXbox One 対応とは言いづらいと思います。
Xbox Best Practice でもいの一番に「マウスモードを切れ」と載っています(既定にすればいいのに)。

これを切らない(既定)場合、UWP App のコントロールは画面上に表示される「ポインタ」を方向キーで自由な位置に(マウスのように)移動させ、押したいところでAを押すというシステムになります。
マウスモードを無効にすることで、方向パッドでフォーカスを素早く移動する一般的なXbox のスタイルになります。

※ただしこの設定、PCでは入れても切っても全く変わらず、方向パッドで操作可能です。
これが微妙に罠なので、まず最初にばっすり切っておくのがお勧めです


◇◇◇


このあたりで下準備は大体終わりです。
ここからは、上で紹介した「Xbox および テレビ向け設計」を足掛かりに、

  • ゲームパッドで無理なく操作できるUI

を作り込んでいく作業になります。

今回のF10 の作業では、UI をXbox One に合わせて大きく変更するのは避け、基本的にはゲームパッド対応のみで済ませています。
(ゲームパッド対応は PC + ゲームパッドのみでも可能ですが、他の作業… TV セーフサイズへの対応や TV セーフカラー対応等は細かい作業が必要で、実機が無いと厳しいというのもあります。)

以下は、ゲームパッド対応を入れていて気が付いた点です。

フォーカストラップ・アクセスできないUI を地道に潰す


ガイドに従って XYFocus* や CodeBehind 等でフォーカスを調整し、ゲームパッドで無理のない操作ができるようにする作業が続きます。
その中で、以下の現象が何度も何度も現れました。これを潰すのがメインの作業と言ってもいいくらいでした。

  • フォーカストラップ ... フォーカスがあるコントロールにはまり込んでしまい抜けられない!!
  • アクセスできないUI … あるコントロールにフォーカスを合わせられない!!

どちらもPC 上ではマウスやキーボードで簡単に回避できるのですが、ゲームパッド「だけ」のXbox One の場合…ほぼ脱出手段が無く、一旦アプリを終了するしかなくなります。これはまずいです。

潰しきるためにはゲームパッドでひたすら色々操作を行い、見失う事が無いかを確認する必要があるでしょう。
今回の作業では、以下のような所に引っ掛かりました。

  • AutoSuggestBox から候補リストを開いて→閉じて戻って来る所は大体見失うので、CodeBehindやXYFocus*で明示的に設定する必要がありました。
  • Microsoft Store Services SDK に同梱のMS AdControl、フォーカスをゲームパッドで移動すると抜けられなくなります。isTabStop等も無いため困ります。私は汚い方法…AdControlのChildrenからWebViewを探し、そこにGotFocused でフォーカスが飛んで来たら別のコントロールに飛ばす、で対処しました。
  • ContentDialog 内に置かれたコントロール間でのフォーカス移動は注意したほうが良いようです。上で挙げた「Xbox Oneで発生するがPCのゲームパッドでは再現しなかった」問題がこれで、明示的にXYFocus*で指定する必要がありました。

このあたりのケーススタディは、MSさんガイド文書にも詳しく書いてありますので参考にして下さい。

また、MSさん文書にある「現在のフォーカス位置をDebugMessageに出力するCode Snippet」、あれはフォーカストラップ・アクセスできないUIの原因を探すには最強の武器です。是非使いましょう。

Focus Debug用Snippet



ContextFlyout をマウス・タッチ・ゲームパッド全対応にする


作業を始めてみるとわかる所ですが、操作の多くをContextFlyoutに頼る事になると思います。

このContextFlyout、
  • マウスの右クリック
  • タッチのタッチ&ホールド(いわゆる長押し)
  • ゲームパッドのメニューボタン
それぞれの操作に既定でマップされるので、今までRightTapped等で作っていた右クリックメニューを全部これに統一して、綺麗な実装にできそうです。

ただ同時に判るのが、GridView/ListView等、ListViewBase系での使い勝手が微妙な所です。

今迄のRightTappedでは、argument の RightTappedRoutedEventArgs の OriginalSource が RightTap されたアイテムのViewItemになっており、そのDataContext が Mapされている自前のDataItem、であるため、RightTap されたアイテムに対する操作を簡単に記述することができました。

ところがContextFlyoutでは…Opening・Opened 共、「Tapされたアイテム」の情報が入っていません。えー。困る。

仕方ないので、今回は小汚い手を使っています。
Eventの発生順は、
ContextFlyout の Opening
ContextFlyout の Opened
ListViewBase の RightTapped
です。
…なので、RightTapped が発生した時点で、Menuが開いていたらそのMenuを弄って目的のアイテムに対する操作にすりかえる、という。汚い。


ContextFlyout にアイコンを出す


この件Xbox One 特有では無く MenuFlyout一般にあてはまる話なのですが、MenuFlyout は既定だとアイコンが出なくて寂しいです。
私は以下の記事のテンプレートを丸々使っています。AppBarButton のように名前でSegoe MDL2 Assets を指定できて便利です。

[UWP]How to add an icon to a MenuFlyout in UWP?
https://social.msdn.microsoft.com/Forums/en-US/ef37ee55-0c73-4ca7-9946-f4c70bf095f5/



リリース


普通のUWP App と特に変わるところは無いです。対象とするDeviceFamily でXbox Oneにチェックを入れるくらいです。

ただ、一応Xbox One用のCompliance Testは回しているようです。F10 では一件、Xbox One特有のTestで引っ掛かったところがありました。


謝辞


今回の移植では、Xbox One 実機をお持ちのOssan50 さん、Parupo1467 さんに動作確認・テストの御協力を頂きました。有難うございました。




2016年9月19日月曜日

Location Timeline (仮称)というアプリを作っています

Location Timeline (仮称)というWindows 10 用 UWP アプリを作っています。

  • 移動履歴をバックグラウンドで取得します。
  • 移動履歴からおおよその滞在地点・移動経路をタイムライン表示します。
  • タイムラインは蓄積されます。何月何日に何処にいたか、また何処に何月何日に行ったかがわかります。

また、移動履歴は自動的にOneDrive にアップロードすることが出来ます。
同じアプリをWindows 10 PC で動作させることで、タイムラインをPC上で確認することが可能です。

以下は制作中アプリのスクリーンショットです。
※地点の情報…画像やURL等…はFoursquare APIで取得しています。
本来ならその旨アプリの上に出さないといけないのですが、以下は試作版のためまだ入っていません。

タイムライン画面。移動速度等から滞在地点を識別します。


移動履歴のある日はカレンダー上で太字表示になります。


滞在地点情報と履歴。情報はFoursquare APIのものを表示しています。

滞在したことのある地点の表示。滞在回数で色が変わります。
ここでマーカーをクリックすると上の地点情報に飛びます。




※こういうアプリではありません。

  • 現在地を表示する。
  • ナビゲーションを行う。
  • モンスターをゲットする。

現状…
5月くらいからポチポチ作っているのですが、最近やっとフィルタ…生データからそれらしい軌跡を得る処理の実装が終わり、これから見た目をそれっぽく何とかしようか、というところです。年内出せればいいかなくらいの状態です。
フィルタ入れてはいますが、それでも地下区間は厳しいです。




2016年9月18日日曜日

Desktop App Converter で多くみられる誤解について


Desktop App Converter、動作可能なPreviewが出て数ヶ月経ちましたが、未だに残念な誤解と共に語られる事が多いように思います。また、そのせいで本来の利点が見えにくくなっているように思われます。

  1. これで変換したアプリは、Windows スマホでもすぐに使えるようになる!
  2. これで変換したアプリは、Desktop専用のUWP Appと大体同じ!
  3. 変換はMSIから行います!

全て誤解です。個人的には…「Desktop App Converter」という名前自体がミスリードを企図した、筋の悪い名前であると思っています。また最近はMSも「UWPに変換」とは言わなくなってきています(代わりに新語「Universal Windows Package」を使ったり、ステージングを行ってUWPに「自分で」移行しましょう、という話をするようになってきました)。正確を期して名で体を表すならば、「AppX Packager for Win32 Apps」あたりではないかと思います。


最近MSさんが使っている説明図 「Universal Windows Package」(新語)の中で、
Desktop App を順にUWP App に移行するイメージです
Desktop App Converterを通した直後が左上「Convert」に当たります
後は自分で移植して右下を目指そうぜ、という話



誤解1 「変換すればWindows スマホで使える」について



Desktop App Converter では、旧来のWin32 Desktop AppをAppX にパッケージングします。AppX であるので、Windows Store 経由でのユーザーへの配布が可能になります。
が、上のMSさんの図にもあるように、アプリケーションそのものはWin32 Appのままです。Win32 App 自体に何か変換が行われてUWP Appになる、というものでは無いです。

ユーザーのWin32 Appが動くOSは、Windows 10 Family の中では

  • Desktop ... PC, Notebook, Tablet

のみです。このため、それ以外…
  • Mobile ... Smartphone
  • Console ... Xbox One
  • Holographic ... HoloLens
  • Team ... Surface Hub(80インチくらいの巨大Surface)
  • IoT
上では動作しません。

上に貼ったMSさんの説明画像にもあるように、これら Desktop 以外のWindows 10 Family でアプリを動かすには、既存のWin32 App から Universal Windows Platform App、つまりWinRT ベースの新しいコードに「自分で」移植する必要があります。

Desktop App Converter は、この「移植」作業を行ってくれるわけではありません。UWP App への移植の最初の一歩、パッケージングを手伝ってくれるだけです。
また、

  • 変換時、何かコンパイル的な事が行われる
  • 動作時に何か動的にエミュレーション的な事が行われる
類のものでもありません。


誤解2 「変換すればUWP App」について


1で説明したように、Deployの終わったAppはWin32 Appのままです。このため、WinRT を基盤とする UWP Appと「大体同じ」とはとても言えないのですが…

ここでは、Win32 App と UWP Appは「何が」違うのか、実行時権限から考えてみます。
近年のWindows OSでは、プロセスの実行時権限は全て「IL」…Integrity Level、で分類されます。

  • ユーザーがインストールするDesktop アプリケーションはIL Medium
  • Webブラウザ等は既定ではIL Low

(Integrity Level 、良い文書が少ないのですが…下のは比較的判りやすいです。後、Win8 が出たころのメディア記事にもAppContainer絡みの説明記事が拾えます)
Desiging Applications to Run at a Low Integrity Level
https://msdn.microsoft.com/en-us/library/bb625960.aspx

IL Mediumは、所謂普通のWin32アプリです。ACLの許す範囲で、ユーザーがそうするのと同じようにシステム上のファイルにアクセスすることが可能です。

IL Lowはぐっと権限が制限されており、例えばファイルについてもアクセスできる範囲が狭くなっています。近年のブラウザは既定では大体はIL Lowで動くため、昔のように…Webを見てたらファイルを弄られた!スタートアップで女の悲鳴が!!!みたいな話はそうそう起こらなくなっています。

Windows 8の「StoreApp」では、このILに「App Container」という新しい分類が追加になりました。これは中々面白い定義で、「既定はIL Lowより低いが、インストール時に宣言することで追加の権限を有効にする」ことが可能です。この「宣言」とは、StoreApp / UWP App 開発者ならお馴染みの、Package.AppxManifest で定義するCapabilityの宣言です。UWP Appもこの点は共通です。


Process Explorer で各プロセスのIntegrity Levelを表示している様子
StoreApp / UWP App は「AppContainer」になります
画像では拙作のF10 imagebbs browser, PICT8 がAppContainerで動作しています


◇◇◇

一般に、StoreApp / UWP Appは安全であると言われています。不自由だがセキュアであると。これはMSが自分で言っていることですが…開発者側としてもここはあまり文句は無く、同意できるところだと思っています。

何故か?それは、上で説明したAppContainer により、StoreApp / UWP Appは制限されたSandboxの外に出られない仕組みになっているからです。
例えば、StoreApp / UWP App は、PC上のファイルを自由に触ることは実はできません。触れるのは、アプリインストールと同時に作成されるアプリ専用フォルダ「のみ」です。これはAppContainerによって権利が制限されているからで、ここを破るのは大変に困難です。(※1)

このため、実行時にこっそりとユーザーのHDDから大事なファイルを探して送信する、というような動作は本質的に不可能になっています。
こういった意味で、StoreApp / UWP Appは「安全」です。Storeからある程度適当にホイホイインストールしても、危ない目に合う事は少ないです。開発者が変な事をしづらい仕組みがApp Containerにより担保されているからです。


◇◇◇

では今回追加になった「Desktop App Converterで変換されたWin32 App」はどのILに属するのかというと… これはIL Medium で動作します。つまり、StoreApp / UWP Appを縛っていたAppContainerのSandbox制限が全く掛かりません。今迄のWin32 Appと同じ権限で動作します。(※2)

Desktop App Converterを使用しているアプリ「Evernote Touch」
Integrity Levelが通常のWin32App同様「Medium」になっているのが判ります。



従って、Anniversary Update では「権利を制限されたStoreApp / UWP App」と「これまでのWin32と同じ権限で動くConverted App」が同じストアに並ぶ事になります。
今迄培ってきた「ストアから入れるアプリは大体安全」という評判をこれからも維持できるのか、個人的には危惧している所です。(※3)



※1 ドキュメント・ピクチャライブラリ等は、事前に「Capability」として宣言することで、AppContainerの権限が拡張され、アクセス可能になります。また、それ以外のフォルダ・ファイルについては、「ユーザーがファイルダイアログで指定したら」以降はアクセス可能になります。重要なのは、ユーザーの許可・または操作が無い限りはアクセスできない、という点です。

※2 レジストリアクセスは仮想化され、DLL等のロードはApp-V型のIsolatedなFolderから行われますが、プロセスからのファイルアクセス自体は通常のIL Midで行われます。また、Desktop App Converterで作成されたPackageはWin32と同時にUWP Appも含むことが可能で、こちらはもちろんApp Container で動作します。

※3 匿名でのアプリ配布が行いにくく、また何時でもMSにより配布を止められるストア経由の配布である、という担保はあります。


誤解3 「MSIから変換」について


Desktop App Converter では、概ね以下のようにAppXパッケージを作ります。
  1. まず、素の仮想OSイメージがあります。OSインストール直後のまっさら環境です。
  2. この環境に対して、既存のインストーラでWin32 Appをインストールします。この作業は仮想環境上で行われます。
  3. インストーラが終了コード0を吐く等して終了します。それを受け、Desktop App Converter はインストーラが終わったな、判断して記録が終わります。インストール前後での変更差分がAppXとしてパッケージングされます。
ここで重要なのは、2と3において「インストーラの形式」は全く気にされていない所です。インストーラ自体はMSIだろうがWIXだろうがInstall Shield 6.3系だろうがNull Softだろうがバッチファイルだろうがどうでもよく、最後に終了コードを吐いてインストール終了が判ればそれでよい、です。
また、この仕組み…仮想のOSイメージに対して展開したアプリ、を差分としてパッケージングして配布…により、普通のインストーラとはまた違った注意が必要になります。

例えば…インストーラの中で、MSIならCustom Action、Install ShieldならScript…等により「システムの状態」…空き容量、ファイル、あるDLLがインストールされているか、レジストリフラグが立っているか…を見てインストールの動作を変える、インストールするパッケージを変更する、という仕組みを使っている場合は多いかと思います。

 ですが、このDesktop App Converter では、この「インストーラの独自ロジック」が走るのはユーザーのシステム上ではなく、あくまで変換時の「素の仮想OSイメージ」に対してのみです。このため、「インストール先の状態を見て何かするロジック」は成立しないと考えるべきです。

◇◇◇

…長い。読んでくれる人おられるのだろうか。Centennialは面白いのでつい話が長くなります。Desktop App Converterの利点、長所についてはまた機会がありましたら。

2016年9月14日水曜日

F10 - updates for xbox one

F10 for Xbox one, 早速問題が見つかっています。試して頂いたおかげです。有難うございます。

F10 versions: 9/28/2016


Published
Certification in progress
Public Release
1.3.320
none
F10 Test Group
1.3.320
none

  • 1.3.320 - Change - Revert back Microsoft.NETCore.UniversalWindowsPlatform to 5.1.0
  • 1.3.318 - Change - Revert back System.Encoding.CodePages to 4.0.0 / Enable 'Launch Feedback' button / Fix 'Soudane' parsing issue
  • 1.3.316 - Add - 'View' button is assigned for open/close catalog pane
  • 1.3.314 - Fix - Misc fix for mouse and touch operation
  • 1.3.312 - Fix - Lost focus issue : 'Add/Remove Favorite boards' dialog
  • 1.3.310 - Fix - Lost focus issue : Between Catalog view and Microsoft Ads / Change - pivot focus visualization is changed to show White-Box style focus
  • 1.3.308 - Fix - Fail to add favorite boards
  • 1.3.306 - Initial support for Xbox one

To join our F10 Test group, let me know your Microsoft Account mail address via tickets @ ddlg.uservoice.com. I'll add you to the group asap. You can get the latest build, and you can submit bug report to me :) .

F10 TestGroup に入って頂いている場合、特に操作をせずともストア経由で自動更新されます(ストアから手動更新でもOK)。

F10 TestGroupに入ってやってもいいよ、という場合は、メール tickets @ ddlg.uservoice.com 宛に、お使いのMicrosoft アカウント のメールアドレスを記載してお送りください。グループはMSアカウント単位でOn/Offされる仕組みです。

0. 使い方(画像つき)


F10 on Xbox One, Gamepad のXYボタンとMenuボタンを駆使して使う形なのですが…初見だと中々わかりにくいのではと思います。

そこで、画像付きの説明を作りました。
それぞれの画像の下に、その画像の説明が書いてあります。


1. 板を開いた
1. 板を開いた状態です。
ここで、画面右のカタログ…の廻りに、白い大きな四角でフォーカスが表示されています。
これはこの画面右のカタログと、画面左のスレッド表示で使われている形式です。

この状態でAボタンを押すと、このグループの「中の」アイテムにフォーカスが移動します。



2. カタログ内にフォーカスが移動した
 2. カタログ内にフォーカスが移動しました。
この状態でBボタンを押すと、1. のカタログ全体にフォーカスが当たっている状態に戻ります。

ここでXYボタンで見たいスレッドを選択しAボタンを押すと、左画面にスレが開き、フォーカスも左に移動します。

3. スレを開いた
3. スレが開きました。
XYの上下で移動できます。また、トリガーボタン…LT・RTで高速スクロールができます。

ここで大事な操作…メニューボタンを押してみます。メニューボタンは、この左のスレ画面と、右のカタログ画面で使うことができます。

左のスレ画面でメニューボタンを押してみましょう。



4. スレのメニューボタンを押した
4. メニューが開きました。
このメニューには、
  • 今選択されているレスに対する操作 が上半分に
  • スレ全体に対する操作 が下半分に
並んでいます。 このメニューから、この状態でのほぼ全ての操作が可能です。
ここでは、Open Image を選択してみます。



5. 画像ページが開いた

5. 画像ページが開きました。
XYの左右ボタンで、スレ内の画像を順次切り替えることができます。
Bボタンで元の画面に戻ります。



6. カタログのメニュー
 6. カタログにも同様にメニューがあります。
選択されているスレに対する動作と、
カタログ全体に対する動作です。

ここでは、「About」を選択してみます。


7. About を開いた

7. About が開きました。
ここでは、F10 と OSのバージョン情報を確認できます。
OKにフォーカスを移動してAボタン、またはBボタンで元の画面に戻ります。

この「About」以外にも、画面上にポップアップするダイアログ・また画面右にスライドしてくる設定画面も、Bボタンで閉じることができます。

以上、F10 on Xbox One の操作方法解説でした。
お疲れ様です。

以降、v1.3.308 の修正点です。

1. 板の追加が出来ない


AutoSuggestBoxを閉じた後特にフォーカスを設定していなかったためフォーカスが迷子になり、操作不能になっていることが判りました。明示的にフォーカスをGridViewに設定するよう変更しました。

また、GridViewについてはIsFocusEngagementをTrueに設定しました。メインページのスレッドカタログでは既に設定してあるのですが、フォーカスが

  • GridViewそのものの大枠のフォーカス
  • GridView内のアイテムのフォーカス

の二段階になっている形です。アイテムから大枠のフォーカスに移動するにはBボタンで戻ります。
この設定、Grid/ListView内にアイテムを多数抱え込む際にはとても便利です(設定しないと、アイテムを下まで全部スクロールしないと次のフォーカスに移動できなくなってしまう)

この板設定パネルの場合、「All」でふたば・4chanの板を一気に全部見せる場合があるので、設定することにしました。

※ 余談ですが、板名入力ボックスで「All」と入れると全部出てくるので便利です。


2. 広告にフォーカスを吸われる


広告にフォーカスが移動しないよう修正しました。…AdMediatorでは発生しなかった問題ですね :(ウェー


3. 起動時のフォーカス位置

お気に入り板のタイルにフォーカスが入るよう変更。その他フォーカス迷子系の問題をいくつか修正しました。




2016年9月7日水曜日

F10 Versions と XBOX One 対応

画像掲示板ブラウザ F10 ですが、現在ストアには大きく分けて「三種類」のバージョンが上がっています。お使いのWindows 10 のバージョンによって自動的に選択されます。

また、OSを更新した場合はそれに伴ってアプリケーションも更新されます。

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


1.1.x 系 ... Windows 10 10240 (1507)


去年のWindows 10 発売以降、OSを全く更新していない…場合、こちらのバージョンがインストールされます。
ただ、F10の使用データを見ると、このバージョンは現在殆ど使われていないのが判っているため、今後更新の予定はありません。

1.2.x 系 ... Windows 10 10586 (1511)


昨年11月のWindows 10 November Update をインストールしている場合、こちらが入ります。
現在はこのバージョンをメインに更新作業を行っています。
9月10日追記...1.2.302 がストアに掲載されており、ダウンロード・インストール可能です。


1.3.x 系 ... Windows 10 14393 (1607) 


今年8月の Windows 10 Anniversary Update をインストールしている場合、こちらが入ります。
XBOX One で使うためのゲームパッド対応等も入っています(PCにゲームパッドを繋いでいる場合でも使えます)。

9月13日追記…1.3.306 がストアに掲載されており、ダウンロード・インストール可能です。

一旦 1.3.306が審査を通った後、テスト用にサイクルの速い更新が行われるテストグループへのリリースが始まります。

テストグループに参加してみたいという方は、tickets @ ddlg.uservoice.com まで、お使いのMicrosoft Account のメールアドレスをお伝え下さい。登録します。

Gamepad での操作について


基本

  • 上下左右キー...フォーカス移動
  • Aボタン...選択
  • Bボタン...戻る
  • メニューボタン...メニュー

左のスレッドビュー、右のカタログビュー

  • メニューボタン...コンテキストメニュー(右クリックメニュー) PC・Mobile のアプリバーで行う操作は、大体このコンテキストメニューから操作できるように作っています。
  • LT・RT...上下スクロール
  • (レス又はスレッドを一つ選択時に)Bボタン...スレッドまたはカタログ全体を選択 この状態でLB・RBでタブ移動

画像表示画面・板設定画面・設定などのPopup系から

  • 戻る...Bボタン

未実装

  • 画像表示画面でのズーム・スクロール


※まれにしばしば、フォーカスが行方不明になるかもしれません。



◇◇◇




ただ、実際試してみると…PC・Mobile 用に作ったUIを、XBOX One のゲームパッドで操作するのは…対応はできるのですが、使いやすいか?と言われると難しいです。
F10のようにListView / GridView を二つ横に並べている場合、フォーカスを切り替える動作がいちいち挟まるのがあまり宜しく無い感じです。





2016年9月5日月曜日

F10 - 最近のふたば仕様変更への対応について

昨今のDDoS攻撃の影響で、ふたばに何度か仕様変更が入っています。

これに伴い、最新の「9月4日仕様」…mayのみ画像が//以下の相対参照... に対応した画像掲示板ブラウザ F10 v1.2.302 をストアに提出済みです。
9月5日現在はストアにて審査中で、上手く行けば数日でストアに掲載・自動更新されます。
今しばらくお待ちください。


また、同じF10 v1.2.302 はストア上にテスト用のFlight Packageとしても載せており、F10 テストグループに入っている方は現在ダウンロード・テストすることが可能になっています。

テストグループに入ってやってもいいよ、という方は  tickets @ ddlg.uservoice.com まで「お使いのMicrosoft Account のメールアドレス」 をお伝え下さい。(TwitterのDMでもいいですよ)
こちらで(手動で)登録作業が完了すると、自動更新でF10 v1.2.302が落ちてくるようになります。

宜しくお願いします。


2016年8月21日日曜日

MSDN Doc 上の Fonts for UWP Apps の説明が少し変わった

タイトルが全てなのですが…
今迄は、

Guidelines for fonts
https://msdn.microsoft.com/en-us/library/windows/apps/hh700394.aspx

こちらに
  • UWP Appでの各国語フォントの扱い、既定のフォント
  • XAML Style一覧
  • それに伴うFont Ramp (サイズ一覧)
等がまとまっていたのですが、2016年8月下旬に見てみると以下三つに分割されたようです。


Fonts for UWP Apps
https://msdn.microsoft.com/windows/uwp/style/fonts

Typography
https://msdn.microsoft.com/en-us/windows/uwp/style/typography

XAML theme resources
https://msdn.microsoft.com/windows/uwp/controls-and-patterns/xaml-theme-resources

言ってる事は大体同じ、3Pに分かれてより詳しい記述になっています。

UWP App書く人への注意点としては… XAMLの中でFontsizeを直指定、はあんまり上品では無く、
  • なるべく既定のStyleを使う…XAML theme resources にStyle一覧が出ています。
  • アプリ中の地の文(本文)のサイズはBody/Baseに合わせておくのが一番いいです。自分の好みでみつしり字を詰めても良いこと無いです(Webページで変に文字小さく指定してる微妙な奴、あれです)。ここから外したい人はフォントサイズ変更の仕組みを作るのがお勧めです。


◇◇◇


(余談)
一点気になるのは…以前のGuidelines for fonts では囲み記事になっていた注意点

「この一覧以外のフォントをアプリで使用する場合、フォントの自動ダウンロードが発生する場合がある。これはデータプラン等で通信量に制限のあるモバイルデバイスでは特に問題となる可能性がある。モバイルデバイスで動作するUWP アプリはこのリスト以外のフォントを使用すべきでは無い。

この記述が新しいドキュメントでは消えているようです。どういうことなんでしょうね?
言われなくてもそりゃそうだろう、とは思うのですが、Win10M でフォントの自動ダウンロードの実例を見た事は無かったな…というのもあり、若干もにょっとした感じが残ります。


…Desktop のWindows OS 的には、この手の話はざっくり言うと以下の通りで、

  • Windows XPまで…欧州系フォントは全言語OSにInstall、東アジアグループ(日本語・中国語・ハングルなど)はその言語のOSにInstallされ、東アジア以外のOSで東アジア言語を使いたい人は東アジアフォントパックをインストール このため、英語・その他欧州言語バージョンのXPでは日本語・中国語などは全部豆腐か文字化けで全く見えないことが多かったです。
  • Vista以降…全言語Versionで全言語フォントが既定でインストール ここ以降、どの言語OSでも文字化け無く表示できるようになりました。また、アプリのUnicode Build化、WebPageのUTF-8化が進んでいったという背景もあります。
※PreloadやEmbedded系で入っているフォントを調整する例はあったと思います

ただMobile…Windows Phone系はどうだったんだろう?僕は良く知らないです。ただWP8.1系でも既に、XP的なフォント入ってない系の話はあんまり無かったような気がします。














2016年8月2日火曜日

Windows 10 Mobile と 緊急地震速報・防災情報

Windows Phone 8.1 とWindows 10 Mobile(以降Win10M) は、OSの機能として緊急地震速報に対応しているが、既定の設定はOFF…ONにしたい場合は電話メーカーが各自行う必要がある、事が知られています。

ただ、実際に緊急地震速報が発報される事は少ないため、どういう動作になるか知見はそれほど溜まってはいなかったように思います。

今年に入り、緊急地震速報・防災情報それぞれ受信・受信失敗する機会がありましたので、この機会に…

  • Win10M で緊急地震速報を受信できた機種まとめ
  • 受信するとどんな画面が出るのか
  • 自治体の防災情報を受信できるのか
  • 実際に訓練で確認してみよう
という内容で記事を書いてみました。


緊急地震速報


2016年5月16日夜、関東地方で地震がありました。
http://www.data.jma.go.jp/svd/eqdb/data/shindo/Event.php?ID=9902422

2016年5月16日の地震

この地震では緊急地震速報が発報されました。

人口の多い首都圏、また多くの人が活動している夜9時過ぎという事もあり、Win10M 機で速報を受信した・しなかった旨のTweetが多く見られました。
Tweetを検索し、日本国内で販売されているWin10M各機種ごとに調べてみたのが以下の結果です。

  • 緊急地震速報を受信した… MCJ Madosma Q501, VAIO Phone Biz
  • 緊急地震速報を受信しなかった… NuAns NEO, FREETEL KATANA01, FREETEL KATANA02, Yamada Everyphone
  • 未確認… Geanee WPJ40-10, Diginnos Mobile DG-W10M

(未確認…地震直後にETWS受信した・しなかった等のツイートを確認できなかった)

前述のようにWin10MはOSとしてはサポート、ただし既定はOFFです。Madosma Q501とVAIO Phone Biz は設定でONにされており、その他の機種は既定のままOFF、であったものと思われます。

受信時の様子


私は当時川崎の自宅におり、電話(MADOSMA)はACに繋いだロック状態、画面は消灯、マナーモードには入れておらず着信音量は5/10程度だったと記憶しています。
地震が始まり、あれ少し大きいなと感じた頃にMADOSMAの画面が点灯し、バイブレーションが始まりました(正確な前後関係は自信が無いです)。


受信時のスクリーンショット


  • 画面表示 ポップアップ上に地震アイコンとエリアメール文面
  • バイブレーション 強いバイブレーションが長く続く
  • 音 「プーーーーープーーーー」という断続的な長いブザー音(家電話の受話器を上げた時のような音)が続く 音量は通知音量程度

音については、「マナーモードにしていると鳴らなかった」というツイートを複数確認できました。設定した着信音量そのままで鳴っていたものと思われます。

モードに関わらず全力全開でぎょわっぎょわっと鳴動する、いわゆるガラケーの緊急地震速報とはかなり様子が異なります。


防災情報



2016年8月2日、関東地方で局所的な豪雨・雷が発生しました。私の住んでいる川崎でも深夜に物凄い音の雷が何度も落ち、大雨が降りました。

午前9時頃、私は川崎市内の電車(東急田園都市線)に乗っていたのですが、突然回りの乗客の携帯電話が鳴動を始めました。緊急地震速報とは別のメロディ音でした。
この時、私が持っているMADOSMA は速報の類を受信した様子はありませんでした。

後で確認すると、自治体(川崎市)が発信する防災情報のエリアメールでした。



この豪雨は局所的だったこともあり、Twitter等で他のWin10M 機種の動作を確認することは出来ませんでした。


国が出す緊急地震速報と 地方自治体が出す防災情報


詳しくはIIJさんの資料をご確認頂きたいのですが、

IIJmioのSIMで緊急地震速報は受信できる?

IIJmio meeting 12 災害とMVNO (ETWS動作検証)


ざっくりまとめると…

  • Win10M で多く使われる 所謂MVNO SIM 自体は、緊急地震速報・防災情報を受信する能力がある
  • ただ、実際に表示できるかどうかは電話の実装による
  • 「緊急地震速報・防災情報」と呼んでいるのは、気象庁管理の地震・津波速報と、地方自治体管理の災害・避難(水害等)の二種類がある
  • iPhone 系は両方受信可能 SIMフリーアンドロイドは前者受信可能・後者受信不可能、な場合が多い

そして、今年に入ってからの上二つの経験からすると、Win10M の実装は「SIMフリーアンドロイド」と同じ系統であるように思われます。

つまり、
  • 緊急地震速報…電話メーカーがONにしていれば受信可能
  • 自治体エリアメール…受信不可?

ではないか?と思われます(自治体エリアメールについては受信不可のサンプル数が少ないため断言しづらい所があります…)。


お手持ちのWindows 10 Mobile が対応しているかどうか確認するには


メーカーに聞いてみる

電話メーカーさんは知っている(はず)ですので、聞いてみるのが結局は一番早いかもしれません。
Win10Mの場合、On/Offどちらに設定されているかをシステムから読み取る手段は…私は知らないです。私の理解では、普通のユーザーアプリレベルからは触れないと思います。


訓練で確認する


全国の自治体で防災訓練が行われています。この時にエリアメールの受信確認が可能かもしれません。

ただし、「緊急地震速報の訓練」とあっても、確認してみると自治体の防災無線でサイレンを鳴らすのみ、という場合が多く、実際に携帯にエリアメールを発信する訓練は少ないようです。
例えば、気象庁では年1回、11月5日「津波防災の日」に緊急地震速報の訓練を行うのですが、この訓練ではエリアメール発信は行われません。

※エリアメール発報訓練はその仕組み的に、電源OFF以外に「訓練をパス」する手段が無く、確実に携帯が鳴動しますので(そういう作りだから仕方ない)、それはそれで社会への負担も少し大きいかな、という所があります。

また、上でも触れましたが、これらの訓練では自治体のシステムでエリアメールを発報するため、気象庁管理の「緊急地震速報」とは結果が異なるものと思われます。


2016年 エリアメール発信を伴う訓練

※Web検索で目についたものをピックアップしました。

入間市防災訓練(埼玉県)2016年8月21日(日曜日)http://www.city.iruma.saitama.jp/bousai/bousai_list/bousaikunren.html
記述から見るに、おそらく自治体発信のエリアメールと思われます。
当日の午前9時15分、入間市内にいれば受信できるはずです。

静岡県 12月頃?
去年の訓練情報のままで、今年の日にちが判らないです(自治体のHPはこの手のが多いです…)

大阪880万人訓練(大阪府)2016年9月5日(月曜日)http://www.pref.osaka.lg.jp/shobobosai/trainig_top/
規模は圧倒的ですね… メール発信は午前11時となっています。

17万人市民まるごと防災訓練(愛知県西尾市) 11月頃?
去年の訓練情報のままで、今年の日にちが判らないです





2016年7月30日土曜日

Windows10 Anniversary Update - API Changes 1

来週に控えたWin10 Anniversary Update. 変更について4月の//build 2016からちくちくと追いかけていたのでざくっとまとめておこう、という趣旨の記事です。数回続く予定です。

Image ControlがAnimated GIF対応


いつも使っている Image Control がそのままアニメGIFに対応しました。ImageSource PropertyにGIFを設定するだけで絵が動きます。楽しい(Visual Studio上のXAML Designerの時点でもう動きます) 。  

AccessKey


https://msdn.microsoft.com/en-us/windows/uwp/input-and-devices/access-keys

所謂ショートカットキーのインプリが泣く程簡単になります。Button等、ElementのProperty AccessKey にショートカットキーを書くだけで基本終わりです。 UserControlだろうが何だろうが効きます。

<Button x: name=”myButton” Content=”Go” AccessKey=”G” Click=”myButton_OnClick”/>

これでAlt+Gを押下するとOnClickが呼ばれます。 ただ、5月頃のPreviewで試した時は、ALTによるToolTip表示は自分でやらねばならず、またAppBarが出入りするような実装だとそれにToolTipが付いてこないなど、割と面倒な感じでした。 また、ショートカットの重複を誰かが気にしてくれるとかも特に無いです。自分で気を付けましょう。    

その他XAML 小ネタ


  • Pivot … くるくる無限選択を無効に出来る IsHeaderItemsCarouselEnabled 下線マークのフォーカス表現がデフォで可能に HeaderFocusVisualPlacement
  • Element一般にフォーカスが当たった時に音を鳴らす(XBOX用)
  • CommandBar、文字ラベルをアイコンの右横に表示可能に また、Automatic Overflow にやっと対応 Appの幅が狭くなったら自動的にSecondaryに移動してくれる Overflowは既定でOn
  • PopupのStyleに「Smoke」が追加 ContentDialogのように背景がぼやけるやつ
  • x:Bindが異常に強まっている https://msdn.microsoft.com/en-us/windows/uwp/xaml-platform/x-bind-markup-extension
    • 全部OK
    • {x:Bind ViewModel.hogehoge.ToString() }
    • Text={x:Bind File.Properties['Artist'].Name }
    • Visibility={x:Bind (visibility)ViewModel.IsVisible}








2016年6月19日日曜日

Win10 Anniversary Update SDK API Diffs 14366

API Diff + msdn docsへのリンク(各APIのMSDN Docs のURLは決め打ち まだ文書が無いと404)


10586 vs 14366

http://ddlgsite.azurewebsites.net/ApiPeek/win10.10586.to.win10.14366.diff.html

http://ddlgsite.azurewebsites.net/ApiPeek/win10.10586.to.win10.14366.fulldiff.html


14291 vs 14366

http://ddlgsite.azurewebsites.net/ApiPeek/win10.14291.to.win10.14366.diff.html

http://ddlgsite.azurewebsites.net/ApiPeek/win10.14291.to.win10.14366.fulldiff.html


(API Diff の元ネタは  https://github.com/martinsuchan/apipeek  )



MSDN docs

API docs - indexed

実際にDocがUploadされてからIndexingされて下の検索に引っ掛かるまでタイムラグがある

Version 1607
https://social.msdn.microsoft.com/search/en-US/windows?query=introduced%20version%201607&refinement=183&ac=5

14366
https://social.msdn.microsoft.com/search/en-US/windows?query=introduced%20version%2010.0.14366.0&refinement=183&ac=4

14339
https://social.msdn.microsoft.com/search/en-US/windows?query=introduced%20version%2010.0.14339.0&refinement=183&ac=4

14295
https://social.msdn.microsoft.com/search/en-US/windows?query=introduced%20version%2010.0.14295.0&refinement=183&ac=4

Topics

APIと一対一に対応するDoc「以外」のTopicについては、最近更新があったらBlogで教えてくれるようになりました。有り難い。

https://blogs.msdn.microsoft.com/windowsdocs/


2016年5月15日日曜日

UWP と フォルダを介したデータ共有

UWP / StoreApp では、アプリが「直で」アクセスできるのはアプリそれぞれが持つフォルダのみである!という原理原則があります。

File access permissions
https://msdn.microsoft.com/en-us/windows/uwp/files/file-access-permissions
Open files and folders with a picker
https://msdn.microsoft.com/en-us/windows/uwp/files/quickstart-using-file-and-folder-pickers

この縛りがあるために、UWP / Store Appは他のUWP / Store Appや、ユーザーのファイルを直接触る事が不可能であり、窮屈だけど安全な環境になっております、という事になっています。

…が、原理原則だけでは人は生きては行けないので…Win10 UWP では多少その辺り柔軟な対応になってきています。ここでは、フォルダを介したデータ共有として有名なものと、そうでもないものを紹介します。


GetPublisherCacheFolder

https://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.applicationdata.getpublishercachefolder.aspx

有名なほう。

  • 同じマシン
  • 同じユーザー
  • 同じアプリベンダー
の、複数のアプリ間で共通に使えるフォルダです。

このフォルダにアクセスしたいアプリは、各々のアプリのPackage.appxmanifest でアクセスするフォルダ名を<Extensions>内で宣言する必要があります。


Package.appxmanifest
デザイナでは変更できないので、右クリック→「コードの表示」で編集します。

上のように宣言したアプリは、コード中で以下のようにフォルダにアクセスできます。
ポイントとしては、このフォルダはアプリから直でアクセスが可能です。Windows.Storage ... OSのBroker Process を介さずに、.NETならば System.IOで直で触ることができます。


CacheFolderに触っている様子 直アクセスOK

なお、このフォルダの物理パスは

C:\Users\<UserName>\AppData\Local\Publishers\<publisherId>\<CacheFolderName>

になります。<CacheFolderName> は、上のManifestで指定した名前です。


SharedLocalFolder

https://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.applicationdata.sharedlocalfolder.aspx

無名なほう。

  • 同じマシン
  • 同じアプリ

の、複数のユーザー間で共通に使えるフォルダです。

このフォルダにアプリからアクセスしたい場合、まず管理者がHKLMのレジストリを変更する必要があります。以下のKeyを作成し、DWORD Value "AllowSharedLocalAppData" を 1 にセットします。


HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\AppModel\StateManager

上のRegistry Flagがセットされている場合、UWP Appから「SharedLocalFolder」にアクセスできます。ちなみに、Flagが0又は存在しない場合はfolderにnullが返ります(システムの既定ではKey "AppModel" 自体が無い)。また、このフォルダもアプリから直でアクセスが可能です。


SharedLocalFolder に触っている様子 こちらも直アクセスOK

なお、このフォルダの物理パスは

C:\ProgramData\Microsoft\Windows\AppRepository\Families\<PackageFamilyName>\SharedLocal

になります。フォルダ内で作成されたファイルはアクセス権が「Everyone-FullControl」になります。
また、このフォルダは上記Registry Value が設定されている場合、アプリ側で当該フォルダを使用しなくても勝手に作成されるようです。アプリ起動時のタイミングで作成されているように見えます(つまり、フラグをセットすると全UWP アプリでこのフォルダアクセスが有効になります。要注意)。


背景


UWP がお披露目となったBuild 2015では、UWP App 間でデータ共有を行う手段が幾つか追加されました、という文脈の中で前者 PublisherCacheFolder が紹介されていました。以降のWindows Blog等でも紹介されていたように記憶しています。

一方、後者のSharedLocalFolder はBuildでは完全にスルーでした(そのはず)。 VisualStudioでいそいそとコードを書いていると、ApplicationData.Current のIntelliSenseでチラチラ表示はされるので存在は知っていたのですが…いざMSDN Docを見ると木で鼻を括ったような全くなにも説明していない表記で、何ぞこれ???という。

状況が変わったのは以下のBlogで…MSのフィールドエンジニア氏がこんなんだよーと説明していました。まじか。
https://blogs.msdn.microsoft.com/notime/2016/03/04/sharing-data-between-users-of-a-universal-app/

ただ、実際こう見てみると…半ば隠しAPI扱いなのもやむを得ない感じですね。
HKLMの変更が必要であるため、UWPだけで使用可能になる類の物ではありません。管理者権限が必要です。

(Registry Editorの無いMobileや他のDeviceFamilyではどうすんだろう?という疑問もあります)

実際に使用されるケースは…LOB Appでの使用、All UserなWin32 Appとの協調動作を企図した使用等、かなり限定的なのではと思われます。



2016年5月5日木曜日

Desktop App Installer を使ったUWP / Centennial AppXの配布

4月末、MSがDesktop App Installer なるUWP Appをストアに載せてこっそりテストしているよ、という記事がMSPowerUserに載りました。

Microsoft Desktop App Installer now available in the Windows Store
http://mspoweruser.com/microsoft-desktop-app-installer-now-available-in-the-windows-store/

このアプリ、まだストアに載っており、誰でもDownload・Installできる状態です。
この記事はDesktop App Installer を試し、これからのUWP AppのDeploy方法について考えてみたよという話です。

Microsoft Desktop App Installer
https://www.microsoft.com/store/apps/app/9nblggh4nns1

※インストールできるのはWin10 RS1 以降です。Win10 TH2には入りません。
※5月6日追記…今上がっているPackageは「Win10 Desktop / Mobile, x86/x64」が対象であるため、殆どのWin10 Mobileには入りません。
※5月9日追記… 名前が「App Installer」に変わり、Win10 TH2 にも入るようになりました。しかし、試した所App Installerを使ったUWP App のDeployには失敗してしまいます。
※5月30日追記… MSDN Blogに記事が載ったようです(今まではストアにあったアプリを勝手に見つけて撫でまわしてるだけだったので…)

App Installer!!
https://blogs.msdn.microsoft.com/appinstaller/2016/05/27/app-installer/

記事によると、Win10 Anniversary Updateには最初からApp Installerが入っているようです。


背景


この「AppXをDoubleClickしてインストールできる仕組み」、最初にお披露目となったのはBuild 2016, UWP AppModel Sessionの中でした。"Modern Desktop App Installer"としてAppXをストア外で配布する手段が確立されましたよ、という文脈です。

Universal App Model Overview: What's New in the UWP App Model
https://channel9.msdn.com/Events/Build/2016/B809
(当該箇所は5:19あたりからです。説明・デモでいろいろ大事な事を言っているので、スライドだけでなくセッションの視聴をお勧めします。また最後のQ&Aも)






説明ではCentennialでConvertしたPaint.netをDeployしていますが、別にCentennial用という訳では無く…AppXならばGenericに使うことができます。以下の例では UWP AppのAppx Packageを使っています。


AppX をDoubleClick するとどうなるか


Desktop App Installer をインストールすると、.appx / .appxbundle が Desktop App Installerでの実行に関連付けられ、小包アイコンで表示されるようになります。


拡張子 .appxbundle に Desktop App Installer が関連付けられている様子

ダブルクリックすると、Desktop App Installerが起動します。

仮のUWP App "Shumen" のAppxbundleを起動した様子


この画面以降、インストールできるかどうかは以下の条件により変ってきます。


AppX 未署名の場合・又は証明書がインストールされていない場合


以下のエラーメッセージが表示され、インストールは出来ません。
Either you need a new certificate installed for this app package, or you need a new app package with trusted certificates. Your system administrator or the app developer can help. A certificate chain processed, but terminated in a root certificate which isn't trusted (0x800B0109)

つまり、あなたのAppXがTrusted Rootな証明書で署名されているか、又は、あなたのAppXの署名に使った証明書が「この」システムの証明書ツリーにインストールされている必要があるよ、という事です。

前者…Trusted Rootな証明書での署名は、これまでもApplicationの配布時にはほぼ必須となっているもので、自分が自分であることをVerisign等の発行業者から年数百ドルで証明書を購入することで発行業者に裏書きしてもらいましょう、その証明書でバイナリに署名しましょう、という話です。

後者は所謂「オレオレ証明書」と言われているもので、Appx作成に使った.cer をシステムにインストールすれば前者と同じことにはなります。違うのは、自分が自分であることを証明するのは自分しかいない所です(なのでオレオレ)。
限定的な配布のテスト用途等には使えますが、一般配布にはもちろん使えません(エンドユーザーに.cerを渡してTrusted Rootにインストールさせるのがどう考えても間違いである、.cerが他者に使われてしまう恐れがある、不正なTrusted Rootとして使用を停止される恐れがある、等々ダメな理由はいくらでもあります)


以降は、上の条件を(オレオレ証明書で)クリアした環境下での検証結果になります。また、以下で参照している「開発者モード」とは、設定→更新とセキュリティ→開発者向け、で設定できる以下の項目の事です。

「開発者モード」

開発者モードが「Windows ストア アプリ」(既定)の場合


実行すると以下のErrorMessageが表示される。
To install this app, turn on sideloading mode in Settings > Update & security > For developers. If you can't turn it on, ask your system administrator to unlock the machine for sideloading (0x80073CFF)

開発者モードが「サイドロード」「開発者モード」の場合


実行すると特にエラーなくインストール可能

これらから、Desktop App Installer は「サイドロード」以上の設定を必要とすることが分かります。
また、この設定→アップデートとセキュリティ→開発者モード、の設定は一般ユーザーには変更ができず、管理者権限が必要になります。
(おそらくPolicyのDeployは可能と思われますが、基本的に管理者マターであるという事になります)


参考...バージョンアップ・ダウンについて


バージョンアップ又は同一バージョンの場合…特にメッセージは無く、置き換えが行われます。未確認ですが、通常のストアでの更新同様にApp構成ファイルは入れ替え、AppLocal Settings/Folderは維持と思われます。

バージョンダウンの場合…以下のエラーメッセージが表示され、インストールはできません。
There's a newer version of this package already installed. To install this older package instead, uninstall the one currently on your system (0x80073D06)



参考…「PowerShellを使った配布」について


これまでは.ps1 を使うDeployが開発用に使われていました。
この.ps1で行っているのは、
  • 開発者モードを「開発者モード」に変更 (PowerShellはSettings Panelを表示するまで 変更自体はユーザーが自分でToggleButtonを押す)
  • .cer をシステムにインストール

という動作です。
  • 開発者モードに入れる事
  • 実際にはユーザーにボタンを押してもらう事
  • .ps1を右クリックして「PowerShellで実行」を選択してもらう事

等、基本的には…エンドユーザーにさわってもらう形にはなっていませんでした。

この項まとめ


今回のDesktop App Installer によって、(証明書を用意できるのならば)「エンドユーザーにストアを介さずAppXを直接ダウンロード・インストールしてもらう」という形がかなり現実的になったと言えるでしょう。

※ 現在は「Desktop App Installer」という独立したUWP App Packageになっていますが…これOS組み込みにしない理由が僕にはどうもわかりません。単に今回は試験中だからかもしれませんが。後から別にインストールするのは手間ですので、RS1 GMには最初から入っている形が望ましいと考えます。


ストア外配布の現実味と将来



Win10 RS1では、上で挙げたセッションで云うように「ストア外」での配布が可能となっています。

ただ、これまで見てきて分かるように、あくまでも署名付きパッケージのみの話と考えるのが正しいように思われます。
「署名の無い」パッケージについては、事実上、一般配布は極めて難しいように思われます。

※未署名パッケージ配布の是非を論じるのは僕の手に余るのですが…個人的な印象としては、(可能であったとしても)未署名のパッケージ・バイナリを配布するのが許される世の中ではもう無いのかなという気がしています。

未署名パッケージ配布は脇に置くとして、これからのUWP Appの配布方法としては

  • Microsoft Corporationと契約し、Windows Storeを使った配布を行う
  • 自前で証明書を調達し、自前でAppXを配布する環境を持つ

この二択になると思われます。

ただ実際のところ…殆どのソフトハウス・個人開発者等は前者…Windows Store を選ぶだろうという気がします。
以下に簡単な長所・短所比較を挙げてみます。ほぼ裏表になりますが、


Windows Store

長所
  • ダウンロード・更新システムをMicrosoftに丸投げ
  • アプリ販売・IAPシステムをMicrosoftに丸投げ
  • Ad Mediationを使用可能
  • OS持ちの既定のマーケットである


短所

  • 販売に30%のMS税がある
  • アプリを載せるのにCompliance Testを通す必要がある(極端なエロス等は無理)
  • Testに数日かかる
  • バカな伸びしろのあるTesterと付き合う必要がある
  • ストアがバグると大変なことになる(2015年は本当に大変でした)

自前配布

長所

  • 売上総取り(料金システムが自分持ちなら)
  • Compliance Testを通さなくていい
  • そもそもTestが無い

短所

  • ダウンロード・更新・認証システムを自分で持つ
  • アプリ販売・IAP システムを自分で持つ
  • 証明書を自分で買う必用がある
  • Ad Mediation を使えない
  • 既定のマーケットではない…見つけてもらえるにはどうすれば

※認証システム…AppX をそのまま配布する場合、そのままではいくらでもCopy可能です。
CopyFreeにするのでなければ、何らかの「認証」の仕組みを自分で持つ必要があります。
キーを販売し、App起動時に認証サーバに見に行って認証する、というような。何かのアカウントに紐づけてもいいかもしれません。


…どうでしょうか。
個人的には、自前配布で短所の要件を克服するよりは…Testの面倒さと30% のAdmission Feeを受け入れたほうが楽かなぁという気がします。
特に、今はゲーム・非ゲーム共IAPでおぜぜを頂く道がとても大事です。そこを全部自前でやるのはなかなかつらいのではと思います。

MSさんもそこはわかっているようで、Win10 RS1ではWindows Storeが大幅に拡張されることになっています。以下のセッション見て頂ければわかるのですが、ざっくりいうとSteamのStore的なものをそのままWindows Storeに持ってくるつもりのようです。

Windows Store: Publishing Apps and Games to Desktop, Mobile, and Xbox
https://channel9.msdn.com/Events/Build/2016/B839


逆に、自前配布の短所で列挙しているような用件を全部自分でクリアするのではなく、ある程度割り切ることで現実的な自前配布も在り得るのかもしれません。
普通のソフトハウスならば証明書は既に持っているでしょうし、認証の仕組みさえクリアできれば何とかなってしまう場合も多いように思われます。Windows StoreのマネをしてMSAなら10個まで、でも良いかもしれません。


また、上の比較は主にConsumer…一般向けアプリで考えてみたのですが、これがLOB…社内配布向けになると全然別の話になりそうです。しかし長くなってしまったので…このあたりにしておきます。

2016年4月19日火曜日

UI.Composition でListView/GridView を賑やかす

UI.Composition を使い、スレッドカタログにアニメーション効果を付けた F10 をリリースしました。

F10 image bbs browser
https://www.microsoft.com/store/apps/f10-image-bbs-browser/9nblggh1ntrd


このGridView のItemをくるくる回す部分を抜き出した簡単なサンプルプロジェクトを作りました。

CompositionGridView
https://github.com/pnp0a03/CompositionGridView

MSさんのサンプルには面白いのが沢山載ってるんですが、一番単純な…単にList/GridViewものをくるくる回す的な意識の低いサンプルが無くて難儀したためです。

MSさんのUI.Composition Sample
https://github.com/Microsoft/WindowsUIDevLabs

ここでコードぺたくた貼って解説するより読んだほうが早いですよね。

UI.Composition について


Visual Layer
https://msdn.microsoft.com/en-us/windows/uwp/graphics/visual-layer
... この項、概念から具体的な操作例まで満遍なく記述出来ている良記事 MSDNでは少ないタイプです。オススメ

上の記事を読んでいただければいいんですが、XAML Framework から DirectX Layerの間に一枚あったDWM... Visual Layer, UI Composition を Win10 TH2から使えるようになりました、という話です。

XAMLレイヤから降ってきたUI Element、またはVisual Layer の中で作ったRectangle・Imageに対して、Effect・Animationを掛けることが可能です。

XAML→DirectXのパイプラインに手を突っ込んで描画を捻じ曲げるような感じがあります。


以下に参考になるリンク集等。


Creating Beautiful UX in a Real-World App with Visuals, Animations and Effects
https://channel9.msdn.com/Events/Build/2016/B818
... GridView/ListView のItem弄る元ネタはこのセッションの途中からパク参考にしました。Slideだけだと肝心のCodeが見えないので、面倒でも動画を見るのがお勧めです。英語ですが字幕Onにできますので。また、2016年夏予定のRS1で入るUI.Compositionの変更にも触れられています。


MSさんのUI.Composition Sample
https://github.com/Microsoft/WindowsUIDevLabs
... Build 2016 で使っている部分を多く含むサンプル。また、下のDiderikさんサンプルでも参照されているComposition ToolKit ... Visualに対してImageをロードするコード、もここから取得可能です。Visual Layerの中で色々やるには多分必須。
また、Sample はRS1用の新APIを使うものも含んでおり、RS1上のVSでBuildすると見られます(バグ多し)。


Diedrik Krols さんのBlog
https://xamlbrewer.wordpress.com/category/composition-api/
... MSさんの解説・サンプルは基本的にXAML のElementに対してVisualを作って操作する、物がメインなのですが、Diedrik さんのサンプルは珍しく「Visual Layerの中だけで作った」Visualを操作して色々描いてみる、というスタイルです。

robmikh blog
http://blog.robmikh.com/
UI.CompositionTeamの中の人のBlog
特に、Why even use Composition? は読む価値があると思うのでオススメ。DWMにやらせることでApp(UIThread)側の負担ゼロで秒60コマのアニメーション・エフェクトを使えるのがUI.Composition の利点で、XAML上のStoryBoard使ったアニメーションではこれは無理、という大事な話
Why even use Composition? / Images and effects
http://blog.robmikh.com/uwp/composition/2016/04/21/images-and-effects.html



2016年4月11日月曜日

Build2016 API Readiness

(訂正 2016/04/29... RS1以降のAPI を使うには、NuGet Package Microsoft.NETCore.UniversalWindowsPlatform を手動で5.1.0に更新することが必要なようです。既定の5.0.0だとBuildできない、通らないものが多いです。← 14332 Releaseと同時だったので今となってはよくわからない)

build 2016で説明されていた新機能が、現状のWin10 RS1 14295 SDKにどれくらい入ってるのか…すぐ使えるのか、ビルドは出来るけど動作怪しいのか、全く入ってないのか…を自分で確認したもの表です。

(個人的に興味があるもの…UWP App関連+Centennialだけ見ているので、ほかの要素は全くノーチェックです)

Item
説明
現状
FullTrustProcessLauncher

UWP App Package内のWin32 AppUWP Appから起動する…という謎のAPI
今まででは考えられないタイプのやつ
多分Centennialで作ったPackage
Build不可
このAPI Callに必要なPacakageManifest内のCapabilitySchemaに入ってないので全く無理
AccessKey
XAMLのショートカットキー革命
動作する 超便利
TrySetDisableLayoutScaling
これを呼んだAppScalingDisableするらしいけど
Callは出来るが常にFalse(失敗) 効果自体謎ではあるのでよくわからん
ExtendedExecutionBackgroundTask
Build2016で説明のあったやつ
Diffと、MSDN HelpDocAvailabilityを見る限りまだ準備されていない
CommandBarの自動オーバーフロー
幅が足りなくなると自動的に今までのSubMenu見たいになるやつ(伝わる?)
既定で動作する ただ一部Propertyは現在XAMLで指定するとRuntimeに落ちる事がある
Pivot

HeaderOverflowModeをセットするとアプリ起動時に死ぬ
これ以外にも14295 SDKBuildしたPivotは、もともとXAMLPivotItemを指定していない場合CodeからPivotItemを追加できない等動作が不安定なので注意
ImageAnimated GIF Support

これだけはちゃんと入ってる SourceにアニメGIF指定するとXAMLデザイナ上でアニメGIFが動く
だが、ウェイトサポートが適当で正しく再生されないAnimated GIF が多い 正しい再生を行いたい場合はGifImageSourceを使うのがお勧め
Ink

まだ見れてないです (ペン対応PC持ってないので出来る事が少ない)
UI.Composition

UI.CompositionについてはGraphicsTeamが自前で持ってるSample TreeGithubにある こっち見るといいです
Project Rome
IPC的な仕組み
CortanaがDevice間でデータを同期するのに使ってるのがこの仕組み わかりづらいけどうまく使うと良いものになりそう
まだ見れてないです
Map

まだ見れてないです
App Extension
後からPackageに新しいバイナリを追加できる仕組み
所謂DLC的なやつ
まだ見れてないです
UWP on XBOX

実機が無いので出来ることがあまり無い…


SDKとは特に関係無いけどBuildで出た新アイテム等

Centennial
Preview版と、そこそこ詳しいドキュメントが出た
Win10 Enterprise IP 14316が必要です。Azure VM上のものでも大丈夫です。
Preview版自体は動作条件がハードル高いので実際に試している人は凄く少ないと思う
重要なのはある程度詳しいドキュメントが出たことで、下のリンクのBehind the scenes を読めばこの手のもの知っている人には何やってるのか大体わかるようにはなったと思います

現状わからない(興味ある)のは、実際のパッケージのサイズがどれくらいになるか(VFSFont等肥大化しそうな部分が多々ある)
Store Update
 

Availabilityという点では今回一番優秀なのがこのStore Update
かなりの機能が既に実装済みで即利用可能になっている 素晴らしい Documentationも良くできている
新しいベータテストのための仕組み TestFlight Packageは、今までできなかった「本筋のAppPackageをストア上に維持したまま、登録したテスターにテストパッケージを自動更新でDeploy」が可能になっている 凄い 即役に立ちそう
BuildSession動画を見ると判るけど、どうもMSさんは自分のSteam Storeを持ちたいみたい
HoloLens
HoloLensのフラグ立てたアプリは既に受け付け開始されている (F10はこれで出した)
※ HoloLens emulator でAppを動かすには、AppのTarget(.csprojのPropertyページで設定するやつ)の「最小バージョン」を10.0.10240.0 に設定する必要があります。10586だとエミュレータがメニューに出てきません。
XAMLTreeView
MSGitHub UWP SampleDev Branchに「XamlTreeView」サンプルがある Build・実行にはRS1環境が必要 実体はVC++製のControl RS1の新Controlを使っているのでTH2では使えないです
14316 DesktopThemeSettingsから変更可能になった件
App側のTheme設定が「Default」だった場合、Systemの変更が即反映される・・・・はずなんだけど
F10でテストすると、部分的に適用される所・されない所がありバラバラ うまく動いていない もちろんAppを一旦終了・再起動すればOKではある
XAMLEdit&Continue
Buildのデモ、超便利そうでしたよね すぐ使いたい!使わせれ!!!
でもこれ、現状使えるのは
Win10 RS1 14295以降+VisualStudio vNext "15"
だけです。VS2015Update2はムリ。






おまけ

TH2 vs RS1 API差分一覧 (MSDNへのリンク付き…まだ文書無い場合は404です)
何気に便利

http://ddlgsite.azurewebsites.net/ApiPeek/win10.10586.to.win10.14291.diff.html

元ネタは
https://github.com/martinsuchan/apipeek

おまけ2

MSDN のAPI Referenceの内、"10.0.14295.0から" という文言が付いているもの検索
(変更後少し経つとIndexingが走ってこういう検索ができるようになる 04/11現在はOKです)

https://social.msdn.microsoft.com/search/en-US/windows?query=%2210.0.14295.0%22&refinement=183%2C117&ac=4