2013年4月18日木曜日

Raspberry Pi 到着


前から注文してたRaspberry Piがやっと自宅にキター!


利用法はこれから考える。(単なるオモチャとなる可能性が一番高い)

とりあえず姫野ベンチの結果(C言語版、サイズはsmall)

gccでコンパイル
  cpu : 56.529307 sec.
  MFLOPS measured : 58.262508
  Score based on MMX Pentium 200MHz : 1.805470

clangでコンパイル
  cpu : 78.042467 sec. 
  MFLOPS measured : 42.201885
  Score based on MMX Pentium 200MHz : 1.307775


[参考] Core i5 2415Mでの結果

gccでコンパイル
  cpu : 1.231257 sec. 
  MFLOPS measured : 2674.940488
  Score based on MMX Pentium 200MHz : 82.892485

clangでコンパイル
  cpu : 1.185852 sec.
  MFLOPS measured : 2777.361087
  Score based on MMX Pentium 200MHz : 86.066349

もうこの辺りのデバイスのCPUでもMMX Pentiumを上回る性能か…。さすがにCore i5と比べると1/40くらいで、この辺はさすがに仕方ないだろう。
Raspberry Piのclangでの結果がgccより明らかに遅いのはARM向けにどれだけ最適化されてるかの差だろうか?(コンパイルオプションの問題、という事も往々にしてあるが)

[上記の比較は「試しに測ってみた」だけでちゃんとデータをとってある訳ではありません。あくまで参考程度に]


2013年4月17日水曜日

USB温度計のUbuntuでの使用

室内の温度測定などのためにUbuntuでの動作が確認されているUSB温度計を購入。

Amazon USB温度計! USB thermometer

980円のUSB温度計を使ってLinuxから室温を計測する (infiniteloop.co.jp)
を参考にしてGitHubから測定プログラムtemperのソースコードを持ってくる。

temper : github bitplane / temper

修正、コンパイルなどは上記リンクやREADMEなどを見ながらやれば特に問題がないだろう。

ただ、このプログラムはそのままだとroot権限でしか実行出来ない。なのでtemper内のREADMEに従い、ソースに同梱されているudevルールのファイルを/etc/udev/rules.d/にコピーしてやる。
$ sudo cp ~/temper/60-temper.rules /etc/udev/rules.d/
で、temperグループを作成しユーザーhogeを追加
$ sudo addgroup temper
$ sudo gpasswd -a hoge temper
udevをリロード
$ sudo service udev reload
これで、温度計を抜いてもう一度挿せばユーザー権限でtemperが… できない。どこか間違っているようだ。

色々調べて見ると、この温度計はlsusbで
ID 1130:660c Tenx Technology, Inc.
と表示されるものと
ID 0c45:7401 Microdia
と表示されるものがある模様。

lsusbを実行してみると、
Bus 002 Device 008: ID 0c45:7401 Microdia
と表示される。

temperに同梱されていた60-temper.rulesの内容は、
ATTR{idVendor}=="1130", ATTR{idProduct}=="660c", OWNER="root", GROUP="temper", MODE="0660"
となり、Tenx Technologyの方の設定になっている。これをlsusbの内容に従って以下のように変更する。
ATTR{idVendor}=="0c45", ATTR{idProduct}=="7401", OWNER="root", GROUP="temper", MODE="0660"
これを/etc/udev/rules.d/に置き、udevリロード以下の手順を実行すると、
$ temper
2013-04-17 21:29:15,23.324450
今度は上手くいったようだ。

2013年4月15日月曜日

RubyGemsを使う場合のcrontabの書き方

Ubuntu (13.04)で自動ツイート用のRubyスクリプトを作って定期的に実行させようとcronを使うがうまくいかない。cronは正常に動作している模様。

そこで、ググって見つけたのが以下の情報

GEM_HOMEを指定する必要があるようだ。(Rubyでtwitterを利用するにはRuby Twitter Gemをインストールする必要がある)

というわけでcrontabを以下のように書く
0 21 * * * GEM_HOME=/home/hoge/.gem/ruby/1.8 /path_to_the_script/tweet.rb > /dev/null 2>&1
これで上手くいった。
(ここでは.bashrcでGEM_HOMEを~/.gem/ruby/1.8としたのでそうしているが本当なら.bashrcの設定ともども~/.gem/ruby/1.9とするべきか?まあ動いてるからいいや)