kakts-log

programming について調べたことを整理していきます

Amazon Dash Button と slackを連携させる

Amazon Dash Buttonとは

既にアメリカで発売されていたamazon dash buttonが日本でもリリースされました。
www.amazon.co.jp
初期設定を済ませた後、ボタンを押すだけで特定の商品を購入できるものです。
ボタン自体は500円で購入でき、注文時に500円が割り引かれるので、普通に使うと実質タダになります。

Amazon Dash ButtonをIoT用途で使ってみる

リリース後にかなり話題になっているのですが、
初期設定を完了させずにwifiの連携だけ完了した状態だと、同一ネットワーク内のサーバと、ボタンを押すだけで連携できるIoTボタンになります。
せっかくなので、ボタンを押すとslackにメッセージを送るところまでやってみようと思います。

slackとの連携

Amazon Dash Buttonとslackを連携させるために、ボタン押下の通信を受け取るサーバを立てる必要があります。 github上を調べると、dasher が使いやすそうだったのでこれを使ってみます。
github.com

dasherを使ってみる

早速ディレクトリを作ってdasherをcloneします。

git clone git@github.com:maddox/dasher.git  

dasher のgithubページに書いてあるセットアップ方法のとおりに設定を進めます。

Dash Button のMACアドレスを取得する

サーバ連携のためにはDash Button のMACアドレスを調べる必要があり、dasherにMACアドレス取得用のスクリプトがあるので、 それを利用します。

$ script/find_button 
Watching for arp & udp requests on your local network, please try to press your dash now
Dash buttons should appear as manufactured by 'Amazon Technologies Inc.' 

srcipt/find_buttonを実行すると、上記のような文字列が出た状態になるので、この状態でDash Buttonを押すとMACアドレスが表示されます

YOUR_MAC_ADDRESSのところに表示される
Possible dash hardware address detected: YOUR_MAC_ADDRESS Manufacturer: Amazon Technologies Inc. Protocol: udp

これでMACアドレスを取得することができました。

slackへの通知設定

次に、連携用サーバの設定を行っていきます。取得したMACアドレスと、送信したいslackチャンネルへのwebhook用アドレスを設定します。 slackはチャンネルを作った上で下記ページで調べることができます https://slack.com/services/new/incoming-webhook

config/config.json を作成して下記の様な感じでボタンのMACアドレス、webhook用アドレス、送信するメッセージを設定したjsonファイルを作ります。

{
  "buttons":[
    {
      "name" : "Test Dash Button",
      "address": "YOUR_MAC_ADDRESS",
      "url": "YOUR_WEBHOOK_ADDRESS",
      "method": "POST",
      "json": true,
      "body": {"text":"Hello, World from Amazon Dash Button!!!"}
    }
  ]
}

これで設定は終わりました。メチャクチャ簡単です。

dasherを起動してslackへ投稿する

あとはdasherを起動してDash Buttonのボタン押下を待ち受けた状態にするだけです。

$ sudo npm start

> dasher@1.1.1 start /Users/USER_NAME/Documents/amazon-dash-button/dasher
> node app.js

[2016-12-10T13:55:49.181Z] Test Dash Button added.

これでdasherが起動できたのであとはDash Buttonを押すだけです。

[2016-12-10T13:58:43.630Z] Test Dash Button pressed.

ボタンの反応があるとコンソール上に↑のような感じでメッセージが表示され、slackにも投稿が表示されました。
f:id:kakts:20161210230044p:plain

1回押下すると3〜5秒位DashButtonのランプが点滅してslackに投稿されます。

まとめ

Amazon Dash Button開封からslack連携まで1時間もあればできるほど簡単でした。 dasherを使えばwebhook連携が容易にできるので、自宅にraspberry py でサーバ常時立てて、 ボタン連携すれば500円で簡単にIoTできます。

ただ気になるのは、Dash Button内部の乾電池が入っていて、1年位で電池切れになるのでお遊び程度に使うのが良いと思います。 海外でも活用例があり、調べてみると面白そうです。 medium.com

Amazon Lightsail でインスタンスを作る

Amazon Lightsail

Amazon re:Invent で発表され、話題になっているサービスでamazonvpsサービスを開始しました。

www.youtube.com

Amazon Lightsail – AWSの力、VPSの簡単さ | Amazon Web Services ブログ

インスタンスを立ち上げるのは非常に楽で、
インスタンスサイズと使用するイメージを選択すればIPが割り当てられた状態で簡単にインスタンスが作成されます
使用できるイメージは、osだけがはいっているのもと、os + apps(Node.js gitlab LAMPstack WordPress)が最初からはいっているものを選べます。

今までのEC2のインスタンス作成したときみたいに IAMや、security groupsの管理は考えなくても勝手にやってくれるようになります。 最低$5からインスタンスを作成できるので、 実験・勉強用とかで個人でインスタンスを作ってwebサイト作ったりしたい場合は非常に良いのではと思います。

インスタンスを作成してみる

awsのアカウントを作成した上でAmazon Lightsailインスタンス作成ページへ

f:id:kakts:20161203230752p:plain
上述したように、インスタンスサイズとイメージ、名前を指定して作成ボタンを押すだけで作れていまいます。

f:id:kakts:20161203232234p:plain

作成後にインスタンスの詳細ページでGlobal IPが割り振られているので、sshで入れます。

bitnami@ip-your-private-ip:~$ node -v
v6.9.1

作成時のイメージでNode.jsもはいっているものを選択したので、ちゃんとnode v6系もapt-getせずに最初からはいってます

初期設定ではセキュリティ上アレなので、公開鍵の設定などもろもろ変更していけばokかと思います。

この記事では本題とずれるので解説しませんが、sshの設定方法など以下のページとかよくまとまっているので 初めての人は見てみると良いかと思います。 VPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定 | dogmap.jp

Microservices - a definition of this new architectural term

Microservices - a definition of this new architectural term

martinfowler.com

今更だけど、martin fowler のmicroservicesに関する記事を読んだ
microservicesは既存のモノリシックなサービスと違って、機能ごとに複数のコンポーネントに分けて運用するので、 サービス単体の修正リリースができることと、機能毎に責任範囲を分割できるから、 設計がしっかりしていれば、不具合や実装の影響を最小限にできるのが非常に良いと思った。

ただ、実装するアプリケーションの要件によって、わざわざ複数サービスに分けるほどの規模でなかったり、 複数サービスに分けることでサービス間通信の遅延がクリティカルになってしまうので万能なわけではないということがわかった。

他の文献もあればちゃんと読んで見ようかと思う

Next lexicographical permutation algorithm

Next lexicographical permutation algorithm

文字列 辞書昇順で次の文字列を見つける問題

アルゴリズムの問題で特定の文字列に対して辞書的に次の順番の文字を見つける問題を解いていて 上記のページの考え方が非常に参考になった 辞書降順の場合も応用すればいけそう

Memory Usage in CockroachDB

www.cockroachlabs.com

今年リリースされた CockroachDBのメモリ管理についての記事 どうやらRDBMSのようにクエリかけるしトランザクション機能もあるのと、 NoSQLのようにスケーラブルで高可用性があるDBとのこと

あまりネットに情報がないっぽいので今度じっくり調べてみようかと思う。

Chrome Experiments for Virtual Reality

vr.chromeexperiments.com

ChromeブラウザがVR対応しているらしい 現状CardBoardを使えば上記のページのサンプルがみれるらしい。 コード観た感じだと、レンダリングにThree.jsつかっているっぽい 以外と導入は楽かも