「PC&Gadget」カテゴリーアーカイブ

新製品開発のご案内~花粉症対策用鼻腔装具「FABLE」~

blog_top

毎年4月1日に精力的に新しい製品を限定的に世に送り出しておりますが、今年2018年4月1日も、めでたく新製品の発表にこぎつけることができましたことをうれしく思います。

一点昨年までと異なりますのは、これまでのような個人ではなく「オモシロインク」という屋号を背負っての発表となったことであります。(今日現在はひーたんの屋号ではありますが)

今後とも末永くお付き合いのほど、よろしくお願いいたします。

なお、製品情報は以下の配布資料拝見いただきますようお願いいたします。

FABLE

Wio node + Azure Logic Appsでお手軽IoT【Wio node初期設定編】

こんにちわ。

先日とうとうインフルBを被弾してしまい、一週間ほど臥せっておりました。この季節ホントいろいろ萎えます。早く夏来ないかな。

さて、そんな冬に差し掛かる昨年秋のころ、SeeedさんからWio LTEという面白いプロダクトのハンズオンが企画され一瞬沸き立ったのですが、その時はそれほどLTEの必要性もなく、またLTEモジュール搭載のせいもあってかややお高めの値段設定もあってスルーしておりました。

が、実はその裏に自分にとってとても要件にフィットしやすいデバイスがすでにラインナップあったことを先日のHack-Chu2018の際に知りました。それがWio node。
巷ではすでに試してみた記事がたくさんあり、ネタ的には今更感がありますが、個人的にちょうどWio nodeの仕様にピタリくる要件があり、あーこれは一度試してみないと!

ってことで試してみました。

Azure 各種サービスとWio nodeでPCを物理制御したい

今回は明確に用途が決まっており、事務所に設置してある特殊用途PC(謎)の・・・

  • 状態監視
  • インターネット経由の電源制御

が目的です。
このPCが結構めんどくさくて、常時動いていてほしいんだけどそこそこの負荷で動いているので時々困ったことにハングアップするという曲者。
ハングアップ状態を検知したうえで、リモート(TeamViewerなりリモデ)での復旧が困難と判断されたときに、電源を強制遮断し再起動するという荒業を担ってもらいます。

構成図はこんな感じ。

matome

AzureのLogicAppsを中心に、いろいろと都合のいいサービスにつなげている状態です。
通常自分が見るUIは、監視用にPowerBIのリポート、緊急時に通知が来たBot経由で電源制御を行うといった感じです。

まずは図の緑枠のWio node単体の動作テストまで。
最終的には、温度センサーからの取得データをAzure上に蓄積し、さらには電源制御をBot経由で実装する予定です。

ということでとにもかくにも物がなけりゃってことで注文しました。今回はマルツオンライン。

https://www.marutsu.co.jp/

で、届いたのがこちら。

IMG_20180302_195911166_HDR

Wio node二つに、温度計測用のセンサーが二つ、電源制御用のリレーが二つです。制御したいPCは3台あるのですが、とりあえず2台でテスト運用してみることに。

Wio nodeの設定

まずはWio nodeをWeb APIから操作するための設定を行います。

これが結構ハマったなぁ・・・

流れはこんな感じ

  1. Wio nodeに電源投入
  2. スイッチ長押しして設定モードに突入
  3. 設定用アプリを立ち上げ設定開始(iOSまたはAndroid)
  4. 設定完了したらREST API叩いてテスト

これだけのはずが・・・当初自宅のWi-fiのセキュリティ設定のまずさもあって苦戦。結局Android版ではNGのまま、iOS版で設定完了。以下その手順

まずはWio nodeに電源投入。
電源用のカプラを用いるか、MicroUSBにモバイル電源を用意する。電源用のカプラに二次電池を搭載した場合、このMicroUSB端子からの充電にも対応する模様。おもしろい。

IMG_20180303_162638742_HDR

Android版設定手順(結局設定完了せず)

Google Playで「Wio link」で検索し、アプリをインストールします。

Screenshot_20180303-162721

上記ではすでに1デバイス登録されていますが、新規登録時は右肩の「+」をクリックします。

Screenshot_20180303-162725

導入するデバイスを選択します。
今回は当然「Wio node」。

Screenshot_20180303-162730

Android版はこのまま「Next」をクリック

Screenshot_20180303-162745

Wio nodeに接続するWi-fiを選択します。

Screenshot_20180303-162750

選択したWi-fiのパスワードを入力します。
(※なぜかこのwi-fiパスワードがうまく通らない瞬間もあった)

Screenshot_20180303-162755

Wi-fi接続が完了すると、該当するWio nodeが表示されるので、クリック。

Screenshot_20180303-162802

AndroidからWio nodeへファームの更新処理が渡されている(と思われる)

Screenshot_20180303-162818

同様にWi-fiのパスワードが渡される(と思われる)
この後、ここまで緩い点滅だった青LEDがはっきりとした短滅に代わるため、Wio node内部ではセットアップができているのではと思われる。
あとはパスワード設定したWi-fi経由でAndroid↔Wio node間で通信が成立すればセットアップ終了と思われるのだが…

Screenshot_20180303-162832

残念ながら何度やってもここで終了。

この時点でコマンドラインツールの存在を知るも、一旦手持ちのiOS機でテストすることを思い立ちiOSで設定実施。

iOS版設定手順(正常に設定完了)

 

 

 

IMG_0678

Android同様右上の「+」から設定開始。

IMG_0679

同じようにWio nodeを選択し

IMG_0680

ただしここでiOS版はちょっと動きが異なる。
Android版は上位接続用のwi-fiの設定が求められるが、まずWio nodeへの接続が必要になる。

しかも、画面の「Goto wifi list」を押しても無情に
「手動でiOSとWi-fi接続してくれ」とダイアログが出るだけ。
仕方がないので、iOSのWi-fi設定からWio nodeを探し出して接続する。

IMG_0682

接続後設定画面に戻って再度「Goto wifi list」をタップすると画面が切り替わり、ようやくWi-fiの接続リストが表示される。

IMG_0683

該当のwi-fiをタップし

IMG_0684

パスワードを入力し「Join」をタップ。

IMG_0685

するとAndroid版と同じようにWio nodeに接続しセットアップを開始するのだが・・・・

IMG_0686

あっけなく設定が完了する。
この時の青LEDの動きはAndroid版と同じなので、検証は必要だがAndroid版の場合、セットアップ後のキャッチアップがうまくいっていないのでは?と思われる。

IMG_0687

すでに一つ目のセットアップが完了しているが、二つ目も無事登録された。(両方とも、Android版で設定→NG→iOS版で設定→OKという流れ。)

 

コマンドラインツール

上記のパターンでiOS版を用意できない場合は、コマンドラインツールも用意されている。

今回はテストしていないが、八方塞がった場合はお試しあれ。

https://github.com/Seeed-Studio/wio-cli

REST API

すでに長くなっているけど、ここからが本番。

Wio nodeの最大の便利ポイントが、Seeed社が運用するクラウドサーバ経由で、セットアップしたWio nodeの操作ができること。
しかもわかりやすいREST API経由。

自分のWio nodeデバイス固有のアクセストークンが含まれたURLを、各デバイスに用意された仕様に基づいて投げてやると・・・

Screenshot_20180303-231318

こいつの場合はリレーの制御。
ON=1なのでパラメタ設定して「POST」。

Screenshot_20180303-231332

ほどなくしてレスポンスあり。
例によってJSONなので、PG処理も簡単。

IMG_20180303_005602791_HDR

実際のHWの動き。
バッテリーに接続されたLEDが、リレーON(1)で点灯。
(基板上の小さなLEDもONしているのがわかる)

IMG_20180303_005616504_HDR

リレーOFF(0)を送ってやると、OFFになる。

ネット経由ということもあり若干の遅延はあるものの、数秒あるかないか。今回の用途では十分なレスポンス。

初期セットアップに手間取ったものの、そこから動作検証まではものの3分。これは便利。

次回は、温度センサーからの測定値をAzure経由で処理する。

PowerBI 名古屋勉強会のご紹介と、名古屋のオープンデータを使った名古屋の紹介

こんにちは。
データ大好き榊原です。

先日こんなエントリーがありました。
「コンサルタントだった頃学んだ「議論がうまい人」とそうでない人の5つの差異」
(http://blog.tinect.jp/?p=45811)

この中で、「2.議論のうまい人は、「事実」からスタートする」
は非常に重要と考えておりまして、いろんな人と話をするときに結果を求めないただの雑談の中で「で、ソースは?」

とついつい口をはさみ嫌われるのが常態化しております。
2018年は寛容に生きたいと思います。

データ扱うならば、やはりその筋の方と相まみえないとということで今日はこちらに寄稿しております。
「Microsoft Power BI Advent Calendar 2017」
https://qiita.com/advent-calendar/2017/power-bi

名古屋でようやくPowerBI勉強会です!

永らく名古屋の勉強会の閑散さを嘆いておりますが、名古屋でやってほしい勉強会の一つ「PowerBI勉強会」をようやく名古屋でも開催できることになりました。

本家「Power BI 勉強会」
https://powerbi.connpass.com/

誘致に関して尽力いただいた名古屋主催:I社のY氏、本当にありがとうございます。

また、開催にあたりご快諾いただいた「PowerBI勉強会主催」のK氏、またS氏には厚く御礼申し上げます。

気になる開催日ですが、現在の予定では以下の通りです。

  • 日時:2018年2月10日(土)13:00~17:00(時間は前後します)
  • 場所:名古屋駅付近

※正式な情報は追って上記勉強会サイトにて行います。

東京の開催では毎回多くの受講者を集め、前回の第6回では105名の定員に対して117名の応募という人気・白熱ぶりです。
https://powerbi.connpass.com/event/69605/

初の名古屋開催、名古屋ってどんなところ?

ということで、初の地方開催である名古屋はどんなところなのか、さっそくPowerBIを使ってビジュアライズしてみようと思います。

利用したのは名古屋市の提供するオープンデータ。
このデータから、名古屋についてみてみましょう。

おっと?一筋縄にはいかない?

市町村の提供するデータなので、フォーマットは整っているものとしてまずは何もせずに取り込んでみました。

取り込んだのはこちらの情報
「年齢別人口(全市・区別) 、人口ピラミッド」
(http://www.city.nagoya.jp/shisei/category/67-5-5-7-0-0-0-0-0-0.html)

うーんむ・・・
全然だめですね・・・(ある程度は予測済み)
PowerBIでビジュアライズするにあたり、前段階としてデータを整頓するという作業がどうしても必要になってきます。
今回はそこのところを対応しつつ、名古屋の紹介をしたいと思います。

PowerBIで利用するための元データの修正

元データをExcelで開くとこんな感じです。
image
結果から言うと、以下の編集を施しました。

  1. 不要な見出し列(1~2行目)の削除
    →正しく列情報が取得できない
  2. 西暦のフォーマット変更
    →シリアル値を正確に取得してくれない
  3. 一部年度データの削除
    →取得範囲が異なり正規化できない
  4. 軸ラベルの付与
    →軸を基準としたソートができない
「1.不要な見出し列の削除」

取り込むデータはこんな感じになっており、データの注釈が1~2行目に記載されています。
これはPowerBIに取り込む際に邪魔になるので、削除します。

2017-12-26_06h14_18
列情報が正しく取り込めない


元データを削除する。

「2.西暦のフォーマット変更」

部分的に正しくシリアル値に変換してくれていましたが、そもそも年度別でフォーマットそのものが異なる箇所があったので、置換しました。

2017-12-26_06h19_27
「-」を「/」に置換し、フォーマットを統一しました。

「3.一部年度データの削除」

年度により、年齢分布の丸め方が異なっていたので、2004年以前のデータ、それから2017年も10、11月のデータを削除しました。
こういったところからも長寿化の傾向が見られますね。
2017-12-26_04h54_59

2017年10月から分類が増えてる!!!

「4.軸ラベルの付与」

グラフの軸にしたいデータが正規化されたデータではなく、年齢ごとの分類情報なので、そのまま取り込んだだけではきれいにソートしてくれません。いろいろ試してはみたのですが元データのままではうまくソートができなかったため、やむなくラベルにNoを振ることになりました。(なんかいい方法ないですかね?)

2017-12-26_06h27_32
頭の数値でソートされるため・・・
0~
10~
15~
20~
100~
105~
というような、よくあるダメなソート状態になってしまう。

2017-12-26_04h59_51
PowerBIに落とすとこんな感じに・・・こりゃあかん。

ということで、やむなく01~項番を振ります。
2017-12-26_06h33_18

これでこうなります。

2017-12-26_05h06_32
それっぽくなりました。
(さらに元データから総数をフィルタし、2017年9月でフィルタした後、階層別の降順でソートしています)

やっとで名古屋の紹介

ということで出来上がったのがこちら。

2017-12-26_05h13_13

男女別に見た年齢別人口構成比と、男女別人口比、年度別の人口推移を表示しています。

年齢別の構成比からは戦前~戦中世代の男女構成比に偏りがあるなーとか、ベビーブーマー強ェ!とかわかると思います。

私が興味深かったのは、年配で男女構成比がずいぶん偏っているにもかかわらず、2017年9月の男女構成比がほぼ50:50になっているところ。
やはりなんらか自然の力が働いていいるんでしょうか。

今回は紙面の都合上ここまでですが、機会があれば、この身近な名古屋のオープンデータを使ってPowerBIの勉強ができたらと思います。

今回の場合は、データの整頓に30分ほど苦戦した後うまく取り込めたら、グラフの表示部分についてはほんの数秒でできてしまっています。
ご存知の通り、この辺のビジュアライズ化の容易さががPowerBIのとてもいいところなんですが、元データがしっかり成形されていればいけないよ・・・というお話でした。

それでは、名古屋のPowerBI勉強会でお会いできること楽しみにしております!

Google Homeから適当にしゃべってLUISに自然言語処理させ、カレンダーに予定を登録させるというお話(其の一)

しばらくぶりのブログでございます。

ネタはいろいろあるんですが、ついついクオリティにこだわりすぎるあまりまとめきれず・・・

言い訳は見苦しいのでさっさと本題に参りましょう。

今回は、「Cogbot! – Cognitive Services, Bot Framework, Azure ML, Cognitive Toolkit(CNTK) Advent Calendar 2017」
のためのエントリーでございます。

https://qiita.com/advent-calendar/2017/cogbot

ということで、最近話題の機械学習についてのエントリー。
技術屋といいつつ全然技術屋らしくないことばっかり普段ボヤいているので、今回はちょっと頑張ろうかと思います。

最新のGoogle HomeとGAしたてのLUISで最先端!

今回の主役は「LUIS」。

正式には「Language Understanding Intelligent Service」といいます。
2017年12月13日にGAを迎えたばかりの、ホットなサービスですね。

何をしてくれるかというと、人間が投げかけた普段話している文章を、全体の文脈や文章の中に含まれている単語などから意味を理解し、理解した意味に沿って解析してくれるというものです。

(やってくれるのは文章の解析までで、その後何をするかはこちらで用意してやる必要があります。)

例えば・・・
明日の天気を知りたい場合、丁寧に言えば
「明日の名古屋の天気を教えてください」
でしょうが、実際に人との会話の中ではもっとフランクに

  • 「明日の天気教えて。名古屋の。」
  • 「明日の天気知ってる?」
  • 「明日天気どうかな」
  • 「明日名古屋晴れるかな」

といろいろです。

これまでのITサービスでは、このような自然な言葉の”揺らぎ”を吸収することができず決まった言葉でサービスに投げかける必要がありました。

それを解決し、自然な口語でコンピュータと対話できるようにする技術・自然言語処理が「LUIS」なのです。

今回は、このLUISを使って、もう一つ話題のGoogle homeから投げかけた言葉を解釈してカレンダーに予定を登録するという仕組みを作ってみたいと思います。

ここまで前置き。

LUISは人間とコンピュータの間の翻訳家みたいなもの

さて、全体の構成はこのようになります。

image

メインとなるLUIS以外にも様々な要素が絡んでますが、それを一つ一つ説明していると大変なので、本日は主にLUISの部分について解説していきます。

LUISは・・・

  1. 予定登録のためのいい加減な文章のテキストデータ(※インテント)を入力とし
  2. 予定登録のために必要な、日時や場所、予定の内容などの情報(※エンティティ)に分ける

ことをやってくれます。

※インテント 平たく言えば文章(特定の回答を持つ文章群)

  •  天気予報の回答を求める文章
  •  時刻の回答を求める文章
  •  ただの挨拶

※エンティティ 平たく言えば単語(特定の意味を持つ単語の集合)

  •  駅名(名古屋、大阪、東京、福岡、札幌)
  •  天気(晴れ、曇り、雨、雪、槍)
  •  時間の概念(今日、明日、何日、何時)

なので、LUISを利用する場合・・・

  • 自分が何を求めたいのか
  • ユーザーのどんな要望に回答させたいのか

を明確にすることが重要になります。

今回は「予定の登録」ということに的を絞っていますが、一般の人が想像するような賢いAI・・・
マルチなBOTを作ろうと思うと、無限のインテント登録とエンティティ登録が必要になります。
これはすごく大変。

自然言語処理の難易度をわかりやすいかどうかは別として例えてみると・・・

1.あいさつ・・・・容易

2.特定の回答・・・まぁまぁ容易
(天気予報とか、時刻の回答)

3.特定のジャンルのチャットボット(アニメで例えれば「四畳半神話大系」に関するBot)・・・やや困難
(ジャンルに関するインテントの準備とエンティティの準備がソコソコ多い)

4.広いジャンルのチャットボット(ガンダムに関するBot(作品は単発だが壮大なシリーズ構成))・・・かなり困難
(ジャンルに関するインテントの準備とエンティティの準備がかなり多い)

5.かなり広いジャンルのチャットボット(アニメ全般)・・・滅茶苦茶困難
(ジャンルに関するインテントの準備とエンティティの準備が半端なく多い)



100.人間のエミュレーション(無限大)

これを自動的にやる手法としては、昔よくあった人工無能のように、わからない質問に「それはなに?」と質問に質問で返して学習でしょうか。

今時な手法としては、不明な質問群を再帰的にAIに食わせて自己学習させていく感じでしょうか。夢は膨らみます。

ということなので、インテントとエンティティの材料集めの仕方や攻略アルゴリズムを得た人が勝ちということですね。

それをさらにAIに処理させることによって指数関数的に賢くなれるということになります。
もうこれは数多くこなしたほうがいいに決まっているので、やるなら早くやったほうがいいということです。

では予定登録のLUISを実装してみましょう

閑話休題。

では早速今回のケースを実装してみたいと思います。

LUISの基本的なサービス利用方法については、以下のブログがこんなブログより大変ためになるので是非参考にしてみてください。

LUIS 入門(Cognitive Services – 2017年12月版 – 1/2)
http://beachside.hatenablog.com/entry/2017/12/07/000000

LUIS 入門(Cognitive Services – 2017年12月版 – 2/2)
http://beachside.hatenablog.com/entry/2017/12/11/140000

お話は、LUISのサービス利用準備が整い、アプリを作る手前の画面から始まります・・・。

2017-12-23_00h38_45
「Create new app」をクリックし

2017-12-23_00h40_07
「Name」には任意のアプリ名を入力します。
「Culture」はかならず”Japanese”を選択しましょう。
「Description」はアプリに関する説明です。特に入力は不要です。
入力できたら「Done」をクリック。

2017-12-23_00h40_19
入力した通りのアプリが作成されたことを確認しましょう。

インテントの登録

2017-12-23_00h49_08
早速インテントを登録していきます。
エンティティから入力しても良いですが、まずは人間が発話する自然な文章を片っ端から入力していくのが良いのではないかと思います。
エンティティに引っ張られず、よい例文がたくさん並ぶと思います。

2017-12-23_01h02_30
こんな感じで、スケジュールの登録に必要な文章を入力していきます。
例文はちょっと整いすぎてますね・・・
もっと表現をバラしたほうが、最終的な学習精度が良いと思います。

この時点ですでに、名詞や助詞などに文章が区切られています。
単語の間に微妙にスペースがあるのが分かり、カーソルで単語にフォーカスすると単語ごとに[]で分割されていることが分かります。

エンティティの登録と関連付け

2017-12-23_01h04_20
続いてエンティティを登録します。
エンティティはエンティティの要素を一つ一つ登録してくのではなく、エンティティを包括する種類・カテゴリを登録します。

2017-12-23_01h04_35
例では「場所」のエンティティを登録しています。
これは、インテントの中にある「名古屋」や「半田」といった地名をまとめるエンティティです。

2017-12-23_01h07_22
同様に、スケジュールにおいてどんなことをするのかという「予定の内容」というエンティティを作成します。
今回のケースでは「打合せ」や「ミーティング」「出張」などがこれにあたります。
ちょっと例が悪く、このエンティティは相当な量を登録しないと精度が上がらなさそうですね・・・。

2017-12-23_01h09_19
さてここで一旦、インテントの中にある単語とエンティティをひもづけてみましょう。

文章の中にある地名に相当する単語をクリックすると単語の下に
「Browse prebuilt entities」
「予定の内容」
「場所」
と、登録したエンティティが表示されるので該当するエンティティをクリックして関連付けを行います。

2017-12-23_01h09_31
関連付けが終わると、エンティティ名に置き換わります。

2017-12-23_01h11_12
同様に「予定の内容」エンティティも関連付けます。

2017-12-23_01h13_37
エンティティに登録したい語句が複数の単語にまたがる場合、最初の単語をクリックした後登録したい単語までカーソルを移動し、末尾の単語でもう一度クリックすることで連続した単語でエンティティに登録することもできます。2017-12-23_01h13_51
出来上がりはこんな感じ。

が、これも非常に多くのパターンを登録しなければ精度は上がらないと思われます。
可能な限りエンティティは小さくまとめるようにしたほうが良いかと思います。

2017-12-23_01h16_20
ということで場所と予定の内容のエンティティの関連付けができました。

日付に関するエンティティの問題

肝心な日時が残っていますが、これが実はなかなか大変・・・。

LUISには、多くの方が利用するようなエンティティに関しては、学習済みの多くのプリセットエンティティが用意されており、日時についても相当するものがあります。

それが「Datetime」です。

2017-12-23_03h16_14

認識精度が高いことを期待して当初このPrebuiltエンティティを使っていたのですが、日本語で表現される日時のフォーマット(2018年1月22日15時など)はうまく認識してくれず、月だけエンティティ化されたり、時間だけエンティティ化されたりと最後まで癖がつかめませんでした
(諸先輩方、よい方法あったら教えてください)

故に最終的な結果もあまり芳しくない状態になってしまっています。無念。

2017-12-23_01h21_08
ということで、とりあえず日時の範囲だけでも正確に取得するために「日時」エンティティを作成し、関連付けしました。
このぼんやりとしたエンティティ・・・エンジニア的にはなんとも歯がゆいところであります・・・。
(推奨フォーマットはISO 8601 format)

インテントとエンティティの登録が終わったら学習させよう

2017-12-23_01h25_40
さて、インテントをいくつか(※)登録しエンティティとの関連付けが終わったら、登録したインテントをもとに学習させます。
画面右上の「Train](電車じゃない)をクリックします。

※長い文章、複雑な文章ほどインテントを多くしたほうが精度が上がります。

2017-12-23_01h26_04
学習が始まり・・・・

2017-12-23_01h26_11
学習が終了しました。

2017-12-23_01h26_24
では実際にきちんと認識してくれるか試してみましょう。
「Test」ボタンをクリックします。

2017-12-23_01h27_53
テスト用に文章を試すことができる入力フォームが現れるので、インテントを登録したように文章を入力してEnterキーを押します。
すると反転した文章が表示されます。
反転した文章の右下「Inspect」をクリックすると、入力したテストデータの解析結果を見ることができます。

今回は日時、場所、予定の内容について、日時のみ正確でした。
(個人的に内容は”パーティの打ち合わせ”まで認識してほしい・・・が登録インテント数が少ないので難しい)

2017-12-23_01h29_46
失敗した文章はインテントに登録し、エンティティの関連付けを行います。
これを繰り返して精度を上げていきます。
LUISはAPIも公開されているので、判定スコアの低い結果については自動的に学習用のインテントに取り込んで、管理者にエンティティ付けを行わせるようにすることで効率的に解釈の精度を上げていくことができるように思います。

2017-12-23_01h30_31
リトライ。正確に認識してくれました。
(インテントまんまだからそりゃそうでしょ・・・)

外部連携のためにアプリを公開

さて、ある程度学習とテストを繰り返したら、公開しましょう。
今回はこれだけでは終わりません。
入力はGoogle Homeからもらい、処理した後カレンダーの登録を終えなければいけないのですから!!!!

2017-12-23_01h31_18
画面右肩のタブ「PUBLISH」をクリックし、「Publish to production slot」をクリックします。

image
インテントの登録後学習が十分でないと、グレーアウトしてボタンが押せなくなっている場合がありますが、その場合は再度学習させましょう。

2017-12-23_01h31_30
公開プロセスが進み・・・

2017-12-23_01h31_33
公開プロセスが完了しました。

これで外部のサービスからも利用することができるようになりました。

2017-12-23_03h39_05
この時、後々サービス間での関連付けに必要になるKey情報をコピーしておきます。

2017-12-23_03h00_50_2
現在終わったのはこれだけ。
紙面の都合で、その他の部分は改めて別のエントリーとします。
(そもそもここまでの手順って、上述のブログであったような・・・orz)

Logic Appsで全体の処理の実装

さて、ではその他の仕組みと連携させましょう。
AzureのLogicAppsで全体を組み立てていきます。

2017-12-23_01h34_55
LogicAppsの手前、Google Homeから取得する、解析元になる文章は、WebHookでIFTTTから取得します。
そのあとの変数とか日時データの取得は苦し紛れの対応なので、とりあえず無視してください。
みなさんはもっとスマートな実装を目指しましょう。
(いい方法あったら教えてください)

2017-12-23_01h36_14
LUISの設定は、アクションの登録から「LUIS」で検索して「LUIS – Get prediction」を選択します。

2017-12-23_01h37_04
まずはどのLUISサービスに接続してアプリを利用するのか判別するために、先ほどコピーしておいたKey情報を「API Key」エリアに入力します。
「接続名」は任意の文字列でOK。
「作成」をクリックします。

2017-12-23_01h40_41
「LUIS – Get prediction」アクションが作成されると、また入力フォームが現れます。
「App Id」はクリックすると、Keyに紐づく先ほど作成したLUISアプリが表示されるので、選択するだけです。
「Utterance Text」は解析させたい文章・文字列なので、Webhookから送られてきた文章を指定します。
(本来はその他の処理も考えてJSONで送りたいところですが、今回は簡潔にするためプレーンテキストで送っているため本文をそのまま処理しています。)
「Desired Intent」は、処理させたいインテントを指定することができます。
前処理で確実に「予定の登録」インテントで処理することが分かっている場合はプルダウンから「予定の登録」を選択しても良いですが、通常はデフォルトの「Desired top scoring intent」が良いでしょう。

インテントが複数登録されていた場合、文章の解析中に判定されたスコア(最も適切なインテントである確率)が一番高いインテントが自動的に利用されます。

LUISの処理登録はこれだけです。

続いて、処理後の値をカレンダー登録させるための処理を設定します。

LUISで処理後は、以下のようなJSONが返っていています。

{“query”:”2018 年 1 月 22 日 16 時 名古屋 で 打ち合わせ”,”topScoringIntent”:{“intent”:”予定表の登録”,”score”:1.0},”intents”:[{“intent”:”予定表の登録”,”score”:1.0},{“intent”:”None”,”score”:0.008573224}],”entities”:[{“entity”:”2018 年 1 月 22 日 16 時”,”type”:”日時”,”startIndex”:0,”endIndex”:19,”score”:0.916193664},{“entity”:”名古屋”,”type”:”地名”,”startIndex”:21,”endIndex”:23,”score”:0.99994874},{“entity”:”打ち合わせ”,”type”:”予定の内容”,”startIndex”:27,”endIndex”:31,”score”:0.9998853}]}

2017-12-23_01h44_26
Logic Appsが解釈してオブジェクトごとに分けた結果

この中で必要なデータは、解析後のエンティティのカタマリなので、「Entities Array」を「For each」アクションでエンティティのアイテムごとに取得し、エンティティのtypeで判別してそれぞれ予め準備しておいた、エンティティに対応する変数へ格納します。
(もうちょっとスマートにならんかなコレ・・・)

2017-12-23_01h43_01

で、準備できたエンティティのデータをようやくカレンダーに登録します。

2017-12-23_01h44_43
が、ここで問題が・・・。
Google Homeからやってくる日付データはまんま日本語の文字列です。最近はある程度のフォーマットでまとまっている場合、うまいことパースしてくれるシステムもあるのですが、Logic Appsではそれがうまくできず、取得した日付データを用いてのカレンダ登録は断念しました。ぐぬぬぬ無念・・・

LUISを使うことが主テーマなので、自然言語処理で得られた日付のエンティティデータを後続処理でISO 8601規定に則ってフォーマットしてからGoogleのAPIに投げるなどしないといけないですね。

お恥ずかしながら、今回は現在時刻で「仮登録のスケジュール」として登録し、あとで予定表を手動で治すというクソオペレーションでお茶を濁すことと相成りました。
絶対直してやる。
(「終了時刻」と「開始時刻」の”デフォルト開”とか”デフォルト閉”は現在時刻の取得アクションから取得したデータを投げてるだけですスミマセン)

ということで、一通りの処理が作成できたのでテストです。
(例によって細かいチューニングはありますが・・・)

今回の動画で実際に取得したEntities Arrayのデータ。

Entities Array
[
{
“entity”: “2018 年 1 月 22 日 16 時”,
“type”: “日時”,
“startIndex”: 0,
“endIndex”: 19,
“score”: 0.916193664
},
{
“entity”: “名古屋”,
“type”: “地名”,
“startIndex”: 21,
“endIndex”: 23,
“score”: 0.99994874
},
{
“entity”: “打ち合わせ”,
“type”: “予定の内容”,
“startIndex”: 27,
“endIndex”: 31,
“score”: 0.9998853
}
]

で。登録された結果です。

2017-12-23_02h20_08

肝心の日付が・・・

さて、長くなりましたので、一旦本日はここでお開きといたします。

LUIS前後のLogic Appsの処理の解説や、日付処理のリベンジはまた改めてやりたいと思います。

長い時間お付き合いいただきありがとうございました。

 

【PC&Gadget】今週末は第26回SharePoint勉強会

de:codeの次のイベントはコレ!

今週末は、大阪にてJPSPS第26回SharePoint勉強会が開催されます。
日時 : 2017/5/27(土) 13:00~18:30(12:30から受付開始予定です。)
会場 : SCSK株式会社 様 北浜オフィス セミナールーム
大阪府大阪市中央区北浜1-8-16 13F
大阪証券取引所ビル

まだ若干席に余裕があるようなので、関西方面の方はぜひ!

お申込みはこちら

[大阪]Japan SharePoint Group 勉強会 #26
(https://jpsps.doorkeeper.jp/events/59733)
[大阪]Japan SharePoint Group 勉強会 #26

告知用チラシ

告知をお手伝いいただけるというご親切なお方はこちら是非ご利用いただき、社内などご掲示ください。
告知用チラシ(pdf版 JPSPS26大阪開催案内0518 )

【PC&Gadget】Hyper-V上に構築してある仮想環境のネットワーク速度が遅い

冬場はどうもいろんな動作がモッサリ遅くなる

もうすぐ春ですね。
少しずつ暖かくなってきてなんだかワクワクしております。

さて冒頭とは全然関係ないのですが、最近ちょっと困ったことがあったので備忘録的に。

私の職場では、できればみな平等に高速なマシンを・・・
ということで、事務所でいちばん高速なマシンにHyper-V Coreを仕込み、そこに構築した仮想マシンにリモートして作業するということをしております。
その他、お客様用のテスト環境であったり、サンドボックス的な環境であったり、ローカルではありますが好きに環境構築できる状況に非常に満足しております。

常に負荷かけた状態でぶん回すようなことをしないので、相乗りしても快適に利用できているのですが・・・

あるとき、気になることがありました。

「アレ?ネットワークの速度が遅い?」

大量のファイル転送やネットからのダウンロードなどを行っていなかったせいもあり、 それまで特に気にならなかったのですが、あるときソースコードの圧縮ファイルを事務所内のNASからコピーしようとしたところ、明らかに転送速度が遅いではありませんか。

100Kbpsとかそんな感じ。

うーん、なんだ?

仮想マシンでネットワーク通信速度が遅い場合の対処法

対象の仮想マシンを再起動したり、ホストを再起動したりしましたが一向に治らず。
(他のマシンは安定しているものの)中継しているハブの故障を疑い、ハブを変更するも治らず。
まさかと思いネットワークケーブルを交換するも治らず。

うーむ、あとは・・・

  • ホストのネットワークカードの故障
  • ホストのネットワークカードのドライバの問題
  • Hyper-Vの仮想スイッチのパラメタの問題

となり、まずは設定だけでなんとかなりそうなHyper-Vの仮想スイッチの問題を探るべくググってみました。

見つかったのがこれ。

「Hyper-V の仮想マシンでネットワーク通信速度が遅い」
https://www.ipentec.com/document/document.aspx?page=windows-hyper-v-degraded-network-performance

対策1、2は確かにあるなーと思い、まずはドライバを更新するも変化なし。

ネットワークアダプターの再設定はいろいろとややこしくなりそうだったので、対策3を先に実施してからやってみることにしました。

対策3はネットワークカードのオフロード処理を無効にするとのこと。

いくつか設定項目がありますが、効果があったのが「 Large Send Offroad V2 (IPv4)」をOFFにしたとき。

他にもいくつか対応すべき点はありますが今回はここでした。

対策はわかったもののスッキリしない。

が、ここで問題が。

個人的にはなぜ「- Large Send Offroad V2 (IPv4)」が影響したか知りたいのです。
対症療法はできても同じことを繰り返しかねないので、原因をキチッと排除したいのですね。
が、残念ながら本ページにはそれがなんであるかまでは説明されておりませんでした・・・
(とはいえとりあえず解決に至ったので感謝いたしております。ありがとうございました。)

いろいろ調べてたどり着いたのがココ。

「VMwareとTCP Segmentation Offload (TSO)」
http://www.ginnokagi.com/2008/05/vmwaretcp_segmentaion_offload.html

原因知りたい・・・とは言ったものの、ちょっと専門外すぎて理解できずでした。

大雑把に言うと、ハードウェアNICのためのネットワーク高速化のための技術が、仮想化された環境と相性が悪いということのようです。

まだまだ世の中知らないことが多い。

日々勉強です。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Windows Server 2016 Hyper-V [ 樋口勝一 ]
価格:3456円(税込、送料無料) (2017/2/27時点)

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

ひと目でわかるHyper-V Windows Server 2012 R2版 [ Yokota Lab,Inc. ]
価格:3672円(税込、送料無料) (2017/2/27時点)

2016年クリスマス もSwayで揺れ動く僕の心

Swayウォッチャーが見るSwayの2016年

※このエントリーを「Offie365 Advent Calendar 2016」とすべてのOffice365ユーザ、開発者に捧げます。

さて、昨年のOffice365勉強会でSwayに関するLTをし、またちょうど一年前のクリスマス、Office365 AdventCalendar 2015でSwayに関するエントリーをして以来、ひそかにSwayをウォッチしてきました。

まぁ先に結論から言いますと・・・

あんまり変わってない・・・

Office365本体については、本体をはじめとして、SharePoint、OneDrive、その他新機能追加などなど盛りだくさんの内容で、まったくと言っていいほど追いつけていない状況です。

がしかし当のSway、それほど変わっていない・・・・

しかししかし全く変わっていないと言うわけではありません。

Office365製品の動きが活発だった今年6月にはOffice Blogsに以下のエントリーがあり、
「オッ、なんか動き出すか!?」と期待に胸を膨らませました。
「3 new Sway capabilities for Office 365 subscribers」
https://blogs.office.com/2016/06/28/3-new-sway-capabilities-for-office-365-subscribers/

特に目立った機能ではないのですが、それでも単独のアプリに機能追加されているのですから、期待せずにはおれません。
※最後のページに表示される「このページはSwayで作成されました」ってのをOFFできるようになったのは大きなトピックですね。

2016-12-25_22h45_38

またSwayの大事な要素であるデザインテンプレートがちょっぴりアップデートされていました。

「Sway design tips and new templates」
https://blogs.office.com/2016/08/17/sway-design-tips-and-new-templates/

さらにはOffice周りのドキュメント、PowerBI周りへの連携や、テキスト回りのアップデート

「Sway adds access to “Recent” Office documents, support for Power BI and PollEverywhere.com embeds, text editing updates and more!」
https://blogs.office.com/2016/02/19/sway-adds-access-to-recent-office-documents-support-for-power-bi-and-polleverywhere-com-embeds-text-editing-updates-and-more/

など目立ちはしませんが、ちょっとずつニーズに回答しているような雰囲気とも取れます。

目立ったアップデートが多くないのは、基本機能としては「必要以上に触らせない」特徴を残しつつ、ポイントを抑えたアップデートで堅実に成長させているとも受け取れます。

なんにせよ引き続きウォッチは続けていきたいところです。

 

Swayとはなんなのか2016

Swayがなんなのか?という問いについても、結局基本的な機能に目立った変更がなく新たなヒントが見つけられないままのため、個人的には「プレゼンテーションツール」というよりは、「写真を中心としたこじゃれた情報共有ツール」という抽象的評価から抜け出せません。

なんだか否定的な物言いに担ってしまってますが、”Sway”やはり「手軽に写真をちょっとおしゃれに見せるツール」としてはまだまだ他に似た良いツールが見当たらないため、特定の用途についてさらっと作りたい!という状況においては役に立つと思います。

  • 社員旅行の写真共有
  • 会社付近のアフター5スポットの食べレポ
  • イベントの振り返り
  • デザインワークのポートフォリオ
  • ポエム

といった、過度の情報編集を必要としない用途にはぴったりのOfficeツールです。
ああ、言い方を間違えました。

  • 誤:「過度の情報編集を必要としない」
  • 正:「過度の情報編集をしてはいけない」

です。

Swayで過度の情報編集はダメ!絶対!

PowerPointは非常によくできたプレゼンテーションツールですが、使い方を間違えると情報過多になり、はたして何を伝えたかったのか、ボヤけてしまいます。プレゼンテーションの本質は伝えることですから、「伝えたいこと」に要点を抑えて作成する必要があります。
※そういえば、どこぞの大企業でパワポ禁止令的な御触れが出たとかなんとか、あれも使い方誤った行く末じゃないのかなぁと。

おしゃれに見せるツールも情報(文字)が多いのはダメです(意識的に文字を多くする場合はもちろんOKですが)
アップルのデザイン、公式サイトもプロダクトも、潔く削ってシンプルにまとめてます。
一般的な例でいえば、グっと響く広告のコピーもたいてい一言で言いきってます。
伝えようと頑張りすぎるとむしろ伝わりにくくなる、ハリネズミのジレンマですね。

Swayでもあそこが気に入らない、ここが気に入らないと手を入れだすと、編集に制約がある(あえて制約を設けていると思われますが)Swayではどんどんストレスが溜まっていき、目も当てられない仕上がりになってしまいます。
制約がどうしてあるのか考えると、なるほど、やりすぎちゃいけないのねということに気が付けるのかと、そう思います。

Swayをうまく使うには

そんなSwayを使いこなすには、いくつかのコツがあります。
そのコツをまとめて「Sway五か条」としてみました。

Swayの使い方五か条
  1. 画像を多く用意せよ
  2. 詩的にまとめよ
  3. 多く語るなかれ
  4. 欲張ることなかれ
  5. 「リミックス」を活用せよ

そんな五か条を守った模範的回答となる「My heart sway in christmas 2016」作成してみました。

 

来年もよろしくお願いいたします。

【PC&Gadget】Let’s “Sway” with music.

■寄稿:Office 365 Advent Calendar 2015

S5T20151227050448

今日のコンテンツはOffice365の「Sway」について!
このコンテンツは、

「Office 365 Advent Calendar 2015」
http://www.adventar.org/calendars/790

に寄稿させていただいています!
他の方のOffice365コンテンツ、有意義・有用なものばっかりでちょっとこのコンテンツがかすんで見えちゃいますが・・・。

本編は以下のコンテンツ「Sway」でご覧いただけます。最大表示でお楽しみ(?)ください

~失敗しない家作りを経て完成した我が家で始める DIY(Do it yourself=手作り/自作) ライフ。できることは自分でやり、無駄な浪費や使い捨ては排除し、人と自然の恵みに感謝して、日々の暮らしを創りだします。~

ブログランキング・にほんブログ村へ
にほんブログ村
にほんブログ村 住まいブログ DIYへ
にほんブログ村
ランキング参加始めました。駄文ですが、ほんのチョビっとでも役に立ったと思われたらクリックお願いいたします:-)

【PC&Gadget】WordPressでの記事投稿・編集時に「403」

◆記事投稿・編集ができない・・・。

画面_20151207134143

ブログリブートとともに久しぶりに運用を始めたWordpressでありますが、なぜか意味不明の
エラーを吐きまくります。(エラーの意味は解りますが原因が不明ですね。)

サーバーは安価でフレンドリー、特に速度面での不満もないロリポップを利用しておりますが
当該Wordpressはロリポップの「簡単インストール」機能を用いてインストールしたもの。

その簡単インストール機能に起因するものかと思ったのですが、どうやら違うようです。
別のロリポップの設定が関与している模様。

「[ロリポップ] WordPressで403エラーが出るのはWAF設定が原因かも」
http://www.ikedahayato.com/index.php/archives/18115

WAFとは、外部ネットワークからの不正アクセスを防ぐためのソフトウェア(あるいはハードウェア)であるファイアーウォールの中でも、Webアプリケーションのやり取りを把握・管理することによって不正侵入を防御することのできるファイアウォールのことである。
WAFとは 「Webアプリケーションファイヤーウォール」 ワフ: – IT用語辞典バイナリ

だそうで。
仕組み的にWordpress側が今後何らかの対策をするのかな。

~失敗しない家作りを経て完成した我が家で始める DIY(Do it yourself=手作り/自作) ライフ。できることは自分でやり、無駄な浪費や使い捨ては排除し、人と自然の恵みに感謝して、日々の暮らしを創りだします。~

ブログランキング・にほんブログ村へ
にほんブログ村
にほんブログ村 住まいブログ DIYへ
にほんブログ村
ランキング参加始めました。駄文ですが、ほんのチョビっとでも役に立ったと思われたらクリックお願いいたします:-)

何を思ったかAdvent Calendar 2015

Advent Calendarって普通は複数人で寄ってたかってやるもののような気がしますが(未確認)、最近さぼりがちなDIYブログのエントリーを奮起させるためにも作ってみました。

「SHINYA.NAGOYA 私的DIY Advent Calendar 2015」
http://www.adventar.org/calendars/1264

ネタは十分あるんですが、コンテンツ化が間に合うか・・・。
なんとか頑張ってみたいと思います。