とんちゃん の ぐだぐだえびでい

バックエンドエンジニアのとんちゃんが、ぐだぐだな毎日で培った技術情報を綴るブログです。

IoTで親子の絆を深められるか・・・と思ったけど作るのがやっとだった話

この記事は、 IoTLT Advent Calendar 2017 - Qiita の5日目の記事です。


自己紹介

どうも、金髪豚野郎 a.k.a とんちゃん またの名を大道寺です。 あ、身バレした。

IoTLTでは、過去にこんなネタでLT登壇しておりました。

普段はとある事業会社でバックエンドエンジニアをやっております。

人生初アドベントカレンダーです。緊張します。

前の方々がとても有益な記事を投稿している中、超ゆるい内容の記事を投稿します。
ご了承ください。

クソ記事なのでQiitaに書きたくなくて自分のブログに書きました。

続きを読む

Raspberry Pi を ansible でプロビジョニングしてみたよ!!

約半年前に書いたこちらの記事がようやく実を結びました。

tong-chang.hatenablog.com

なにかというと

Raspberry Pi の設定もろもろを一々手でやるのめんどくさいと思いませんか!!
せっかくならプロビジョンしちゃえと思ったのです。

ほいで、できたリポジトリはこちら。

github.com

なにができるのか

  • python-apt モジュールのインストール
  • raspbian のアップデート
  • git のインストール
  • vim のインストール -- 自分の .vimrc を持ってくる
  • node.js (nodebrew) の stable バージョンのインストール
  • .bashrc で少し楽にする

まだまだ感すごい

issue もあり、まだまだ以下のような課題があります。。

  • README がない
  • raspbian のアップデートは ssh 越しにやるとしくるケースがあるため、cron に移行する
  • apt モジュール使ってないところがある

詰まった個所

ansible の apt モジュールが使えない

半年前くらいの raspbian には、python-apt モジュールがデフォルトでは存在しなかったので、
そのままでは ansible の apt モジュールが使えませんでした。

最近の raspbian はわかりませんが・・・

とにかく動かしてみたい場合

こちらのリポジトリで作れる vagrant にて、 manager を構成管理サーバーとして、色々遊べるようにはなってます。

github.com

まとめ

Raspberry Pi を ansible でプロビジョニングできました!!
もし問題や不明点などありましたら、お気軽に issue なりコメントなりしていただけると嬉しいです!!

ではでは。

Google Places APIで近場のカフェを取得してみた

近場のカフェ!!!

ねぇちょっと!今いる場所から一番近いカフェはどこなのよぉ!

ということで、Google Places API使って、
とある緯度経度から近いカフェを距離順でリストアップしてみました。

流れ

Google API Auth key発行

Google API console にて、プロジェクトを作成し、API Auth keyを発行します。

console.developers.google.com

!注意! 2016/06/22現在のUIです。
googleさんはちょいちょいUI変えてくるので、その時に応じた同ニュアンスのメニューから操作してください。

ちなみにgoogleユーザーでのログインが必要です。

プロジェクトを作成します。

f:id:tong_chang:20160622223915p:plain

プロジェクト名を入力します。

f:id:tong_chang:20160622223923p:plain

作成できたら、APIライブラリからGoogle Places API Web Serviceのリンクをクリックします。

f:id:tong_chang:20160622224133p:plain

Google Places API Web Serviceを有効にしちゃいます。

f:id:tong_chang:20160622224159p:plain

認証情報を設定しる!!と怒られるので、設定しに行きます(強く推奨)

f:id:tong_chang:20160622224211p:plain

呼び出す場所を適宜設定します。
今回はcuicURLなのでこちらにしてみました。

f:id:tong_chang:20160622224239p:plain

実行する環境に名前を決めます。
デフォルトにしちゃいました。

そして、APIキーを作成するをクリックすると・・・

f:id:tong_chang:20160622224253p:plain

ぺかーん!!!

めでたくAPI Authキーが発行されました。

こちら、実行に必要なので、控えておきます。

f:id:tong_chang:20160622224303p:plain

控え忘れた!!どうしよう!!

控え忘れてもあわてる必要はありません!!

確認も可能で余裕でございます。

f:id:tong_chang:20160622224310p:plain

REST APIcURLで叩く

APIのURL、パラメータの設定の仕方はこちらを参照してください!
公式ドキュメントで、めっちゃんこわかりやすく説明されております!

Place Search  |  Google Places API Web Service  |  Google Developers

ちなみに今回は、こんなURLで取得してみます!!

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location={緯度},{経度}&language=ja&rankby=distance&types=cafe&key={Auth key}

パラメータは以下です

パラメータ名 設定値 設定値の意味 注意点
location {緯度},{経度} 位置情報
language ja 言語
rankby distance 並び順 これを設定すると、最大範囲が設定できなくなる。
types cafe タイプ
key {API Auth key} 認証キー

では実行してみましょう!

位置情報は、本郷三丁目駅です!

f:id:tong_chang:20160623004904p:plain

キターーーーーーー(((('ω')))))ーーーーーーーーー!!!!

名前だけ抜いてみると・・・

f:id:tong_chang:20160623005453p:plain

へぇ、アンモナイトより金魚坂の方が駅に近いんだー

注意事項

24時間に100,000回(呼び出しパラメータによってはもっと少ない回数らしいが)を超える呼び出しをする場合、
課金が必要になってくるらしいです!!

まとめ

地図の検索ってこんなに簡単にできるんですね!!

びっくりでした!!!

raspi ansibleの件

誰も気にしてないと思いますが。。。
頑張って作ってます!!

しばしお待ちを!!

Raspberry Piをansibleでプロビジョニングしてみようと思う

(・・・ゴールデンウィークの宿題にしようと思ったけど、時間がなくてできなかったやつです・・・)

どうもこんにちは!とんちゃんです。

今回は、
Raspberry Piを構成管理サーバーにして、新しく迎えたRaspberry Piに開発環境を仕込んでみます。

構成管理ツール -ansible-とは

構成管理ツールとは、ミドルウェア、ソフトウェアの構成を管理できるツールです。
Chef、Puppet、Itamae、そしてansibleが有名です。

Infrastructure as a Code というやつです。

参考:構成管理とは - IT用語辞典 Weblio辞書

今回は、ansibleという、ツールを使います。

ソースにやりたいことを書くと、ansibleさんがその通りに動いて、いろいろやってくれます。
この"いろいろ"をプロビジョニングとも言います。

詳しくはこの辺を見てみてください。

やりたいこと

▶構成管理らずぱい

Raspberry Pi Model B+ です。古株です。

こちらのセットアップはすべて手作業となります。

▶新しいらずぱい

Raspberry Pi 2 Model B+ です。先週職場の方にいただきました。
ありがとうございます。

👆手作業で行うこと

  • 固定IPをふる
  • 証明書の公開鍵の登録(ansibleのために)

☆ansibleでやりたいこと

  • Raspberry Piのセットアップ
    • expand filesystem
    • reboot
    • apt-get -y update
    • apt-get -y dist-upgrade
    • rpi-updateのインストール
    • rpi-update
    • reboot
  • git関連
    • gitのインストール
    • gitの設定
    • tigのインストール
  • vim関連
    • vimのインストール
    • vimrcのclone
  • node.jsの設定
    • nodebrewのインストール
    • node.js stableのインストール
    • node.js stableのuse
  • .bashrcの編集
    • set -o viの追記(なければ)
    • alias ll ls -ltra の追記(なければ)

よっしゃansible書くぞー。

node-openjtalkをraspberry piにnpm installできてない

まとめ

  • node-openjtalkをインストールするには、libiconvが必要。
  • libiconvのインストールにはコツが必要。
  • node-openjtalkをインストールするには、node.jsのv0.12.*が必要。

何かというと

現在、slack読み上げbotちゃんを作っていて、
通知音再生 (そこはかとない時間) 読み上げ音声再生となっていました。

なぜ?

読み上げ音声再生の処理が

1.通知音再生 ⇒ 2.テキストから音声ファイル作成 ⇒ 3.音声再生になっていたため、です。

使っていたライブラリが、"テキストを渡すと、音声ファイルを再生するまでやってから返す"という作りだったので、
"テキストを渡すと、音声ファイルを作ってくれる"ものを探してました。

ちなみに今使っているもの

hecomi/node-openjtalk-waf

こちら、導入はとても楽でした!

欲しいもの見つけた

node-openjtalk

こちらのライブラリは、音声ファイル作成までを行ってくれる作りになってました!

npm installでコケる

脳死でとりあえずnpm installをたたきました。

$ npm install node-openjtalk

するとエラーが・・・

(略)
npm ERR! Linux 4.1.17+
npm ERR! argv "/home/pi/.nodebrew/node/v5.6.0/bin/node" "/home/pi/.nodebrew/curr                                                                                        ent/bin/npm" "install" "node-openjtalk"
npm ERR! node v5.6.0
npm ERR! npm  v3.6.0
npm ERR! code ELIFECYCLE

npm ERR! node-openjtalk@1.1.1 install: `node-pre-gyp install --build-from-source                                                                                        `
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the node-openjtalk@1.1.1 install script 'node-pre-gyp install                                                                                         --build-from-source'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the node-openjtalk packag                                                                                        e,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-pre-gyp install --build-from-source
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs node-openjtalk
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls node-openjtalk
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/pi/work/slack-read-outer-bot/npm-debug.log

npmのページには、でかでかとlibconvが必要だ、と書いてありました。

私の目が節穴すぎる。

libconvのインストール

libconvのインストールは、こちらを参考にしました!

libiconvのインストールでこけた

makeが途中でコケました。。。

(略)
In file included from progname.c:26:0:
./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)
 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
 ^
Makefile:914: recipe for target 'progname.o' failed
make[2]: *** [progname.o] Error 1
make[2]: Leaving directory '/usr/local/src/libiconv/libiconv-1.14/srclib'
Makefile:865: recipe for target 'all' failed
make[1]: *** [all] Error 2
make[1]: Leaving directory '/usr/local/src/libiconv/libiconv-1.14/srclib'
Makefile:33: recipe for target 'all' failed
make: *** [all] Error 2

"gets is a security hole - use fgets instead"でググってみたところ
この行がよくないみたいで、削除する手順と、getsをfgetに書き換える手順がそれぞれ出てきました。
とりあえずこの行は削除しちゃいました。

configure ⇒ makeを再実行したところ、
ばっちりインストールできました。

それでもコケるnpm install

なんでだーと思って、gitのreadmeを見ていたら
NodeJSのバージョンはv0.12限定でサポートとのこと。。

$ nodebrew install v0.12.14

でv0.12をインストールして、今日は寝ます。
※binaryインストールは、v0.12系はなさそうでした。。

今日の教訓

  • 依存するモノのバージョン確認って大事なんだなと

お詫び

ゴールデンウィークの自由研究であった、ansibleでラスパイをプロビジョニングなのですが
まだ未完成です。。。。