2017年12月27日水曜日

Azure の Web App Bot(Bot Framework)の Teams チャンネルが繋がらない場合の対処法

なんかバグらしいですよw(2017年12月現在)
https://stackoverflow.com/questions/tagged/microsoft-teams

Azure の Bot Framework (Web App Bot とか Bot Channels Registration とか Functions Bot とか)を Microsoft Teams チャンネルと接続してもサーバーにメッセージが送られないという問題があります。

で、どうすればいいかというと、なんと!
  1. Microsoft Teams チャンネルを追加する前に Skype チャンネルを追加します!
  2. それからMicrosoft Teams チャンネルを追加!
  3. すると動くwww
もし先に Teams チャンネルを追加してしまっている場合は、Skype 追加してから Teams 消すと動きます。(私の環境では消しただけで動きました超意味不明w)


早く修正されるといいなー。お試しあれ。

2017年12月20日水曜日

microbit にネジをつけると色々捗る

micro:bit の大きな GPIO 端子にはバナナクリップやワニクリップを繋ぐことができますが、何度もガシガシしてると傷ついてしまいそうで心配になります。
そこで、Kitronik の電源ボードを参考に、GPIO 端子にネジ(ボルト)を付けてみたところ、すごく便利だったので記事にしてみました。

なお、この記事は microbit Advent Calendar 2017 の21日に参加しています。

作り方

まず、以下のものを用意します。
※写真のスペーサーは 10mm です;
  • 皿ネジ×5個:サイズ M3、長さ 5mm
  • スペーサー(オネジ・メネジ)×5個:サイズ M3、長さ 5mm
  • ナット×5個:サイズ M3
通電させたいので、いずれも素材は黄銅(真鍮)、メッキはニッケルのものが良いです。
ネジは皿です。なべネジだと隣接する端子に接触してしまう恐れがあります。
画像内の「お菓子の箱の紙」は絶縁用に用意したものですが、お金に余裕のある人は素直に絶縁ワッシャーを用意すべきだと思います。(でも後記の理由により要らないかも)

で、それらをこんな感じに取り付けます。
※しつこいようですがこのスペーサーは 10mm です;
ネジ・micro:bit・絶縁体・スペーサー・ナット、という順番です。
ちなみに、こちらの記事によると micro:bit の裏側の GPIO 端子(っぽいもの)はどこにも繋がっていないらしいので、そもそも絶縁する必要もないかもしれません…未確認ですが…(^o^;)

さて、これらを取り付けるだけで、なんと micro:bit が!
※既にご承知の通り 10mm です
立ちます!(爆)

LED も見やすくなるし、操作もしやすくなるので個人的にはこれだけでもやる価値はあると思います。まじで。
ただし、うっかり鉄板などの上に置くとショートするのでご注意くださいw
ちなみに写真のように 10mm のスペーサーを利用すると、より安定します(>▽<)b

そして当初の目的通り、心置きなくワニれます。
ネジ山は気にしない派
さらにナットで足を挟めば……
足はかぎ状にすると良い
ブレッドボードに刺せれて、これまた便利!
しかも立つ!
さらにさらに、ユニバーサル基板をなんやかんやすることでオリジナルの電源ボードなんかも付けることができます!ヽ(=´▽`=)ノ
せっかくなので圧電サウンダとブザーとLEDも付けた
コンパクトかつコードレスなので持ち運びやすくなって、超絶便利です。
こういった使い方をする場合、スペーサーの長さを 5mm にすることがポイントです。
皆さんお待ちかね 5mm の写真です
写真では私の無計画な半田付けがそれを台無しにしていますが、5mm スペーサーだと基盤がうまいこと電源用コネクターに乗っかって、安定することが分かるかと思います。

このオリジナル電源ボードの作り方も、いつか記事にしたいと思います。

おわりに…

ネジとかナットってホームセンターとかだと100個単位とかでしか売ってなくて全然安くないし、そもそも鉄ユニクロとかしかなかったりするので、電子部品屋さんで買ったほうが良かったりしますよねー。

初めてアキバの西川電子部品さんで買ったんですが、「全部で60円!」とか言われたときはなんか申し訳ない気持ちになりましたw

おしまい!

2017年12月4日月曜日

microbit で温度計(音とアニメーション付き)

micro:bit(マイクロビット) のJavaScript ブロックエティターで、音とアニメーション付き温度計を作ってみました。
簡単なスクリプトなのに、意外と覚えることが多かったので解説します。

ソースはこちら


まず、「ずっと」ブロック内で「LEDに表示」を使いアニメーションをさせています。
コードエディターであれば「basic.showAnimation()」を利用することができますが、ブロックは用意されていないので、このような方法を用いました。
なお、「LEDに表示」のインターバルは 400ms です。(400ミリ秒後に次のブロックへ処理が進みます)

そしてアニメーション後に「表示を消す」をおこなっています。
これをしないと、アニメーション最後の表示が、その後に実行される「文字列を表示」のスクロールに巻き込まれてしまいます。

「音を鳴らす」で音も出るようにしてみました。
これによりずっとビッビッ言うウザい温度計になりますw
なお、この音を聞くにはイヤホンなどを、端子0番と GND 端子に接続する必要があります。
私はワニクリップで本体が傷つかないようにネジを通して繋いでいます。
つなぎ方はシミュレーションを参考にしてください。
ただし結構大きな音なので、耳には付けないほうが良いです。

最後に温度を表示するように記述していますが、ポイントは「数を表示」ではなく「文字列を表示」を使っていることです。
温度の数字だけであれば「数を表示」で良いのですが、温度に単位(℃)として "C" を付けたかったので、数字 + "C" をして文字列化しているためです。

また、こっそり温度を -3 していますが、これはそもそも micro:bit が返す温度は micro:bit の CPU の温度なため、周辺の温度より少し高い数値が返されるからです。
そのため少し減らして、つじつまを合わせているのです;
必ずしも -3℃ することで正しい温度が取得できるわけではありませんが、私の生活環境下では概ね許容できる誤差で温度を表示してくれました。(^_^;)

おしまい

2017年11月26日日曜日

microbit の使い方などのまとめ

micro:bit(マイクロビット)を実際に使ってみて書いている備忘録です。
随時更新中です。

WEBサイト

電源の入れ方・電力供給方法

以下のいずれかで電源が入ります。
  • PC と USB(マイクロB)ケーブルで繋ぐ
  • 電源用コネクタと単4電池2本(1.5v × 2 = 3v)を繋ぐ
  • 3V 端子と GND 端子を利用して 3V の電源を供給する
  • 裏面の給電パッドへ直接つなぐ
https://www.kitronik.co.uk/blog/powering-your-bbc-microbit/

電源の切り方

文字通り電源を切るw(電池を抜くなど)
電源スイッチなどというものは存在しない!
PC じゃないから電ブチしていいみたい。

初めて電源を入れた時

予めちょっとしたプログラムが入っていて、それが実行されます。
  1. ハロー!
  2. Aボタンを押せ
  3. Bボタンを押せ
  4. シェイクしろ
  5. 傾けてドットを合わせろ
  6. グレイト!
  7. さぁコーディングしようぜ!
という流れのプログラムです。

リセット方法

裏側のボタンをぽちぃー
するとプログラムが最初から実行されます。

MICROBIT ドライブとして認識されない!

百均などの充電専用USBケーブルでは、電力供給はできるけど、ドライブとしては認識されないので注意。
ちゃんとデータ送受信が可能なケーブルを使いましょう。

Javascript と Python の違い

機能的な話ね。
Javascript でしかできないこと
  • LED に当たる光の明るさを取得
  • Bluetooth の利用
Python でしかできないこと
  • Speech モジュールの利用
  • 浮動小数点値の利用
他にもあるかも。

Javascript エディターで気をつけること

どうやら正確には TypeScript らしい。
  • 1/5 も 4/5 も 0 が返される。(切り捨て)
  • 色々と使えないメソッドがある。(Math.ceil とか Array.slice() などなど)
    基本的にブロックが用意されていないものは使えない。
    コードエディタであれば複合代入演算子(+=とか)は使えるけど、ブロックエディタには戻れなくなる。
  • 配列のすべての要素は同じ型じゃないとダメ。
  • シミュレーターは必ずしも正確ではない。
    例えば「数を表示」ブロックを繰り返すと、数字が連続して表示されるが、実機では1画面分区切られて表示される。

PCとシリアル通信

USB ケーブルでシリアル通信ができます。

Windows ではドライバをインストールする必要があるみたい。
micro:bit 挿しても未インストール時はこうでした。
インストールしたらこうなって COM3 として使えるようになりました。
なお、ドライバーをインストールする時に micro:bit が挿さってると怒られるので抜いとくこと。
古いドキュメントへ飛ばされたり 404 へ飛ばされたりするかもしれないけど、最終的に arm MBED のサイトから「mbedWinSerial_16466.exe」をダウンロードできれば正解と思われ。(MBED ってのは micro:bit の兄貴分みたいなやつらしい)
投稿時点ではこれが最新のページかな?

ボーレートは115200。
デバッグの為であればシリアル通信ができるフリーソフトなどを利用しましょう。
プログラムから利用したい場合は、
  • Python なら pyserial
  • Node.js なら Node-Serialport
  • Node-RED なら serial ノード
あたりを利用すると良いのではないでしょうか。しらんけど。

3V 端子から供給できる最大電流

公式サイトの安全のアドバイスからリンクされている虎の巻(PDF)では 100mA までと書かれている。

micro:bitの電源供給について
上記サイトでは 90mA まで、とのこと。

端子に使えるネジ(ボルト)やナットの種類

ネジって素材とかメッキとかアホみたいに種類があるので間違えて絶縁ネジとか買ってしまわないように注意。
  • 形:皿ネジ
  • サイズ:M3(長さはご自由に)
  • メッキ:ニッケル、クロメート(ユニクロ)
  • 素材:銅(黄銅、真鍮)、アルミ
より詳しい記事を書きました。

Bluetooth で接続

AとBボタンを押しながら、リセットボタンを押すとペアリングモードになる。

micro:bitモバイルアプリの使い方

iPhone のブラウザでコーディングして、micro:bit のアプリで micro:bit へ送信できました。
Bluetooth を利用して micro:bit と通信する方法は勉強中(むずい。特に親機(?)側が)

2017年11月4日土曜日

音声認識 Speech to Text サービスの無料枠を比較

音声をテキスト化してくれるサービスの無料枠はどんなもんかまとめ。
2017年11月現在の情報です。

Google Cloud Speech API

60分まで無料(たぶん毎月)

Bing Speech API

毎月5000回無料(まじで?)
送れる音声データは15秒まで。

BlueMix Watson Speech To Text

毎月100分無料・30日使ってないと消される。
一度に送れる音声はストリーミングも一括送信も 100M まで。

docomo 音声認識API【Powered by NTTテクノクロス】

個人利用限定・AndroidとiOS用SDKのみなので試してない。

docomo 音声認識API【Powered by アドバンスト・メディア】

基本法人向けで開発キーの利用期間は90日間、とのことなので試してない。

2017年11月3日金曜日

at コマンドで秒を指定する方法

最近は cron がブイブイ言わせているようですが、1回きりの処理では at コマンドのほうがラクチンです。私は。

まぁ、そんなことはどうでもよくて、秒まできっちり指定したい場合には以下の方法が(環境によっては)使えるらしいです。

2017年12月01日15時00分30秒を指定したい場合。
$ at -t 201712011500.30
というように、「.」に続けて秒を指定すればOKらしいです。
-t オプションについてはググってください。

ただ、残念ながら Raspberry Pi の Raspbian では無視されてしまうようです。
(.30とか追加してもエラーにはならないが00秒で実行される)
なので実際に機能しているところは見たことありませんw

そもそも Raspberry Pi の Raspbian にはデフォで at コマンド入ってないので
$ sudo apt-get install at
する必要があります。

私は音声認識でタイマーをセットさせたかったので、0秒から59秒の sleep を含んだシェルを用意するという力技で解決しました。

2017年12月01日15時00分30秒を指定したい場合。
$ at -t 201712011500 -f ./timer30.sh
timer00.sh のなかには sleep と実行したいコマンドが記述されています。
かなり頭の悪い方法ですが cron でも使えるかもしれないです。(試してない)

つーか
$ at -t 201712011500 -f ./timer.sh 30
とかいう感じに引数指定できないんですか?
なんかいい方法あったら教えてください。

2017年10月30日月曜日

ChatBot(チャットボット) を無料で作れるツール・サービスまとめ

個人で利用できて無料プランがあるチャットボット作成サービスのまとめ。

2018年8月更新時点での無料プランの場合の情報。
2017年11月時点での無料プランの場合の情報。
サービス名ボット数APIコール数インテント数
シナリオ数
エンティティー数
クエリー数
連携
Repl-AI11,000 コール/月制限なし制限なしLINE
Facebook
API
Watson Assistant (旧Conversation)510,000 コール/月10025API
hachidori210,000 コール/月20--LINE
Facebook
Dialogflow集中しなきゃOK無いっぽい無いっぽいGoogle Assistant
LINE
Facebook
Twitter
Slack
Dialogflow Web Demo
Kik
Skype
Spark
Telegram
Tropo
Twilio
Twilio Programmable Chat
Viber
Amazon Alexa(?)
Microsoft Cortana
API
一見すると Dialogflow 一択のようにも思えるが、実際使ってみると会話フロー構築で弱い面がある。
それぞれを使ってみたレビューは以下の通り。

Repl-AI

https://repl-ai.jp/
docomo が提供するサービス。
ドキュメントやエディターはもちろん日本語なので、とてもわかりやすい。
エディターはボックスを線で繋いで作るという仕組みなので、簡単に使いこなせるようになるが、その仕様上、複雑な会話フローや大量なパターンを作ろうとすると破綻しがち。(その状態で整列ボタンを押すと死ぬw)

また、会話フローの条件で or が使えないことも地味に痛い。
単語の抽出(System Entities っぽいもの)は、場所や時刻、金額などが取得でき、特に人名が取得できる点はなにかと便利。
反面、辞書機能は同義語を定義する程度のもので、Entity として取得したりはできない。

LINE と Facebook とは簡単に接続できるが、Web サイトにサクッと載せられるような機能は最上位(Enterprise)プランにしか無い。
(ちなみに最上位プランは桁違いに高いゾ☆)
無料でやるには API で頑張る必要がある。

他のサービスにはない特長として、予め用意されている「知識Q&Aボット」「トレンド記事ボット」「雑談対話ボット」と連携できる機能があり、一般的な会話はそれらを利用することで手間が省ける。
ただし、「雑談対話ボット」はかなりフランクっていうかチャラいw

Watson Assistant (旧Conversation)

https://www.ibm.com/watson/jp-ja/developercloud/conversation.html
IBM のクラウドサービス IBM Cloud (旧Bluemix) 内のサービス。(どんだけ名前変んねんw)
Conversation とプラットフォームを繋げるために別途アプリケーション・サーバーが必要。
LINE や Facebook などに簡単につなげる機能などは一切ないので、API を利用してなんやかんやできる知識が必要。
ただしその分、汎用性は高く、Conversation 開発ツールは非常に洗練されているため、複雑な会話フローにも柔軟に対応できる。
この開発ツールへは、WEBブラウザからアクセスでき、プログラミング知識がなくても扱えるようにできている。(ただし英語)

プロフェッショナルな要求にも対応できる非常に高度なサービスを利用できるという点で、他のサービスとは一線を画する。
あとは System Entities で人名も取得できるようになれば最高なのだが……

hachidori

会話フロー作成ツール上でテストすることはできないので、LINE や Facebook に実際に連携してからでないと動作は確認できない。(連携自体は簡単)
しかし、カルーセルやボタン、スタンプなどを簡単に設定できる機能があり、それらはかなり有用。
また、お店の予約システムに使えるカレンダー機能や、クエリー(Entityのようなもの)の定義も可能。(System Entities は無い)
API は無いがテンプレートという機能を使って外部のシステムと情報のやり取りは可能。

マニュアルはないが、各画面の下部に説明があるので、それほど困ることはない。
対してチュートリアルはあるが、実際の動作を見るには上記の通り LINE や Facebook に接続する必要がある。

特徴であるカレンダー機能や LINE のスタンプなどを利用したいのであれば候補にはなるが、無料版だと制限がきつく Repl-AI に見劣りしてしまうのが難。

Dialogflow

https://dialogflow.com/
旧 Api.ai 。
そもそも無料しかない。 ← Google Cloud にサポートのついた Dialogflow Enterprise Edition が登場しました。
Dialogflow のボット(エージェント)数は GOOGLE PROJECT 依存なんだと思う。
その他、数に制限があるのかわからない。(無いっぽい)

インターフェイスは英語だが、日本語の処理には対応済み。(ただし Intent や Entity の名称には日本語を使わないほうが良さそう)

音楽アーティストなども取得できる System Entities の豊富さと、連携できるサービスの数が他の追随を許さない。
一問一答できれば良いチャットボットならこれで充分だが、それ以上を望む場合にはちょっと力不足なのは否めない。

現状、今回取り上げたサービスで唯一、テキストではなく音声ファイルを送りつけても単独で処理できるサービスでもある。