0

RubyでPhidgets InterfaceKitのセンサーを使う

前に書いたphidgets-ffiを使う。ボリュームとスライダーと明るさとタッチセンサーを使ってみた。
Mac+Ruby+Phidgets簡単すぎてヤバイ。多少高いが、金をうならせれば誰でも電子工作的なものとWeb的なものを合体できる。箱から出して接続してすぐ使えるってすごいなー

 

■インストール

Phidget21をインストールしてからgemをいれる

gem install ffi phidgets-ffi
 

■プログラムを書く

ffi-ifkit.rb
#!/usr/bin/env ruby
require 'rubygems'
require 'phidgets-ffi'

ik = Phidgets::InterfaceKit.new

ik.on_attach do |device, obj|
puts "#{device.device_class} attached"
end

ik.on_sensor_change do |device, input, value, obj|
puts "sensor[#{input.index}] => #{value}"
end

sleep 5
if ik.attached?
loop do end
else
puts 'device not found'
end
 

■動かす

Phidgets InterfaceKitにセンサーつないでいじるとon_sensor_changeイベントが起こる
interface_kit attached
sensor[0] => 508
sensor[1] => 0
sensor[2] => 488
sensor[3] => 986
sensor[4] => 0
sensor[5] => 0
sensor[6] => 0
sensor[7] => 0
sensor[3] => 998
sensor[2] => 473
sensor[2] => 489
sensor[2] => 479
sensor[2] => 469
sensor[2] => 486
ちなみにon_sensor_changeイベントを使わなくても自分でPhidgets::InterfaceKit#sensorsを参照すれば読める。
raw_valueは12bitADコンバータの値で、0〜4095の値を返すようだ。to_iすると0〜999が得られる。
puts ik.sensors[0].raw_value
puts ik.sensors[0].to_i

0

最近の自宅プログラミング環境

家に帰ってきたらMacbookAirの上にサブモニタをつける。
デュアルディスプレイは左右に置くとどうしても首が痛くなるし、作業する方のモニタの正面にキーボードを移動させなければならなくて、首が痛くなる。

上下だと首が疲れない。写真のように上画面に半透明のterminalとemacsとChromeの開発パネル。下画面(Macbook Air)に Chromeを表示して作業している。1枚の大きなディスプレイになった感じがする。

そろそろボロくなってきたけど、次も首の長さが調節できるモニタを買いたい。

縦デュアルディスプレイ

 

0

MacのRubyでPhidgets RFIDリーダーを使う

PhidgetsをRubyから使う方法は去年も調べたのだが、良いrubygemが無かったのでPhidgets Serverを立てるしかないかなと思っていたけど、
最近リリースされたphidgets-ffiを使うとRubyスクリプト単体で使えた。

他にも”phidgets”や”phidgets4r”などのgemもあるが、OSの判別のコードがSnow Leopardに対応していなかったりonAttachなどのイベントを発行してくれなかったりAPIがRubyっぽくなかったりする。
phidgets-ffiが一番対応デバイス数多くてドキュメントもしっかりしていて良い。


■インストール
まずPhidgets 21 Installerをインストールする。Cで書かれたライブラリと、Macにはコントロールパネルがインストールされる。

次にgemを入れる

gem install ffi phidgets-ffi


■テスト
自分でプログラムを書く前に、システム環境設定にPhidgetsコントロールパネルが増えているのでそこから動かしてみる。
PhidgetsデバイスをUSBポートに挿すとGeneralのタブに名前が増えるので、ダブルクリックすればそれぞれのデバイスに合わせたGUIが出てくる。


■phidgets-ffiを使う
RFIDリーダーを動かしてみた。これだけでRFIDタグをのせた・どけた事がイベントで取れて、タグのIDも読める。
ffiなので多分Linuxでも動くはず。

ffi-rfid.rb
#!/usr/bin/env ruby
require 'rubygems'
require 'phidgets-ffi'

rfid = Phidgets::RFID.new

puts 'waiting RFID Reader'

rfid.on_attach do |device, obj|
puts "#{device.device_class} attached"
device.antenna = true
device.led = true
sleep 1
end

rfid.on_tag do |device, tag, obj|
puts "tag : #{tag}"
end

rfid.on_tag_lost do |device, tag, obj|
puts "tag lost : #{tag}"
end

sleep 5
if rfid.attached?
loop do
end
else
puts 'device not found'
end

0

hugeurlをアップデートした

twitterのURL展開隠しAPIを使っていたのだがいつの間にかなくなっていたので、HTTP-HEADしてresponseのlocationを見るようにした。

gem install hugeurl
gemの使い方はここに書いたのと同じ

 

今回は新たにhugeurlコマンドを付けておいた。gem installするだけで使えるようになっているはず。
% hugeurl http://t.co/abcde
で展開したり
% cat foo.txt | hugeurl
でファイルまるごと展開できる。

0

オライリーのepub本をmobiに変換してKindleで読む

この本買った。epub形式でダウンロードできる。
O’Reilly Japan – スケーリングMongoDB

で、Kindle Publishing Programsからkindlegenっていうツールをダウンロードしてきて

変換する

kindlegen ~/Download/スケーリングMongoDB.epub -C0
警告がいっぱい出るが、epubと同じ場所にスケーリングMongoDB.mobiができる。

 

Kindle for Macで開いてみて、ちゃんと読めるか確かめる。

あとはKindleに転送するか、iPhone ExplorerでiPhone/iPadのKindleアプリのDocumentsフォルダの中に入れる。
大した容量ではないので、最近はiPhoneとiPad両方に入れておいて持ってる方で読むようにしている