0

github pagesのシンタックスハイライト

github pagesのこういうシンタックスハイライトは最初にgihtubがmarkdownからHTML生成する時に色をつけてくれる。

こういう激しいHTMLが生成される。


pygmentsを使ったらシンタックスハイライトしてくれた。

sudo easy_install pygments
pygmentize -f html code.txt

pygmentsが大量の1文字クラスspanタグを作ってくれる。
多少違うタグが付いている部分もあるけど、HTML中に埋め込んでみたら特に問題なかった。


上がpygmentsで作ったやつで、下がgithubがmarkdownから作ったやつ

0

github pagesで作ったブランチを手元に持ってくる

最近githubのREADMEからwebページを作る機能をよく使ってるんだけど
生成されたgh-pagesブランチを手元に持ってくる方法をよく忘れる

git fetch origin
git branch -a
git checkout -b gh-pages origin/gh-pages
これでローカルにもgh-pagesが来る

gitはcheckoutの引数に意味持たせすぎで理解できない

0

RubyからArduinoを操作できるようにFirmataプロトコルを移植した

Javaから移植した
Arduino Firmata on Ruby

インストール

gem install arduino_firmata
Ruby 1.8.7と1.9.2で動作確認してる。serialport gemを使ってるのでJRubyでは動かない。


できること・使い方

RubyからArduinoのデジタル・アナログの入出力が使える。

例えばTwの内部APIと温度センサLM35DZと組み合わせると、9行で温度をtweetできたりして便利。
#usr/bin/env ruby
require 'rubygems'
require 'arduino_firmata'
require 'tw'

arduino = ArduinoFirmata.connect "/dev/tty.usbmodem621"
puts temp = arduino.analog_read(1)*100*5/1024 # 摂氏1度毎に10mV出力なので計算する
client = Tw::Client.new
client.auth "shokai"
client.tweet "現在の温度 #{temp}度"


あとはSinatraと組み合わせて20行ぐらいでブラウザからArduino動かしたりとかもできる



Firmataとは


http://firmata.org
Firmata(ふぁるまーた)はProcessingからArduinoを制御するために5年ぐらい前に作られたプロトコルだ。

Arduinoに Firmataファームウェア を書き込むと、USBシリアル通信経由でパソコンとやりとりしてIOを操作したり色々やってくれる。
プログラムを書く側はArduinoのコードを書いたりパソコンとの通信を意識したりする必要が無くなり、
手元のRubyやProcessingだけを書けば済むのでとても楽になる。
ただし、通信する分だけ遅くなるので超細かくモーターを制御する等には向いていない。


Processing以外にもMax/MSPやopenFrameworksなど色々なプログラミング言語からArduinoを制御する時に使われるようになったり、
また逆に、Arduino以外のボード(Funnel IOなど)をProcessingから制御するのにも使われてたりしている。

いろんな言語とボードを接続するのに便利なプロトコルなのだが、
PhidgetsがあるんだからArduinoはスタンドアロンで使うべきじゃないの?という印象だった。2週間前までは。

八王子の山奥のopenFrameworksセミナーで使ったGrove Systemが拡張パーツの多さ・入手の容易さ・自分で拡張しやすいという点でPhidgetsを食ってしまっていたので、Rubyでも使いたくなった。
つまり Ruby+Firmata+Arduino+GroveSystem 最強なのでは。全部オープンソースだし。

実装はそんなに難しくなくて昨日お風呂にはいる時間を削って作ってみたらすぐ動いたのでgemにした。
Arduino playground – Processing にあったJavaのFirmataライブラリをまるごとRubyで書きなおした。


Rubyっぽい書き方


せっかくRubyで書いてるので使いやすいAPIにしたい。

デバイス名を省略してconnectしても適当に探して接続したりとか、
ADコンバータにcallback登録できるようにしてみた。
arduino = ArduinoFirmata.connect

arduino.on_analog_changed 0 do |value|
puts "analog pin 0 changed #{value}"
arduino.analog_write 11, value
end

ブロックを使うと、arduino.analog_readをanalog_readだけに省略できたりとか
ArduinoFirmata.connect do
puts "firmata version #{version}"

30.times do
an = analog_read 0
analog_write 11, an
sleep 0.01
end
end


簡単なチュートリアルも Arduino Firmata on Ruby に書いたし、
今後も機能追加するので(未実装のon_digital_changed等)見ると良いと思います。

0

最近の開発環境

半透明のiterm2を2つ重ねてフルスクリーンにして、Twでuserstreamを流してる
面白いことに裏の文字サイズが大きいと、手前に注視している時は裏の大きい文字が「なんか流れてるなあ」程度で視界に入らない。不思議だ。
文字サイズをもう少し小さくすると同時に読めるようになる。完全に同じにすると文字が重なって両方読みにくい。

3メートルぐらい離れた所にテレビがあっても、焦点が手元の本にあるとテレビが気にならないようなのと同じだと思う。

つまりtwitterはほぼ見ていなくて、なんかカラフルな色が流れているだけで特に意味は無い
奥行きとサイズとながら見の関係が最近気になっている



前:橋本商会 » 最近の自宅プログラミング環境

0

気温とか明るさをtweetするようにした

なんとなくJSONで。



ソースコード
https://github.com/shokai/tweet_env


温度はLM35DZを使った。
高精度IC温度センサ LM35DZ 0~100℃: センサ一般 秋月電子通商 電子部品 ネット通販

正面から見て左のピンにVCC、右にGNDつないで、中央から摂氏1度毎に10mVでる。


10mVで1℃をArduinoのADコンバータで読む。LM35とADコンバータ比較電圧は5V。

#define LM35_PIN 0
#define LM35_VOL 5

double get_temp(){
return (double)analogRead(LM35_PIN)*100*LM35_VOL/1024;
}
最初にdoubleかunsigned intとかにしておかないと、33度以上の時に桁あふれして負の温度が返ってくる。


twitterへの投稿はTw内部APIを使ったので3行で書けた。
twで値をすぐ取り出せるので、twitterに入れておくの便利だと思う。
% tw -search=気温,明るさ,shokai_log
% tw -search=気温,明るさ,shokai_log --format="#{text}"


RubyにもFirmataライブラリがあれば楽なのになーと思った