おしゃれなネット連携気象計
面白い。
んが、ベランダの植木鉢の横に雨量計置いてデータ公開しても、しょうがないのではないかとw (本質的な話じゃないけど)
しかしこの値段で売れるんだ。勉強になる。
歴史はやっぱり繰り返す?
iPhone 3G を見て「いずれ、日本国内の携帯電話が海外ブランドのスマホだらけになる」と思った人は少数派だったかも知れないが、まだせいぜい 6年前の話(2008年6月)だ。
一家に一台のビデオカセットレコーダーは、あっという間に DVD プレイヤーとなり、ビデオレンタルショップのレジ前に積み重ねられるようになった。ディスクリート IC が満載だったパソコンはかつて 30〜50万円近くしたが、チップセットといくつかの完成部品を組み合わせる構造になって、一気に低価格化した。
自動車の世界で何が起きるかは、門外漢の私にはちょっと予想できない。もしかすると私の次に買うクルマが、Foxconn 製造になっていたりするのかも知れない。
ソ○トバンクや KD○I が「いまなら駐車場代と車検代を 3年間キャッシュバック!」とかいう広告を始めるかも知れない。日銀総裁が、そのようなデフレは日本経済のためにならないと言い出すかも知れない。
Happy Hacking Keyboard の F10, F11, F12 でボリューム制御をする
Happy Hacking Keyboard (HHK) を Mac に繋いでいるのですが、スピーカーのボリューム制御ができなくてメンドーだなあ、と思ってました。HHK は Fn 修飾キーがあるのですが、例えば F11 を押すには Fn キーを押す必要があり、つまり F11 と Fn + F11 を区別できません。ちゃんと調べてないけど。
Fn + F11 を押すと、Exposé とかいう機能が立ち上がってしまい、ちょっと面倒です。
KeyRemap4MacBook を広げてみたんだけど、最初 Change Functional Key (Brightness, Volume, ...) というところをいじってみたけど、ダメ。今度は F11 で検索して Change F1..F19 Key というところにある F10, F11, F12 to Speaker Controls というところをいじったら、無事に設定できました。中のスクリプトが違うんだろうけど、メンドーなので調べてません。ま、動いたからいいか。
Raspberry Pi 上の Python が遅い
Raspberry Pi 上の Python が遅いぜー、と思ったら、どうもよく知られた問題らしい。ARM 上の Python が遅いのか?
PyPy というのを評価してみようか?
ビーコンモニタ、なんとか Raspberry Pi で動いた
GNU Octave に named pipe から読み込ませる
ビーコンモニタの Raspberry Pi への移植プロジェクトは続きます。
Raspberry Pi でも Octave は十分に使えそうですが、起動時に pkg を読み込む(pkg load signal とか)のに時間がかかるのが辛いです。
いままでは、贅沢にも毎回 Octave を起動し直していたのですが、作戦変更で、Octave はずっと起動させたままにしておき、外から適宜ファイルを食わせることにしました。
ここで問題は、例えばコマンド列やデータをファイルで食わせるとき、ファイルが EOF になると fread() が空ベクトルを返してしまうことです。GNU Octave の 3.6.2 版で試してみましたが、一度 fread() が EOF を検出すると、その後ファイルに追記しても再読み込みはできない感じです。例えば、こんなコードを試しましたがダメでした。
fd = fopen("cmd.dat", "rb"); while true in = fread(fd, [1 16], "short"); printf("len = %d\n", length(in)); if length(in) <= 0 sleep(1); endif end
そこで、これは以前に(Octave ではありませんが)思いついた方法として、named pipe (FIFO) を使ってみました。まず、named pipe を作ります。
$ mknod cmd.dat p
そんでもって、次のようなコードを動かします。
fd = fopen("cmd.dat", "rb"); while true in = fread(fd, [1 16], "short"); printf("len = %d\n", length(in)); if length(in) <= 0 quit(0); endif end
この方法ですと、書き手が named pipe をクローズしない限り、入力データがない間 fread() はブロックします*1。
Octave の使い方としてはちょっとギミックですが、これでやってみよう。
*1:書き手がクローズしてしまうと、誰かが再オープンしてもダメみたい。