2017-12-28

raspberry pi zero wとダイソーのリモートシャッターとrubyで遊ぶ

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
raspberry pi zero wを買ったのは、bluetooth機器とつないで、ちょっと遊んでみたいなぁと思っていたことも一つの理由だったりします。

お手軽に遊ぶ材料として、ダイソーで売っているリモートシャッターがよさげかと思ってみました。以下と同じもののようです。



これを利用した例を以下のサイトを紹介していたので、参考にさせてもらいました。
https://qiita.com/vimyum/items/8b7548ca8cf45383c5b0

こちらでは、bluebuttonというツールを利用しているのですが、ソースは以下にあります。
https://github.com/kinnalru/bluebutton

こちらのソースを見て、ちょっと遊んでみました。
こちらでは、二つのボタンを特に区別してなくて、押したことと長押しを検出していたので、ボタンを識別できるよう改造してみました。

上のIOSボタンは、押すとVolumeUpが送られてきているようです。
下のandoridボタンは、押すとEnterが来て、さらにVolumeUpが送られてきてるようです。

これで識別できそうなので、改造したのは以下のものになります。
rootで実行する必要があります。
これは、二つのボタンとそれぞれの長押しを検出して、さらにLINEに特定のメッセージを送るようにしてみました。


とりあえずIoTな気分を感じてみました。


2017-12-26

raspberry pi zero wを買ったのでusb接続でセットアップした

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

raspberry pi zero wを買いました。本当は単体で買いたかったのですが、なかなか単体で買えないのと、手ごろな手持ちのSDカードがなかったのと、電源もほどよいのが、ちょうどなかったので、ちょっと割高かなと思いましたが、セットで購入しました。

セットアップはusbでwindowsと接続して行うことができました。
手順は、
https://qiita.com/marron-akanishi/items/2ce4ae07c71dc8358093

https://qiita.com/gpsnmeajp/items/126fadd3e47cdd4a6c00
を見ればよさげです。
無線の設定の部分はraspi-configで設定したぐらいの違いしかないです。

途中でsshでraspberrypi.localと指定して接続するのですが、
うちにはすでに旧型のraspberry piがいて、
すでにraspberrypi.localを使っていたので、旧のほうにつながってしまいます。
新しいの方のを最初から名前を変える方法を探したのですが、
ちょっと見つからなかったので、最初に使っているraspberry piの電源を落として
raspberrypi.localで新しい方につながるようにしました。

その後、以下を参考に名前を変えました。
https://www.1ft-seabass.jp/memo/2015/04/21/raspberry-pi-hostname-memo/
名前を変える際は、無線LAN接続できるようにして、
無線でIPでも接続できるようになったのを確認してから変えたほうが良いです。
最初、上記を参考にせず間で名前を変えて、
無線設定も適当に確認しただけでやったら失敗して、
接続できなくなって最初からやりなおしになったりしたので、ご注意を。

2017-11-03

Rubyで暗号化した文字列をJavaScriptで復号化してみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Qiitaにある
JavaScriptで暗号化した文字列をRubyで復号化してみた
という記事の逆をやってみたいと思ってみました。

JavaScript側では、CryptJSを使ってRuby側で暗号されたものを
var text = CryptoJS.AES.decrypt(data, "pass").toString(CryptoJS.enc.Utf8);
で複合化をできるようにRuby側で暗号化したいと思います。
Ruby側で暗号化された値が上記のdataに入る感じです。

Ruby側は以下のような感じです。


これを使ってruby側で
enc_data = encrypt(”hogehoge”,"pass")
としてできた、enc_dataの内容をJavascript側のdataに入れてやれば、hogehogeと戻せる感じでした。

2017-10-07

awsのlambdaとAPI Gatewayを使って、ちょっとはまったこと

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ほとんど使っている人はいないのですが、
barcotterというバーコードから、そのバーコードに対応するamazonのリンクを作成するandroidアプリを作っています。
これのバーコードからamazonのリンクを生成する部分は、サーバを用意して、このサーバ側で行っています。

最初は、サーバは
Google App Engine(python)
で作っていたのですが、なんかのサポートが切れることをきっかけに
Open Shift(Ruby on Rails)
に乗り換えたのですが、こちらも最近サポートが切れる部分があったので、これをきっかけに、今回サーバ側を
aws lambda(python)
に乗り換えてみました。

今回、lambdaに乗り換えて、いざアプリを利用してみると
type java.lang.String cannot be converted to JSONObject
というエラーが出てjsonのパースができない状態になりました。

原因は、すごく些細でlamdbaでjsonを返すには
handler内で辞書オブジェクトをreturnしてやればよかったのに、
わざわざ辞書オブジェクトをjson.dumpsして文字列にしたものをreturnしてしまって、
これが原因でパースできなかったというものでした。

普通に辞書オブジェクトでreturnすると、ちゃんとbodyに以下のようにjsonが
{ 'aaa': 'bbb', 'ccc': 'ddd'}
となるのですが、文字列で返すとbodyに
"{ 'aaa': 'bbb', 'ccc': 'ddd'}"
とダブルコーテーションがついてしまって、これのせいでパースに失敗していました。

これに気づくまで、無駄に時間がかかってしまいました。

あと、結果的には関係ないのかもしれませんが
パースできないのが、文字コードがうまく処理できないのかと思い、
API Gatewayのメソッドレスポンスの
HTTP のステータス200 の
レスポンス本文のコンテンツタイプが
application/json
だったものを
application/json;charset=UTF-8
とcharsetを追加しました。

とりあえず無事に移行できました。

2017-08-31

sinatraでベーシック認証した時のユーザ名とパスワードを取得する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
apacheなどのwebサーバ側でベーシック認証させておいて、
sinatra側で、その時のユーザ名とパスワードを取得する方法です。


auth_info = Base64.decode64(request.env['HTTP_AUTHORIZATION'].split(' ')[1]).split(':')
username = auth_info[0]
password = auth_info[1]

2017-04-04

LINE BOT APIを使っていたものをLINE Messaging APIに書き直す

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
すごく今更ですが、以前LINE BOT APIを使ってみたものを、LINE Messaging APIに直したものを紹介します。

ちなみにLINE Messaging APIを始めるには、以下が参考になりました。
http://milk0824.hatenadiary.jp/entry/2016/10/01/211555

まずは、
LINE BOT APIのcallbackにAWS Lambdaを使ってみる
を直したのは、以下のような感じです。

お次は、rubyで書いたものです。
ruby2.0以上ならば、line-bot-apiというgemがあり、こっちを使うと、もうちょっと楽にかけそうなのですが、以下はruby1.9でも動くことを前提としているのでline-bot-apiは使っていません。

rubyで書いたものの最初の、
LINE BOT APIを利用して電車遅延情報の送信を改良した
を直したのは、以下のような感じです。

そして、
LINE BOT APIを利用してGoogle Calendarの情報を通知する
を直したのは、以下のような感じです。
ちなみにキャンセルされた予定の処理を追加しています。

最後に、
LINE BOT APIを利用して雨が降りそうな時は通知するようにしてみる
を直したのは、以下のような感じです。

2017-03-24

railsの開発環境のjavascriptがなんだかよくわからないことになった時の対策

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsのdevelopment環境でいろいろいじっているうちに
なぜだかわからないのですが、jqueryの動きがあやしい感じになってしまいました。

xhrで投げた結果を受け取って、それを画面の置き換えるのが、うまく動かなかったり
imageの位置を変な感じで取得しようとして受け取れなかったり
みたいな感じになっていました。

原因は、もうわからなかったのですが、
rake assets:clean
で一回asset関連をクリーンしたら、うまく動くようになりました。