garicchi

都民へと昇格した

本日から3月まで東京都民へと昇格を果たしました。拠点地は東日本橋あたりです。理由は聞かないでください

契約したマンスリーマンションは机が狭い以外はまあなんかいい感じ(広いし)なので最高かよっておもってたらネット回線が来ていないことに入居した後に気づきました。

契約書を見返すと設備に「インターネット」の文字はどこにもなく、テレビよりもエアコンよりも大事なネットのない世界で2カ月生きていきます。

まあそんなことをしたら死んでしまうので明日あたりにWiMAXでも契約しに行こうかな…

3月までは東日本橋あたりをうろうろしてるのでかまってやってください

MicrosoftBotFramework v1とv3の罠

結論

  • 使用していたクラスはv1時代のものでv3では非推奨となっている(使えるけど)
  • v1時代はSkypeのグループ会話に対応していなかった
  • v1時代のクラスでBotを開発していたのでSkypeグループでのMentionに反応できなかった
  • v3のクラスに置き換えましょう

事の発端

12/18に横浜でMicrosoftBotFrameworkのハッカソンを開いたとき、参加者の方からこのような質問をいただきました。

BotFrameworkで作成したBotが、普通の1対1の会話には反応してくれるけどグループ会話に追加したときに反応してくれない

 

そもそもBotFrameworkはSkypeのグループチャットを有効にしたとき、「@botname こんにちは」などのMentionを飛ばすことで反応ができるはずなのに実際に動きを見せてもらったら見事に反応してませんでした。

その後ソースコードをいただき、その原因を探ってみました。

ソースコードは以下となります。(掲載許可はいただきました)

 

原因調査

原因調査するにはデバッグするのが一番ということでローカルに実行環境を作成しデバッグしてみるとコンソールに以下のようなメッセージが表示されていました。

 

BotConnectorBot class is deprecated. Use UniversalBot with a ChatConnector class.
CommandDialog class is deprecated. Use IntentDialog class instead.

 

どうやらBotConnectorBotクラスと、CommandDialogクラスは現在のバージョンでは非推奨のようです。

それぞれ、UniversalBotとIntentDialogに置き換えましょうとのことでした。

ソースコードの場所を見ても、deprecatedフォルダ以下にあるので完全に非推奨クラスのようです。

 

BotFrameworkはv1から始まり、現在v3なのですが、v3で大きく仕様が変化しました。

また、v1のドキュメントを見ても、Skypeのグループ会話機能の説明がないことから、Skypeのグループ会話機能はv3からということが推測できます。

 

つまり、v3の環境で、v1のクラスを呼び出していたため、Skypeのグループ会話に対応していないv1では、グループ会話に応答できなかったということです。

 

対処方法

v3のコードに置き換えましょう。

実際に置き換えたサンプルを以下に示します。

 

これで正しく応答することができます。

1対1の場合

グループ会話の場合

Mention以外には反応しない

Mentionにだけ反応する

対策方法

BotFrameworkは最近出たということもあり、仕様がどんどん進化していきます。(v3でだいぶ安定してるとは思いますが)

このようなところに引っかからないためには以下のことに注意すると良いです。

デバッグメッセージを見る

Microsoftの製品はとくに、広報互換性を重視しているので古いコードでも難なく動いてしまいます。

そういう時は、必ずデバッグメッセージとして表示されますのでそれを注意深く読んでみるのがいいかと思います。

デバッグメッセージはたいてい英語ですが頑張れば読めます

公式ドキュメントを見る

公式ドキュメントは常に最新の情報が上がっているので仕様が安定していないようなプラットフォームであれば、公式を見るのがよいでしょう。

英語ですが頑張れば読めます。

Botの応答でprintfデバッグ

Bot系は特に、ローカル環境でのデバッグが難しいプラットフォームになります。printfのような出力環境も難しいので、Botの応答に変数の値を出力させちゃうのが良いでしょう。

node.jsの場合であればJSON.stringifyでJSON化して応答させるとみやすくて良いです。

 

時間のかかるpythonスクリプトをssh上でログアウトしても止めずに実行し続ける

Linuxでsshをし、ログアウトしても実行し続けるにはコマンドの前のnohupをつけます

これでout.logファイルに標準出力が入ります

しかしpythonでnohupを実行すると、出力がバッファにとどまってしまうので-uオプションをつける必要があります。

 

how to arrange height of grid system in bootstrap

boot strap grid system is very useful and nice.

but cells height can not arrange in default.

ex. following image does not arrange three images height.

one way to solve it, write display:flex in div wrapping some cells.

cells become arranging.

but above way are not corresponded to responsive design.

so you can write media query in css.

 

cannot login to wordpress when site moved

When I try to login to wordpress that moved server, wordpress redirect to previous site url and cannnot login current site.

The reason is that wordpress refers a url in database when login to it.

So you must rewrite database value to current site url.

 

That database value are fllowing,

table: wp_options

columun: option_name=’siteurl’

 

following code are rewrite url.