shokai複数人でメンテしているrubygemは、AuthorsとOwnersにコントリビューターを追加しておきたい。いう状態nokogiriとかは、Authorsが4人なのにOwnersが2人になっている。これはどういうことかというとAuthorsはgemspecファイル内のauthors配列とemail配列で指定するOwnersはgemコマンドでrubygems.orgにメールアドレスを追加するという事になっている。Authorsはただ名前が表示されるだけ。Ownersに追加された人はそのgemをrubygems.orgにリリースする権限を与えられる。hashimoto@shokai.orgrubygems.orgにユーザー登録した時のメールアドレスを指定する。shokaiこれを大改修した。ArduinoとRubyで赤外線リモコン作ってWebから操作できるようにした特徴は以下のとおりArduinoに約110円分の電子部品を追加すれば赤外線学習リモコンが作れる市販の学習リモコンが対応していないような長大なデータでも読み書きできる学習リモコン機能を自作アプリに組み込めるRubyライブラリ付き最近は多少涼しくなった気もするけど、いまだに夕方の閉めきった部屋の中は40度近くまで上昇していて危ない。このツールで家に帰る前に冷房をonにしておくと助かる。https://github.com/shokai/arduino_ir_remote機能追加・変更された事rubygemにした。赤外線学習リモコンをライブラリとして自作アプリに組み込める。学習した赤外線データを別々のアプリ間で共有できるように、データを管理する機構もgemに含めた。6つのアナログピンの数値をRubyで読めるようにした。温度センサなどを追加できる。ssh接続可能なmac/linuxサーバーにArduinoを接続し、このrubygemをインストールするだけでリモートから赤外線機器をコントロールできる。webブラウザから赤外線リモコンを操作できるアプリは別のgitリポジトリに移動した。READMEに書いてある通りに起動すれば動くしサービスとして常駐させられる。回路たったこれだけの回路で作れる。デジタル12ピンに赤外線LED、デジタル3ピンに赤外線リモコン受光器を接続。このfirmwareをArduinoに書き込む。arduino_ir_remotearduino_ir_remoteコマンドもインストールされる。赤外線の読み書きまずarduino_ir_remoteコマンドを使う例。reading...と表示されてから1.5秒以内に赤外線リモコンを当てると、デコードされて表示される。yaml形式で保存されている。部屋の蛍光灯が赤外線リモコンと同じ波長・周波数をだして邪魔になる事があるので、調子が悪い時は電気を消してから学習させてください。CUIから赤外線が読み書きできる。このコマンドはサーバーに赤外線リモコンを付けている場合に便利。エアコンONとかでリモートからエアコンつけられる。-listで保存した全データが確認できる。赤外線の読み書き(アプリから)READMEにも書いたが、ライブラリとして使用して自作Rubyアプリにも組み込める。読む接続時にデバイス名は指定しなくても自動的にArduinoらしきデバイスを探す。保存されるendir.waitコールバックでデータを読んで、Hashとして扱えるArduinoIrRemote::DATAにデータを保存できる。書くこれでテレビの電源がつく。ArduinoIrRemote::DATA["tv_on"]ir.wait読むのはarduino_ir_remoteコマンドでやっちゃって、書くところだけ自作アプリで作ったUIからやるとかでいいと思う。外部センサーの追加Arduinoなので赤外線リモコン専用というわけではなく、センサーを追加できる。うちではこんな風になっている。1にCdS照度センサを接続した。外部センサーを読むRuby側でanalog_readできる。値は300ミリ秒毎にArduinoから送られてきている。1end部屋の明るさだけでなく、テレビに近づければ電源がついているかも判別できると思う。温度センサLM35DZを読むLM35DZは安くて定番なんだけど数値を摂氏に変換する手間がある。ライブラリ内でやっておいた。ir.temp_sensorendこれで温度がチェックできる。室温が40度とかになっててエアコンつけざるをえない事がわかる。温度はコマンドからも見れる。手元から自宅の温度が1行で取得できて便利。エアコン切って1時間ぐらいで37度になるとかヤバイサンプルアプリwebから赤外線リモコンを操作できるインタフェースを作った。トータルで100行ぐらいで実装されているので見るといいと思う。cloneすれば手元ですぐ動かせる。shokaiこれを直した。仕様は変わってないけど中身はだいぶ書き換わった。Socketの3通りの方法で同時に使えるようになる。HTMLとJS書くだけでArduino使える。1年前の実装なので、bundlerじゃなくhoeでテンプレート作っちゃってるグローバル変数使いまくりでRuby2.0で警告出ていたmarkdownじゃなくrdoc使ってるなどなど色々古かったのを直した。requestしてくれた方で、じゃあせっかくだしRuby2.0対応とかも一気にやるか・・・となった。githubに置いておくと、それなりに自分以外にも使われているプロダクトなら誰かが修正してくれて助かる。requestしたら一瞬でマージされてリリースされた。15時からSFCデルタ棟S112でRuby初心者向け勉強会をやる予定があるので(だれでもどうぞご自由にいらしてください)Rubyの基本的な構文のほかに、どんなgemを普段使っているんだっけと思って調べている。ワンライナーで集計Gemfile内に書かれたgem名を数えるワンライナー。GemfileについてはRuby書くならBundler使えで解説した。-nr.rbと.ruファイル内のrequireを数えるワンライナー。Air内のGemfileに書かれたgemを数えた。明示的に俺が自分で「このgemを使う」と思って書いている物。手元で開発しているアプリの他に、CUIツールで使うようなgemも多い。args_parserとかrainbowとかmarkdown系とか。RedClothホームディレクトリ内の.rb/.ruファイル内のrequireを数えた。多すぎるので上位300件だけコピペ。こちらはホームディレクトリにインストールしているrbenv内のgemがrequireしたものも含まれている。自分がrequireしているgem以外にもGemfileと違ってbackports、strigio、rbconfigやテスト関係などアプリよりgem内で使われる事が多く見える。rubygems/dependencyさくらVPSのUbuntuにあるGemfile内のgem。純粋にSinatraを使ったwebサービス用のgemが多いと思う。