はつねの日記

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

Xamarin.Androidで、Could not determine the installation pathというエラーがでたときの対処方法

XamarinでAndroidアプリを実機デプロイして試していたら、何かのタイミング(多分、実機で直接アプリをアンインストール)でビルドは成功するけれど

Could not determine the installation path com.companyname.programname

のようなエラーがでて実機デプロイができなくなりました。

AndroidManifest.xmlのなかのTYPOみたいな情報もあったのですが、今回のケースでは下記が原因でした。

個人用からはアプリをアンインストールしたけれど、仕事用の方からアンインストールしていなかった 

仕事用からもアンインストールすることで無事に実機デプロイが可能になりました。

 

 

MessagePack for C#始めました

以前から使おう使おうと思って(実際は使ってみようとして上手くいかなくてを何回か繰り返して、最近の状況で在宅でがっつり集中できるようになったので)いたneueccさんの素敵ライブラリMessagePack-CSharpを既存アプリに組み込むことができました。

github.com

いくつか、DataContractJsonSerializerから書き換えるうえで迷った点がありましたので、まとめておきたいと思います。

MessagePack-CSharpは、非常に高速なC#用シリアライザーです。例えば構造体⇔Byte配列、構造体⇔Byte配列⇔JSON文字列あたりの変換が多数あるような例えば多端末間メッセージ送受信のデータシリアライズなどに適用するとシステム全体の快適さが増すかもしれません。

GitHubで公開されている測定結果を見ると、まさに桁が違う処理速度です。

https://cloud.githubusercontent.com/assets/46207/23835716/89c8ab08-07af-11e7-9183-9e9415bdc87f.png

 

PublicクラスじゃなくてInternalやPrivateなクラスを使う場合

MessagePack-CSharpでは、デフォルトでは指定する構造体はPublicクラスじゃないと実行時エラーが発生します。ネットで検索してみると「Publicクラスでなければならない」という解説もありましたが、本家のneueccさんの説明ではそのような説明がありませんでした。ということはきっとできる方法が用意されているのだろうと考えてドキュメントをもう一度よんでみるた次のような方法の記載をみつけました。やっぱり原典をみないとですね。

InternalやPrivateなクラスを指定したいときは次のようにします。

gist.github.com

 MessagePackSerializerOptions.Standard.WithResolverの引数にStandardResolverAllowPrivate.Instanceを指定してオプション指定をつくり、それをSerialize<プライベートクラス>メソッドの第二引数に指定してあげれば、Privateクラスでも実行時エラーなくシリアライズできます。

便利ですね。

クラスのプロパティ名をJSON文字列の項目名に使う場合

これは簡単で、クラスに[MessagePack.MessagePackObject(true)]属性をつけてあげればOKです。

JSON文字列上の項目名を、クラスのプロパティ名とは別の名前にしたい場合

JSONに指定する項目名が"message-id"などが必要でプロパティ名に指定が難しいような場合には、Key属性で項目名を指定することができます。

まずはダメな例

gist.github.com

クラスに[MessagePack.MessagePackObject(true)]属性をつけて、変更したいプロパティにだけ[MessagePack.Key("message-id")]属性でJSON項目名を指定してみましたが、これでは変更されませんでした。

OKな例。きちんとすべてにKey属性をつけてクラスの属性ではkeyAsPropertyNameをfalseつまり指定しないようにします。

gist.github.com

これでいままで悩んでいた点が解決できたので、リリース版に反映&テストフェーズに入りたいと思います。

OBS Studio + OBS-WebSocketで字幕表示するときの2020/04/09現在の注意点

映像録画&ライブストリーミング用のオープンソースプロジェクトOBSのOBS Studioにはプラグイン拡張でWeb Socketのインターフェースを追加することができます。

OBS Studio (現時点での最新は、25.0.4)

obsproject.com

OBS-WebSocket (現時点での最新は、2.7)

github.com

OBS-WebSocketのC# .NET Library

github.com

 

OBS Studioが24→25に変わったときに文字を表示する領域(OBS Studioではソースと言います)のIDが変わってしまっているようで、OBS-WebSocketで、SetTextGDIPlusPropertiesやGetTextGDIPlusPropertiesを使うときに正しいソース名を指定しても「not a text gdi plus source」というエラーになってしまい、OBS Studioに字幕が表示できません。

Unable to control of GDI_Text version 2 · Issue #443 · Palakis/obs-websocket · GitHub

すでにこのissuesはソース的には修正が入っております。

具体的には、ソース名でヒットしたソースの属性チェックのところで、従来の「text_gdiplus」というIDに加えて、「text_gdiplus_v2」というIDもエラーにしないように修正されています。

http:// https://github.com/Palakis/obs-websocket/pull/448/commits/846d52ebe58d5f9f819680afa9d8a3e7516ab380

この変更は、「added this to the 4.8 milestone」とのことですので、OBS-WebSocketのVersion 4.8には入ってくるようです。

 

そのため、2020/04/09時点での解決方法は次のようになります。

  • OBS-WebSokcetの最新ソースから version 4.8 相当のバイナリをビルドして使用する
  • OBS Studioを24系にダウングレードする

 

[en]

OBS Studio from OBS, an open source project for video recording and live streaming, has a plug-in extension that adds a Web Socket interface.

OBS Studio (currently the latest is 25.0.4)

https://obsproject.com/ja/

OBS-WebSocket (current version is 2.7)

https://github.com/Palakis/obs-websocket/releases

OBS-WebSocket's C# .NET Library

https://github.com/Palakis/obs-websocket-dotnet.

 

When OBS Studio changed from 24 to 25, the ID of the area to display text (called source in OBS Studio) seems to have changed, and even if I specify the correct source name when using SetTextGDIPlusProperties or GetTextGDIPlusProperties in OBS-WebSocket, I get the error "not a text gdi plus source", and I can't display subtitles in OBS Studio.

https://github.com/Palakis/obs-websocket/issues/443

This issues has already been modified in terms of source.

Specifically, the ID of "text_gdiplus_v2" in addition to the ID of "text_gdiplus" in the attribute check of the source hit by the source name has been modified so that it is not an error.

https://github.com/Palakis/obs-websocket/pull/448/commits/846d52ebe58d5f9f819680afa9d8a3e7516ab380.

This change is "added this to the 4.8 milestone", so it seems to be coming in Version 4.8 of OBS-WebSocket.

 

Therefore, as of 04/09/2020, the solution is as follows.
-Build and use a binary equivalent to version 4.8 from the latest source of OBS-WebSokcet.
-Downgrade the OBS Studio to the 24

リモートワークには雑談チーム配信が効果的

様々な事情から、今月から在宅勤務でリモートワークという人たちも多いと思います。

そんな時にお勧めなのがTeamsのチーム機能を使ってチーム全体で映像配信を行う雑談チーム配信です。

f:id:hatsune_a:20200302152356p:plain

※上記は雑談チーム配信の活躍想像図です。実在の人物とは関係がありません。

 

特に何かミーティングをしていなくても繋がっている感がでますし、いわゆる突発的雑談にシームレスにはいれますし、(なぜか)だらだらと雑談せずにQA終わったら追われますね。

そして効果的なのは「わかりました」「ありがとう」なんていうもしかしたら普段ならスルーしてしまうような重要単語が自然に交わされるのがいいですね。

もしかしたら、私たちジャパニーズ会社員はリモートワークなTeams雑談配信で、海外企業の個室事務スペースとお互いに挨拶を交わすというフレンドリーな文化というのを進められるんじゃないかと思いました。

ピンチはチャンス。みなで次のステップに進んじゃいましょう!

Dell New XPS 13 2-in-1は、リモートワークの最強の相棒!

デルアンバサダープログラムのモニタープログラムで1か月お借りしているNew XPS 13 2-in-1を使い倒してみました。

New XPS 13 2-in-1 プラチナのスペックとは

Processer 第10世代 Core i7-i1065G7
OS Windows 10 Home 64bit
Memory 16GB 3733MHz LPDDR4x
Storage 512GB SSD
GPU Intel Iris Plus
Display 13.4 inch 3840x2400 タッチディスプレイ
Weight 1.32kg
Size 厚さ:7~13mm 幅:267mm 奥行:207mm

一言でいえば「小さくて軽いボディサイズに最新CPUと大容量SSDというパワフル構成」といえる製品です。

画像に含まれている可能性があるもの:画面

会社の机に座ってひたすらコードも書くことも多いですが、お客様先でのプレゼンや、移動時間でのプログラミング(意外と到着時間までのタイムトライアル的な感じになるるので作業が捗ります)などリモートワークで仕事することも多く、「軽くて」「携帯性がよくて」「速くて」「画面解像度が高い」ノートPCというのは、私の仕事の能率に直結したりする重要はファクターだったりします。

結論から言えば、このNew XPS 13 2-in-1は、私のとっての現時点で最強のリモートワーク用デバイスと言いきれちゃいます。

 

それでは、どのあたりが最強なのか、日々のお仕事シーンでどれくらい使い勝手が良いかを考えながら、実際に試してみましょう。

 

Microsoft HoloLens 2向けアプリ開発に使ってみよう

HoloLens 2もUSBケーブルはType-Cなので、Type-Cを2口もつNew XPS 13 2-in-1との接続性は極めて良好です。

画像に含まれている可能性があるもの:画面

上の写真は、HoloLens 2のカメラ映像をNew XPS 13 2-in-1の画面にプレビュー表示しているところです。

そして、HoloLens 2との接続に使っていたHoloLens 2付属のケーブルを電源タップにつなげれば、New XPS 13 2-in-1の充電(メーカー保証はないですが)もできてしまうので、なんとなくお得感があります。

もちろん、Visual StudioやUnityを使ってHoloLens 2アプリを作成するときも、第10世代 Core i7の性能で非常に快適です。

このCPU本当に速いですね。

そして、解像度が高くてきれいな表示のディスプレイは、コードの見通しの良さや開発ツールの各種パネルを出してもプレビュー表示しやすいなどの利点につながってきます。なにより、HoloLens 2のようなキーボードが付いていないデバイス向けアプリを作成するときのタッチディスプレイの快適さといったら!

これ、HoloLens 2だけじゃなくて、スマートデバイス向けアプリ作るときも同様ですね。

Azure Kinect DKアプリ開発に使ってみよう

画像に含まれている可能性があるもの:画面

Azure Kinect DKは、カメラ映像やその映像に映っているものとの距離を測定することができるマイクロソフトのAIセンサーです。

このAzure Kinect DK向けのアプリ開発や、セミナーでの登壇なども行っているのですが、New XPS 13 2-in1を使えば、ケーブル周りが非常にすっきりします。

なぜならば、New XPS 13 2-in-1のUSB Type-CからAzure Kinect DKをつなげば、データ転送だけではなく給電にも使えてしまうので、Azure Kinect DKに別途電源を接続する必要がないのです。これは本当に助かりました。

また、本来はnVidiaGPUが必要なのですが、第10世代 Core i7のCPUパワーであれば、FPSはかなり低いですが、それでもAzure Kinect DKのBody Trackingが動いてしましました。

画像に含まれている可能性があるもの:座ってる(複数の人)、画面、ノートパソコン

リモート会議で使ってみよう

コードだけ書いていて仕事が進むのならば、すごく楽しく楽なんですがどうしても会議とかも必要です。

そんなときにもNew XPS 13 2-in-1は大活躍でした。

New XPS 13 2-in-1は、ディスプレイ部分の角度がいろいろ変えられて「ノートブックモード」「タブレットモード」「スタンドモード」「テントモード」の4つのスタイルにすることができます。

リモート会議で便利だと思ったのは次の「テントモード」です。

写真の説明はありません。

画像に含まれている可能性があるもの:画面、室内

こんな感じでMicrosoft Teamsを使ってリモート会議するときもこんな感じでテレビ電話感覚で会議を行うことができます。

ホワイトボード機能を使って、図を描くときなんかもタッチディスプレイですから、付属のペンを使って紙感覚で精細な絵を描くことも可能でした。

スマートフォンと連携して使ってみよう

このブログ記事の写真は、Androidスマホで撮影した写真を、Dell Mobile Connectを使って瞬時にNew XPS 13 2-in-1に取り込んだものを掲載しています。また、スマホにかかってきた電話をPC側で受けたり、スマホ画面をPCにミラーリングすることができます。

XamarinというC#iOSAndroidアプリが作れるツールを使ってVisual Studioでプログラミングしているのですが、実機デバッグ実行時にこのDell Mobile Connectのミラーリングはとても手軽でいいですね。

最後に

なんといってもそのサイズの小ささと1.3kgという軽さは正義です!

とはいえ、それは奇麗なタッチディスプレイという視認性の良さがあればこそですね。

 

返却時期がきてしましましたが、New XPS 13 2-in-1と別れたくない気持ちです。

このまま、最強のリモートワーク用デバイス生活継続したいです。

Microsoft Ignite The Tour 2019 Osakaに登壇します。

2020/01/23-24に開催されるMicrosoft Ignite The Tour 2019 Osakaに登壇します。

www.microsoft.com

会場は、インテックス大阪

インテックス大阪同人誌即売会じゃなくてちょっと残念ではありますが、下記の2セッション。全力でお話させていただきます。

 

BRK30142 - Azure Kinect DK入門

 

Kinect V4に相当するAzure KinectのDK (Developer Kit) の使い方を、プログラミングコードを具体的に解説することでわかりやすくお話します。

 

BRK10040 - 企業における合理的配慮とICT活用の現況と実例

 

2016 年施行の障がい者差別解消法で合理的配慮の提供が定められ、企業でも設備整備の観点で ICT 化が進んでいます。本セッションではその事例として UD フォントを紹介するとともに、開発元ご協力のもと音声認識による字幕のデモを行います。

Microsoft Ignite The Tourは、Microsoft Igniteのコンテンツや、各地域の独自コンテンツをMicrosoft社員やMicrosoft MVP(Microsoft MVPは非Microsoft社員で構成される各コミュニティや技術記事執筆などで活躍されている人たちです)がお話させて頂くイベントです。

米国のマイクロソフト本社が企画・運営しているイベントですので、会場に設置されている電源タップ1つとってもグローバル(ツアーパッケージの一部として世界を回っている電源タップですよ!)です。

会場スタッフなども含めて、海外イベントの雰囲気を味わえると思います。

でも、ご安心ください。セッションは日本語のものが大半です。私のセッションも日本語進行です!

参加費無料ですので、ぜひ、参加登録およびセッション選択よろしくお願いいたします。