はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

中国の広州にいってきました

「食は広州にあり」

今回は、それを実感しました。

 

広州は気候も温暖だし、街の中心街しかいませんでしたが、そのあたりの治安は非常に良いですし、食べ物も日本人の口にもきっとあう(どこの国に行ってもその国の食べ物をおいしく食べちゃう人なので日本人の口に本当に合うか自信がない)と思います。

こちらの若者(お客様の試用期間中の方)とかもFateが好きだってことでFGOの話で盛り上がれますし、なかなかいい感じですよ。

 

街中には、いろいろなところで黄色やオレンジの自転車に乗っている人をみかけますが、これが噂の乗り捨て可能自転車ってやつですね。

駐輪ステーションだけではなく、そのあたりに止められている自転車でも、専用アプリに自転車についているバーコードをかざせば鍵が開いて課金開始、好きなところに乗りしてて鍵をかければ課金終了。

専用アプリには、利用距離、利用時間、消費カロリー、料金が履歴として表示されます。

乗り捨てた自転車は定期定期に駐輪ステーションに運んでいるようですが、運ばれる前であっても、そこから利用が開始できるのがすごいですね。これも高精度GPSが自転車に内蔵されているからできる芸当。

そして、鍵を外してから掛けるまでが課金範囲なので、乗り捨てたときに盗難されるというリスクを使う側が追わないでいいという安心感が重要だなーって思いました。

ほんと、これいいですね。

 

中国のビジネスのスピード感は、日系企業さんでも早くって、すごく心地いいですね。

ノウハウまねされるというリスクはあるしスピードも速いですが、同時に、マネするよりも「今でしょ!」とマネする間も惜しんでよいものだったら広めちゃえ!的な感覚もすごいあると思います。

日本の国内のスピード感だと「まってられないから仕方がなくマネしてでも手に入れる」ってのもあるんじゃないですかね。だから、スピード感で答えることができれば、いい感じなんじゃないかって思いました。

そして、まじめな人も不真面目な人もいるし、それぞれ優秀、つまり、まじめさ優秀、不真面目さも優秀という感じだし、自分の非を認めないのは共通しているので、だったら、まじめな人と組んで、非を認めさせるのではなくて、そちらが不利益になるよという話し方をするといろいろ捗ります。

 

 

それはそうとして、今回の出張で3日間一緒にお客様訪問などの対応してくれた現地社員さんは、150cmくらいでスレンダーでぱっつん前髪でメガネっ子でアニメ声という属性盛りの新卒現地採用の中国人女性で、ファッションなんかも日本での流行を取り入れているからか、街中とかで中国人の若者から「あ、日本の女の子だ」とかすれ違いざまに言われちゃう感じで、日本語も堪能だし、おいしいもの良く知っているし、非常に楽しかったです。

ただ、FateとかFGOの話しても乗ってこないので、ネコをかぶっているのかオタク趣味はないのか、ないならちょっと残念かな。チョコレート好きだってことは聞き出したので、次回訪問する機会があったら、チョコを差し入れてあげようかと思いました。

技術よりもマネージメントに興味があるらしいけど、能力もあって普段厳しいけど、チョコ食べるとほんわか笑顔で、骨付きチキンとかもきれいにおいしく食べたりするわけで、でもって、ドジっ子属性ついていたら、ほぼ、最強布陣なんじゃないかって密かに思いました。

すごいね!広州ということですね。

.NET Conf FUKUOKAでLTしてきました。

www.slideshare.net

 

直前のDockerハンズオンで、Hyper-V有効化にして再起動せずにDockerいれてから再起動したらブートできなくなるという罠にはまったりもしましたが、なんとかLTしてきました。

帰りは機材故障で予約していた便がキャンセルになりましたが、懇親会申し込みし忘れて寂しく早めに空港に行ったので無事に1つ前の便に座席を確保できて帰ってこれるという「世の中の幸せと不幸せはバランスがとれている」説を支持したいような1日でした。

 

音声認識の仕組みやこれから進んでほしい未来についてお話します。

peatix.com

2017/11/20(月)に品川で音声認識についてお話します。

平日夜ですが、GoogleさんやGateBoxさんもきます(現状、日本展開がまだなAmazon関連はないのですが)。ぜひ、ご参加ください。

Visual Studio + Unity + MixedRealityToolkit 2017年10月15日現在のベストマッチ

HoloLensで動作するMRアプリを作成するときは、Visual StudioとUnityを使いますが、さらにMixedRealityToolkit-Unity (旧HoloToolkit-Unity)も使うとアプリがつくりやすいです。

しかし、現在、いろいろなものが過渡期で安定する環境というのが日々新しくなっています。

 

この前までは、Visual Studio 2015 Update 3 + Unity 5.6とかでしたが、最近やっと、Visual Studio 2017 + Unity 2017 + MixedRealityTooklit-Unity(以下、MRTK)の

組み合わせでもうまく動いてくれるようになりました。

本日時点での動作確認できた最新の組み合わせは以下の通り。

  • Visual Studio 2017 15.3.5
  • Unity 2017.1.2f1
  • MRTK-Unity for Unity 2017.1.2f1

 

ご参考まで。

HoloLensとPCのWindows 10のバージョン

2017/10/13現在のHoloLensとPCのWindows 10のバージョンのメモとなります。

HoloLens

Windows 10 version 1607 build 10.0.14393 (Windows 10 Anniversary Edition)

PC

Windows 10 version 1709 build 10.0.16299 (Insider Preview : Fall Creators Update)

Windows 10 version 1703 build 10.0.15063 (Windows 10 Creators Update)

Windows 10 version 1607 build 10.0.14393 (Windows 10 Anniversary Edition)

Windows 10 SDK

Windows 10 SDK 10240

Windows 10 SDK 10586 (November Update)

Windows 10 SDK 14393 (Anniversary Edition)

Windows 10 SDK 15063 (Creators Update)

System.Net.WebSocketsはWindows 7では動かない

時々忘れがちになるのでまとめておきますね。

 

System.Net.WebSocketsはWindows 7では動かない

System.Net.WebSocketsを使ってWebSocketクライアントを作成したとき、Windows 8/8.1やWindows 10では問題なく稼働しますがWindows 7では実行時エラーで異常終了します。

これは

https://msdn.microsoft.com/ja-jp/library/system.net.websockets.websocket.aspx

-------引用開始

一部のクラスで、 System.Net.WebSockets 名前空間は、Windows 7Windows Vista SP2、および Windows Server 2008 でサポートされます。 ただし、クライアントとサーバー Websocket の唯一のパブリックの実装では、Windows 8 および Windows Server 2012となります。

-------引用終了

と注意書きがあるように、定義はあるけれどWindows 8以降じゃないと実装が伴っていないところがあるからです。

なぜ、こんなことがあるかといえば、Windowsカーネルモードドライバであるhttp.sysを直接利用することでHTTP周りのオーバーヘッドを少なくしているのですが、Windows 7のhttp.sysがWebSocketに対応していないからです。

Windwos 7のメインストリームサポートは終了しています

https://www.microsoft.com/ja-jp/atlife/article/windows10-portal/eos.aspx

みんな大好きWindows 7は2009年10月22日にライフサイクルがスタートして2015年1月13日にメインストリームサポートが終了しています。延長サポートの終了こそ2020年1月14日ということでまだ先ですが、延長サポート期間である現在はセキュリティ更新はおこなわれますが、仕様変更や新機能のリクエストはサポート対象外となり、これからWindows 7のHTTP.sysにWebSocket実装が追加されることはほぼないと考えてよいでしょう。

ではどうすればいいのか

一つの解決策としては、HTTP.sysを使わないWebSocket実装のコードを書く、もしくは、HTTP.sysを使っていないライブラリをNuGetで探してくるというものがあります。

https://github.com/kerryjiang/WebSocket4Net

https://github.com/sta/websocket-sharp

NuGetでライブラリを探すときは、企業ユースを考えるならばSystem.Net.WebSocketsならば対応している認証PROXYがサポートされているかなどのチェックを十分に行う必要があるでしょう。なお、残念ながら上記2つについてもまだきっちり調べ終わっていません。

 

しかし、System.Net.WebSocketsであればHTTP.sysを使って「オーバーヘッドが少ない」=「性能がよいことが期待される」なのにWindwos 7をサポートすることでその利点を得られないという問題が生じてしまいます。

対象となる機能がWindows 7でも使えないといけないのか、もしくは、対象となる利用者がWindows 7をどれくらい使っているのかを見極めて判断するといいでしょう。

企業でもWindows 7からWindows 8.1Windows 10への置き換え(少なくとも新規導入は8.1か10がデフォルト)が始まっている時期なので悩ましいところですね。

 

Windows 8以降かどうかをチェックする

Windows 7のときにはWebSocketを使った機能をdisableしたいときなどは、OSのバージョンチェックが必要になってきます。

対象はWPFとかWindowsフォームのときで、UWPやXamarin.Android、Xamarin.iOSのときは対象環境で動かないということはないのでチェックは不要です。

ですので実装時は

#if WPF

#endif

のようにifディレクティブを定義してその中でOSバージョンのメジャーバージョンとマイナーバージョンを取得してチェックします。

var searcher = new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
var os = searcher.Get().Cast().FirstOrDefault();
var major = 6;
var minor = 1;
if ((os != null) && (os["OsType"] != null) && (os["Version"] != null))
{
    if (os["OsType"].ToString() == "18")
    {
        major = new System.Version(os["Version"].ToString()).Major;
        minor = new System.Version(os["Version"].ToString()).Minor;
    }
}

Windows 10以上はmajor >= 10でよいのですが、Windows 8.xは、major == 6 && minor >= 2で判断しますので、その点だけ注意しましょう。