0

Perl環境とApp::mookviewインストールした

App::mookview原稿書くのに便利そうだったのでインストールしてみた。
markdownで書いた文章を2段組のムック本みたいにしてくれる。


ブラウザで見れる。ブラウザリロードすると最新の内容になるので、文章書いている間はずっと起動しておくといいと思う。


インストール

perlがよくわからないんだけど、Macのperl環境にcpanmとcarton入れればとりあえずアプリを動かすぐらいなら問題なさそうだったのでセットアップした。

最近はcpanじゃなくcpanmを使うらしいので、cpanでcpanmを入れた。
% sudo cpan App::cpanminus
% sudo cpanm Carton
% sudo cpanm App::mookview
/usr/local/bin/mookview が使えるようになった。

cartonはrubyのbundlerみたいな、プロジェクト毎に依存ライブラリ解決してくれるやつ。carton execとかもできる。


mookview起動

% sudo mookview hoge.md
http://localhost:5000で起動する。

cpanm自体をsudoで入れたからか、mookviewもsudoつけないとCarpがディレクトリ作れないというエラーでて動かなかった。

0

Herokuにpapertrailプラグインを入れた

herokuで運用しているnode-linda-basepapertrailを入れた。


センサーのデータを流しまくっているんだけど、ブラウザ上でリアルタイムにログを眺めつつ検索したり、日付ごとに手元にダウンロードしたり、条件にマッチするログが一定時間に指定回数現れたらメールやhipchatに通知するとか設定できる。
無料プランで使ってるけど、容量超えたら止まるのでいきなり課金はされなかった。


https://papertrailapp.com/?thank=926e09からサインアップするとあなたも私も50MB無料容量が増えるらしいのでheroku使ってる人は試してみるとよいと思う。

でもheroku addons:add papertrailしただけで使えてるから、アカウント作る必要ない気がする。プロモーションコード意味ないのでは
heroku以外からも、syslogを飛ばせば使えるらしい。

3

ruby-opencvをインストールして顔認識した

ruby-opencvは5年ぐらい前に停止したopencvというgemを、ser1zwさんという方がOpenCV2.x系に対応させ、Ruby2.0に対応させ、と着実にアップデートしているプロジェクト。

先日これをみて、そういえば良いプロジェクトなのに全く試してなかったと思い出してまずインストールした。
ruby-opencvの進捗の話(2014年2月版) – ser1zw's blog


試しに作ったものはここに置いてある
https://github.com/shokai/ruby-opencv-study

感想

まだ大した事試してないけど、感想としては、ドキュメントが無い。でもOpenCV本体のドキュメント見てそのままRubyの常識にそって書き直したらふつうに動くのでドキュメントなくてもいいかなと思った。

Rubyだとそのオブジェクトが持っているメソッド一覧はObject#methodsなどで見れるし、ruby-opencvのリポジトリをcloneしてきて git grep キーワード ext/ すればC++と対応してるRubyのメソッドはすぐ見つかる。

あとはそれぞれのC++ラッパーのオブジェクトにinspectメソッドがあると、見やすくて良くなるかと思った。例えばCvRectは4上下左右4座標が入っているんだけど、putsやpで4座標が標準出力できると便利だと思う。


Macにインストール

Mac (OSX 10.9.1)の場合、まずhomebrewでopencvを入れてからgem installしたら簡単にインストールできた。

% brew search opencv
% brew tap homebrew/science

% brew info opencv
opencv: stable 2.4.7.1

% brew install opencv
特にインストールオプション付けずにopencv 2.4.7.1が入った。

% gem install ruby-opencv
0.0.12が入った。


カメラでキャプチャして顔認識

最近追加されたEigenfacesやFisherfacesもあるけどとりあえず古典的なhaarlike cascadeでやってみる。

分類器は
/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml
をコピーしてきて使った。

ほぼサンプルまま。カメラでキャプチャして顔を認識する
capture_face_detect.rb
require 'opencv'

window = OpenCV::GUI::Window.new "face detect"
capture = OpenCV::CvCapture.open
detector = OpenCV::CvHaarClassifierCascade::load "./haarcascade_frontalface_default.xml"

loop do
image = capture.query
image = image.resize OpenCV::CvSize.new 640, 360
detector.detect_objects(image).each do |rect|
puts "detect!! : #{rect.top_left}, #{rect.top_right}, #{rect.bottom_left}, #{rect.bottom_right}"
image.rectangle! rect.top_left, rect.bottom_right, :color => OpenCV::CvColor::Red
end
window.show image
break if OpenCV::GUI::wait_key(100)
end

ウィンドウが開いて顔の部分に赤枠がでる


顔認識して画像ファイルを保存


Rubyなのでサーバーで使うような事を考えると、windowで画像を表示するのではなく顔認識した結果をファイルに書き出したほうがそれっぽいかなあとか考えてた

face_detect.rb
require 'opencv'

if ARGV.size < 2
STDERR.puts " % ruby #{$0} input.jpg output.jpg"
exit 1
end

input_filename = ARGV.shift
output_filename = ARGV.shift

image = OpenCV::IplImage::load input_filename
haar_xml_file = File.expand_path File.dirname(__FILE__), 'haarcascade_frontalface_default.xml'
detector = OpenCV::CvHaarClassifierCascade::load haar_xml_file

detector.detect_objects(image).each do |rect|
puts "detect!! : #{rect.top_left}, #{rect.top_right}, #{rect.bottom_left}, #{rect.bottom_right}"
image.rectangle! rect.top_left, rect.bottom_right, :color => OpenCV::CvColor::Red
end

image.save output_filename

% ruby face_detect.rb input.jpg output.jpg

結果
detect!! : <OpenCV::CvPoint:(125,9)>, <OpenCV::CvPoint:(472,9)>, <OpenCV::CvPoint:(125,356)>, <OpenCV::CvPoint:(472,356)>

シンプルに書けてよい。

0

MacのScreen Sharingをターミナルからon/offする

システム環境設定→共有→画面共有をon/offできるコマンドを作った。
gistに置いてある。

% git clone https://gist.github.com/9120415.git

使い方


% vnc start
% vnc stop
で有効/無効できる。


用途

sshだけ有効になっていて、画面共有が無効なMacなどで便利だと思う。
例えばうちではサーバーとしてMacMiniを使ってるんだけど、OSアップデートをインストールしたい時とかGUIが必要で、でもずっと画面共有を開けっ放しにしておくのは気持ち悪い。
VNCする前に
% ssh ホスト名 vnc start
で有効にできるので平和だと思う。

普段持ち歩いてるMacbookが家のwifiに接続されたら自動的に画面共有を有効にして、タブレットからも操作できるようにする、とかもできそう。


スクリプト

#!/usr/bin/env ruby
## enable/disable VNC on Mac OSX (testing with OSX 10.9)

def show_current_status
if system "sudo launchctl list | grep com.apple.screensharing > /dev/null" and
system "sudo defaults read /var/db/launchd.db/com.apple.launchd/overrides.plist com.apple.screensharing -dict Disabled | grep 'Disabled = 0' > /dev/null"
puts "VNC: enabled"
else
puts "VNC: disabled"
end
end

def show_help
app_name = File.basename $0
STDERR.puts "% #{app_name} start # enable VNC"
STDERR.puts "% #{app_name} stop # disable VNC"
show_current_status
end

if ARGV.empty?
show_help
exit 1
end

enable = case ARGV.shift
when "start" then true
when "stop" then false
else
show_help
exit 1
end

system "sudo defaults write /var/db/launchd.db/com.apple.launchd/overrides.plist com.apple.screensharing -dict Disabled -bool #{!enable}"

if enable
system "sudo launchctl load /System/Library/LaunchDaemons/com.apple.screensharing.plist"
else
system "sudo launchctl unload /System/Library/LaunchDaemons/com.apple.screensharing.plist"
end

show_current_status

参考

コマンドラインから画面共有をONにする方法 for OS X Mountain Lion – うさぎ文学日記

0

Amazonの在庫切れ商品が復活したら知らせる

在庫切れ商品には「現在在庫切れ」という文が書かれてるので、それが無くなったらtwで自分にDMで通知するワンライナーを書いた

URL=http://www.amazon.co.jp/gp/product/B00H91KK26 && w3m -dump $URL | grep 現在在庫切れ || tw -yes -user=shokai_log -dm:to=shokai "入荷 $URL"
これをcrontabで定期的に実行しておく事でIRKitが入荷したらすぐ買う