はつねの日記

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

iOSアプリの開発環境の2台目を設定する

Xamarin.Formsを使ってiOSアプリを作っています。
Windows上でVisual Studio 16.9を使って作成して、Visual Studio for Macが入ったMacMiniとペアリングしてビルドするような開発環境となっています。
docs.microsoft.com

今月、ちょっとした事情(主に在宅勤務時に自宅で実機デバッグができるように)2台目の開発用MacMiniを入手しました。
もちろんM1 MacMiniです。

さて、ここで悩んだのが1台目と同じビルド結果となるように2台目に設定するのかということです。
1台目の開発環境を作る方法は、いろいろなblogに書かれているのですが、その作った環境と同じものを2台目として作る方法がよくわからない。。。
下手にやって1台目の環境でアプリがビルドできなくなったらストア公開しているものが更新できなくなったら本末転倒ですからね、どうしても慎重になってします。

悩んで「なんもわからーん」とホロラボ社内に聞いてみたら、即回答もらえました。
事前に1台目のApple開発者アカウントを2台目にも設定してあれば、残る手順は以下の通り。

  1. 1台目のキーチェーンでDistribution証明書とDeveloper証明書からそれぞれ「書き出す」でp12ファイルを作成
  2. 2台目にp12ファイルをコピーしてダブルクリックでキーチェーンに登録

なんとこれだけで良かったみたい。
簡単でした。

nupakファイルからインストールする

nugetとは

docs.microsoft.com
nugetは、Microsoftがサポートする.NET/.NET Coreのコード共有手段です。ライブラリなどの依存性なども記述できるので、ある機能のライブラリを使いたいときにnugetから取得することで必要な関連ライブラリなども入手することができます。

nupakファイルについて

nugetには、nupakファイルが登録されています。nupakファイルの構造は、zipファイルになっていますので、nupakファイルの拡張子をzipに変更することで内容をみることができます。
libフォルダには目的のライブラリのバイナリファイルが格納されていますが、その他、様々な情報が格納されています。

nugetとからライブラリを適用する

通常、nugetでライブラリを適用する場合、パッケージソース=nuget.orgを指定して適用したいライブラリを参照から探して適用します。
f:id:hatsune_a:20210326090843p:plain
[プレリリースを含める]にチェックすればプレビュー版なども適用できるので便利です。
ライブラリ開発側もアップデートの配布やプレビュー配布なども自分で行わなう手間が省けてよいですね。

nuget.org以外からのライブラリ適用について

しかし、プライベートに配布したい場合はどうしたらいいのでしょうか。
そのためには、nugetに登録するnupakファイルを作成したら、そのファイル自体をプライベート適用してもらいたい人に配布する(例えば、githubのprivateリポジトリや、Teamsのプライベートチャネルなどを使ってもいいでしょう)方法となります。

では、nupakファイルをもらった側はどうしたらVisual Stduioのプロジェクトに組み込むことができるでしょうか。
当然、Visual Studioのプロジェクトでnugetパッケージの管理を開いてもローカルにあるnupakファイルは参照対象にはなりません。
ローカルにあるnupakファイルを参照するためには、Visual Studioでnugetの参照先としてローカルフォルダを追加する必要があります。

パッケージソースを追加

Visual Studioで[ツール]-[NuGetパッケージマネージャー]-[パッケージマネージャー]メニューを選択します。
f:id:hatsune_a:20210326092558p:plain

左上の[+]ボタンをクリックして、追加されたパッケージソースの参照先としてnupakファイルを格納したフォルダを指定します。
f:id:hatsune_a:20210326092746p:plain

あとは、該当のプロジェクトのnugetパッケージ管理で、パッケージソースを「すべて」にしてあげると、参照の中にローカルに保存したnupakファイルも含まれるようになります。
f:id:hatsune_a:20210326093220p:plain

nupakファイルからインストールする

nugetとは

docs.microsoft.com
nugetは、Microsoftがサポートする.NET/.NET Coreのコード共有手段です。ライブラリなどの依存性なども記述できるので、ある機能のライブラリを使いたいときにnugetから取得することで必要な関連ライブラリなども入手することができます。

nupakファイルについて

nugetには、nupakファイルが登録されています。nupakファイルの構造は、zipファイルになっていますので、nupakファイルの拡張子をzipに変更することで内容をみることができます。
libフォルダには目的のライブラリのバイナリファイルが格納されていますが、その他、様々な情報が格納されています。

nugetとからライブラリを適用する

通常、nugetでライブラリを適用する場合、パッケージソース=nuget.orgを指定して適用したいライブラリを参照から探して適用します。
f:id:hatsune_a:20210326090843p:plain
[プレリリースを含める]にチェックすればプレビュー版なども適用できるので便利です。
ライブラリ開発側もアップデートの配布やプレビュー配布なども自分で行わなう手間が省けてよいですね。

nuget.org以外からのライブラリ適用について

しかし、プライベートに配布したい場合はどうしたらいいのでしょうか。
そのためには、nugetに登録するnupakファイルを作成したら、そのファイル自体をプライベート適用してもらいたい人に配布する(例えば、githubのprivateリポジトリや、Teamsのプライベートチャネルなどを使ってもいいでしょう)方法となります。

では、nupakファイルをもらった側はどうしたらVisual Stduioのプロジェクトに組み込むことができるでしょうか。
当然、Visual Studioのプロジェクトでnugetパッケージの管理を開いてもローカルにあるnupakファイルは参照対象にはなりません。
ローカルにあるnupakファイルを参照するためには、Visual Studioでnugetの参照先としてローカルフォルダを追加する必要があります。

パッケージソースを追加

Visual Studioで[ツール]-[NuGetパッケージマネージャー]-[パッケージマネージャー]メニューを選択します。
f:id:hatsune_a:20210326092558p:plain

左上の[+]ボタンをクリックして、追加されたパッケージソースの参照先としてnupakファイルを格納したフォルダを指定します。
f:id:hatsune_a:20210326092746p:plain

あとは、該当のプロジェクトのnugetパッケージ管理で、パッケージソースを「すべて」にしてあげると、参照の中にローカルに保存したnupakファイルも含まれるようになります。
f:id:hatsune_a:20210326093220p:plain

同じソースコードを.NET Core 3.1と.NET 5でビルドした結果

[EN]

Have you guys started using .NET 5, which was GA last November?
docs.microsoft.com
I am preparing to migrate my WPF application to .

.NET Core 3.1, I found that the size of the exe was reduced even though I didn't modify the source code at all.

.NET Core 3.1 (171KB) -> .NET 5 (140KB)

.NET 5 (140KB) It became about 20% slimmer.

[JP]

昨年11月にGA(正式リリース)された.NET 5つかっていますか?
docs.microsoft.com
私は.NET FrameworkWPFアプリを.NET 5 WPFへ移行する準備をゆるゆると進めています。

以前、.NET Core 3.1でつくった小さなツールを.NET 5でビルドしてみたら、ソースコードは一切手を入れてないのに作成されたexeサイズが減っていたので報告します。

.NET Core 3.1 (171KB) → .NET 5 (140KB)

20%くらいスリムになりました。

Azure Cognitive Services - Speech Servicesの対応言語が増えました。

ちょっと油断していたたら、音声認識対応言語が9言語ぐらい増えてた。

英語(ガーナ)
英語(ケニア
英語(タンザニア
フィリピン語
フランス語(スイス)
ドイツ語(オーストリア
インドネシア語
ベトナム語
マレーシア語

Microsoft Group TranscribeがiOSアプリとして登場

www.microsoft.com
Microsoft Translatorアプリでも実現でしていましたが、よりリアルタイム性が高い感じで翻訳ができるMicrosoft Group Transcribeアプリが登場してきました。まずはiOSアプリから。
バイスのマイクを使ってその場で音声を取得するので「スマホは発話者のそばで!」みたいな使い方Tipsが書かれていますね。
回線経由の音声じゃない分、音声認識率はよさそうですね。

どうやって会議室をつくるの?

同じ部屋の中にいる人通しではアプリを立ち上げるとbluetoothでみつけてワンタップで参加できます。
あとは5桁のコード、もしくは、QRコードでも同じ会議室にさんかできるので、遠く離れた人同士は5桁のコードで参加ですね。

どこが便利なの?

5桁のコードが判ってしまうと世界中の誰でも参加できるし、近くにいる人とはbluetoothでサクッと参加できますね。
とにかく不特定多数の人との会話の文字起こしには便利ですね。
一方、企業内の会話とかに外に漏れたくない場合なんかはちょっとダメそうですね。適材適所というところでしょうか。

動作ってどんな感じ?

日本語端末で話をすると、自分の発話の日本語のみが表示されます

英語端末に届くと日本語がでて、その下に英語で翻訳されます。

英語端末で英語を話すと、自分の発話の英語のみが表示されます。

日本語端末に届くと英語が出て、その下に日本語で翻訳されます。

同時に話すとどうなるの?

同時に話すと誰か1人の端末の音声認識だけがONになるようです。
つまり複数人が同時にどんどん喋ったとしても、少しでも早く話し始めた人以外は認識がONにならないようです。
でも、ちょっとでも息継ぎで間を開けると認識していた端末以外の音声をその瞬間だけ取得するような動きです。
「ちょっとまって」とか入れずらいので、話す側が少し工夫したりするといいんじゃないでしょうか。

会議が終わった後のデータは?

会議中の発言(つまり表示されていた状態)は、いつでも履歴から参照できます。
そこから共有もできますね。
端末ごとに履歴の内容が違う(言語ごとに、他国語から自国語への翻訳表示部分が違う)ので端末に保存されているのかな。

使ってみてどうだった?

話し始めて、最初の文字がでてくるまで若干待たされる感じはしますが、そこからは比較的スムーズです。
類似の無料アプリがいろいろありましたが、そのあたりを使っている場合は、これで充分かな。

協力しよう

発話した内容は「会議の録音は、複数の話者の会話を理解して、会議中に同じ言語を話す全員のMicrosoft オンライン音声認識技術の品質向上に役立つ可能性があります。」
ということで会議の録音を投稿する機能があります。
自国語の音声認識率をあげたいときは、社外秘の会話ではないのであれば、投稿するのもいいかもしれないですね。

Microsoft Ignite 2021に合わせてUpdateされた私が注目するAzrue関連について

Ignite 2021が始まりましたね。
開発者していると分かるのですが自社イベントに合わせて自プロダクトの新機能の提供を開始するとかはよくある話です。
ギリギリスケジュールでとりあえず形だけってケースも多いと思うけれど、Microsoftさんの場合は、Private Preview→Public Preview→GAみたいなマイルストーンで確実に提供する感じなのでイベント合わせのリリースもすごくきっちりしていますね。
今回もたくさんのUpdateがありましたが、その中から注目している分野に絞ってご紹介します。

Azure Communication Services

.NETラボ 勉強会 2020年11月 - connpass
.NETラボ 勉強会 2020年10月 - connpass
.NETラボでも何回か登壇させてもらったネタであるACSことAzure Communication ServicesのUpdateをご紹介します。
azure.microsoft.com
ACSの裏側はTeamsと同じアークテクチャーであることは公言されていましたし、ACSでビデオ会議を作るとそのURLはTeamsのそれと非常に似た構造ですし、繋がるようになるよとは書かれていたのですが、いよいよPublic Previewとなって誰でも試せるようになりました。

何がうれしいの?

何がうれしいかといえば、自分のアプリからTeamsにつながることですね(そのままですね)。
Windowsだったら「自分のアプリとTeamsアプリ」みたいな感じで2つアプリを立ち上げればいいのであまり嬉しさは感じられないかもですね。
でも、スマホだったらどうでしょうか。2つアプリ同時起動して使うのはなかなか面倒ですし、自アプリとTeamsの両方で音声を使おうとするとTeams側に全部マイクを持ってかれちゃうなんてこともあります。
そこで登場するのが、ACSを組み入れて自分のアプリの中でTeams会議への参加部分も完結しちゃうアプローチですね。

ACSってどんな技術なの?
ACSからTeams会議にはどうつなぐの?

docs.microsoft.com
ACSのビデオ会議に接続するAPIで接続先をTeams会議に合わせて次のように指定する感じですね。

const locator = {
threadId: [thread id],
organizerId: [organizer id],
tenantId: [tenant id],
messageId: [message id]
}

Teams会議の会議URLの構造は次のようになっているので、そこから抜き出して設定ですね。

http://teams.microsoft.com/l/meetup-join/[thread id]/[message id]?context={"Tid":"[tenant id]","Oid":"[organizer id]"}

Azure Object Anchors

azure.microsoft.com
現実空間とデジタル空間のオブジェクトの位置合わせをAzure上で行うAzure Object AnchorsがPublic Previewになりましたね。
いままでは限られた範囲での公開でイベントで事例などがあっても自分たちで試せませんでしたが、これで誰でも試せます!

Azure Remote Rendering

azure.microsoft.com
3DモデルのレンダリングをAzure側で行って、結果を受信できるAzure Remote RenderingがGAとなりました。
ポリゴン数が多いような場合でもAzureパワーでなんとかなってしまいます。
東日本でも使えるので、より低レイテンシーな使い方ができるようになりましたね。

Microsoft Mesh

techcommunity.microsoft.com
マルチデバイスでリアルとバーチャルを融合するMicrosoft Meshが突然Previewしてきました。
詳細はまだよく調べていませんが、HoloLens 2アプリとAltspaceVRアプリがすでに提供されていて、その間でいろいろ共有できるみたいです。

Cognitive Services

Speech ServicesとかTranslatorとかは特にUpdateないみたいです。

それではDay2も眠いけど楽しみですね。
Day1も日本の昼間にリピートセッションあるので、ぜひ!