2014年11月26日水曜日

MSCC : 開発手順書を書いてみた

Microsoft Community Champion, MSCC ではWindows / Windows Phone ストアアプリ・Azure上のサービスを作品として提出できるのですが、それらと一緒に「開発手順書」の提出を行うことになっています。

開発手順書テンプレートはMSCCのページからDownloadできるのですが…どうも意図が良く分からない。IEC62304みたいな本式を書けという話でもないはずです。
「これからこんな手順で開発します」程度なのかなぁと思うのですが。

闇の妖魔ネロ族そして魔王オスクリダを打ち倒す強靱なTechパワーとして開発中のアプリ PICT8 現在ベータテスト中です!)は、実のところ2014年4月から続けて作っているものであり、ちょうどMSCCの期間中に完成しそうな塩梅なので応募したものです。
そこで、11月頭に…「既に完成した体で」がーっと書いてみた開発手順書が以下になります。

( PICT8 は 2014年12月にリリースされました。Windows ストア からダウンロードできます。)

11月下旬の今まだ出来ていないあたり結構危ないのですが、「既に完成した体で」書いてみると…意外に、作業の見通しが良くなる効果がありました。作業の合間にお勧めです。

(Word文書をそのまま貼り付けているため体裁が所々おかしいのは御容赦下さい。これで丁度5ページです)

--------
Microsoft Worldwide Community Champion 開発手順書

チーム No.
JPAC01066
チーム名
DDLG
参加エリア
(学生・社会人)
社会人
チーム メンバー名
さとう
Windows アプリまたは
Microsoft Azure
の名称
PICT8
作品の概要
画像ビュアー + PDF/Zipブックリーダー
アイデア
1.    開発のポイント
2.    機能

1.       キャッシュと多段階画像デコードによる素早い動作と高品質な画像表示・低メモリ消費を実現するFlipView実装の確立、VirtualizedVectorを用いたFilerUIの実装、Manipulation/Gestureを用いたCommander UIの作成
2.       フォルダ内画像表示、PDF/Zip内画像表示、1P/2P/偶奇のページ切り替え、FilePicker Contractの実装によるプレビュー付きファイル選択機能の他アプリへの提供
商業的な価値
1.    特長
2.    使いみち(シナリオ)

1.       軽快で素早い動作、片手持ちで使いやすいCommander UI、他のアプリからも利用可能
2.       個人ユーザーの画像・自炊本・PDF閲覧、美術館・博物館等でのタブレット端末による画像展示(Assigned Access 環境下での使用を想定した動作モードあり)
開発手順
次頁に示す。
作品の URL





PICT8開発手順

November 11, 2014
さとう (役職 勇者 / 所属チームDDLG)

この文書について


この文書はMSCC規定により、チームDDLGに於いて開発したWindowsストアアプリ「PICT8」の開発手順について説明するものである。手順それぞれの実行結果、アプリケーション仕様・動作等について説明するものでは無いことに留意されたい。

デザイン ポリシーの確認

[Apr - May 2014]
開発を始めるにあたり、これから作成するアプリケーションとは

l  こういうものである
l  こういうものでは無い 

というis/is not Tableを作り、今後の仕様作成・実装に当たって譲れない部分、譲ってもいい部分、無視する部分を明確にする作業を行った。
開発開始当時に作成したis/is not Tableを以下に示す(当時の案であり、現状のアプリ実装状況ではない)。

PICT8とは:
気持ちよく使える画像ビュアー PDF/Zipの本読みもできる 


PICT8 is
Fast and fluid
File BrowseVirtualizedVectorSourceを使用することでPhoto と同等の素早い動作を提供
多段階デコードによる低メモリ使用量とごまかしの無いFlip動作の両立
2画面表示
横持ち用 いつでもページの偶奇・めくり方向を切り替え可能
ファイル名を表示する
現在のMetroUIGuidelineはファイル名表示は必要ないというポリシーであるが、実運用上かなり無理があると感じる。例えばカメラで撮った連版画像を名前で探すといった頻度の高いケースでの対応が困難であり、PICT8ではファイル名表示を既定とする。
PDF/Zip対応

Animation GIF対応
WebViewコントロールを用いる。 futa8で実証済み
片手で全部済む
10インチなら人差し指、8インチなら親指で大体済むUI One handed Commander UI
標準画像Viewer置き換え
を目指す。


PICT8 is NOT
ファイラでは無い
ファイルコピー程度は対応するが基本的にはファイラでは無い。ただファイラとして発展させることは可能なので、別Versionで考える。今回は考えない。
ファイルのDB管理をしない
自前のDBにファイルを登録、サムネイルを記録、的な事は一切行わない。FileSystemのサービスのみを使う。現在のDesktopSearchBindされたFileSystemならば自前DB無しで充分な機能を提供可能である、という自分の考えをPICT8で実証する。また、FileSystem的に無理ならそこは頑張らない。
ただこの場合Zip/Pdf系のArchiveのサムネイルが作れないという問題があるが…今回は我慢。
印刷機能を持たない

画像編集機能を持たない
エフェクト・回転等は全て別アプリにやってもらう。ファイル起動か共有で呼べば充分。
データをローカルに溜めない
ファイルは基本そこにあるのをBroker経由で使う。無理に自分のLocalStorageCopyして使う事はしない。(ただしAnimeGIFや、PDF/Zipの一時ファイル等例外もあり)


環境整備

[Apr 2014]
開発環境にVisual Studio 2013 Express , 言語はC#/XAML, ソース・進捗管理にはVisual Studio Onlineを用いた。

他製品調査

[May 2014]
Windowsストア上で提供されている同種の画像ビュアー・ブックリーダー十数種について試用を行い、以下の点について調査した。

l  この種のアプリケーションの多くが有する機能・また特徴的な機能の確認
l  動作感の確認
l  PICT8との比較

UI案の作成

[May 2014]
大まかな画面構成作成を行った。なおここで行ったのは所謂WhiteFrameな部分の作成であり、UI ElementCosmeticな部分は後日行った。

プロトタイプ作成

[Apr - October 2014]
以下四点が今回の開発でのチョークポイントであり、これらが出来ない・上手く動かなければ開発が頓挫する部分であるため先にCodeを作り技術的なFeasibilityの確認を行った。尚、個人プロジェクトが往々にしてそうであるように、今回もプロトタイプがそのまま以降の実コードとなっている。

l  VirtualizedVectorSourceによるFileList表示
l  FlipViewによる1P/2P表示
l  PDF/ZipHandling
l  FilePickerContractの実装


実装


20144月~11月に実装を行った(まだ終わって無い)。

実装開始後の仕様変更

[October - November 2014]
実装開始後にリリース・または気づいた新API・機能等以下3件について評価を行った。

l  Microsoft Windows OCR - ラノベの挿絵ページ自動判別機能として有効であることが確認できたが、API自体がPreview版のため製品に含めるかどうかは未定
l  Assigned Access – 同モードをより有効に使うためのPICT8キオスクモードを実装した
l  .NET Native - 現在のCodeでは却って遅くなる部分も見受けられたため今回は見送り


試用者の意見徴収

[September - November 2014]
l  devcussion
有志による開発者の寄り合い “Devcussion” に於いて開発中のVersionを試用して貰い、使用感・改善希望点等を聞く事ができた。
l  Web上でのOpen Beta Test
BetaTesterを募集し、幾つかの提案・バグレポートを頂く事ができた。


リリース


201411月中のリリースを予定。

()

2014年11月22日土曜日

PICT8 Preview 3 ベータテストのご案内

( PICT8 は 2014年12月にリリースされました。Windows ストア からダウンロードできます。)

作成中の画像ビューア+PDF/Zipリーダ PICT8 について、アプリをインストールして試していただけるベータテストを実施中です。

Note - English description available at the bottom of this post.


PICT8 とは?

近日中にWindows ストアでの販売(売り切り・広告無し)を予定している、画像ビューア+PDF/Zipリーダ アプリです。
特徴は
・軽快な動作、アニメGIF表示可能
・片手持ちでPDF/Zipを読むためのCommander UI
・他のストアアプリでファイルを開く際にPICT8が使えるファイルピッカー機能

現在は初版に予定していた機能がほぼ入り、これからパフォーマンス調整・バグ潰しなどを行おう、という段階になっています。



何をテストするの?

基本一人作業を続けているため、自分だけだとどうしても気づかない所・甘くなっている所が多いです。
なので、お手隙で、このような画像ビューア、自炊本リーダアプリに興味がおありでしたらちょっと試してみて頂いて、ご意見を伺おう、という趣旨です。

また今回、不具合報告や提案等を投稿して頂ける 「UserVoice」 のサイトを用意しました。掲示板のような形式で、提案の投稿や、他の提案への投票が可能になっています。
何かありましたら、こちらに投稿して頂けると有難いです。

DDLG UserVoice
https://ddlg.uservoice.com/

https://ddlg.uservoice.com/

必要なもの


  • Windows 8.1 / 8.1 RT
  • Microsoft アカウント … 後述の開発者アカウント作成に必要です。
  • 開発者アカウント … 今回はストアを通さない配布のため、この「開発者アカウント」を作成して頂く必要があります。料金は掛かりません。アカウントを持っていない場合、インストール中にアカウント作成の案内が出ますのでそれに従ってください。
  • 何か気の付いた事があったらUserVoiceに投稿してくださる施しの心(任意です)

ダウンロード

http://1drv.ms/1yyRw2u

インストール方法

  1. パッケージのZipファイルをダウンロードします。
  2. Zipファイルをローカルフォルダにすべて展開します(Zipのままではダメです)。
  3. ファイル Add-AppDevPackage.ps1 を右クリックし、「PowerShell で実行」をクリックします。
  4. PowerShell が開きますので、以降画面の指示に従います。
Zipを全部展開して、
Add-AppDevPackage.ps1 を右クリックして、
「PowerShell で実行」をクリック

PICT8 の使い方

Help等はまだ出来ていません。説明なしで一発使ってみて、わからなかったらわからんとUserVoiceに投げるなりして頂けると助かります。


備考


  • 今回のVersionはアプリ内部で使用期限を12月1日までに設定しています。12月1日を越えると起動できません。
  • PICT8 は Microsoft Application Insights を使用しています。これはアプリケーションの使用状況を個人を特定できない形で収集し、アプリケーションの品質向上・改善のために利用するものです。今回はApplication Insights 標準のデータに加え、フォルダ・PDF・Zipを開く際のItem・Page数情報を収集しています。

---------

PICT8 Preview 3 Beta Test

What is 'PICT8' ?

PICT8 is Picture Viewer + PDF/Zip reader application.
Features:

  • First and fluid experience, Animated GIF support
  • New commander UI for one-handed reading.
  • File Picker Contract support - You can use PICT8 from any other Windows Store Apps as Preview-enabled File Picker.

Release date is not determined yet.

If you have suggestions...

You can post your suggestions to our UserVoice page. Your suggestions would be really appreciated.

DDLG UserVoice
https://ddlg.uservoice.com/

Prerequests


  • Windows 8.1 / 8.1 RT
  • Microsoft Account
  • Developer Account - This is required because this beta version is distributing at outside of Windows Store. But you can create it during installation, without fees.

Download

http://1drv.ms/1yyRw2u

Install procedure


  1. Extract downloaded .zip file to your local folder.
  2. Right-click the file 'Add-AppDevPackage.ps1' then click 'Open by PowerShell'.
  3. Follow the instructions.


Notes


  • This test period will ended at Dec 1, 2014.
  • PICT8 use Microsoft Application Insights service. This service collects usage of apps in a way that can not identify the individual user to improve this application.


2014年11月3日月曜日

MSCC に参戦しています

Microsoft Community Champion 、略称 MSCC に参加しています。

Microsoft Community Champion
https://microsoft-worldwide-community-champion-ja-jp.azurewebsites.net/Home

台湾Microsoft が主催するアプリケーション・サービスのコンテストで、台湾・マレーシア・日本、3つの国と地域で共催されます。
詳しい所は上のURLでわかるとして、一番大事なバックストーリーをTextに起こしますと、

戦いのはじまり

遥か昔に封印された闇の妖魔ネロ族が、復讐の欲望を満たすべく自らその封印を破り、
光の王国エスポワールに侵入した。

民衆の希望であった王国の姫ルミエールが、闇の魔王オスクリダの手により誘拐され、
混乱に乗じた略奪と侵略により荒廃し、闇に陥るエスポワール王国…

王国に光を取り戻すべく、ルミエール姫を救出するために勇者たちが立ち上がり、
強靱な Tech パワーで闇の妖魔ネロ族と、
すべての闇を支配する魔王オスクリダの討伐に向かう。

コンテスト参加者は勇者であり、強靱なTechパワーで魔王オスクリダを倒すのです。

私は「チームDDLG」で独り参戦しています。
闇の妖魔ネロ族そして魔王オスクリダに立ち向かう得物は、今作っている途中の 画像ビュアー+PDF/Zipリーダー「PICT8」です。


このPICT8で!必ずや絶世の美女にして超可愛いくてアニメ声のルミエール姫を救い!お礼に姫様にチューとかして貰って!!エスポワール王国に光を!取り戻そうではないか!!!


参戦している様子(イメージ映像)

2014年10月27日月曜日

PICT8 最近の状況

( PICT8 は 2014年12月にリリースされました。Windows ストア からダウンロードできます。)

お盆に出来るかなといいつつまだ作業中という画像ビュアー+Zip/Pdf リーダー PICT8、最近はこんな感じになっています。



右隅の四角い奴はCommander、片手操作用のコントローラです。サイズ・位置・角度はドラッグやピンチイン・アウトで自由に変えられます。タブレット持って寝っ転がって読む用に作りましたが、マウスでもフローティングツールバー的に使えてそこそこ便利です。

11月頭の開発者の寄合い Devcussion #5 に持っていく予定です。
も少し動けばBetaTestもやってみたいのですが。うーn。





2014年10月1日水曜日

ストアアプリ開発の視点から見る Windows 10 の発表イベント

次期Windowsの名称が「Windows 10」であることが発表されました。
それに伴い、開発者向けのBlogに Windows 10に関するPostがあったのですが…

Universal Windows apps get better with Windows 10
http://blogs.windows.com/buildingapps/2014/09/30/universal-windows-apps-get-better-with-windows-10/

びっくりするほど情報が出ていない。
良く読むと「何も書いて無い」んですねこれ。

StoreがUnifiedになる、とは書いてあるのですが…具体的に何がどうなるのかという情報は全然載っていないです。
今年4月、Universal Windows App が発表になった時に「将来的にはWindowsとPhoneでストアを一緒にする」旨の話がありましたが、その時に言っていた事から一歩も出ていないと言っていいと思います。
Win/Phone以外、Xbox Oneや他のPlatformとの統合についても何も言っていません。

一つだけ「新しい」、今まで言って無いと思えるのは

・企業ユーザー向けに、社内用のStoreを作成できるようになったこと:
今のLOB…Line of business 向けのStoreAppの配布スキーマは正直あまり出来の宜しいものでは無いので、企業内ローカルStoreの形で配布・アップデートができるのは大きな進歩だと思います。企業ユースの内製StoreAppのようなソリューションが組みやすくなります。

その他、何か新しいAPI使えるようになるの?機能は?配布は?等、StoreApp開発から見て知りたい事は今回の発表では一切無しと・・・

つまり、開発者向けへのメッセージを汲み取るならば、

「来年4月の開発者イベント //buildまで待っててね!」

であると。待ちましょう。

あ、後、10月1日からTechnical Preview が配布になりますが、こちらは


  • 搭載してるWindows Storeは8.1のもの
  • みんな大好きWACKが動作しない
  • だからメインの開発マシンに入れちゃダメダヨ(当たり前)

という話も上掲の開発者向けPostに出ているのでご注意下さい。


・・・・・・・

余談
上はBlog Postに基づいた話ですが、
ここからは私の予想&妄想です。怪しげですよ!

新しいAPIセットを開発者イベント…PDCやWinHEC、最近だと//build…で発表してから実際にそれが使える製品が出るまではある程度のバッファとなる日数があります。
発表時点ではまだ製品は完成していませんし、完成までの間にISV…ソフト屋さんはBeta版の製品を使い、新技術を学習して自社製品で使えるかどうかの評価を行い、いけるならば実装する、期間が必要な訳です。

最近のApp開発絡みのイベントで考えると

Win 8.1 build2013 6月  ... Win8.1RTM 10月
Win 8  build2011 2011年4月 ... DP 2011年9月 ...  CP 2012年2月 ... RP 2012年6月 ... RTM 2012年10月

と、Win8のStoreAppの様な丸ごと新技術の場合は1年以上のバッファ
Win8.1 のようなAPIの追加・Updateは半年程度のバッファ

的な感じになります。ISV側のリリーススケジュール的にもこのあたりが妥当なのでしょう。

で、今回のWin 10の場合… build2015 4月 ... Win10RTM は判りませんが…ホリデーシーズン狙いでしょうから、そうするとRTMは10月Limit辺りでしょう。

つまり…今回のWin10だと、スケジュール的にはそーーんなに大改造、超技術を大発表!!!みたいな面白い事は出来ないだろうと想像できます。
Win8.1の時のような漸進的な進化になるのではないかな、と予想しています。
(ぐだぐだ書かなくても、そりゃそうだろよという話ではありますが)


2014年9月28日日曜日

ごみ出しカレンダー を公開しました


ごみ出しカレンダー
Windows 8.1 / Windows Phone 8.1 で動作します

ストアアプリ 「ごみ出しカレンダー」を公開しました。
 Windows 8.1 / Windows Phone 8.1 でお使い頂ける Universal Windows App になっています。無料です。

Windows ストア からダウンロード
Windows Phone ストアからダウンロード

ごみ出しカレンダー で できる事


  • ごみ出し専用のカレンダー アプリです。
  • アプリ上で入力した曜日毎のごみ分別情報を、スタート画面上のタイルに表示します。
  • 同じMicrosoft アカウント を使用しているWindows / Windows Phone 上で同じごみ出しデータを共有します。例えば、Desktop・TabletでWin8.1、スマホはWindows Phone 8.1を使っているハワイ在住のAさんの場合、どれか一つでごみ出しデータを更新すると、数分~数十分で他のSystem でも同じデータが表示されるようになります。

スタート画面上のタイル表示


…今回のアプリ、技術的にやっていることは気絶するほど単純ですし、また機能的にも…OS標準のカレンダーで別にいいんじゃん?と言われると全くその通りです。

(OS標準カレンダーの貴重なスペースを、Weeklyなゴミ出し予定で埋めたくないという所はあり、そこは便利とは思うのですが)

では何で作ったかというと、Windows / Windows Phone で多くのCodeを共有できるUniversal Windows App の作成を頭からお尻まで通して行っておきたい、という学習目的です。
futa8 も、今作っているPICT8 も、Code baseはそこそこ大きいサイズなので…気軽に色々ひょいと試せる感じでは無くなっており、Universal App化のようなChallengeを気軽に試せるものを作っておきたかったというのも大きいです。

...

実際、実アプリとして書いてみることで収穫は多かったです。

正直な所、Universal Appっつっても同じBinary動く訳では無いし…と若干引いて見ている所が僕にはあったのですが、実際やってみると所謂Data Source側では気を付けて書く事でかなりそのままいけるなぁと。

UIはそのままとは行かないのですが、WinRT のUI コンポーネントの互換性はかなり高いので、例えばメイン画面の月別カレンダー作るところ等はサイズを変えている以外、Code BehindもXAMLも全く同じCodeになっています。編集ページもサイズ変更だけでほぼそのままです。

逆に、共用できないXAML部分をなるべくコピペで済ませるために、サイズ部分をなるべくStyleで外に出しておく的な(ダメな?当たり前?)知識も身につきました。

反面、Template Defaultでの各Pageの遷移、Instance化ではWinとWPでは違うところも多く、うお何これ!?という所も多かったです。

手を動かすと経験値上がるな!という当たり前の話を噛み締めているところです。



StoreApp で位置情報を扱う

この項では、
  1. 位置情報を取得する
  2. 位置情報を住所の文字列に変換する
方法について書きます。

1. 位置情報の取得


現在の位置情報を取得


Namespace Windows.Devices.Geolocation にあるGeolocator Class を使います。

 

// Appの初期化の辺りで一発Geolocatorを作成しておき、
this.geolocator = new Geolocator();
...
// 位置情報が必要な時にGetGeopositionAsyncを呼ぶ。
var pos = await this.geolocator.GetGeopositionAsync();

ここで要注意なのは、
  1. 位置情報を取得するアプリは、AppxManifest.xml内で位置情報の使用を宣言する必要があること
  2. 起動後初回の使用では「位置情報の取得」の確認メッセージが出ること
  3. GetGeopositionAsync では緯度経度のみが取得でき、住所データは取得出来ない事(今のところ)
1. については、VSのManifest Designerでチェックを入れるだけです。又、ストア上にはこのアプリが位置情報を使用する旨が表示されます。

2. これはAPIをCallしたところ(上の例だとGetGeopositionAsync)で問答無用に表示されます。
このため、なるべく、Userの操作の結果(ボタン押下のハンドラ等)…「○○をやろうとした結果」として呼ばれるところでAPIをCallすべきと思います。
Userの操作の無い所…初期化中等…でいきなりこれを出すのはあまり上品では無いように思います。そういうアプリたまに見ますが。

3. GetPositionAsync の返り値 として帰るGeoposition Classには以下二つのProperty…
  • CivicAddress
  • Coordinate
があり、前者には住所文字列、後者には緯度経度が入る、事になっています。
が、前者CivicAddressは、Address Provider、緯度経度を住所に変換するプロバイダがインストールされていない場合常に空文字列で返ります。
そして、現在のところAddress Providerは何処からも提供されていないです。

画像の位置情報を取得


JPEG画像にEXIF データとして位置情報が埋め込まれている場合があります。
これは大変に簡単で、画像ファイルのStorageFileからImagePropertiesを取得します。もし緯度経度データが存在すれば、ImageProperties.LatitudeとLongitudeにデータが詰まっています。

※ 画像が「ファイル」である場合…Storage上のFileにはこれでいけるのですが…例えば、一度OpenFileAsyncしてStreamに全部ガーっと呼んだメモリ上のデータや、Httpか何かでがーっとDLしてまだファイルに落として無いデータ、に対して使用することは出来ないです。困った。


2. 位置情報を住所文字列に変換する


上で触れたようにWinRT組み込みのGeolocator Classだけでは不可能で、Bing.Maps APIを使う事になります。
緯度経度をAPI経由でBingに投げると、住所に変換して返してくれるという感じです。

Bing APIの使用には
  • アカウント登録とAPI Keyの作成
  • Bing Maps SDKのインストールと参照の追加
が必要になります。方法はMSのサイトでも見て頂ければいいのですが、無料の場合、
  • キーは3つまで
  • 50,000 Transaction/Day
となっています。間違えていると怖いのでご自分でご確認下さい。

※ Bing Maps API は Architecture毎のNative BinaryとしてBuildされています。このため、このAPIを「使う」Moduleは(.NETで書いたC#であっても)「Any CPU」としてBuildすることが出来なくなります。

Bing Maps API を使用した住所の取得


ここまで行くとソース見たほうが早いべ、という事でソースを貼って終わります。
注意点としては、LocationData は複数返ってくるので、中の属性を見て必要なものだけ拾う、という所です。

※ 以下の例は、アプリ「ごみ出しカレンダー」で使っているCodeです。
ごみ種別の入力画面でアプリバー上の「検索」ボタンを押すと、PCの現在地を使ってごみ収集ページを検索してあげる、という機能です。(自治体ごとに千差万別のごみ出しページをスクレイピングとかやってられないので、そこから先は手動です)

ごみ出しカレンダー
http://apps.microsoft.com/windows/app/c3cdaa23-5b99-4b28-803f-00b90c86a601


 
private async void GetAddressAppBarButton_Click(object sender, RoutedEventArgs e)
        {
             //「PCの位置情報から自治体のごみ出しページを検索してあげる」

            var loader = new Windows.ApplicationModel.Resources.ResourceLoader();

            var pos = await this.geolocator.GetGeopositionAsync();
            
            Bing.Maps.Search.ReverseGeocodeRequestOptions requestOptions =
                new Bing.Maps.Search.ReverseGeocodeRequestOptions(new Location(pos.Coordinate.Point.Position.Latitude, pos.Coordinate.Point.Position.Longitude));

            var searchManager = this.bingMaps.SearchManager;
            var response = await searchManager.ReverseGeocodeAsync(requestOptions);

            string query = "";
            Bing.Maps.Search.GeocodeAddress addr = null;

            if (null != response && 0 < response.LocationData.Count)
            {
                for (int i = 0; i < response.LocationData.Count; i++)
                {
                    /// 住所表示に使うLocationDataを探すCode
                    /// Bing.Mapsでは、Responseに複数のLocationDataが詰まって返ってくることがある。(普通は一個だが、たまに二つ)
                    /// 一つは地図上での住所表示用データ ... GeocodeLocationUsageType 'Display'
                    /// もう一つはナビ用の道路情報。 ... GeocodeLocationUsageType 'Route' または 'Both'.
                    /// 後者については住所の文字列が入っていないので、今回は必要が無いデータとなる。それを弾いて住所表示用だけをPickする。
                    /// (後者は大体Nameに「MajorRoad」とかが入ってる)

                    if (null != response.LocationData[i].GeocodeLocations && 0 < response.LocationData[i].GeocodeLocations.Count)
                    {
                        if (Bing.Maps.Search.GeocodeLocationUsageType.Display == response.LocationData[i].GeocodeLocations[0].UsageType)
                        {
                            /// 'Display'が複数ある場合は… 知らないし 最初の一つだけPickする
                            addr = response.LocationData[i].Address;
                            break;
                        }
                    }
                }

                if( null != addr )
                {
                    /// StrWebQuery ... "ごみ+収集日+"
                    /// AdminDistrict ... "神奈川県" 大体県まで
                    /// AdminDistrict2 ... データ見たこと無いのだけど 郡とか?
                    /// Locality ... "川崎市高津区" 大体市+区まで
                    /// AddressLine ... "foo町bar丁目1-2-3" 最後のアドレス ごみ収集日検索では却って結果出なくなるので使わない
                    
                    query = loader.GetString("StrWebQuery"); 
                    if( 0 < addr.AdminDistrict.Count() ) query += (addr.AdminDistrict + "+");
                    if( 0 < addr.AdminDistrict2.Count() ) query += (addr.AdminDistrict2 + "+");
                    if( 0 < addr.Locality.Count() ) query += (addr.Locality );
                }

                // URL形式にエンコ %1234...みたいなやつ
                query = System.Net.WebUtility.UrlEncode(query);

                // ブラウザ起動
                await Windows.System.Launcher.LaunchUriAsync(new Uri( "http://www.google.com/search?q=" + query));
            }
            else
            {
                // 何もすることが無い
                // Errormsgも出さなくていいかなと
            }
        }
    }