2019年3月31日日曜日

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

MVP Global Summit は、約2000人のMicrosoft MVP が世界中からアメリカのワシントン州、Microsoft 本社に集まるイベントです。昨年に続き参加することができました。

Microsoft MVP、私の受賞カテゴリはWindows Development です。
Windows Development, ここ数年の流れを私の理解としてまとめると…Win10 登場以降、Client技術はWinRT, UWP に集中して新機能追加と改善が行われてきた訳ですが、近年はXAML Island等、これら改善分をWPF, WinForms で使えるようにしていく流れが顕著になっています。

ただそうは言っても…個人的には、今更WPFやWinFormsに色目使われてもあまり乗れない所があります。確かにLOB App、私のお賃金を貰う仕事でもWPFにWinFormsがメインなんですが、そういう環境は大体VistaだWin7だ8だがまだごろごろしているので、UWP Component 使えるよ!と言われても…ぐぬぬ、という。
LOB抜きの世界で言えば、Build 2017で出てきたFluent Design System、Wave1==すけすけ系は大体出来たけども…当時言ってたWave2、Z-Orderを取り入れたDesktopみたいなのは最近話聞かねえな?という。やっぱなーMS先生クライアントにあまり力いれてくれてないよな最近、と。Windows自体Microsoft 365の箱に入れられちゃったしなーーー

…と、そんな問題意識を持ちシアトルまで来た私が目にしたものとは…!!エンジニアとの赤裸々な会話の中身とは‥‥!!!というのはここでは共有できないんですね。無念。Global Summit の内容は全てNDA、非開示であるためです。

なので、ここからは只の旅行記になります。

なおMicrosoft MVP については以前の記事をどうぞ。
MVPになるには必要な事も多いですが、今回のSummitのように得られる物の方が大きいかなと個人的には思ってます。

Microsoft MVP for Windows Development を受賞しました
https://ddlgjp.blogspot.com/2017/06/microsoft-mvp-for-windows-development.html



シアトル=タコマ空港とダウンタウンを結ぶ電車、Link Light Rail
車両は日本の近畿車両製です
なお増備コンペでは独シーメンスに敗れた模様 残念

ホテルからMicrosoft 本社までは毎朝バスで通います
朝7時前、まだ暗いです

会場となるMicrosoft Conference Center に着くのが毎朝7時ごろ。8時半のSession開始まで大分間があるので、毎朝社内のFitness Courseを歩いていました。
減量中で去年のSummitから15kgくらい落としているので、なんか体動かしてみたいんですよね。




こういう標識が等間隔で埋めてある

…社内?


リス
ぱっと見、猫くらいのサイズに見えました
しっぽが長いからかもしれない

…本社内?

右上のQRコードみたいなのは Microsoft Tag
ありましたねそういうの
2009年デビュー、2013年没

ほぼ森でした。

今年は天気良かったです
気温も毎日20度以上 シアトルの3月では何十年ぶりレベルとの事

会場では食事も出ます。
今年はお肉!お肉!牛肉が!!美味しかったですよ!!!!肉!!!!!!
ただ料理を説明する語彙力が無いです。


一日目
ローストビーフの塊的な何か

二日目
牛肉をホロホロに煮込んだ何か

おやつも出ます。
上がスコーン的な何か、下が何かを包んだパイ的な何か
どちらも美味しかったです。

三日目
上がチキン
右が、牛肉をチャーシューみたいにトロトロに煮込んだ何か 劇ウマ

四日目
この日は野菜オンリーでした
外にホットドッグの屋台も来てたけどパス

三日目夜はパーティー

このパーティーで二日目の昼と同じものが出てました
カルネ・アサーダという料理だそうです
美味しかった

ホテルのあるベルビューではシェアバイク、Lime を使ってベストバイ(家電量販店)に買い物に行ったりしました。ドックレスタイプといって、そのあたりに駐輪してある自転車のQRコードをスマホアプリで読んで開錠・乗車開始、目的地で停めてロックしたら終わり。時間で課金されます。
なおワシントン州では自転車はヘルメット必須、罰則もあるのですが…シェアバイクでの着用率は3割に満たないそうです。旅行中もメットしてる人見かけませんでした(自前の自転車で通勤してるような人は100%被ってましたが)。



シェアバイク、Lime
2018年からベルビューでもサービス開始になっています。
電動アシストなんですが妙に重い

シアトルではUBER系の赤い自転車「JUMP」も使えます
これも電動アシスト
Limeと合わせて何処でも良く見かけました

Summit 自体は月~木の4日間ですが、今年は二日延泊してしっかり観光もしてきました。
去年はすぐ帰って勿体無かったのと、また次来られるかも分からないので…見たいもの見ておこうという気持ち。

フリーフローティングタイプのカーシェア、car2goについては別に書きました。

car2go を使ってみた
https://ddlgjp.blogspot.com/2019/03/car2go.html

Museum Of Flight の写真はGoogle Photosにも置いてあります。お好きな方はどうぞ。
https://photos.app.goo.gl/qpNiVAYieSGu5ioc9


Museum Of Flight
しれっとSR-71が置いてあって語彙力を失う

ホテル近くのからあげ刹那
おいしいけどこれで3000円(チップ入れて)
シアトルの物価が高いのか、
我々のおちんぎんが低いのか

朝ご飯、Amazon Goで買った冷凍ブリトー
こう見ると、MSで出してもらってたご飯、
お金払うとすると中々の額なんでしょうね…
四宿と五飯分の恩義は返さないといけない…

car2go で車借りて、
エバレットのボーイング工場見学にも行きました
ドライブ楽しかった

桜もよく見かけました


閉鎖になったAlaskan Way Viaduct
今年中には全て解体してしまうそうです

シアトル美術館も面白かった
見ても見ても終わらんので後で確認したら、
かなり大きい日本のMOMAT、東京国立近代美術館に比べて床面積三倍だった
加減すれや

ワシントン州会議場
ここ数年Buildの会場になってる所
Buildも行ってみたいですけどねぇ おぜぜ的に困難を伴う

Amazon Go
ホテルから歩ける距離だったので普通にコンビニとして使えました
…Car2GoやLimeもそうですけど、こういうAppベースの商売って
Line、待ち行列が無いのが最高ですよね。
旅行者にも優しいし。


2019年3月28日木曜日

car2go を使ってみた

car2go は「フリーフローティング」タイプのカーシェアサービスです。先日、Microsoft MVP Summit 2019でシアトルに行く機会があったので試しに使ってみたという記事です。


今回借りたベンツCLA




フリーフローティングタイプとは


一般的なカーシェア…日本だとTimes カーレンタル、米国だとZipCarのような…では、予め決まった駐車スペースに車が置いてあり、それをWeb等で予約して乗車、終わったらまた元のスペースに戻すというスタイルです。

対してフリーフローティングタイプでは、決まった駐車スペースがありません。街のそこら中に車が置いてあります。アプリで車の駐車場所・車種・残り燃料を確認して予約・乗車開始。目的地に着いたら、そのあたりの停めて良い所に停めて終わりです。料金は乗車時間で清算されます。


car2go app でシアトル中心部を表示した様子
「P」は提携民間駐車場



「停めて良い所」というのは、シアトルの場合「路駐して良い所全部」になります。シアトル市内はシアトル市交通局が路駐、パーキングメーターを管理しているのですが、car2go は市と一括契約しているので利用者は料金・手続きを気にすることなく路駐OKならどこでも停めてよい、という仕組みです。また一部の民間駐車場とも契約しており、そういう駐車場にも停めてよいことになっています。
逆に言うと、バス通りや出入り口、消火栓のような元々路駐禁止の箇所、民間駐車場や施設内の駐車場には乗り捨てできません。

また、乗り捨てして良いエリア「ホームエリア」はシアトル市内に限られています。市外に出る・一時的に駐車するのは自由ですが、乗車を終える場合は市内に戻る必要があります。
例外としてシアトル=タコマ空港(あそこはシータック市です)があり、ここでは近隣の契約駐車場で乗り捨て・ピックアップが可能になっています。


使用申し込み


car2go は米国外の免許保持者でも申し込みOKです(対して、シアトルで同種のフリーフローティングカーシェアを行っているReachNow,  LimePodは米国免許保持者のみになっています)。



日本の場合、

  • 国外運転免許証
  • 無事故無違反証明書(英文)

の二つが必要になります。どちらも地元の警察署で発行できます。我らが埼玉県警の場合、大宮ソニックシティにある「再交付・国外運転免許センター」で国外運転免許証は即日発行可能です。無事故無違反証明書の申し込み書もここにありますが、手続きは郵送で数日かかります。どちらも手数料が掛かります。

この二つが揃うと申し込み可能になります。私が行った手順は、

  1. スマートフォンのアプリで申し込み開始
  2. 住所は滞在地のホテル、請求先は現住所を入力
  3. 免許証の画像をスマホで撮影する手順では、国外運転免許証を(取り敢えず)撮影
ここまで行うと仮登録となるも、最後の免許証撮影で認識できませんでした旨のエラーとなります。
ここのサポートリンクから、car2go サポートに対して国外運転免許証・無事故無違反証明書のファイル(私はスマホで撮影したものをPDF化しました)を添付し、これこれこういう理由で書類あるんで登録よろしくねとメールで送信します。

が。んが…ここからが長かった。私の場合、2019年1月初旬に上のメールを送ったのですが、最終的に承認されたのは2019年2月末でした。この間何度かまだですかーーー!とやりとりしましたが、どうも保険会社の承認プロセスが完全に詰まってしまっているような感じでした。car2go , 使いたい場合はかなーーーーり余裕をもって申し込みする必要がありそうです。


car2go 事務局とのやり取りの記録
正直2月以降はもう無理かなと思ってました




実際の乗車


乗車開始は、
  1. アプリで車を探す。地図上に車種と色、ナンバー、ガソリン残量が表示される。
  2. 乗る車を選んでReserveをタップ。これでこの車を30分間キープできる。
  3. 車の場所まで移動。歩くなりなんなり。
  4. 車を一通り見て大丈夫そうなら、利用プランを選択して「Start」。
  5. 事前に登録したPINをアプリに入力→次に、車のフロントウィンドウのディスプレイに番号が表示されるのでそれもアプリに入力。ここで車のドアロックが外れる。
  6. 乗り込み、グローブボックスからキーを取り出しドライブ開始。ぶっぶー。

「利用プラン」は、1分幾らの従量制+何時間幾らの定額制の組み合わせです。また車にダメージがあった場合、先に写真を撮ってサポートに送信することになっています。


乗車終了は、

  1. 停めて良い所に停める。
  2. キーを抜き、グローブボックスに戻し、ドアを閉じる。

これで終わりです。フロントウィンドウのディスプレイにその旨表示され、またアプリにも通知が来ます。なお、終了にあたってガソリン給油の必要はありません。また給油した場合料金は払い戻しされます。ガソリンスタンドで給油した後、レシートをグローブボックスに入れておくと後日清算されます。


印象・感想など


借りる・返す手間が最小化されている


ここが一番気に入った所です。レンタカーを借りる・返すのは何処でも手間なもので、列に並んで手続きを待ち、毎度契約条件を確認してサインして云々云々と。返すにもガソリン満タン云々。そういう手間を全部すっとばしてすぐ乗れる。素晴らしい。無人で済むので言葉の心配も少ないです。
また、シアトルではレンタカーの店舗が空港に集中しておりシアトル市内には実は少ないので、そういう意味でも便利です。


車の割にはお安い


2019年3月現在、シアトルエリアでcar2go が提供している車はメルセデス・ベンツの二車種、

  • CLA - 4ドアセダン、4人乗り
  • GLA - 5ドアハッチバック、5人乗り


シアトルエリアはこの2車種
その他・欧州ではSmart For Two/Fourも使われているようです



です。Cセグのプレミアム枠といった所でしょうか。後方レーダーや衝突防止、バックカメラなど安全装備全部乗せです。同クラスの車を普通のレンタカーで借りる場合、安めのAlamoやSixtに比べてもちょっと安い感じです。保険の付け方などで変わっては来ますが。また、元々使い方が違うので比較しづらい所もあります(例えばシアトルからバンクーバーまで移動して乗り捨て、等はcar2goでは出来ない)。
なおcar2go の場合、2019年3月現在では初期登録に数ドル掛かるのみで月額料金等は特に無いため、旅行者のちょっとしたお試しにも使いやすいです。


シアトル中心部で路駐場所探すのは大変


金曜午後にシアトル市内、ベルタウン辺りに帰って来たのですが、まぁ走っても走っても路駐場所の空きが無い。延々探しても見つからず、結局は上でも触れた契約駐車場に停めました。契約駐車場はアプリ上に表示されるので、予め何個か当たりつけておいたほうが良さそうです。また、ダウンタウン等中心部でちょっと乗って降りるくらいなら素直にUBERかLyft使った方がいいですね。


申し込みに時間がかかり過ぎ


上にも述べましたが、一ヶ月以上かかるのは流石に困りますね。他の件でサポートに問い合わせても大丈夫なんだろうかと不安になります。


ホームエリアが狭い


ホームエリア==シアトル市内のみなので、車で動ける範囲に比べると小さめです。近隣のタコマ、ベルビュー、レドモンド、エバレットあたりまで乗り捨てできるとかなり便利なのにと思います。なお、ベルビューが入っていないので…空港でピックアップし、MVP Summit 指定のベルビューのホテルの近所で乗り捨て、という使い方は出来ないです。無念。


でも車は楽しい


そうは言っても、移動の自由が得られる車は楽しいです。個人的にはバスも電車も交通機関は大体好きですが、好きに移動できる車はやはり別だよなと思ってます。
元々、Test Drive Unlimited や THE CREWなどの車ゲームを通してアメリカでのドライブに憧れがあったので、今回運転できてとても楽しかったです。


今回はベルタウンからエバレットのボーイング見学施設までの往復でした
帰り、I-5を南下していってダウンタウン シアトルの高層ビル群が近づいていく様は
うひょーーーー!!!って感じでしたね…伝わるかな…



CLAは当然左ハンドルですが、
コラムシフトでもあるんですよね…
車線変更でうっかりウィンカーのつもりでNに入れたりシフトダウンしたり
中々にエキサイティン!!でした。



2019年3月16日土曜日

How to know the current processor architecture from UWP app

Unfortunately, WinRT does not have such of API. We, in 2019,  need to use pinvoke.

--start--
--end--

You may noticed that this unfamiliar name "api-ms-win-core-sysinfo-l1-2-3.dll". This is a sort of "OneCore Umbrella library".

OneCore.lib umbrella library
https://docs.microsoft.com/ja-jp/windows/desktop/apiindex/umbrella-lib-onecore-alpha

I could not tell you how this works, but works. :) It's too difficult for me. For detail, this site may helps you.

Runtime DLL name resolution: ApiSetSchema - Quarkslab's blog
https://blog.quarkslab.com/runtime-dll-name-resolution-apisetschema-part-i.html
https://blog.quarkslab.com/runtime-dll-name-resolution-apisetschema-part-ii.html

The API Set Schema - Geoff Chappell
http://www.geoffchappell.com/studies/windows/win32/apisetschema/index.htm


Note - UWP Community toolkit have the System Helper API. By using this, you can get the propertry "SystemInformation.OperatingSystemArchitecture". The document tell that  this property is "Gets used processor architecture" but actually not. It just return the "target" architecture of the UWP app package.

SystemInformation - UWP Community Toolkit
https://docs.microsoft.com/ja-jp/windows/communitytoolkit/helpers/systeminformation

UWP Multi Instance support - Part 2

I have a simple sample program 'DDLG.MultiInstanceTrial' on Microsoft Store and GitHub. Let me explain the hint & tips of UWP multi instance by using this sample.



DDLG.MultiInstanceTrial - Microsoft Store
https://www.microsoft.com/en-us/p/ddlgmultiinstancetrial/9nrdjtp6bdnx

Source
https://github.com/pnp0a03/MultiInstanceTrial

This post is part 2 of the series - UWP Multi Instance Support.
UWP App の Multi Instance サポート その1(in japanese)
https://ddlgjp.blogspot.com/2018/05/uwp-app-multi-instance-1.html


Enabling


To enable the multi instance, just update your Package.appxmanifest. 1) Update the namespace at "Package" element,  and 2) Add attribute "SupportsMultipleInstances" to "Application" element.
Oh, at first, you need to use the Win10 1803 or later (and SDK).

- start - Package.appxmanifest
- end -


Behavior of Protocol Activation


If you register the app as protocol handler and the app is enabled as multi instance, the behavior is differ from the single instance. When the protocol activation happen, always new instance created. On single instance, same instance's OnActivate is called again.


Resources


It seems that each instances are running on same AppContainer. This means, each instances share the one LocalSettings/LocalFolder/Etc.
You can use my sample app to see the behavior. On the right side, you can show the image file. This file name is shared by LocalSettings, then each instances can use the same value.

Event?


In this trial, I'm using the most easiest way to share the event - ApplicationData.Current.DataChanged.

ApplicationData.DataChanged
https://docs.microsoft.com/en-us/uwp/api/windows.storage.applicationdata.datachanged

When you create or modify the applicationdata, the event signaled. You can also signal it manually.

Note - This event will be signaled with background thread. It's need to use dispatcher to use it with UI thread. You can see the sample on the source above.

Memory Mapped File


As of same app container, you can share the data by using memory mapped file. In my sample, the center pane use the one.

WinMR Environment - Desktop and MR


On WinMR enabled system, you can use both the windows desktop and WinMR 3D environment.
You can run your app on both. And, it seems that both share the same app container. By using this app, I could confirm that.


2019年3月4日月曜日

Building UWP Apps as ARM64 with Visual Studio 2017

Yes, we have toolings that support ARM64 UWP Apps but there are several caviets and pitfalls. I've attempt to describe my experiences to support ARM64 on my UWP app with this short post. I wish this helps you.


Updating your tools


As of Mar 2019,
  • Visual Studio 2017 15.9.7 or later
  • Windows SDK 17763 or later

Modifying your .csproj to add ARM64 build configuration


This step is described at blogs.windows.com.


But.. in my cases, it didn't work. I have to modify my .csproj manually. However it's easy.
  1. Make the ARM64 debug/release config by copy and paste the ARM config. then,
  2. Make ARM64 build config by VS IDE (as described on the blog post).
  3. Adding win10-arm64 and win10-arm64-aot to runtimeidentifier. It seems that not necessary
I've just paste the before/after of my .csproj on gist. To compare it, please download both and use your favorite diff tools :)

WWC csproj 17763 vs 17134
https://gist.github.com/pnp0a03/bac76f72bc2526e674860c9e512605ba


Updating Microsoft.NETCore.UniversalWindowsPlatform


In fact, 6.2.x or above support the ARM64. 6.1.x is NOT. You need to use it. But.. currently (as of the end of jan 2019), 6.2.2 have issues -  build may success locally, but you will see the 1201 error when you submit the appx package to Microsoft Store. You need to pick the 6.2.3 or above.

https://github.com/Microsoft/dotnet/issues/924

To use the 6.2.3, just edit your .csproj manually.

(Added 14 March 2019 - 6.2.8 released. I could confirm that it works and ok for store upload.)


Updating Microsoft.Advertising.XAML to 10.1811.22001


If you use the Microsoft Advertisement SDK, you need to update to 10.1811.x.
There are two type of deployments - one is VSIX , another one is NuGet package.

My recommendation is, if you're currently using the VSIX, you should use the VSIX for the next version. Same for the NuGet.

If you want to switch to the NuGet from VSIX(This is my case), you must uninstall the VSIX from Add/Remove the Programs. But this way may be painfull for you, because the uninstallation of VSIX may affect to all other your project that use the Microsoft Advertisement.
Even if you did it as above, you may see the some of build error. My advises are .. 1) Restart the system, 2) Clear the nuget cache, 3) check the reference settings, and 4) Take a cup of coffee.


...Done?


Here is a my app that support Arm64. But... I have not tried yet with actual Arm64 system :) If you have a chance to try it, please let me know the result.

Wheel World Clock
https://www.microsoft.com/en-us/p/wheel-world-clock/9nblggh10zzn