わんくま同盟わんくま同盟
わんくま同盟 -> Blog's
わんくま同盟メンバの最新の記事
Amazon.comで買い物したものを日本に送ってくれたりしますが、まだまだ(特に電池が入っているものなど)すべてがという訳にはいきません。
米国に旅行に行く機会があったとしても、送付先にホテルを指定してうまく受け取れるか、そもそも滞在期間中に届くようにするにはどうしたらいいのかなどの不確定要素が付きまといます。
そんなとき、オースティンに出張に行ったときに街中で見かけたのがAmazon Lockerです。
Amazon.comのサイトを見てみると
というAmazon公式ロッカーのようです。

ためしにMicrosoft MVP Global Summitで宿泊する近くをさがしてみるといくつかあるようです。

郵便番号にホテルの98004という郵便番号を入力して検索すると、

ベルビュースクエアの東南ブロックにいくつかありますね。高速の近くは not public lockerなので住民専用とかでしょうか。
希望するロッカーの場所の[Select]ボタンをクリックすれば送付先リストに、そこのAmazon Lockerが指定できるようになります。
日曜日も受け取れる「Amazon Locker ? Bery!」か「Amazon Locker ? Frannie」が良さそうですね。
ここで注意することは、Amazon.comでの配達は基本的にbusiness dayつまりは平日のみとなっています。
ですので、日曜日に現地着だから日曜日に受け取ろうと思うと金曜日着になるように早め早めに行動するのがいいでしょう。
もしくは、Amazon Primeのお試しに入って、月曜日の朝の9時までに申し込みをしてSame Dayかone business dayで配達してもらうのもいいかもですね。
それでは実際にAmazon Lockerから品物を受け取りましょう。
Amazon.comで購入してAmazon Lockerに荷物がはいると取り出しようのパスコードが書かれたメールが来ます。

宿泊場所からはだいたい10分くらい歩いたところにAmazon Lockerはありました。
空港に戻るときに乗るバスターミナルのちょっと先ですね。

expediaビルの地下駐車場に設置されていまいた。


ロッカーの液晶画面のところでメールに書かれたコードを入力するとロッカーのドアが開きます。

無事、ゲットできました。簡単ですね。

今回購入したのはWear OS by Googleな腕時計です。

技適も通ってますし、日本語化もされているので良い感じです。

申込ページ:わんくま同盟 東京勉強会 #116
平成最後の開催は、えムナウさんの還暦祝いです。おまけで若者VS2019もいろいろ。
内容はこんな感じ
- 10:40 ~ 11:00 開場・受付開始
- 11:00 ~ 11:10 わんくまについて
- 11:10 ~ 12:00 「Visual Studio 2019」 by 中博俊 Lv.1くまー
- 12:00 ~ 13:00 おひるごはん
- 13:00 ~ 13:30 ライトニングトーク
- 13:40 ~ 14:30 「.NET Core 3.0 非同期ストリーム」 by 赤坂玲音さん Lv.2くまー
- 14:40 ~ 15:30 「Microsoft Cognitive Service を楽しもう!」 by ジニアス平井さん Lv.2くまー
- 15:40 ~ 16:30 「C# の歴史」 by えムナウ Lv.2くまー
- 17:00 ~ 懇親会
今回も盛りだくさんでお届けです。
まだまだ絶賛募集中!お申し込みはお早めに!
HoloLens 2きましたね。
すっきりしたデザインに快適さ3倍。視野角2倍。

しかもフリップアップできる!
後頭部にあるのが処理部分ですかね?
指のトレースでピアノ弾いたりできる。
Windows Helloがあるのでかぶるだけでログインできる!
アイトラッキングできるので、目線でブラウザースクロール!
すさまじい未来きた!
しかも!日本も発売先に最初からはいってますよ!
https://blogs.microsoft.com/blog/2019/02/24/microsoft-at-mwc-barcelona-introducing-microsoft-hololens-2/
--
HoloLens 2 will be initially available in the United States, Japan, China, Germany, Canada, United Kingdom, Ireland, France, Australia and New Zealand. Customers can preorder HoloLens 2 starting today at https://www.microsoft.com/en-us/hololens/buy.
--
HoloLens 2 コマーシャル版が$3500。HoloLens 1 コマーシャル版が$5000なのでちょっと安くなりました。
プレオーダーページがまだ日本対応してないですが、日本語ページを用意中だそうです。
ついにAzure Kinectが!
https://azure.microsoft.com/ja-jp/services/kinect-dk/
プレオーダーもはじまってますね!
複数台連携がAzure Kinect側でできるみたいなので連携したときにアプリからどう見えるか知りたい。
「フィリピン大学でスピーチすることに。次はあなただ!」
You&Iさんの「Unity ML Agents」話
今年は東京から。1/19 に わんくま同盟 東京勉強会 #115 が開催されます。
場所はいつものお菜家さん。
- 10:40 ~ 11:00 開場・受付開始
- 11:00 ~ 11:10 わんくまについて
- 11:10 ~ 12:00 「若手、育ててますか? 」 by XENO Lv.1くまー
- 12:00 ~ 13:00 おひるごはん
- 13:00 ~ 13:30 ライトニングトーク
- 13:40 ~ 14:30 「CView にも UIElementを!」 by とっちゃん Lv.3くまー
- 14:40 ~ 15:20 「Azure Sphereをはじめてみよう」 by 木澤朋和さん Lv.1くまー
- 15:30 ~ 16:20 「(仮)ASP.NET Core MVC Web Apps on Microsoft Azure のリアーキテクチャの試行について(BI機能追加、AI 機能追加、 Microservices 化の方針と実装等)」 by 鈴木章太郎さん Lv.3くまー
- 17:00 ~ 懇親会
こんな感じ。
2018年はわんくま東京ではしゃべってないので、久しぶりの登壇です。おいらは相変わらずで、レガシーなネタをしゃべりますよ。
まだまだ、お席に余裕があります。申込はこちらから
懇親会はいつもと変わりませんが新年会です。ということでお待ちしております。
RDPだと、日本語キーボードが知らない子になってしまうので、久しぶりにちょっとお試し。
ちゃんと行けるかなぁ?
ここ最近、UiPathでイロイロ遊んでます。そこでUiPath (ja) Advent Calendar 2018に参加してみました。第二弾!
結論!
セキュリティー担保したいなら、Orchestrator買え。以上。
はじめに
UiPathを軽くみんなでお安く使用しようとすると、Node-Lockedライセンスという共有端末をみんなで使うライセンス形態があります。しかし!、この場合、どのユーザーでログインしても、端末に入っているすべてのロボットが見えてしまいます。つまり申請系と承認系のロボットが起動できてしまうという、監査人大喜びのツッコミどころができてしまいます。
そこで、ユーザーがActive DirectoryなりWindows OSのセキュリティーグループに所属しているかを確認するプログラムを作ってみます。
Active Directoryでは、グループの中にグループを突っ込めたりするので、単にグループのメンバーの一覧取得だと、ガッつり再帰かけないといけないので面倒すぎます。この時IADsGroupクラスのIsMember を使うのがいつものパターンです。
ではやってみる。

↑OrchestratorなしのNode Lockedライセンスだと、すべてのロボットがどのユーザーにログインしても見えて実行が可能
Orchestratorなしで頑張ってみる
まずは、参照の追加。DirectoryEntryは System.DirectoryServicesの参照を追加して…あれ?IADsGroupはCOMだけどどうやって参照するんだ?

XAMLで追加するのはあくまでclr-namespaceなので、きっぱりあきらめる。
ここで登場するのは、「カスタムアクティビティ」
自分でもサクっとアクティビティを作れてしまうのがUiPathのいいところ。だって、まんまWFなんだもの。
■作業
1、プログラムを作成
2、パッケージを作成
3、UiPathに読込
4、使ってみる
1、プログラムを作成
新しい.クラスライブラリ(NET Framework)のプロジェクトを作って次の4つを参照追加
.NET
・System.Activities
・System.ComponentModel.Composition
・System.DirectoryServices
COM
・Active DS Type Library
(コードは最後に入れてます)
2、パッケージを作成
詳しい作成方法は、「カスタムアクティビティ」をごらんあれ

3、UiPathに読込
「パッケージを管理」から設定を押して、作成したパッケージの場所を追加してください。詳しくは(以下略
Activitiesペインに表示されるようになります



4、使ってみる
ローカルコンピューターのAdministratorsグループにいるかを確認
TargetGroup:”Administrators”
TargetService:System.Environment.MachineName


成功!!!
こんなもん作ってメンテナンスするくらいなら、Orchestrator買いましょう^^;
以下、コード
Imports System.Activities
Imports System.ComponentModel
Imports System.DirectoryServices
Imports ActiveDs
Public Class IsGroupMember
Inherits CodeActivity
<Description("Domain | Domain\ComputerName | ComputerName")>
<Category("Input")>
<RequiredArgument>
Public Property TargetService As InArgument(Of String)
<Description("対象のグループ名")>
<Category("Input")>
<RequiredArgument>
Public Property TargetGroupName As InArgument(Of String)
<Description("結果")>
<Category("Output")>
<RequiredArgument>
Public Property Result As OutArgument(Of Boolean)
Protected Overrides Sub Execute(context As CodeActivityContext)
Dim comInfo As DirectoryEntry = New DirectoryEntry("WinNT://" + TargetService.Get(context))
Dim theGroup As DirectoryEntry = comInfo.Children.Find(TargetGroupName.Get(context), "group")
Dim localgroup As IADsGroup = CType(theGroup.NativeObject, IADsGroup)
Dim currentUser As String = "WinNT://" + System.Environment.UserDomainName + "/" + System.Environment.UserName
Result.Set(context, localgroup.IsMember(currentUser))
End Sub
End Class
Python入門というよりもPythonを使ったプログラミング入門っぽい
見出しはゴシック、本文は明朝なのだそうだ。
今度やってみようっと。
しまった最初のYou&Iさんのネタを書き忘れた。
「機械学習環境にハマってみよう」
なんか仕事でいろいろできていいなぁ。
ここ最近、UiPathでイロイロ遊んでます。そこでUiPath (ja) Advent Calendar 2018に参加してみました。
UiPathって、.NET使いなら見た瞬間あれもこれもしたくさせたくなるRPA製品だったりします。
かなり良くできていて、そのままでも十分使えるのですが、少しでも.NETを使ったことのある方ですと、.NETのアセンブリを使って、もっといろんなことがしたくなるはずです。勉強用や個人用だとタダで使えたりしますので皆さんもぜひ遊んでみてください。(詳しくはちゃんとライセンス条項読んだって下さい、責任なんて取れませんw)
本題
さて、皆さんDataTableの扱いどうされていますか?
現在は Entity Framework に押されて微妙な立場ですが、DataSet ではインメモリ DB を目指してたのでは?と思えるほどがっつりイロイロできます。UiPathは、ExcelのシートやCSVをDataTableに取り込めるのでDataTableをゴニョゴニョできるとすごく便利です。
そんな私に DataTable を SQL 文ライクでゴニョゴニョできる「LINQ for DataSet」はすごく便利です。
UiPathでは、データテーブル関連の部品が増えてきていますが、やっぱりLINQ使えると開発効率が全く違います。
ということで、LINQ for DataSetを使って遊んでみましょう
UiPathでLINQ to DataSetを使ってみる
1.準備
LINQ to DataSetで必要な.NETのアセンブリは次の二つです。
- System.Data
- System.Data.DataSetExtensions
早速使ってみましょう・・・ 無いorz
まぁ、アセンブリ参照の追加はいつものことなので、さっそく追加・・・ GUIが無いorz
■LINQ to DataSetを使うための準備
「UiPath.Web.Activities」をパッケージから追加する。そうすると、上記アセンブリが参照されて LINQ to DataSet が使えるようになります。
■開発者、というか保守まで考えてる人向け
欲しいアセンブリだけ入れれば良い。パッケージ追加は邪道!という個別参照追加命!な方へ
● UiPath で参照を手動追加、または参照しているアセンブリを確認する方法(実は一番ブログに残しておきたかったの、これかもしれない^^;)
1)追加したいワークフローの XMAL ファイルを、テキストエディタで開く
2)アセンブリ一覧を確認。必要なアセンブリがなければ追加する。
<TextExpression.ReferencesForImplementation>
<sco:Collection x:TypeArguments="AssemblyReference">
<AssemblyReference>System.Activities</AssemblyReference>
(中略)
<AssemblyReference>System.Data.DataSetExtensions</AssemblyReference>
3)保存
※いうまでもなく、アセンブリが足りないというエラーが出たときは、XAMLファイル開いてアセンブリを確認するよりも前にパッケージの有無やバージョンを確認しましょう
2. LINQ to DataSetの使い方
山ほど出てくるからググレ!(あ、終わった・・・)
せっかくなので、ちゃんとUiPathで動くか確認してみましょう。
以下、サンプルデータはこの投稿の最後にあるものをUTF-8形式のCSVで保存して使ってます
1) いわゆるWHERE句で検索
では、データから私「ちゅき」の行を取得してみましょう。
○代入(Assign)アクティビティ
左辺 (DataRow型):dr
右辺:From row In dt Where row("名前").ToString = "ちゅき"
はい、ビックリマーク来た!

下表では「ちゅき」は一意ですが、実際はいくつ返されるかわかりません。
そのため、受ける変数はコレクションである必要があります。
結果が一つしかないことが分かっている場合は上側、複数ある時は下側のように書きましょう
○代入(Assign)アクティビティ
左辺 (DataRow型):dr
右辺:(From row In dt Where row("名前").ToString = "ちゅき" ).FirstOrdefault()
○代入(Assign)アクティビティ
左辺 (System.DataEnumerableRowCollection<DataRow>型):dr
右辺:From row In dt Where row("名前").ToString = "ちゅき"
2) WHERE句で遊んでみる
当たり前ですが、こういう書き方もできたりします。ただ、いきなりString型にできず、いったんObject型になります。このあたり、褒貶毀誉があるLINQ to DataSetのバカかアホかと怒られる理由だったりします。
○代入(Assign)アクティビティ
左辺 (System.DataEnumerableRowCollection<Object>型):names
右辺:From row In dt Where row("住所").ToString.SubString(0,3) = "福岡県" Select row("名前")
取り出した namesはこんな感じで使えるので、イメージ通りだと思います。

取り出したデータを Count メソッドで数えればデータ個数なんかもすぐにとってこれます。
3)ほかにもいっぱいSQL文っぽいやつ
使える句はこんな感じです。ただ、思いっきりデータを展開して結合したりするので、あんまりえげつないことをするとメモリがパンクするかも・・・。まぁ、オンメモリDBがメモリイーターなのはご存知の通りですね^^;
Aggregate 句
Distinct 句
Equals 句
From 句
Group By 句
Group Join 句
Join 句
Let 句
Order By 句
Select 句
Skip 句
Skip While 句
Take 句
Take While 句
WHERE 句
最後に
LINQ使えるようになると、DataTableに限らず、VBでイロイロ記述できるようになるので是非のぞいてみてください。
UiPath開発者の必須項目になるかも・・・。
表.各地の勉強会でなんかあったらお世話になるところ
-- list.csv---
名前,郵便番号,住所,電話番号
中,100-8929,東京都千代田区霞が関2丁目1番1号,03-3581-4321
とっちゃん,231-0002,横浜市中区海岸通2丁目4番,045-211-1212
ちゅき,540-8540,大阪市中央区大手前三丁目1番11号,06-6943-1234
You & I,460-8502,名古屋市中区三の丸2-1-1,052-953-9110
むたぐち,650-0011,神戸市中央区下山手通5丁目4番1号,078-341-7441
ゆーち,812-8576,福岡県福岡市博多区東公園7-7,092-641-4141
どらん,803-0811,福岡県北九州市小倉北区大門1丁目6?19,093-583-1110
そうまたなんだ。また転職しちゃったんだ。といっても、前回の転職からは数年は経っています。
やっとこさ年収は 800 万になった。BizREACH を使っても恥ずかしくない年収になったはず!!
転職のいいところは、入社した後に定期昇給でしか増えていなかった給与がリセット評価されるところですね。定期昇給でケチられたbゴホッゴホ!まーあれですよ、成長した部分の再評価ですね!
実際わたしの給与は転職の時くらいしか大きく変わってません。私が技術系コミュニティで暴れていた頃 ~ 26 歳くらいまでは、残業なし月給 26 万 (年齢万円) もありませんでした。その時は転職しただけで月給 33 万になりました。大してやることは変わっていないのにです。むしろ転職して下っ端になったので仕事は楽になっていたと思う(笑)。
『転職すると一旦給与が下がるものです』などと言っていた転職エージェントさんもいましたが、あくまでもそれは一般論です。前職でやっていたことを考慮してもらえばそんなことはないのです。考慮してくれない会社は入社後も考慮なんてするはずがないのでお断り。ただし最初は様子見したいという企業さんもいるので、よくある「三ヶ月の試用期間」をお互いのために利用すればいい。「試用期間終了後も条件は変わらない」というのを企業側が安心できる形にすればいいと思うのですよ。
まあえらそーに言っていますが、これは過去の出来事を今ふりかえっての分析です。当時は上記のようなことを狙ってやっていたわけではなくて『あれ?転職って結構おいしいじゃん』くらいにしか認識していませんでした。転職した企業で成長したと思われるタイミングで転職を繰り返すきっかけにはなりましたが。その後転職は 4 回していますが、常に年収が増えています。その結果が現在の月給 60 万ベース (年収 800 万) です。もちろんここまで来ると管理職の経験は必須ですが (ただし私みたいな低学歴 + 中途だと管理職のレールからは外れている企業が大半なのでおのずと零細企業での経験になります)。
なんだこの程度かよって思う人もいるかもですが、私は超低学歴ですから、見えない壁 (学歴) がある日本において「自分の頑張りが反映できた」だけでも幸せなんだと思うようにしています。もっと上を目指せば大台突破できそうですが、これ以上となると同じ業界だと「コンサルタント」か「使用者側」しかないんですよね (BizREACH でのオファーを見る限り)。そんなのやれている自分が想像つかない... ですが、まだまだ頑張ろうと思っています。最近ホント頭まわらないくらいの年齢は感じるし... 今後 40 代になっても現役でエンジニアというのは、私には無理な気がするし(笑)
日本だと転職って使用者も雇用者もマイナスイメージを持っていること多いですけど、前向きな転職はいいと思いますよ。私はおすすめです!
HoloLensアプリでタイル表示にしたときにアプリ名が表示されないということでお悩みの貴兄に。

きちんと設定すればタイル表示の時にもアプリ名は表示できます。
UnityでHoloLensアプリを作成する場合、最終的にはUnityからUWPプロジェクトを生成して、そのUWPプロジェクトをビルドして実行モジュールを作成します。
このUWPプロジェクトのPackage.appxmanifestで、短い名前の表示で「普通サイズのタイル」にチェックをいれておきます。

たったこれだけでこの問題は解決です。
ファイルの内容的にはDefaultTileのShowNameOnTilesのところの記述になります。

2008年の初受賞から11年目10回連続での受賞となります。
途中、審査時期の変更により有効期間が2年近い時期がありましたので、受賞回数と年数に差異がありますが、仕事内容や生活パターンが変わって、アウトプットも「雑誌/書籍執筆」→「blog/サンプルコード公開/アプリ公開」→「Blog/Web記事執筆」→「blog/コミュニティ活動」と変化してきましたが、その都度、周りの方に助けられながら活動してこれた成果だと思います。
特に今回は自分の満足が行く濃度のアウトプットができていなかった時期とかなさっていたため、再受賞は厳しいかもと内心思っておりましたので、再受賞できてよかったと思うと同時に、Microsoft MVPとしての期待値に答えられるように一層精進していこう思いを新たにしております。
今後とも、本ブログを始めとしたさまざまな活動へのご協力をよろしくお願いいたします・
DJIのドローンでSDKといえば、build 2018で発表されたWindows 10 drone SDKに注目しています。
しかしながら、こちらは2018年秋くらいのリリースということで、9月のMicrosoft Igniteあたりにならないと詳細は出てこないかもしれないですね。
Windows 10 drone SDKがくればWindows 10デバイスで動作する制御アプリも組みやすくなるので、例えば、HoloLensであったり、Windows MRであったり、での活用もしやすくなるので、本当に待ち遠しいですね。
とはいえ、秋まで何もしないのももったいないですから既存のSDKで何か作っていきたいと思います。
SDK利用時のシステム構成
.
作成したアプリはSDKを経由してDJIのリモートコントローラーと接続し、その先のドローンをコントロールすることになります。MAVIC AIRの場合は、SDKから直接ドローンにもWi-FiやBluetooth経由で接続可能です。
App Keyの生成
SDKを使うときにApp Keyeの指定が必要ですが、こちらは、DJIのサイトに登録が必要です。
https://developer.dji.com/mobile-sdk/
登録時の個人認証にはクレジットカードまたはスマホへのSMSへの認証コード送信のどちらかが利用可能です(一時期動いていない時期もありましたが、2018/6/22現在は動作しています)。
登録が完了したらUser Centerにて自分のアプリケーションを登録してコードを取得します。
SDKの入手
現在のSDKはいろいろな種類がでていますが、MAVIC AIRで使うのであればMobile SDKに注目です。
https://github.com/dji-sdk/Mobile-SDK-Android
https://github.com/dji-sdk/Mobile-SDK-iOS
SDK自体はどこにあるかといえば、Mobile-SDK-Android-master\Sample Code\gradle\wrapper\gradle-wrapper.jarがSDKになります。
Xamarin.AndroidでSDKを利用する
jarファイルをXamarinから呼び出すためには、バインディングライブラリを作成してjarファイルをまるっとXamarinのクラスライブラリでラッピングしてあげる必要があります。

jarファイルの追加
プロジェクトが生成できたら、Jarsフォルダを右クリックして[追加]-[既存の項目]メニューを選択します。

ダイアログが開いたらgradle-wrapper.jarを指定して、Jarsフォルダにgradle-wrapper.jarを追加します。
jarファイルのプロパティ指定

jarファイルに対するビルドアクションとして「EmbeddedJar」をしてしてdllにjarファイルを埋め込むようにします。
バインディングライブラリのビルドエラー対策
この状態でバインディングライブラリをビルドしてあげてエラーなくビルドできれば、バインディングライブラリのdllが完成します。
しかしながら、ここでエラーが出ないもののほうが少なく、gradle-wrapper.jarも当然のようにビルドエラーが発生します。
ビルドエラーは3件、すべてCS0535「〇〇はインターフェイスメンバー△△△を実装しません」です。

解決方法はいくつかありますが、今回出ているエラーは、「AbstractCommandLineConverter」、「AbstractCommandLineConverterInvoke」、「DownLoad」なので、主要な部分ではなさそうで使わないでもアプリ作れそうですから、とりあえずはなかったことにしてしまって、後日、必要だったらまた考えることにしたいと思います。
そのためには、Metadata.xmlに次の定義を入れておきます。
<remove-node path="/api/package[@name='org.gradle.wrapper']/class[@name='Download']" />
<remove-node path="/api/package[@name='org.gradle.cli']/class[@name='AbstractCommandLineConverter']" />
次回に続きます。

MAVIC AIRの大きさですがA4サイズのノートPCと比較するとこんな感じです。
プロペラのアーム部分が畳めるので格納時はほぼ本体と同じくらいのサイズになります。
DJI GO 4
MAVIC AIRのコントロール用アプリはDJI GO 4になります。App StoreとGoogle Playから入手可能です。
play.google.com
MAVIC AIR付属のコントローラと接続して使うこともできますし、スマホ単体でも使えます。
スマホ単体で使った場合の画面はこんな感じです。

MAVIC AIRの場合、前方や下方だけではなく後方にも衝突回避センサーがついています。
上記の画面では、前方50cmと後方1mに障害物があると表示されています。
DJIのドローンは、業務用シリーズがPHANTOM 4、一般向けなシリーズがMAVICとブランドが分かれています。一般向けにはもっと小型のSPARKもありますが、本格的に使うならばMAVICを選択したいものです。
www.dji.com
現在、MAVICには、「PRO」と「AIR」に2つのタイプがあります。名前からするとPROの方が上位機種のように思えますが、2018年1月に発売されたばかりのAIRはPROに勝るとも劣らない機体であるといわれています。
スペック比較
それでは基本的なスペックで両者を比べてみましょう。
| 項目 |
MAVIC PRO |
MAVIC AIR |
| 価格 |
129,800円 |
104,000円 |
| 重量 |
743g |
430g |
| 最大飛行時間 |
27分 |
21分 |
| 最大速度 |
65km/h (Sモード) 36km/h (Pモード) |
68.4km/h (Sモード) 28.8km/h (Pモード) |
| 最大伝送距離 | モバイルデバイス:80m 送信機:4000m~7000m | モバイルデバイス:80m 送信機:500m~4000m |
| カメラ |
3軸ジンバル付き 1200万画素 1/2.3インチCMOS |
3軸ジンバル付き 1200万画素 1/2.3インチCMOS |
| 最大動画解像度 |
4K 30fps |
4K 30fps |
| ビデオビットレート |
60Mbps |
100Mbps |
| 動画伝送方式 |
OcuSync |
拡張Wi-Fi |
| 動画遅延 |
160~170ms |
170~240ms |
| SDK |
あり |
あり |
両社の大きな違いは、最大伝送距離と動画遅延になります。MAVIC PROはドローンを視界にとらえて操縦するだけではなくドローンが見えないくらいの距離であっても映像を見ながら操縦することを想定したスペックになっています。一方のMAVIC AIRはそこの部分は少しライトな仕上がりになっていますが、全体的な基本性能はMAVIC PROと同等といえるでしょう。
つまり、ドローンを視界にとらえられる範囲で楽しむならば、AIRというのは最善の選択になるかもしれません。
SDK
開発者ならば自分で飛ばすだけではなくプログラムにより操作してみたいと思うと思います。
https://developer.dji.com/mobile-sdk/
PROもAIRもSDKが用意されています。
SDKでできる機能としては
- 上昇下降
- 各種センサーデータの取得
- 障害回避
- カメラとジンバルのコントロール
- ライブビデオストリーミング
- 画像ストレージのアクセス
- ウェイポイント、ホットポイント、フォローミー機能
- バッテリーとリモートコントローラーのステータス表示と制御
SDKにはiOS用とAndroid用があるので、次回は、ダウンロードしたSDKをXamarinから使う方法を紹介したいと思います。
Xamarin.Formsも3.0となり、魅力的な機能がさらに追加されました。
主な新規のは次のようなものがあります。
- FlexLayout
- ResourceDictionary
- 右から左(アラビア語など)のサポート
- CSS StyleSheet
- Visual State Manger
Microsoft XAMLではおなじみの「ResourceDictionary」や「Visual State Manager」のサポートもうれしいですが、「FlexLayout」と「CSS StyleSheet」のサポートも魅力的ですね。
例えば、FlexLayoutはコンテンツを折り返しならが横方向に並べてくれるレイアウトで、Gridのようにあらかじめ縦横のマス数を指定しなくてもいいので、可変数のコンテンツを効率よく表示するのに適しています。従来であれば、ListViewのように横幅が一定の1列リストなどしか方法がありませんでしたが、タイル状に表示することが可能になりました。

新規プロジェクトでのXamarin.Forms 3.0の指定
Visual Studio 2017 (15.7.2)で新規に作成したプロジェクトでXamarin.Forms 3.0を使う方法を紹介します。Xamarin.AndroidとXamarin.iOSに共通のロジックは.NET Standard 2.0でDLL化して共有するのではなく、共有プロジェクトでソースコードレベルで共有するスタイルにします。

そのためには、CrossPlatform - Xamarin.Formsテンプレートを選択して、空のアプリで「共有プロジェクト」を選択します。

この方法で作成したプロジェクトでは、Xamarin.Formsは最初から3.0が設定されています。Xamarin.Formsもnugetパッケージとして提供されていますから、ソリューションエクスプローラーでAndroidのプロジェクトの[参照]フォルダを右クリックして[Nugetパッケージの管理]メニューを選択して、使用されているnugetパッケージのバージョン確認してみましょう。

Xamarin.Forms 3.0のnugetパッケージの最新化
テンプレートのXamarin.Forms 3.0は3.0.0.482510ですので、その後に新しいものがでている場合があります。今回も、2018/06/05に3.0.0.530893がでているので、必要に応じてnugetパッケージん更新をしましょう。更新していいかどうかの判断基準は一概にはありませんが、リリースノートなどで判断するのがいいでしょう。
https://developer.xamarin.com/releases/xamarin-forms/xamarin-forms-3.0/3.0.0/
Xamarin.Androidのサポートライブラリの最新化
Xamarin.Androidの場合、さらにXamarin.Android.* (サポートライブラリ)のnugetパッケージのバージョンをどうするかも考える必要があります。
テンプレートで指定されてるサポートライブラリのバージョンは、25.4.0.1となっており、この時の依存関係にあるMonoAndroidバージョンはv7.0となっております。
2018/6/6現在に対応している最新MonoAndroidバージョンはv8.1ですので、最新のものを使うなら、サポートライブラリを最新のv27.0.2にします。
サポートライブラリとAndroid SDKのバージョンの関連
サポートライブラリのバージョンを更新してMonoAndroidのバージョンが変更されたときは、該当するAndroid SDKがイントールされている必要があります。
たとえば、サポートライブラリをv27.0.2にしたいのであれば、事前にAndroid SDK ManagerでSDK 8.1がインストールされていることを確認してください。

該当するSDKバージョンがないとnugetでサポートライブラリのバージョンを更新するときにエラーとなります。

ターゲットフレームワークの関連
Android SDK v8.1がインストール出来たらプロジェクトのターゲットフレームワークもAndroid 8.1にします。

こちらターゲットAndroidバージョンとは別となります。もし(そんなタイミングはすくないでしょうけれど)、ターゲットを最新OSにするのを待ちたいときは、ターゲットAndroidバージョンを明示的に指定することも可能です。

2つ指定するのが面倒であれば、SDKのバージョン=ターゲットAndroidバージョンにする「SDKバージョンを使用したコンパイルの使用」という指定もあります。

Xamarin.Formsで画面を定義してみよう
それでは試しにFlexLayoutを使った画面を定義してみましょう。
画面定義は、AndoridとiOSで共通化できるところは共有プロジェクト側に記載します。

>|html|
||<
Modelなどのロジック部分も完成して実行すればタイル状に画像が表示されるアプリの完成となります。

RS4ことWindows 10 April 2018 UpdateがHoloLensにもやってきました。
HoloLensへの適用は、April 2018 Update済のWindows 10 PCにHoloLensを接続し、Windows Device Recovery Toolを起動して行います。

HoloLensのアイコンは正しいけれど「電話」という表示は気にしないでおきましょう。そのうち「デバイス」とかに日本語訳も治らないかな。

この画面の見方は、HoloLensのOSバージョンが10.0.17123.1004 (RS4 Preview)で、配布サーバー上のバージョンは10.0.17134.80 (RS4)ということで、更新できるということになります。
あとは、画面の指示に従ってサクッとインストールすれば完了です。
build 2018の初日である2018/5/7にSpeech ServiceがCognitive Serviceに追加されました。
https://azure.microsoft.com/ja-jp/services/cognitive-services/speech-services/
あれ?音声認識ってもともとあったよね?とお気づきの方もいるとは思いますが、従来のものは、Bing Speech APIやCustom Speech Serviceですね。
Bing Speech API:20言語に対応した音声認識
https://azure.microsoft.com/ja-jp/services/cognitive-services/speech/
Custom Speech Service:音響モデルや言語モデル、ノイズ除去などに対応した音声認識
https://azure.microsoft.com/ja-jp/services/cognitive-servic
新しいSpeech Serviceは、Bing Speech、Custom Speech Service、Translator Speech APIを統合したものです。
- 一つのキーで
- シンプルな価格で
- カスタマイズ可能で
というのが特徴です。
従来、「音声認識」についてはCustom Speech Serviceがありましたが、Speech Serviceでは「音声合成」や「翻訳」もカスタマイズ可能になりました。
いま、比較表をつくっているのですが、buildの資料だと音声認識が28言語ってかいてあるんですが、その一覧がのっている資料がなくてちょっと困っているので、ここにあるよ!って情報をお待ちしております。
UnityとMRTKのバージョンはどれをつかえばいいのかわからなくなる時があるのでメモ。
UnityはUnty 2018もでていますが、2018/04/30に提供が開始されたUnity 2017.4.2f2。
https://unity3d.com/jp/unity/whatsnew/unity-2017.4.2
MRTK (Mixed Reality Toolkit for Unity)は、2017.2.1.4 Patch Release。
https://github.com/Microsoft/MixedRealityToolkit-Unity/releases/tag/2017.2.1.4
前準備
http://hatsune.hatenablog.jp/entry/2018/04/11/010156
Azureへのログイン
PowerShellを起動して次のコマンドを入力するとAzureへのログインダイアログが表示されます。
Login-AzureRmAccount

ここでIDとパスワードを入力してサインインに成功すると対象となるサブスクリプションに接続します。
しかし、複数のサブスクリプションに紐づいている場合は、目的のサブスクリプションにつながらない場合もあります。
その場合は、Get-AzureRmSubscriptionでサブスクリプションIDを調べて、Select-AzureRmSubscriptionを使ってサブスクリプションを指定します。
Select-AzureRmSubscription -SubscriptionId 'xxxx-xxxx-xxxxx-xxxx'
例4:Cognitive Serviceの追加
Azure PowerShellを使って具体的にTranslator Text APIを新規追加する方法を順番にみていきましょう。
(1)リソースグループを新規作成する(既存のものを使うときには省略)
New-AzureRmResourceGroup ?Name myResoureceGroup ?Location ‘Japan West’

これでmyResourceGroupという名前で西日本にリソースグループが作成できます。
(2)Translater Text APIを有効化する
New-AzureRmCognitiveServicesAccount ?Name Test_Translator -ResourceGroupName myResoureceGroup -Type TextTranslation -SkuName F0 -Location 'global'

これでTest_Translatorという名前で、Translator Text APIが無料プランで有効化できます。
Congnitive Serviceは、以前はどこのリージョンを使うかを指定していましたが、現在は、特定のリージョンへの依存関係のないサービスです。そのため、Locationパラメータの指定は必要ですが指定値は常にglobalになります。
(3)APIキー値を取得する
Get-AzureRmCognitiveServicesAccountKey -ResourceGroupName myResoureceGroup -Name 'Test_Translator'

これで取得したどちらかのキー値を使えば、Translator Text APIを使うことができます。持ち主などの認証はありませんので、非常に重要な値といえます。
(4)APIキー値を再作成する
キー値を変更したいようなときは、キー値の再作成を行います。
New-AzureRmCognitiveServicesAccountKey -ResourceGroupName myResoureceGroup -Name 'Test_Translator' -KeyName Key1

これでKey1の値だけ再作成を行いました。キー値は2つあり利用はどちらでも同じです。Key1は自分用、Key2は一時的な貸出用などにしておくと、貸し出しが終わったらKey2を再作成するという運用ですみます。
(5)利用できる料金プランを取得する
(Get-AzureRmCognitiveServicesAccountSkus -ResourceGroupName myResoureceGroup -Name 'Test_Translator'
| Select-Object -expandproperty Value).Sku

無料プランのF0、有料プランのS1~S4があることが分かりました。
(6)料金プランを変更する
Set-AzureRmCognitiveServicesAccount -ResourceGroupName myResoureceGroup -Name 'Test_Translator' -SkuName S1

これで料金プランだけS1に変更できました。もちろん、キー値など他の要素は変わりません。
指定できるCognitiveServiceについて
New-AzureRmCognitiveServicesAccountのTypeパラメータに指定できるCognitive Serviceの指定値は次のようになっています。
|
|
|
| 1 |
Bing.Autosuggest.v7 |
アプリにインテリジェントな自動提案機能を追加 |
| 2 |
Bing.CustomSearch |
簡単に使用できる、広告なしの商用グレード検索ツールで、お好みの検索結果を得ることができます |
| 3 |
Bing.Search.v7 |
Bing Search API (Web、Image、Video、News) と Entity Search |
| 4 |
Bing.Speech |
音声をテキストへ、またそのテキストを再び音声に変換し、ユーザーの意図を理解 |
| 5 |
Bing.SpellCheck.v7 |
アプリでのスペル ミスを検出して修正 |
| 6 |
ComputerVision |
画像から意思決定に役立つ情報を抽出 (*一部リージョンのみ提供) |
| 7 |
ContentModerator |
画像、テキスト、ビデオを自動モデレート (*一部リージョンのみ提供) |
| 8 | - | Custom Decision Service (プレビュー)に対応した指定はありません。 |
| 9 | CustomSpeech | 音声認識エンジンの音響モデルをカスタマイズして、アプリケーションの対象となる環境やユーザーに、より適切に合わせることができます(*一部リージョンのみ提供) |
| 10 |
CustomVision.Prediction |
画像分析、タグ付け、著名人の認識、テキスト抽出、およびスマート サムネイル生成などの機能があります。 |
| 11 |
CustomVision.Training |
画像分析、タグ付け、著名人の認識、テキスト抽出、およびスマート サムネイル生成などの機能があります(southcentralusのみ) |
| 12 | Emotion | プレビュー。一般提供はFaceAPIへ統合。 感情認識を使用してユーザー エクスペリエンスをパーソナライズ |
| 13 | Face | 写真に含まれる顔の検出、識別、分析、グループ化、タグ付け (*一部リージョンのみ提供) |
| 14 | LUIS | ユーザーが入力したコマンドをアプリケーションが理解できるようにします (*一部リージョンのみ提供) |
| 15 | QnAMaker | *別の仕組みになったため?指定不可 |
| 16 | SpeakerRecognition | 音声を使用して個々の話者を識別および認証 (*一部リージョンのみ提供) |
| 17 | SpeechTranslation | リアルタイムの音声翻訳を簡単に実行 |
| 18 | TextAnalytics | 未加工テキストの高度な自然言語処理に対応しています。感情分析、キー フレーズ抽出、言語検出の 3 つの主な機能があります。 (*一部リージョンのみ提供) |
| 19 | TextTranslation | 機械翻訳を簡単に実行 |
| 20 | WebLM | *Web Language Model APIはCognitive ServiceからAzure Machine Learning Studioに変更になったため指定不可 |
残念ながら、この一覧を取得するコマンドはないのですが、Cognitive Serviceは今後も増えていく予感がしますし、Emotion APIがFace APIへ統合されるたように統廃合もあるでしょうから、指定できるTypeの一覧などがあると指定値に悩まなくてよい(まあ、ドキュメントサイトみましょうってことなのでしょうけれど)ですね。
現時点で指定できるAccountTypeでCognitive Serviceを有効にしていくと次のような感じで作成できます。

以上、コマンドラインによるCognitive Serviceの追加でした。各ユーザがもっているサブスクリプションに同じ定義で追加したいときとかも便利ですね。
前準備
http://hatsune.hatenablog.jp/entry/2018/04/11/010156
Azureへのログイン
PowerShellを起動して次のコマンドを入力するとAzureへのログインダイアログが表示されます。
Login-AzureRmAccount

ここでIDとパスワードを入力してサインインに成功すると対象となるサブスクリプションに接続します。
しかし、複数のサブスクリプションに紐づいている場合は、目的のサブスクリプションにつながらない場合もあります。
その場合は、Get-AzureRmSubscriptionでサブスクリプションIDを調べて、Select-AzureRmSubscriptionを使ってサブスクリプションを指定します。
Select-AzureRmSubscription -SubscriptionId 'xxxx-xxxx-xxxxx-xxxx'
例3:ストレージの追加
Azure PowerShellを使って具体的にBLOBを新規追加する方法を順番にみていきましょう。
(1)リソースグループを新規作成する(既存のものを使うときには省略)
New-AzureRmResourceGroup ?Name myResoureceGroup ?Location ‘Japan West’

これでmyResourceGroupという名前で西日本にリソースグループが作成できます。
(2)ストレージアカウントの作成
New-AzureRmStorageAccount ?StorageAccountName 'mystorage0409' ?Location 'Japan West' ?ResourceGroup myResoureceGroup ?SkuName 'Standard_LRS' ?Kind storage

西日本に'Standard_LRS'=ローカル冗長ストレージでストレージアカウント「mystorage0409」を作成しました。
SkuNameにはレプリケーションを指定するので、その他にも次のような指定が可能です。
| SkuName |
レプリケーション |
| Standard_LRS |
ローカル冗長ストレージ |
| Standard_ZRS |
ゾーン冗長ストレージ |
| Standard_GRS |
地理冗長ストレージ |
| Standard_RAGRS |
読み取りアクセス地理冗長ストレージ |
| Premium_LRS |
Premium(SSD)ローカル冗長ストレージ |
通常はローカル冗長、スピードが必要ならPremiumローカル冗長、データセンタのゾーン全体が死んでもデータの持続性を担保したいならゾーン冗長、データセンター丸ごと死んでもということであれば地理冗長を選択しましょう。
詳細は下記のドキュメントを参照してください。
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-redundancy
もし、ストレージに対してhttpsでのアクセスのみを許可したいときは「-EnableHttpsTrafficOnly $True」を付与しましょう。
作成したストレージアカウントをAzure Portalで確認してみましょう。

(3)BLOBコンテナの作成
ストレージアカウントができているので、次にやる作業はBLOBサービスにBLOBコンテナを作成することです。
New-AzureRm・・・のようなリソースマネージャー関連コマンドではなくなってしまいますが、次のようなコマンドでBLOBコンテナが作成できます。
$storageAccount = Get-AzureRmStorageAccount ?Name 'mystorage0409' ?ResourceGroupName myResoureceGroup
$ctx = $storageAccount.Context
New-AzureStorageContainer ?Name 'myblob' ?Context $ctx ?Permission blob

これで、パブリックアクセスレベルが「BLOB専用の匿名読み取りアクセス」のmyblobというBLOBコンテナが作成できました。
(4)BLOBファイルのアップロード
BLOBコンテナができたので、ローカルPCにあるファイルをアップロードしてみましょう。
$storageAccount = Get-AzureRmStorageAccount ?Name 'mystorage0409' ?ResourceGroupName myResoureceGroup
$ctx = $storageAccount.Context
Set-AzureStorageBlobContent ?Container myblob ?Blob 'Icon09.png' ?Context $ctx ?File 'C:\Users\hatsune\Pictures\icon09.png'

これでローカルPCのファイルがAzure上のBLOBコンテナに入りました。
(5)BLOBコンテナの内容一覧
BLOBコンテナにあるBLOBファイルの一覧を表示してみましょう。
$storageAccount = Get-AzureRmStorageAccount ?Name 'mystorage0409' ?ResourceGroupName myResoureceGroup
$ctx = $storageAccount.Context
Get-AzureStorageBlob -Container "myblob" -Context $ctx

パブリックアクセスレベルが「BLOB専用の匿名読み取りアクセス」となっているので、BLOBファイルへのURLを公開すれば誰でもが参照のみ可能となります。
(6)アクセスキーの取得
参照は誰でもができますが、一部の人には更新もできるようにしたい場合があります。
しかしAzureサブスクリプションに対するアクセス権を渡してしまうのは大げさです。
そのような場合は、ストレージアカウント名とキーを渡してあげて、Azure Storage Explorerなどを使ってもらうといいでしょう。
詳細は:http://hatsune.hatenablog.jp/entry/2018/03/08/065243
Get-AzureRmStorageAccountKey -Name mystorage0409 -ResourceGroupName myResoureceGroup

mystorage0409という名前と、key2の値を更新者に渡してあげるといいでしょう。
注意(2018/04/15現在)
今回、ストレージアカウントのアカウントの種類としてstorageを指定したがblobstorageを指定したいときは注意が必要だ。
1つもストレージアカウントがない状態でblobstorageを作成するとBLOBコンテナが作成できないストレージアカウントができてしまう。
1つでも作成した後であれば正常に動作する。
New-AzureRmStorageAccount -StorageAccountName 'mystorage0409' -Location 'Japan West' -ResourceGroup myResoureceGroup -SkuName 'Standard_LRS' ?Kind storage
New-AzureRmStorageAccount -StorageAccountName 'mystorage0410' -Location 'Japan West' -ResourceGroup myResoureceGroup -SkuName 'Standard_LRS' -Kind BlobStorage -AccessTier Hot
Azure Portalで作成したときは大丈夫なので、Azure PowerShellに何らかの問題があるのかもしれないが注意した方がいいでしょう。
前準備
http://hatsune.hatenablog.jp/entry/2018/04/11/010156
Azureへのログイン
PowerShellを起動して次のコマンドを入力するとAzureへのログインダイアログが表示されます。
Login-AzureRmAccount

ここでIDとパスワードを入力してサインインに成功すると対象となるサブスクリプションに接続します。
しかし、複数のサブスクリプションに紐づいている場合は、目的のサブスクリプションにつながらない場合もあります。
その場合は、サブスクリプションを指定してログインしてもいいのですが、Login-AzureRmAccountでのサブスクリプション指定には、そもそもとしてサブスクリプションIDが必要です。サブスクリプションIDを調べるのにブラウザでAzure Portalにログインするのも本末転倒な気がします。
そこで便利なのが、Get-AzureRmSubscriptionです。
Get-AzureRmSubscription

これでサブスクリプションIDが分かったので、使いたいサブスクリプションを指定します。指定は、サブスクリプションIDでもサブスクリプション名でもいいのですが、サブスクリプションID指定をよく使います。
Select-AzureRmSubscription -SubscriptionId 'xxxx-xxxx-xxxxx-xxxx'
Select-AzureSubscriptionがいわゆるclassicと呼ばれているもので、Select-AzureRmSubscriptionがAzureリソースマネージャーによる指定となります。
注意点
Select-AzureRmSubscriptionはあくまでもAzureリソースマネージャーによるサブスクリプションの変更です。
この方法で接続およびサブスクリプション指定した場合は、以降のコマンドもhogehoge-AzureRmHogehogeのように「Azure」でなく「AzureRm」系のコマンドを使う必要があります。
前準備
Azureへのログイン
PowerShellを起動して次のコマンドを入力するとAzureへのログインダイアログが表示されます。
Login-AzureRmAccount

ここでIDとパスワードを入力してサインインに成功すると対象となるサブスクリプションに接続する。
もし、複数のサブスクリプションがある場合は、サブスクリプションを指定して実行するといいでしょう。
Login-AzureRmAccount ?subscription xxxxxx-xxx-xxx-xxx-xxxx

例1:WebAppsの追加
それではAzure PowerShellを使って具体的にWebAppsを新規追加する方法を順番にみていきましょう。
(1)リソースグループを新規作成する(既存のものを使うときには省略)
New-AzureRmResourceGroup ?Name myResoureceGroup ?Location ‘Japan West’

これでmyResourceGroupという名前で西日本にリソースグループが作成できます。
(2)フリープランでApp Serviceプランを作成
New-AzureRmAppServicePlan -Name ’mywebapp0409' ?Location ‘Japan West’ -ResourceGroupName myResoureceGroup -Tier Free

App Service プラン名が「mywebapp0409」のApp Serviceプランを西日本に作成しました。
(3)Webアプリを作成
New-AzureRmWebApp -Name ’mywebapp0409' ?Location ‘Japan West’ -AppServicePlan ’mywebapp0409’ -ResourceGroupName myResoureceGroup
App Webアプリ名が「mywebapp0409.azurewebsites.net」のWebアプリを西日本に作成しました。
(4)発行プロファイルの取得
Get-AzureRmWebAppPublishingProfile -Name ’mywebapp0409' -ResourceGroupName myResoureceGroup ?outputfile “outputfile”

これでoutputfileという名前で発行プロファイルが保存できます。

(5)Webソケットの有効化
Set-AzureRmWebApp ?Name 'mywebapp0409' -ResourceGroupName myResoureceGroup ?WebSocketsEnabled true
これでWebソケットが使えるようになります。
(6)アプリケーション設定
$AppSettings = @{"ClientId"="id";"Password"="pass"}Set-AzureRmWebApp ?Name 'mywebapp0409' -ResourceGroupName myResoureceGroup ?AppSettings $AppSettings

アプリケーション設定にClientIdとPasswordを設定しました。アプリケーション設定を定義することでWeb.Configに設定した設定値を書き換えることができます。
さいごに
あとはWebアプリをデプロイすればOKです。
Azureでは、デプロイオプションとしてWeb Appsへのデプロイ元が選択できます。VSTS、onedrive、ローカルGitリポジトリ、GitHub、Bitbucker、DropBoxなどから選択できます。もちろん自社内のGitを指定することも可能です。
これにはローカルgitやgithubと組み合わせてとかもできます。
Visual Studioからデプロイしてもいいでしょう。
このあたりは機会があれば、別の機会にご紹介したいと思います。
Azure Cognitive Serviceを使ったクライアントアプリを作成するときに、Azure側でサービスを有効化しようとするとAzure PortalからGUIで操作が必要です。
知っている人ならば簡単でしょうけれど、知らない人に操作を伝えようとすると画面のハードコピーを取得して、それをペタペタと貼り付けて「手順書」なるものを作らなければならない場合があります。
しかし、クラウドですからちょっとしたタイミングでAzure Portalが改善され見た目が変わったときに、元の手順書から類推できる人ならばいいのですが、ちょっとでも違っているだけで「画面が違う」というクレームを人がいたりするわけです。
Azure Cloud Shell
Azure PortalにもAzure Cloud Shellというコマンドラインでの操作方法があります。

このツールのいいところは特に何かインストールしなくても使える点です。
しかし、Azure Cloud Shellを使うにはMicrosoft Azure Files ストレージを使用するためのセットアップと低額ですが維持費用が掛かる点を嫌がるケースもあります。
そのようなときはクライアントにAzure PowerShellをインストールするのがよいでしょう。
Azure PowerShell
Azure PowerShell を PowerShell ギャラリーからインストールできます。
しかし実際にやってみたらちょっと面倒だったので、Web Platform Installerを使った方がいいでしょう。
http://aka.ms/webpi-azps


Azureへのログイン
PowerShellを起動して次のコマンドを入力するとAzureへのログインダイアログが表示されます。
Login-AzureRmAccount

ここでIDとパスワードを入力してサインインに成功すると対象となるサブスクリプションに接続する。
もし、複数のサブスクリプションがある場合は、サブスクリプションを指定して実行するといいでしょう。
Login-AzureRmAccount ?subscription xxxxxx-xxx-xxx-xxx-xxxx

今更感ありますが、20年前の製品がまだ使えるっつうのもすごいものだなぁ。
最新は2004年のVB6SP6・・・14年もの・・・
いつものごとく、わんくま名古屋の時だけ更新になっていますが・・・
セッションは以下3つ、LTはだれが何をやるでしょうかたのしみですねぇ。
- 「業務システム開発モダナイゼーションガイド」 by You&Iさん
- 「Microsoft Visual Basic 6.0 環境構築」 by You&Iさん
- 「ASP.NETでする多言語対応」 by 中博俊
Windows 10 Insider Preview Fast RingにBuild 17133.1がきました。
デスクトップ右下のPreview表示がなくなりましたので、これがRS4の正式版かな?
自分のAzureサブスクリプションにあるAzure Storageにアクセスするには、Azure PortalやAzure Storage Explorerなど様々な方法がありますが、コンテナにたどり着くルートは次の3つの方法があります。
- IDとパスワードとサブスクリプションを指定して、ストレージアカウント名→BLOB→コンテナ
- 接続文字列を指定→BLOB→コンテナ
- ストレージアカウント名とアクセスキーを指定→BLOB→コンテナ
この中で1の方法はBLOB以外の資源へのアクセス権も得てしまうので自分以外の人には使わせることができないルートになります。
一方、2や3の方法であれば、例えば、データファイルを入れてほしいときなどに「接続文字列」や「ストレージアカウント名とキー」をお知らせして、Azure Storage Explorerからファイルをアップロードしてもらうと手軽です。
複数のお客様とのやりとりも
- お客様ごとにストレージアカウントを作成
- 接続文字列をお客様にお知らせ(お客様ごとに異なる値になる)
- お客様はAzure Storage Explorerを使ってファイルエクスプローラ感覚で指定の場所にファイルを配置
で済んでしまいます。
実際の手順は以下のようになります。
(1)

[ストレージアカウント]-[BLOB]-[コンテナ]にあるファイルを確認します。
(2)

該当ストレージアカウントの接続文字列を取得します。
(3)
Azure Storage Explorerを起動してAzureとの接続には「Use a connection string a shared access signature URI」を選択します。これで接続文字列指定の接続が可能になります。

(4)

接続文字列を貼り付けます。
(5)

Azure Portalにあったファイルが確認できます。
ここでAzure Storage Explorerをつかってファイルを1個追加してみましょう。


(6)
ちゃんとAzure側に入ったか確認しましょう。

きちんとはいりましたね!
あけましておめでとうございます。
昨年は音声認識と翻訳というCognitiveな領域、そしてxR(AR/VR/MR)をメインにお仕事をさせていただきました。
本年も引き続き突き進んでいきます。
コミュニティー活動についてもHoloMagiciansを始めとして様々なコミュニティーのお手伝いをしていきたいと思いますので、お気軽にお声がけください。