わんくま同盟 Blog's

わんくま同盟

メニュー

わんくま同盟

  勉強会情報

  メンバリスト

掲示板

ブログ

リンク

統計

わんくま同盟メンバ

わんくま同盟わんくま同盟

わんくま同盟メンバの最新の記事

UiPathで"LINQ to DataSet”を使いたい!

ここ最近、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 = "ちゅき"

はい、ビックリマーク来た

image_thumb1

下表では「ちゅき」は一意ですが、実際はいくつ返されるかわかりません。
そのため、受ける変数はコレクションである必要があります。

結果が一つしかないことが分かっている場合は上側、複数ある時は下側のように書きましょう

○代入(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はこんな感じで使えるので、イメージ通りだと思います。

image_thumb

取り出したデータを 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

posted @ 2018/12/13 22:00 by ちゅき

[Azure]2018/09/25のAzureの注目アップデート

AzureのUpdateがすごい量でてきました。

ぱっと見て、自分が注目している部分のアップデートをピックアップしてみました。


BLOB使いやすくて好きなのです。で、高スループットのものがでてきましたね。

BLOBいいけど速度どうなの?という方にも安心ですね。

https://azure.microsoft.com/ja-jp/blog/introducing-azure-premium-blob-storage-limited-public-preview/?irgwc=1&OCID=AID681541_aff_7593_1243925&tduid=(ir_d29e067eNbedaf2b2710a463509a078b8)(7593)(1243925)(TnL5HPStwNw-gt.c5nteSLzUDkvPulOjyA)()&irclickid=d29e067eNbedaf2b2710a463509a078b8


そして、Azure Signal R ServiceがGA(generally available)です。東日本リージョンでも使えるようになりました。

SignalR使ているところは、裏側をこれに置き換える検討しないとなー。

https://azure.microsoft.com/en-us/blog/azure-signalr-service-now-generally-available/?irgwc=1&OCID=AID681541_aff_7593_1243925&tduid=(ir_d29e067eNbedaf2b2710a463509a078b8)(7593)(1243925)(TnL5HPStwNw-LGYhziMgBF0y9tTqG7eUpQ)()&irclickid=d29e067eNbedaf2b2710a463509a078b8

Quick Startを後で見てみましょう。

https://github.com/aspnet/AzureSignalR-samples


クラウド使っているときのDDoS対策は?なんて聞かれることもありますよね?

Azure DDos Protectionを使って攻撃緩和レポートなどがみれるようになるようです。

https://azure.microsoft.com/en-us/blog/ddos-protection-attack-analytics-rapid-response/?irgwc=1&OCID=AID681541_aff_7593_1243925&tduid=(ir_d29e067eNbedaf2b2710a463509a078b8)(7593)(1243925)(TnL5HPStwNw-qsBdAjswrbw0UR2YfoNHfw)()&irclickid=d29e067eNbedaf2b2710a463509a078b8

ついでに、Azure FirewallもGAですね。


そして、Cognitive ServiceのSpeech Serviceがグローバル提供(特定のデータセンター選ばなくてよい)になって、サポート言語も17言語(と地域)が増えて30言語になりましたね。

https://azure.microsoft.com/en-us/blog/global-scale-ai-with-azure-cognitive-services/?irgwc=1&OCID=AID681541_aff_7593_1243925&tduid=(ir_d29e067eNbedaf2b2710a463509a078b8)(7593)(1243925)(TnL5HPStwNw-4vE0gsjztG1AzuVHLNuw_Q)()&irclickid=d29e067eNbedaf2b2710a463509a078b8


Ignite合わせで色々出てきましたね。

来年はIgniteもいきたいですね。

posted @ 2018/09/25 7:01 by 初音 玲

[生存確認] 生きていますし、また転職しました

そうまたなんだ。また転職しちゃったんだ。といっても、前回の転職からは数年は経っています。

やっとこさ年収は 800 万になった。BizREACH を使っても恥ずかしくない年収になったはず!!

転職のいいところは、入社した後に定期昇給でしか増えていなかった給与がリセット評価されるところですね。定期昇給でケチられたbゴホッゴホ!まーあれですよ、成長した部分の再評価ですね!

実際わたしの給与は転職の時くらいしか大きく変わってません。私が技術系コミュニティで暴れていた頃 ~ 26 歳くらいまでは、残業なし月給 26 万 (年齢万円) もありませんでした。その時は転職しただけで月給 33 万になりました。大してやることは変わっていないのにです。むしろ転職して下っ端になったので仕事は楽になっていたと思う(笑)。

『転職すると一旦給与が下がるものです』などと言っていた転職エージェントさんもいましたが、あくまでもそれは一般論です。前職でやっていたことを考慮してもらえばそんなことはないのです。考慮してくれない会社は入社後も考慮なんてするはずがないのでお断り。ただし最初は様子見したいという企業さんもいるので、よくある「三ヶ月の試用期間」をお互いのために利用すればいい。「試用期間終了後も条件は変わらない」というのを企業側が安心できる形にすればいいと思うのですよ。

まあえらそーに言っていますが、これは過去の出来事を今ふりかえっての分析です。当時は上記のようなことを狙ってやっていたわけではなくて『あれ?転職って結構おいしいじゃん』くらいにしか認識していませんでした。転職した企業で成長したと思われるタイミングで転職を繰り返すきっかけにはなりましたが。その後転職は 4 回していますが、常に年収が増えています。その結果が現在の月給 60 万ベース (年収 800 万) です。もちろんここまで来ると管理職の経験は必須ですが (ただし私みたいな低学歴 + 中途だと管理職のレールからは外れている企業が大半なのでおのずと零細企業での経験になります)。

なんだこの程度かよって思う人もいるかもですが、私は超低学歴ですから、見えない壁 (学歴) がある日本において「自分の頑張りが反映できた」だけでも幸せなんだと思うようにしています。もっと上を目指せば大台突破できそうですが、これ以上となると同じ業界だと「コンサルタント」か「使用者側」しかないんですよね (BizREACH でのオファーを見る限り)。そんなのやれている自分が想像つかない... ですが、まだまだ頑張ろうと思っています。最近ホント頭まわらないくらいの年齢は感じるし... 今後 40 代になっても現役でエンジニアというのは、私には無理な気がするし(笑)

日本だと転職って使用者も雇用者もマイナスイメージを持っていること多いですけど、前向きな転職はいいと思いますよ。私はおすすめです!

posted @ 2018/08/06 2:23 by じゃんぬ

[HoloLens]HoloLensでピン止めされたときにもアプリ名を表示する

HoloLensアプリでタイル表示にしたときにアプリ名が表示されないということでお悩みの貴兄に。

image

きちんと設定すればタイル表示の時にもアプリ名は表示できます。


UnityでHoloLensアプリを作成する場合、最終的にはUnityからUWPプロジェクトを生成して、そのUWPプロジェクトをビルドして実行モジュールを作成します。

このUWPプロジェクトのPackage.appxmanifestで、短い名前の表示で「普通サイズのタイル」にチェックをいれておきます。

image

たったこれだけでこの問題は解決です。


ファイルの内容的にはDefaultTileのShowNameOnTilesのところの記述になります。

image

posted @ 2018/07/06 22:54 by 初音 玲

Microsoft MVP for Windows Developmentを再受賞しました。

2008年の初受賞から11年目10回連続での受賞となります。

途中、審査時期の変更により有効期間が2年近い時期がありましたので、受賞回数と年数に差異がありますが、仕事内容や生活パターンが変わって、アウトプットも「雑誌/書籍執筆」→「blog/サンプルコード公開/アプリ公開」→「Blog/Web記事執筆」→「blog/コミュニティ活動」と変化してきましたが、その都度、周りの方に助けられながら活動してこれた成果だと思います。

特に今回は自分の満足が行く濃度のアウトプットができていなかった時期とかなさっていたため、再受賞は厳しいかもと内心思っておりましたので、再受賞できてよかったと思うと同時に、Microsoft MVPとしての期待値に答えられるように一層精進していこう思いを新たにしております。

今後とも、本ブログを始めとしたさまざまな活動へのご協力をよろしくお願いいたします・

posted @ 2018/07/02 11:04 by 初音 玲

[hardware]MAVIC AIRにも使えるDJI SDKを入手しよう

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のクラスライブラリでラッピングしてあげる必要があります。

image

jarファイルの追加

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

image

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

jarファイルのプロパティ指定

image

jarファイルに対するビルドアクションとして「EmbeddedJar」をしてしてdllにjarファイルを埋め込むようにします。

バインディングライブラリのビルドエラー対策

この状態でバインディングライブラリをビルドしてあげてエラーなくビルドできれば、バインディングライブラリのdllが完成します。

しかしながら、ここでエラーが出ないもののほうが少なく、gradle-wrapper.jarも当然のようにビルドエラーが発生します。

ビルドエラーは3件、すべてCS0535「〇〇はインターフェイスメンバー△△△を実装しません」です。

image

解決方法はいくつかありますが、今回出ているエラーは、「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']" />


次回に続きます。

posted @ 2018/06/23 1:43 by 初音 玲

[hardware]MAVIC AIRのコントロールアプリについて

自動代替テキスト��り��ん。

MAVIC AIRの大きさですがA4サイズのノートPCと比較するとこんな感じです。

プロペラのアーム部分が畳めるので格納時はほぼ本体と同じくらいのサイズになります。


DJI GO 4

MAVIC AIRのコントロール用アプリはDJI GO 4になります。App StoreとGoogle Playから入手可能です。

DJI GO 4

DJI GO 4

  • DJI
  • 写真/ビデオ
  • 無料

play.google.com


MAVIC AIR付属のコントローラと接続して使うこともできますし、スマホ単体でも使えます。

スマホ単体で使った場合の画面はこんな感じです。

画����れ��る�能性��るも�:画�

MAVIC AIRの場合、前方や下方だけではなく後方にも衝突回避センサーがついています。

上記の画面では、前方50cmと後方1mに障害物があると表示されています。

posted @ 2018/06/21 0:06 by 初音 玲

[hardware]MAVIC AIR

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から使う方法を紹介したいと思います。

posted @ 2018/06/20 1:41 by 初音 玲

[Xamarin]Xamarinの共有プロジェクトでXamarin.Forms 3.0を使う

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 Layout Types


新規プロジェクトでのXamarin.Forms 3.0の指定

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

image

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

image


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

image

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がインストールされていることを確認してください。

image

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

image

ターゲットフレームワークの関連

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

image

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

image

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

image


Xamarin.Formsで画面を定義してみよう

それでは試しにFlexLayoutを使った画面を定義してみましょう。

画面定義は、AndoridとiOSで共通化できるところは共有プロジェクト側に記載します。

image

>|html| ||<



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

image

posted @ 2018/06/07 6:48 by 初音 玲

[HoloLens]HoloLensにWindows 10 April 2018 Updateがきました

RS4ことWindows 10 April 2018 UpdateがHoloLensにもやってきました。

HoloLensへの適用は、April 2018 Update済のWindows 10 PCにHoloLensを接続し、Windows Device Recovery Toolを起動して行います。

image


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

image

この画面の見方は、HoloLensのOSバージョンが10.0.17123.1004 (RS4 Preview)で、配布サーバー上のバージョンは10.0.17134.80 (RS4)ということで、更新できるということになります。


あとは、画面の指示に従ってサクッとインストールすれば完了です。

posted @ 2018/05/29 1:16 by 初音 玲

[NUI]Cognitive Service - Speech Service Previewが登場しました

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を統合したものです。

  1. 一つのキーで
  2. シンプルな価格で
  3. カスタマイズ可能で

というのが特徴です。

従来、「音声認識」についてはCustom Speech Serviceがありましたが、Speech Serviceでは「音声合成」や「翻訳」もカスタマイズ可能になりました。


いま、比較表をつくっているのですが、buildの資料だと音声認識が28言語ってかいてあるんですが、その一覧がのっている資料がなくてちょっと困っているので、ここにあるよ!って情報をお待ちしております。

posted @ 2018/05/10 9:31 by 初音 玲

[HoloLens]HoloLens開発のためのUnityおよびMRTKのバージョン(2019/05/09現在)

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

posted @ 2018/05/09 2:50 by 初音 玲

[Azure]Azure PowerShellの具体例(例4:Cognitive Serviceの追加)

前準備

http://hatsune.hatenablog.jp/entry/2018/04/11/010156

Azureへのログイン

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

Login-AzureRmAccount

image27_thumb

ここで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’

image16_thumb5

これでmyResourceGroupという名前で西日本にリソースグループが作成できます。

(2)Translater Text APIを有効化する
New-AzureRmCognitiveServicesAccount ?Name Test_Translator -ResourceGroupName myResoureceGroup -Type TextTranslation -SkuName F0 -Location 'global'

image

これでTest_Translatorという名前で、Translator Text APIが無料プランで有効化できます。

Congnitive Serviceは、以前はどこのリージョンを使うかを指定していましたが、現在は、特定のリージョンへの依存関係のないサービスです。そのため、Locationパラメータの指定は必要ですが指定値は常にglobalになります。

(3)APIキー値を取得する
Get-AzureRmCognitiveServicesAccountKey -ResourceGroupName myResoureceGroup -Name 'Test_Translator'

image

これで取得したどちらかのキー値を使えば、Translator Text APIを使うことができます。持ち主などの認証はありませんので、非常に重要な値といえます。

(4)APIキー値を再作成する

キー値を変更したいようなときは、キー値の再作成を行います。

New-AzureRmCognitiveServicesAccountKey -ResourceGroupName myResoureceGroup -Name 'Test_Translator' -KeyName Key1

image

これでKey1の値だけ再作成を行いました。キー値は2つあり利用はどちらでも同じです。Key1は自分用、Key2は一時的な貸出用などにしておくと、貸し出しが終わったらKey2を再作成するという運用ですみます。

(5)利用できる料金プランを取得する
(Get-AzureRmCognitiveServicesAccountSkus -ResourceGroupName myResoureceGroup -Name 'Test_Translator'
 | Select-Object -expandproperty Value).Sku

image

無料プランのF0、有料プランのS1~S4があることが分かりました。

(6)料金プランを変更する

Set-AzureRmCognitiveServicesAccount -ResourceGroupName myResoureceGroup -Name 'Test_Translator' -SkuName S1

image

これで料金プランだけ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 (プレビュー)に対応した指定はありません。
9CustomSpeech
10 CustomVision.Prediction 画像分析、タグ付け、著名人の認識、テキスト抽出、およびスマート サムネイル生成などの機能があります。
11 CustomVision.Training 画像分析、タグ付け、著名人の認識、テキスト抽出、およびスマート サムネイル生成などの機能があります(southcentralusのみ)
12Emotion

プレビュー。一般提供はFaceAPIへ統合。

感情認識を使用してユーザー エクスペリエンスをパーソナライズ

13Face写真に含まれる顔の検出、識別、分析、グループ化、タグ付け (*一部リージョンのみ提供)
14LUISユーザーが入力したコマンドをアプリケーションが理解できるようにします (*一部リージョンのみ提供)
15QnAMaker*別の仕組みになったため?指定不可
16SpeakerRecognition音声を使用して個々の話者を識別および認証 (*一部リージョンのみ提供)
17SpeechTranslationリアルタイムの音声翻訳を簡単に実行
18TextAnalytics未加工テキストの高度な自然言語処理に対応しています。感情分析、キー フレーズ抽出、言語検出の 3 つの主な機能があります。 (*一部リージョンのみ提供)
19TextTranslation機械翻訳を簡単に実行
20WebLM*Web Language Model APIはCognitive ServiceからAzure Machine Learning Studioに変更になったため指定不可

残念ながら、この一覧を取得するコマンドはないのですが、Cognitive Serviceは今後も増えていく予感がしますし、Emotion APIがFace APIへ統合されるたように統廃合もあるでしょうから、指定できるTypeの一覧などがあると指定値に悩まなくてよい(まあ、ドキュメントサイトみましょうってことなのでしょうけれど)ですね。

現時点で指定できるAccountTypeでCognitive Serviceを有効にしていくと次のような感じで作成できます。

image

以上、コマンドラインによるCognitive Serviceの追加でした。各ユーザがもっているサブスクリプションに同じ定義で追加したいときとかも便利ですね。

posted @ 2018/04/22 22:33 by 初音 玲

[Azure]Azure PowerShellの具体例(例3:ストレージの追加)

前準備

http://hatsune.hatenablog.jp/entry/2018/04/11/010156

Azureへのログイン

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

Login-AzureRmAccount

image27_thumb

ここで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’

image16_thumb

これでmyResourceGroupという名前で西日本にリソースグループが作成できます。

(2)ストレージアカウントの作成
New-AzureRmStorageAccount ?StorageAccountName 'mystorage0409' ?Location 'Japan West' ?ResourceGroup myResoureceGroup ?SkuName 'Standard_LRS' ?Kind storage

image

西日本に'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で確認してみましょう。

image

(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

image

これで、パブリックアクセスレベルが「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'

image

これでローカルPCのファイルがAzure上のBLOBコンテナに入りました。

(5)BLOBコンテナの内容一覧

BLOBコンテナにあるBLOBファイルの一覧を表示してみましょう。

$storageAccount = Get-AzureRmStorageAccount ?Name 'mystorage0409' ?ResourceGroupName myResoureceGroup
$ctx = $storageAccount.Context
Get-AzureStorageBlob -Container "myblob" -Context $ctx

image

パブリックアクセスレベルが「BLOB専用の匿名読み取りアクセス」となっているので、BLOBファイルへのURLを公開すれば誰でもが参照のみ可能となります。

(6)アクセスキーの取得

参照は誰でもができますが、一部の人には更新もできるようにしたい場合があります。

しかしAzureサブスクリプションに対するアクセス権を渡してしまうのは大げさです。

そのような場合は、ストレージアカウント名とキーを渡してあげて、Azure Storage Explorerなどを使ってもらうといいでしょう。

詳細は:http://hatsune.hatenablog.jp/entry/2018/03/08/065243


Get-AzureRmStorageAccountKey -Name mystorage0409 -ResourceGroupName myResoureceGroup

image

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に何らかの問題があるのかもしれないが注意した方がいいでしょう。





posted @ 2018/04/15 21:02 by 初音 玲

[Azure]Azure PowerShellの具体例(例2:接続先サブスクリプションの変更)

前準備

http://hatsune.hatenablog.jp/entry/2018/04/11/010156

Azureへのログイン

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

Login-AzureRmAccount

image27_thumb_thumb

ここでIDとパスワードを入力してサインインに成功すると対象となるサブスクリプションに接続します。

しかし、複数のサブスクリプションに紐づいている場合は、目的のサブスクリプションにつながらない場合もあります。

その場合は、サブスクリプションを指定してログインしてもいいのですが、Login-AzureRmAccountでのサブスクリプション指定には、そもそもとしてサブスクリプションIDが必要です。サブスクリプションIDを調べるのにブラウザでAzure Portalにログインするのも本末転倒な気がします。

そこで便利なのが、Get-AzureRmSubscriptionです。

Get-AzureRmSubscription

image_thumb1

これでサブスクリプションIDが分かったので、使いたいサブスクリプションを指定します。指定は、サブスクリプションIDでもサブスクリプション名でもいいのですが、サブスクリプションID指定をよく使います。

Select-AzureRmSubscription -SubscriptionId 'xxxx-xxxx-xxxxx-xxxx'

Select-AzureSubscriptionがいわゆるclassicと呼ばれているもので、Select-AzureRmSubscriptionがAzureリソースマネージャーによる指定となります。

注意点

Select-AzureRmSubscriptionはあくまでもAzureリソースマネージャーによるサブスクリプションの変更です。

この方法で接続およびサブスクリプション指定した場合は、以降のコマンドもhogehoge-AzureRmHogehogeのように「Azure」でなく「AzureRm」系のコマンドを使う必要があります。

posted @ 2018/04/15 16:26 by 初音 玲

[Azure]Azure PowerShellの具体例(例1:WebAppsの追加)

前準備

http://hatsune.hatenablog.jp/entry/2018/04/11/010156


Azureへのログイン

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

Login-AzureRmAccount

image27

ここでIDとパスワードを入力してサインインに成功すると対象となるサブスクリプションに接続する。

もし、複数のサブスクリプションがある場合は、サブスクリプションを指定して実行するといいでしょう。

Login-AzureRmAccount ?subscription xxxxxx-xxx-xxx-xxx-xxxx
image10


例1:WebAppsの追加

それではAzure PowerShellを使って具体的にWebAppsを新規追加する方法を順番にみていきましょう。

(1)リソースグループを新規作成する(既存のものを使うときには省略)
New-AzureRmResourceGroup ?Name myResoureceGroup ?Location ‘Japan West’

image16

これでmyResourceGroupという名前で西日本にリソースグループが作成できます。

(2)フリープランでApp Serviceプランを作成
New-AzureRmAppServicePlan -Name ’mywebapp0409' ?Location ‘Japan West’ -ResourceGroupName myResoureceGroup -Tier Free

image21

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”

image29

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

image34

(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 

image

アプリケーション設定にClientIdとPasswordを設定しました。アプリケーション設定を定義することでWeb.Configに設定した設定値を書き換えることができます。

さいごに

あとはWebアプリをデプロイすればOKです。

Azureでは、デプロイオプションとしてWeb Appsへのデプロイ元が選択できます。VSTS、onedrive、ローカルGitリポジトリ、GitHub、Bitbucker、DropBoxなどから選択できます。もちろん自社内のGitを指定することも可能です。

これにはローカルgitやgithubと組み合わせてとかもできます。

Visual Studioからデプロイしてもいいでしょう。

このあたりは機会があれば、別の機会にご紹介したいと思います。

posted @ 2018/04/14 2:01 by 初音 玲

[Azure]Azure PowerShellを使ってみよう

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

image

image

Azureへのログイン

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

Login-AzureRmAccount

image

ここでIDとパスワードを入力してサインインに成功すると対象となるサブスクリプションに接続する。

もし、複数のサブスクリプションがある場合は、サブスクリプションを指定して実行するといいでしょう。

Login-AzureRmAccount ?subscription xxxxxx-xxx-xxx-xxx-xxxx
image

posted @ 2018/04/11 1:01 by 初音 玲

Microsoft Visual Basic 6.0 環境構築 2018年版

今更感ありますが、20年前の製品がまだ使えるっつうのもすごいものだなぁ。 最新は2004年のVB6SP6・・・14年もの・・・

posted @ 2018/04/07 13:33 by まーる

わんくま名古屋N44はじまたー

いつものごとく、わんくま名古屋の時だけ更新になっていますが・・・

セッションは以下3つ、LTはだれが何をやるでしょうかたのしみですねぇ。

  • 「業務システム開発モダナイゼーションガイド」 by You&Iさん
  • 「Microsoft Visual Basic 6.0 環境構築」 by You&Iさん
  • 「ASP.NETでする多言語対応」 by 中博俊

posted @ 2018/04/07 13:06 by まーる

[Windows 10]Windows 10 Ver 1803 (Build 17133.1)

Windows 10 Insider Preview Fast RingにBuild 17133.1がきました。

デスクトップ右下のPreview表示がなくなりましたので、これがRS4の正式版かな?

posted @ 2018/03/31 13:42 by 初音 玲

[Azure]別アカウントのAzure BLOBにアクセスする

自分のAzureサブスクリプションにあるAzure Storageにアクセスするには、Azure PortalやAzure Storage Explorerなど様々な方法がありますが、コンテナにたどり着くルートは次の3つの方法があります。

  1. IDとパスワードとサブスクリプションを指定して、ストレージアカウント名→BLOB→コンテナ
  2. 接続文字列を指定→BLOB→コンテナ
  3. ストレージアカウント名とアクセスキーを指定→BLOB→コンテナ


この中で1の方法はBLOB以外の資源へのアクセス権も得てしまうので自分以外の人には使わせることができないルートになります。

一方、2や3の方法であれば、例えば、データファイルを入れてほしいときなどに「接続文字列」や「ストレージアカウント名とキー」をお知らせして、Azure Storage Explorerからファイルをアップロードしてもらうと手軽です。

複数のお客様とのやりとりも

  1. お客様ごとにストレージアカウントを作成
  2. 接続文字列をお客様にお知らせ(お客様ごとに異なる値になる)
  3. お客様はAzure Storage Explorerを使ってファイルエクスプローラ感覚で指定の場所にファイルを配置

で済んでしまいます。


実際の手順は以下のようになります。

(1)

image

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


(2)

image

該当ストレージアカウントの接続文字列を取得します。


(3)

Azure Storage Explorerを起動してAzureとの接続には「Use a connection string a shared access signature URI」を選択します。これで接続文字列指定の接続が可能になります。

image


(4)

image

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


(5)

image

Azure Portalにあったファイルが確認できます。

ここでAzure Storage Explorerをつかってファイルを1個追加してみましょう。

image

image


(6)

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

image

きちんとはいりましたね!

posted @ 2018/03/08 6:52 by 初音 玲

新年のご挨拶

あけましておめでとうございます。

昨年は音声認識と翻訳というCognitiveな領域、そしてxR(AR/VR/MR)をメインにお仕事をさせていただきました。

本年も引き続き突き進んでいきます。

コミュニティー活動についてもHoloMagiciansを始めとして様々なコミュニティーのお手伝いをしていきたいと思いますので、お気軽にお声がけください。

posted @ 2018/01/02 8:33 by 初音 玲

[勉強会]12/16 わんくま東京#108 セッション資料

ここしばらく、東京勉強会でしゃべるのは12月だけのような気がします。

今回はデモは内容も含めてあえて非公開です。でもセッション資料とそれにまつわるセッション部分は公開なのでそのまま載せておきます。

当日の模様は Youtube にて公開中…

posted @ 2017/12/20 13:37 by とっちゃん

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

「食は広州にあり」

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


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

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


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

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

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

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

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

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


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

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

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

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



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

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

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

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

posted @ 2017/12/09 9:51 by 初音 玲

[HoloLens]仙台IT文化祭の資料を公開しました

2017/10/29に東北大学キャンパスで開催された仙台IT文化祭の登壇資料を公開しました。

https://www.slideshare.net/akirahatsune/hololens-windows-mr

posted @ 2017/11/20 13:11 by 初音 玲

[HoloLens]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


ご参考まで。

posted @ 2017/10/15 21:50 by 初音 玲

[HoloLens]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)

posted @ 2017/10/13 0:53 by 初音 玲

[WebSocket]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 7、Windows 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.1やWindows 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で判断しますので、その点だけ注意しましょう。

posted @ 2017/10/07 17:31 by 初音 玲

[Windows10]Windows 10 Insider Preview Build 16294

一般の方にはもしかしたらなじみがなく、また、仕事道具を動かすプラットフォームとしてWindowsを使っている人にも縁がないものに、Insider Previewがあります。

あくまでも「いまつくっている最中のバージョンを様々な環境でまずはつかってもらおう」というものです。

一般公開前ですから品質的に問題があったり致命的なバグがあったりも覚悟しつつ、アプリ開発していたり、OSそのものの新しい機能をいち早くためしたいという人がちょっとだけ未来に一般公開されるバージョンを試せるものということです。

Insider Previewのリリース間隔がみじかくなってくると、秋に公開されるというFall Creators updateもそろそろなの?みたいな感覚が味わえるのもいい点ですね。

もちろん、品質や日本語訳の変な点をどんどんフィードバックするのもInsider Preview参加者の役目の1つだったりします。


16294でなにがかわったかといえば以下のような点。変わったというよりもほぼバグフィックス。

  • Surface Pro 3でOSが起動できないバグの修正
  • オランダ版であったOneDriveからのダウンロード通知でクラッシュループが発生する問題の修正
  • expand.exeがファイル名に日本語が含まれているときに展開できない問題の修正
  • 0x800B010Cが発生する問題の修正
  • insider build 16291をインストールしようとすると0x80070057か0x8007071が発生する問題の解決


これをみて思うのは新機能の追加というよりも特定条件下で発生する問題の解決が多く、チューニングと汎用化の最終的な匙加減にはいてきたのかなって点。

よく「これくらいのバグをみつけられずにだしてくるのか?」なんて感想がブログで見受けられるけど、これ、なかなか面倒ですよね。対象ハードを絞れるといいだろうけれど。

あと、どうしてInsider Previewなのに「マイクロソフトも」みたいな感じで人格攻撃しちゃう人がいるのかはいつも不思議だったりします。問題点をかばう必要はないけど。きっと身近な人が失敗すると「だからお前はダメなんだ!」みたいな怒り方をしてそうですよね。

posted @ 2017/09/24 7:39 by 初音 玲

[勉強会] 9/9 わんくま横浜#10 セッション資料&デモソース

今回もとりとめもなく。。。な資料です。

DL はこちらから https://1drv.ms/p/s!AuVVWpjfPyA0hOU80NmyzhrIT-2eGA

知見の詰まっていないソースコードは、GitHub にあります。

https://github.com/Tocchann/Yokohama10

プロジェクトは、VS2017 です。Community Edition でも動くはずです。ちなみに、名前付きパイプのクライアント以外は、全部C++です(UNICODE版)。

VS2017でプロジェクトを起こしてる関係で、一部のファイルはUTF-8で保存されており、warning が出ます。ま、該当ファイルはコメント以外に非ASCII文字は入っていないので問題はないですけどねw

コードは自由に再利用していただいて構いませんが、自己責任でお願いしますw

posted @ 2017/09/14 11:21 by とっちゃん

[HoloLens]HoloLensアプリのサンプルプロジェクトをgithubで公開する

ソースコードを公開せずに多人数でHoloLensアプリを作るときは、「Visual Studio Team Services」などで非公開でやっていくとよいと感じです。

ちょっとしたサンプルコードならば、gistなどもいいでしょう。

サンプルプロジェクトを公開するならgithubがやっぱり一番よさそうです。

HoloLensアプリを公開するときはUnityプロジェクトとUWPプロジェクトでそれぞれ別の.gitignoreファイルを置けると便利です。

そこで次のようなフォルダ構造を作成し、UnityプロジェクトフォルダとVisualStudioソリューションフォルダにそれぞれに適した.gitignoreファイルを置きましょう。

[アプリ名フォルダ]

   +[Unityプロジェクトフォルダ]

       +assets

          |unityファイル

   +UWP

          |VisualStudioソリューションファイル

          +[プロジェクトフォルダ]


このフォルダの作り方やその他の詳細はHoloLensアプリ作成時の共通作業(2017年9月編)を参照してください。


github上にサンプルプロジェクトのリポジトリを作成

image

新規にリポジトリを作るときに下の方に[.gitignore]ドロップダウンリストがあるので、そこで「Unity」を選択して「アプリ名フォルダ」と同じ名前でリポジトリを作成します。

Unityを指定したときの.gitignoreファイルの内容は次のようになります。

--

/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/Assets/AssetStoreTools*

# Visual Studio 2015 cache directory
/.vs/

# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb

# Unity3D generated meta files
*.pidb.meta

# Unity3D Generated File On Crash Reports
sysinfo.txt

# Builds
*.apk
*.unitypackage

--

リポジトリをローカルにクローンする

リポジトリができたならば、ローカル(自分のPC)にリポジトリをクローンします。


image

このとき、すでにサンプルプロジェクトを作ってしまっていたならば、作成済のサンプルプロジェクトのアプリ名フォルダをリネームしておきます。そして、その場所を指定してクローンします。

image

ローカルドライブにフォルダが作成できならば、このフォルダを「アプリ名フォルダ」としてHoloLensアプリのプロジェクトを作成します。

あらかじめ作成してありリネームしてあるならば、そのフォルダの中身を移動してきます。

image

クローン下フォルダに移動するだけでローカル側の変更として検知されます。ここで、.gitignoreファイルをUnityプロジェクトフォルダに移動します。

今回はUWP側はUnityから自動生成すればいいのでUWPフォルダを丸ごと削除します。

UWP側でも独自のコードを書いているのであれば、UWPファイルだには次のような.gitigoneファイルを配置します。

--

#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.obj
*.exe
*.pdb
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.cache
*.ilk
*.log
*.dll
*.lib
*.sbr
*.msi
*.appx
obj/
bin/
TestResults/
AppPackages/
BundleArtifacts/
packages/
UpgradeLog*.*

--

コミットしてプッシュする

公開するコードがすべて格納出来たら、コミットを行い、プッシュします。

image

github上のUnityプロジェクトフォルダを見てみる次のようになります。

image

これでコードを公開できました。

posted @ 2017/09/07 0:36 by 初音 玲

[HoloLens]HoloLensアプリ作成時の共通作業(2017年9月編)

HoloLensアプリを作成するときのフォルダ構成を公開します。

[アプリ名フォルダ]

   +[Unityプロジェクトフォルダ]

       +assets

          |unityファイル

   +UWP

          |VisualStudioソリューションファイル

          +[プロジェクトフォルダ]

こんな感じにUnity関連とUWP関連が別フォルダになるようにしていて、その2つのフォルダをアプリ名フォルダの下に作っています。

こうすることでまとめてドンっと開発環境渡したいときは[アプリ名フォルダ]まるごとzipにして渡してしまえばいいですね。

githubにあげるときも同様ですが、Unity環境とUWP環境で除外したいファイルが違ったりするので、UnityプロジェクトフォルダとUWPフォルダにそれぞれ.gitignoreを記述しておくとよいでしょう。


Unityプロジェクトを新規作成するときの考慮点

そのためには、HoloLensアプリを作るときにUnityを立ち上げたら、例えば次のように[Project Name]欄に記載する値と、[Location]欄に記載するフォルダ名の最後をまずは一致させておきます。

image

HoloToolkit-Unityの追加

Unityプロジェクトができあがったら、提携作業としてまずはHoloToolkit-Unityをアセットとして追加します。

githubのreleaseにアセットパッケージファイルがあるのであらかじめダウンロードしておきます。

2017/09/06現在、私が使っている環境は、

Unity 5.6.2f1

なので、HoloToolkit-Unityもv1.5.8.0になります。

image

[Assets]-[Import Package]-[Custom Package]メニューでダウンロードしたアセットパッケージファイルを指定します。

image

アセットが追加されるとメニューなども拡張されるので、HoloToolkitメニューからいつものConfigurationをやっておきましょう。

シーンの保存

Unityのシーンを保存したいときは、プロジェクト名と同じ名前で保存しています。

image

Build Settings (2017年9月編)

HoloLensに搭載されたOSはまだWindows 10 Anniversary Updateなので、開発環境がCreators UpdateやFall Creators Updateだったりした場合には、UWP SDKとして10.0.14393.0を明示的に選択します。

image

また、[Unity C# Projects]チェックもデフォルト状態ではついていないのでこれもつけておきます。

UWPソリューションを出力するときの考慮点

image

UWPフォルダは最初できていないので[新しいフォルダー]をクリックしてフォルダを作成して名前を「UWP」にします。

UWPのソリューション構成は次のように3つのプロジェクトから構成されます。

image

*ここでVisual Studio 2015 Update 3を使っていると特に問題なく、HoloLensをUSBで接続した途にビルドタイプ「x86」にして出力先を「Device」にすればHoloLensでアプリが立ち上がります。


さて、現状のUnity 5.6.2f1からだとVisual Studio 2017を使うとエラーでビルドが失敗します(15.3.3でも失敗する)。

原因は、上2つのプロジェクトのcsprojファイルで記載されている

RunSerializationWeaver

の実行プロセスで

System.Collections.Generic.KeyNotFoundException: 指定されたキーはディレクトリ内に存在しませんでした。

というエラーが発生して

UWP\GeneratedProjectsUWP\Assembly-CSharp-firstpass\bin\x86\Debug\Assembly-CSharp-firstpass.dll

UWP\GeneratedProjects\UWP\Assembly-CSharp\bin\x86\Debug\Assembly-CSharp.dll

が作成されないからです。

また、最後の1つのプロジェクトでも

UWP\Unity\Tools\AssemblyConverter.exeの実行プロセスで

System.Collections.Generic.KeyNotFoundException: 指定されたキーはディレクトリ内に存在しませんでした。

というエラーが発生します。


どうやらこれを解決するためには、Unity 5.6ならばVisual Studio 2015にするか、Visual Studio 2017にしたいならUnity側をUnity 2017.1.0p5にするしかないようです。

でも、Unity 2017用のHoloToolKit-Unity (Unity 2017用だとMixedRealityToolkit-Unity) は、Pre-releaseなんですよね。

posted @ 2017/09/06 16:36 by 初音 玲

わんくま名古屋N42はじまた

いつものごとくわんくま参加の時だけ書いてる感じですが、すんまそん。

You&Iさんのセッションはじまたー

posted @ 2017/09/02 13:03 by まーる

[HoloLens]HololensのSpatialMappingのメッシュをきれいにする

HoloLens Toolkit-UnityあらためMixed Reality Toolkit-UnityのSpatialMappingを使うと空間認識を行って、Unity空間の中に現実世界の床や壁を反映してくれます。

SpatialMapping

やり方は簡単で、[SpatialMapping]-[Prefabs]から[SpatialMapping]オブジェクトをHierarchyウィンドウにドラッグアンドドロップするだけであとは自動的に良しなにやってくれます。

20170823_124703_HoloLens

起動するとすぐに空間認識が始まって、その進行に合わせて不定形のメッシュが描画されていきます。


SpatialUnderstanding

SpatialMappingを使うと手軽に空間メッシュ表示が得られますが、平面に合わせてもう少し綺麗に賽の目で表示してほしいときがあると思います。そういったときはSpatialUnderstandingを「追加」します。

やり方は、[SpatialUnderstanding]-[Prefabs]から[SpatialUnderstanding]オブジェクトをHierarchyウィンドウにドラッグアンドドロップします。

あとは以下の点を修正するのみです。

  1. SpatialMapping側でメッシュ描画は不要なのでSpatialMappingオブジェクトの[Draw Visual Meshes]プロパティのチェックを外す


20170823_130049_HoloLens

SpatialMappingオブジェクトが動作していることを前提としてSpatialUnderstandingオブジェクトは動作するので、SpatialMapping側の[Auto Start Observer]プロパティのチェックを外したりすると動かなくなりますのでご注意ください。


動作環境:

Unity 5.6.2f1 + Visual Studio 2017 Update 3

ターゲットバージョン Windows 10 Anniversary Edition (10.0.14393)

posted @ 2017/08/23 13:58 by 初音 玲

[生存確認] 生きています

はい。生きております。先日久しぶりに中さんから連絡もらってお互い生きてるなーと生存確認w

前回転職してから 5 年ほど経過しておりますが... 実はその間、一切 .NET やってないんですよねww

ずっと Java ばかりで (なぜそうなったかは中部にいる方はわかって頂けると思います)。で、最近はいわゆるスマートデバイス向けが多いです。時代変わりましたよねー。私が技術系掲示板で暴れてた頃は、サーバサイドでとにかくやる。クライアント スクリプトはなくても動作しなきゃダメ!って時代でした。その時にもありましたけど Ajax、JSON、HTML5 (というかカスタム要素) の台頭、そして Angular や有能な UI ライブラリ、スマホのスペック向上で、バリバリとクライアント サイド中心になっています。もちろんビジネス ロジックはサーバサイドですが、サーバサイドは説明が少なくて済むので新人にやらせるのが定石になってきました。まさかこんな時代になるとはw

たとえば私は今、AngularJS + OnsenUI → Ajax(JSON) → Java(鯖側) みたいなベタベタなのをやっています。

某 T 社からの呪縛はとけましたが、10 年以上も付き合いのある「拝承!」なところとは、いくら転職を繰り返しても付き合いが続いています。本体とは切れましたが、はい◯すとかはい◯るとは社名変わる前からずっと付き合いありますね。

ところで、サイトは結局更新しませんでしたね。すいません!許してください!何でもしますから!

ん?(ry

posted @ 2017/08/15 8:44 by じゃんぬ