0

MacにRuby2.0.0-p195インストールした

ruby-buildにp195が来ていたので入れた。

brew update
brew info ruby-build
brew unlink ruby-build
brew install ruby-build
rbenv install --list | grep 2.0.0
rbenv install 2.0.0-p195

rbenv global 2.0.0-p195
rbenv rehash
gem update --system
rbenv rehash
gem install bundler rbenv-rehash
rbenv rehash


あいかわらずssl関係を使うとエラーが出るので
/Users/sho/.rbenv/versions/2.0.0-p195/lib/ruby/2.0.0/digest.rb:12:in `const_missing': library not found for class Digest::SHA1 -- digest/sha1 (LoadError)


いつも通り1.9.2のバイナリをコピーしてきたら治った。
cp ~/.rbenv/versions/1.9.2-p320/lib/ruby/1.9.1/x86_64-darwin12.3.0/digest/* ~/.rbenv/versions/2.0.0-p195/lib/ruby/2.0.0/x86_64-darwin12.3.0/digest/

0

RubyとArduinoとTwitterで天気予報を見る

こういうのを数年おきに、その時の近代的な実装で作りなおしてみるとプログラミング環境の進歩がわかる。


1. 今日傘が必要かどうか表示してくれるてるてる坊主

晴れの時


雨が降る可能性がある時

ウチでは15分おきにその日の天気予報を取得して表示している。うちテレビ無いけどこれのお陰で傘を忘れたりしなくなった。


プログラムはものすごい単純になっている。Rubyのみ。
Macで開発してRaspberry Piにデプロイした。Ruby動くUNIX系ならどこでも動くはず。
require 'rubygems'
require 'arduino_firmata'
require 'weather_jp'

arduino = ArduinoFirmata.connect
weather = WeatherJp.get '東京'
if weather.today.rain > 30 # 降水確率30%以上
arduino.digital_write 13, true ## 青色LED
else
arduino.digital_write 12, true ## 赤色LED
end
taiki45さんのweather_jpと俺のarduino_firmataを合わせると超綺麗に書ける。
MSN天気からデータを取ってきている。
6年ぐらい前に作ったときはPerlのCGI+XPortだったり、4年ぐらい前はRubyからArduinoにシリアル通信したりでもっと行数多かった。


ちなみにzakuniさん作のweather-reportはlivedoor weatherからデータを取ってきていて、降水量情報がない代わりに雨/雪/雹の可能性を示すumbrella?メソッドが在る。
require 'rubygems'
require 'arduino_firmata'
require 'weather-report'

arduino = ArduinoFirmata.connect
weather = WeatherReport.get '横浜'
if weather.today.umbrella? ## 傘が必要な時
arduino.digital_write 13, true ## 青色LED
else
arduino.digital_write 12, true ## 赤色LED
end


地名や降水確率のしきい値を実行時引数に渡せる仕様にして、githubに置いておいた。
ProcfileもあるのでMacやRaspberry Pi等にサービスとしてインストールできる。
shokai/teruteru · GitHub


回路は、昔秋月で買ったRGBフルカラーLEDを使った。
アノード3本/カソード1本のスタンダードな奴。

arduinoのどのピンにRGBが接続されているかはプログラム中に書いてある

こういうシールドにして、その上にティッシュかぶせて顔を書けば完成です。



2. 今日雨が降りそうだったら教えてくれるtwitter bot


雨が振りそうな日の朝に、こういうのが来る

Twを使うとtwitter botが簡単に作れる。
天気botこれだけで書ける。
require 'rubygems'
require 'tw'
require 'weather_jp'

tw = Tw::Client.new
tw.auth 'shokai_log' ## botアカウントで認証
weather = WeatherJp.get '東京'
if weather.today.rain > 30 # 降水確率30%以上
tw.tweet "@shokai #{weather.today}" ## @shokaiにmention送る
else
puts weather.today ## 予報の文章をterminalに表示するだけ
end

降らない時にも「今日の天気は晴れ」とか送ってるとだんだん見なくなるので、雨降る日だけtweetするようにした。

これも多少使いやすくしてgithubにコード置いておいた。
shokai/twitter-weather-alert · GitHub
cronで朝実行するようにしている。

0

im-kayac gemでiOSのカスタムURLスキーム使えるようになった

なんかよくわかってなかったのでオプションを付けてなかったんだけどjune29さんからpull requestが来て実装された。

handlerオプションが追加された。

% gem install im-kayac
% im-kayac -to shokai -handler twitter://twitter.com/shokai 私のツイッターデス

これでiPhoneでtwitterアプリが起動するプッシュ通知が送れる。


Rubyで書くならこう
require 'rubygems'
require 'im-kayac'
ImKayac.to('username').handler('twitter://twitter.com/shokai').post('私のツイッターデス')

shokai/ruby-im-kayac · GitHub

0

Rubyのワンライナーでプレゼンタイマー(2)

エスケープシーケンスを使った

ruby -e 'max=60; max.downto(0) do |i| puts "#{i} "+"|"*i+" "*(max-i); sleep 1; print "\x1b[1A" end; `say 終了`'

0

Rubyのワンライナーでプレゼンタイマー作った

研究会の初回授業があったんだけど、自己紹介タイム、序盤に1人5分ぐらい喋ってて時間が押してきたので
プレゼンタイマーを作って乗り切った。
20分で25人ぐらい自己紹介させた。


1分タイマーを作った

ruby -e '60.downto(0) do |i| puts "#{i} "+"|"*i; sleep 1 end; `say 終了`'
こういうの5秒ぐらいあればすぐ作れてRubyはえらい。


これをフルスクリーン表示した。


1秒ごとにバーが減っていって、1分経つと「終了!!」と言ってくれる。言いにくい事を言ってくれるのが良い。


昨年末の研究会説明会で面白そうなやつ釣ったら来てくれたのでうれしかった。