わんくま同盟わんくま同盟
わんくま同盟 -> Blog's
わんくま同盟メンバの最新の記事
1. Picture in Pictureとは
Picture in Picture(PiP)は一般的に画面の中に画面が入っているような状態を指します。UiPath 2020.4で利用可能になったPiPは画面内にRemote Desktopみたいな感じで別のセッションウィンドウが起動されます(図1)。ここで、タイトルバーの右に注目してください。「制御する」というスイッチがあります。これをオフにすると、このセッションのキーボードやマウスといったUIにアクセスできなくなります。つまり、ユーザーが間違ってクリックしたりキーボードを操作してもロボットプログラムに影響が及びません!。動作中にキーボードやマウスを操作してロボットプログラムがエラーが出たときの泣きたくなる経験がなくなる待望の技術と言えます。

2. 早速使ってみよう
しくじり1:最近買ったおうちPCで利用できなかった
さきほど、Remote Desktopみたいにって書きました。ところで、Remote Desktopで接続できる先にHome Editionはない。つまり、おうちで買ったWindows 10 Home Editionでは利用できませんでした(既知の問題)。
→ということで会社PCで検証。「デバッグ」タブの「ピクチャ イン ピクチャ」を選択状態にして実行すれば開発環境から利用できます。

しくじり2:
AD(Active Directory) or AAD(Azure Active Directory)配下で、PINしか知らされていないアカウントでは利用できない

PiP利用時には、ユーザーとパスワードを使って毎回ログインする必要があります。一度ログインすればPiPの画面を閉じるまでそのままロボットプログラムを実行できます。
ADまたはAADのユーザーをパスワードを教えてもらえな環境では、あきらめてローカルアカウントを使いましょう。この場合も毎回ログインが必要です。
画面を見ればわかるのですが、ローカルアカウントを使用していても、PiP起動時にはAD or AADに確認に行くという、どちらかというとWindowsのセッション起動の仕様。
ですので、毎回ユーザー名の前に”.¥(半角にしてね)”かコンピュータ名を入れてください・・・(既知の問題)。ちなみに、「制御する」にしないと入力できません。

しくじり3:
ペン入力用のドライバと相性が悪いらしく起動した瞬間落ちる
ドライバとの相性問題がある場合、どちらかをあきらめてください(既知の問題)。今回は、支給されて以来ペン入力を使ったことが一度しかないのであっさり削除(私のTablet型PCを持つ価値って……)

しくじり4:割とタイムアウト時間が短い(60秒)
ログオン時にスタートアッププログラムがあるとセッションタイムアウトで落ちる……(既知の問題)
スタートアップの起動をタスクマネージャーで片っ端から無効化(または、環境変数のUIPATH_SESSION_TIMEOUTで指定する)
※一度ログイン状態になったら、Picture in Picureの画面を閉じてウィンドウセッションを落とさない限り居続けるので、一度立ち上げるまでの辛抱……

◆教訓:ちゃんとマニュアル読んで、既知の問題は確認しましょう。
所感:PiPめっちゃ使える子です。使える環境ではぜひ使っていきましょう。不満の半分くらい解消されて、3倍くらい満足度が増します(個人的な感想)
特定の技術情報はというわけではないですが、Qiita にアカウントを作ってみました。
ま、まだ記事は1つしか挙げてないですけどw
よければこちらも見てくださいな。
https://qiita.com/Tocchann/
https://myignite.microsoft.com/
まもなく日本時間の9/23の0:15からMicrosoft Ignite 2020がスタートします(現地時間で9/22~9/25)。
新型コロナウィルスの影響が出始めた直後に開催されたMicrosoft Build 2020と比べるとシアトル現地時間帯以外のタイムゾーンでも見やすいようにリピートセッションが組まれています。
また、公式サイトも時差込みに時刻表示もできるようになっており非常にわかりやすいです。
キーノートについて
キーノートセッションともいえるサティアCEOによる「Building Digital Resilience(デジタルレジリエンスの構築)」は、次の3回の放送が予定されています。
9/23 00:15 JST-01:15 JST
9/23 08:15 JST-09:15 JST
9/23 16:15 JST-17:15 JST
日本のタイムゾーンだと2回目あたりの時間が見やすいと思います。他のセッションもおおむねそんな感じですね。
ちなみにデジタルレジリエンスというのは、デジタル社会による復元力や事業継続性というような感じなのでしょうしょうか。インフラも含めて企業の事業を継続できるようなものを作り上げるというような視点の知見をお話いただける感じかな?
おすすめセッション
おすすめということでもないのですが、現時点で視聴予定のセッションリストは次のような感じです。注目キーワードは赤くしてみました。
UiPathのログを見てみましょう。
効率よくバグの原因を見つけるためには、ログを見やすくするのがおススメです。
ある程度のレベルの方は、自分なりの方法を見出していると思いますが、私がよく行っている方法をご紹介します。
0.はじめに
某所で、UiPathの好きなところ、と聞かれてLOGの柔軟性と答えました。
UiPathのログは.NET開発者にはおなじみApacheプロジェクトのlog4netです。こういう枯れたライブラリを使っているのも好きなポイントだったりします。
ただ、正直なところ、UiPathが生成するログはJSON形式にオマケがついていて、そのままではちょっと見にくかったりします。
私が普段ざっとログを見てる方法を簡単ですがご紹介します。
私はMicrosoft社系技術のファンです。その大きな理由はVisual Studioとか開発系技術のファンです。そのため、使用するエディタはここ最近Visual Studio Codeです。これを使ってログを見ていきましょう。
1. ログを開くには
ログを簡単に開くには、UiPath Studioの「ログを開く」リボンメニューを押します

すると、ログが入っているフォルダが開きます。実行ログは既定では「日付_Execution.log」というファイル名です。ではこれをVisual Studio Codeで開いてみましょう。
2.ログの確認
拡張子がLOGであるため、LOGモードで開かれます(図1)。画面右下に「Log」と表示されていることからも分かります。なお、ここをクリックすると他の言語向けの表示に変更できます。
このままだと一覧性は高いのですがエラーの確認をしようにも右に長すぎて見る気が起きません。画面右下の「Log」と書かれたところをクリックして「JSON」に変更してください。

図1.Visual Studio CodeでUiPathのログを開いたときの画像
3.エラーが起きている行の確認
さて、図1を見ていただくと2行めがエラーになっていることがわかります。2行目をCtrl+Lなどで全選択した後右クリックして「選択範囲のフォーマット」を選んでください。
すると、選択した行が項目ごとに表示されて、とても見やすくなります。

図2.フォーマット後の表示
4. おまけ:エラー個所の特定について
エラーの発生個所は、既定ではmessage項目に表示されているアクティビティの表示名(図2,3赤枠部)からでしか分かりません。
ちゃんとエラー発生個所を特定できるように表示名はちゃんと記載しましょう。代入アクティビティは、型違いとか配列の操作ミスでエラーが発生しがちなのですが、「代入」しかログに無いとエラー発生個所を探すのが大変です。
例えば、UiPath StudioXでは自動で通し番号が付与されます。できるだけ一意の名前にしましょう。(通し番号も、運用によってはアクティビティ増やしたらドキュメント全部修正とかになるのでビミョー。命名規則ホント大事っす。)

図3.このログのもとになったロボットプログラム
【備忘録用】UiPathとかRPAでファイルの存在チェックをワイルドカードを付けて確認したかったとき用。
File.Existsメソッドはワイルドカードが効きません。
.NETはWindowsだけのおもちゃとか思ってるアンポンタンさんはいないと思いますが、その前提としてすべてのルールがWindows OSに準拠するわけでないことを忘れがちです。
もし、”*”がワイルドカード一択になると、”*”がファイル名として許される処理系で動かなくなってしまいます。
このためかとな、と勝手に思っています。
ではどうするか・・・。
1)特定ディレクトリにあるファイルをワイルドカードを使って取得する
あんまり細かく考えないでもいいんですよね。Directory.GetFiles の第2引数は検索条件が指定出来てこちらはワイルドカードが効きます。
Dim arFiles = System.IO.Directory.GetFiles(“C:\temp",”hogehoge*.txt)
これでOKです。ファイルが存在しなくても空の配列返してくれるのでヌルポでガっしなくても済みます。
注:ディレクトリが存在しないとエラー扱いで例外が発生します。存在が怪しい場合Directory.Existsメソッドで存在確認を行ってください。
2)結果の確認方法
すぐに思いつくのは、次の通りです。存在しなくてもエラーが出ず0を返してくれるので安心です。
arFiles.Count() > 0
2. Anyメソッドを使用する方法(こちらがオススメ)
こちらがオススメです。DataTableに入っている行などのコレクション型は自身の個数を持ってるのでそこから取得します。
単純な配列は、すべての個数をクルクル回して確認するのでイロイロともったいないです。
そこで、Anyメソッド。メソッド内で一つでも要素があればtrueを返すのですんごい高速です。
arFiles.Any()
【ご参考】UiPathだとこんな感じ

Containsメソッドなんかも知っておくと、配列内で特定のものが含まれているかを調べたいときにとても便利です。
配列の場合、頭からくるくる回しでチェックするので繰り返しで回すのと処理は同じですが、システムがやってくれる分高速です。
映像録画&ライブストリーミング用のオープンソースプロジェクトOBSのOBS Studioにはプラグイン拡張でWeb Socketのインターフェースを追加することができます。
OBS Studio (現時点での最新は、25.0.4)
https://obsproject.com/ja/
OBS-WebSocket (現時点での最新は、2.7)
https://github.com/Palakis/obs-websocket/releases
OBS-WebSocketのC# .NET Library
https://github.com/Palakis/obs-websocket-dotnet
OBS Studioが24→25に変わったときに文字を表示する領域(OBS Studioではソースと言います)のIDが変わってしまっているようで、OBS-WebSocketで、SetTextGDIPlusPropertiesやGetTextGDIPlusPropertiesを使うときに正しいソース名を指定しても「not a text gdi plus source」というエラーになってしまい、OBS Studioに字幕が表示できません。
https://github.com/Palakis/obs-websocket/issues/443
すでにこのissuesはソース的には修正が入っております。
具体的には、ソース名でヒットしたソースの属性チェックのところで、従来の「text_gdiplus」というIDに加えて、「text_gdiplus_v2」というIDもエラーにしないように修正されています。
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
デルアンバサダープログラムで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付属のケーブルを使えば、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に別途電源を接続する必要がないのです。これは本当に助かりました。
また、本来はnVidiaのGPUが必要なのですが、第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#でiOSやAndroidアプリが作れるツールを使ってVisual Studioでプログラミングしているのですが、実機デバッグ実行時にこのDell Mobile Connectのミラーリングはとても手軽でいいですね。
最後に
なんといってもそのサイズの小ささと1.3kgという軽さは正義です!
とはいえ、それは奇麗なタッチディスプレイという視認性の良さがあればこそですね。
返却時期がきてしましましたが、New XPS 13 2-in-1と別れたくない気持ちです。
このまま、最強のリモートワーク用デバイス生活継続したいです。
デルアンバサダープログラムで1か月お借りしているDell XPS 15プレミアもそろそろ返却期間が近づいてきました。
最近は、steamでのゲームだけではなく、Visual Studioを使ってC#でアプリ開発などにも使っています。

実際に開発に使ってみると、とても具合がよくてこの1か月ですっかり虜になってしまった。
何がいいかといえば、広い、速い、手触りいい!ということに尽きる。
広い
まずは、23840x2160という画面解像度と15インチという広さがもたらす視認性の良さがコードを書きやすくしてくれます。
推奨の表示スケール250%にしておいても作業領域は十分な広さであるし、何もよりも文字が見やすく疲れません。
速い
そして、速いCPU、速いSSD、十分なメモリ空き容量もあるのでコードをビルドするときも短時間で済むし、最近のIDEが備えている各種インテリセンス機能をONにしていても作業を待たされることなく、いろいろな助言を開発環境自体から受け取ることができる。
手触りいい
自宅でも会社でもノートPCを使うときは外付けキーボードを使っている。
ノートPCのキーボードも短時間であれば疲れないが、やはりどうしても長時間ずっとキー入力していると若干疲れ具合が違うし、やはり、外付けキーボードの方が指先が触れる感触がやはり違うのです。
意外といっては失礼かもしれないか、Dell XPS 15プレミアのキーボードはノートPCの部類の中ではさわり心地もよく、実際に長時間使ってみても指先の疲れ度合いがだいぶ少ない感じがする。
キー配列も日本語キーボードなのにまともだし、何よりエンターキーの右側に更にキーを配置するようなトリッキーなことをしてないのも好感が持てる。

まとめ
Dell XPS 15プレミアでアプリケーション開発はアリ!
デルアンバサダープログラムで1か月お借りしているDell XPS 15プレミアは、実測2.05Kgという15インチタイプのノートPCとしてみても平均値か少し重い部類に入ります。
それでも物理的なサイズ(いわゆるフットプリント)は細ベゼルということもあって重さほどの大きさが感じられません。

常に持ち歩くとまではいきませんが、家の中の移動やちょっと外出に持っていくなどの用途としては十分持ち運べると言えるでしょう。
XPS 15に適したバックパックサイズは?
Targus TBB574のような15.6インチノートPC対応のバックであれば問題なく格納できます。
https://www.yodobashi.com/product/100000001003008205/
また、15.6インチ対応ならそれなりの重量を見越しているのでXPS 15をいれても不安感はありませんでした。
MacBook Pro 15インチモデルと似たサイズなのでおしゃれなバッグはいろいろあるので店頭やネットで探してみるのも楽しいでしょう。
最近はゲームといえばsteamでRing of Elysiumをプレイしています。
https://store.steampowered.com/app/755790/Ring_of_Elysium/?l=japanese
Ring of ElysiumことRoEは、いわゆるバトルロイヤルなFPSゲームです。武器を拾い、乗り物に乗り、また3種類の初期装備(グライダー、MTB、ワイヤー)から選んだ装備で行動して、最終的にはMax4人のヘリに乗れば勝てるというシステムです。
さすがにノートPCでは処理が追い付かずキルがとれないので、昔使っていたデスクトップ機にGPU載せて遅延なく楽しんでいるのですが、ファン音がうるさいのと排熱で暑い。。。。
そこでDell XPS 15 プレミアで快適プレイができるかを確認したいというのもレビューを申し込んだ動機の1つだったりします。
結論から言えば、す、ご、く、快適です。
それではDell XPS 15 プレミアでRoEをプレイしたときの負荷を見てみましょう。

一方、いままでRoEをプレイしていたデスクトップ機の負荷はといえばこんなな感じ。

かなりGPUが古い感じであるのは否めませんが、Dell XPS 15 プレミアはデスクトップ機でゲームをプレイするのと同じような快適さでプレイできますし、何によりも無音とまではいきませんが、デスクトップ機に比べると騒音も気にならないレベルですし、なにより室温が上がらないので快適プレイできます。
「デル アンバサダー限定!XPS体験モニター 」にはDAZN(ダゾーン)の1か月無料枠が付いてきました。
DAZNとは?
DAZNは、年間1万試合以上のスポーツコンテンツをライブ中継(つまり生中継)と見逃し配信(要は録画で過去試合が見れる)で、テレビ、スマホ、PCなどいろいろなデバイスで楽しめるサービスです。
https://watch.dazn.com/ja-JP/sports-B/
DAZNの何がいいか
試合数が多くても興味がある試合が配信されてなかったら意味がないですよね。
でも、DAZNならその心配がないくらいの意味ある試合が配信されています。
例えば、サッカーなら、J1やプレミアリーグ、セリエA、UEFAチャンピオンリーグなどが配信されています。
F1やプロ野球にMLBなども配信しています。
DAZNとXPS 15 プレミアの相性をチェック
まず何がいいってタッチパネルはやっぱりいいですね。DAZN画面でタイル表示されているサムネイルから見たいものを最短操作で選択するならやっぱりタッチするのが一番。どんなに使いやすいタッチパッドやマウス、トラックボールでも目的のものを直接指し示すUIはやっぱりいいですね。
そして4K画像の奇麗さと15インチの画面サイズの見やすさ。しかもなんか色がきれいですね。
予想外だったのが本体スピーカーの音の良さ。すごくいい!すごくいいです!
DAZNを見よう
DAZN体験はもうちょっと後かなと思っていたのですがF1がライブ中継されているならば話は別です。
ちょうど今週末はイタリアGP。今夜有効にすれば時差の関係で予選からライブ中継が見られるのです!
しかも!「メインフィード」「オンボードカメラ」「タイムフィード」「ドライバートラッカー」の4カメラを1つの画面で配信するなんてモードも!
配信中の画像をペタっと張りたいところですが権利関係が分からないので、ぜひ、ご自身の目でDAZN体験してみてください。
「デル アンバサダー限定!XPS体験モニター 」に当選して、XPS 15 プラチナを約2か月使い倒せることになりました。
http://dell-ambassador.com/products/xps/15_9560/
届いたXPS 15 プラチナの仕様は以下の通り。
- 第7世代 インテル Core i7 7700HQ クアッドコア
- Windows 10 Home 64bit 日本語版
- 16GB DDR4-2400MHz
- 512GB PCIe SSD
- NVIDIA GeForce GTX 1050 5GB GDDR5 x
- 15.6 inch 4K Ultra HD (3640 x 2160) InfinityEdgeタッチ
- 重量2.05kg (実測)
黒箱にはいっていて開封前からドキドキわくわくですね。使い始めたら使わないものかもしれないですが、PC買ったら最初に目にするのが箱ですからこの第一印象に少しでも大切にする感じ、嫌いじゃないです!

黒箱を開けると中からDellカラーともいう感じのシルバーにDellロゴが天板に印刷された筐体がでてきます。このコントラストも素晴らしい。

開けると中は黒。画面見るときとかやっぱり目に付く範囲は黒だと落ち着くというか引き締まった感じですね。

届いたモデルですが最新のDell XPS 15が第9世代 インテル Core i7 9750H 6コアなので少しだけ前のモデルですが、今使っているモデルが2015年式なので、そこからみたら誤差の範囲的な最新モデルです。
そしてこれから使っていくのに一番期待したのはGeForce内蔵ノートPCという点。
WinMRヘッドセットと組みあわせてMRアプリを実行したり、steamのオンラインゲーム楽しんだりするには今使っているのは少々つらくて、そろそろPC新調かなと思っていたので、この機会に初Dell PCを存分に楽しんでみたいと思います。
現在、Windows Update中で最新のWindows 10にしたら、Visual Studio 2019やSteamを入れて環境構築していきたいと思います。
わんくま同盟 横浜勉強会 #12
今年もやります。三者三様なネタ。
おいらはそろそろ本気で非同期処理とか手を付けていけるよ!ということで一番わかりやすくて、サクッと行ける部分を。
実処理は極力変えず、UI部分とそれを呼び出すところ「だけ」変えて非同期処理をさせてみます。
恐ろしく重い処理でも、UIが止まることがないという事例を見てくださいませw
ちなみにあんなのがこんなのに変わる予定です。まだ、ソリューションがあるだけでプロジェクトすらないけどw
お申し込みはこちら!終わったら中華街へGo!です。
首の皮一枚でつながってるのかな?ということで、今年もなんとか受賞することができました。
2005 年からなので14年目に突入です。
華々しいことなんて何一つしてないですが、今年もよろしくお願いします。
コード公開やアプリ公開より、オフライン活動を主に行ってきました。
従来リーチしていた技術者層とは別の層へのアプローチも多く、HoloMagiciansの活動以外はあまり表には出なかった感じでしたので、今期はもう少しアウトプットをふやせていけたらと思います。
まずは、Windows 10 IoTとか、Kinect for Azureとかかな。
2018年から11回連続の12年目となります。よろしくおねがいします。
すっかりと忘れ去っていたのでメモ。
CustomAction DLL を、In-Script(主に管理者権限で動かしたい場合などに使う)で動作させると、プロパティにアクセスできません。
そんなことはもうすっかりと忘れ去っていたので。。。
じゃぁどうするか?
というと、カスタムアクションのIDと同じIDを持つプロパティに値をセットしてやることで、パラメータを渡すことができます。
受け取るDLL側は、”CustomActionData” (IPROPNAME_CUSTOMACTIONDATA で msiDefs.h に定義)という専用のプロパティとして受け取ります。
1つしかないので、複数渡したい場合は、なにかしらのセパレータで区切る、コマンドラインのように /hoge=foo /huga=bar とするなど、工夫する必要があります。
CustomActionDataなんて扱ったの何年振りよ?というくらい前のことなので、思い出すまでにすげー時間がかかった。。。orz
ちなみに、WiX 3.x の場合はこんな感じ。
https://gist.github.com/Tocchann/e30105bb09d23cad6f386057deb0484e
|
HoloLens 2 with Remote Assist |
HoloLens 2 (device only) |
HoloLens 2 Development Edition |
ターゲット |
業務用途 |
企業開発者とIT部門 |
開発者全般 |
D365 Remote Assist |
〇 |
|
|
Commercial Use |
〇 |
〇 |
|
Azureクレジット |
|
|
500 USD |
Unity Pro & PiXYZ Plugin 3か月無料版 |
|
|
〇 |
デバイス制限 |
特になし |
特になし |
1ユーザ |
リテール価格(MSRP) |
125USD / 台 / 月 |
3,500USD / 台 |
3,5000USD / 台 99USD / 月 |
詳細は、5/6から始まるbuild 2019の中で発表される模様。こちらについては、現地から速報する予定です。
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 万) です。もちろんここまで来ると管理職の経験は必須ですが (ただし私みたいな低学歴 + 中途だと管理職のレールからは外れている企業が大半なのでおのずと零細企業での経験になります)。
なんだこの程度の年収かよ~って思う方がいらっしゃるかもしれません。東京近辺で管理職やられている方だとそう思うかもしれません。名古屋だと地価の関係で、この年収でも東京で言う 1,000 万クラスらしいです。ま~、私は超低学歴ですから、見えない壁 (学歴) がある日本において「自分の頑張りが反映できた」だけでも幸せなんだと思うようにしています。もっと上を目指せば大台突破できそうですが、これ以上となると同じ業界だと「コンサルタント」か「使用者側」しかないんですよね (BizREACH でのオファーを見る限り)。そんなのやれている自分が想像つかない... ですが、まだまだ頑張ろうと思っています。最近ホント頭まわらないくらいの年齢は感じるし... 今後 40 代になっても現役でエンジニアというのは、私には無理な気がするし(笑)
日本だと転職って使用者も雇用者もマイナスイメージを持っていること多いですけど、前向きな転職はいいと思いますよ。私はおすすめです!
HoloLensアプリでタイル表示にしたときにアプリ名が表示されないということでお悩みの貴兄に。

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

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

2008年の初受賞から11年目10回連続での受賞となります。
途中、審査時期の変更により有効期間が2年近い時期がありましたので、受賞回数と年数に差異がありますが、仕事内容や生活パターンが変わって、アウトプットも「雑誌/書籍執筆」→「blog/サンプルコード公開/アプリ公開」→「Blog/Web記事執筆」→「blog/コミュニティ活動」と変化してきましたが、その都度、周りの方に助けられながら活動してこれた成果だと思います。
特に今回は自分の満足が行く濃度のアウトプットができていなかった時期とかなさっていたため、再受賞は厳しいかもと内心思っておりましたので、再受賞できてよかったと思うと同時に、Microsoft MVPとしての期待値に答えられるように一層精進していこう思いを新たにしております。
今後とも、本ブログを始めとしたさまざまな活動へのご協力をよろしくお願いいたします・