福澤テクノロジー

おっさんプログラマーが、主に技術的な話をするブログ。

mruby-beaglebone を作りました

mrubyで名刺サイズコンピュータBeagleBone Blackをコントロールしたくなって、mrbgemを作りました。
FUKUZAWA-Tadashi/mruby-beaglebone · GitHub

もともとbonescriptという、node.js上で動くjavascriptライブラリと、それをブラウザから呼び出せるCloud9 IDEがあるので、rubyが無くてもかまわないんですが、個人的にjavascriptが嫌いでrubyが好きなので。bonescriptの一部を移植しただけなので、mruby-beagleboneで出来る事は全部bonescriptで出来ます。
mruby-beagleboneでは、とりあえず digitalRead, digitalWrite, analogRead, analogWrite 程度が出来ます。
また、javascriptのsetTimeout, setIntervalに相当する callTimeout, callInterval も入れてみました。これは iij/mruby-process を使って子プロセスでsleepしてタイミングを取るという安易なものです。
多分libuvを使って非同期にするように変更すると良いんじゃないかな。libuvがどんなものかあまりよく判ってないけど。

オマケ

beagleboneからgithubにpushするのに、sshでちょっとはまったのでメモ。
ssh-keygenが無いので、opkg install openssh-keygen にてインストール。
githubに公開鍵を登録しても Permission denied (publickey) が出てしまってアクセス出来ない。
これは /etc/ssh/ssh_config で PubkeyAuthentication no に設定されているのが原因だった。

~/.ssh/config を以下の様に設定して解決。

Host github.com
  PubkeyAuthentication yes
  User git
  Port 22
  Hostname github.com
  IdentityFile ~/.ssh/id_rsa
  TCPKeepAlive yes
  IdentitiesOnly yes

赤外線送受信実験

beaglebone black に、赤外線発信機 Grove WLS12148P と 赤外線受信機 Grove WLS12136P をつなげて赤外線送受信の実験中。

発信は、GPIBに接続して、Cloud9 IDE 上で簡単なスクリプトを組んでみたらあっさり動いた。
動作確認は、発信機のLEDをデジカメで見ればわかる。
デジカメのCCDは赤外線を映すのだ。(このせいか、LEDの電飾をデジカメで写すと色がまったく違って見える場合がある。)
(但し、iPhoneのカメラは赤外線に反応しなかった。)

受信の方で苦労。
どうにもデジタルで反応してくれない。発信の方は動作確認済みなので、そのLEDを点滅するように制御し、受信部に向けてみるのだが反応しない。
アナログに入れてみても駄目。

LEDではなく、テレビのリモコンを向けてみたら、アナログで反応あり。
デジタルではダメなのか?とさらに実験してみると、電源電圧を3.3Vでなく5Vにするとうまくいく事がわかった。3.3Vでも動作すると書いてあるんだけどなあ。

しかし、LEDを向けても反応していなかったのはなぜか?
さらに実験すると、1cm程度の距離で直接受光部に向けると反応することがわかった。
つまり、LEDが暗すぎたという事か! 対応距離は10mと書いてあるんだが。
発信機の電圧を3.3Vにしても5Vにしても、反応はにぶかった。これでは多分10mどころか10cmも届かないだろうな…。
どうしよう。

まとめ
  • 赤外線受信機 WLS12136P の電源電圧は5Vにする。
  • 赤外線発信機 WLS12148P は不良品または使い方を間違っているので、何とかしなければ。

beaglebone black Rev A6

昨年末に秋葉の秋月電子で買った beaglebone black Rev A6 をいじっているメモ。

  • 電源は、DC5VでもUSB給電でもどちらでも起動できる。
  • 起動時にS2スイッチを押さずにいるとオンボードのeMMCからの起動、押し続けているとSDカードからの起動になるはずだが、なぜかS2スイッチと無関係にSDカードが入っていればSDカードからの起動になってしまう。これはこの個体だけの問題?
  • よくわからないが、HDMI出力が真っ暗で何も映らなかったり、USBホストアダプタにつないだキーボードとマウスが認識されないといった場合がある。あーだこーだいじりまくって調べてみたが、
  1. USB給電で起動しないと、HDMI画面が映らないようだ。
  2. DC5V給電していないと、USBホストにつないだ機器を使えないようだ。

これもこの個体だけの問題だろうか?

当面の間は、DC5VとUSBの両方で給電しておくことにする。
安定稼働するようになったら、時々ネットワークからSSHでログインする程度になるだろうから、HDMIもキーボードもマウスも不要になる。その時にはどちらか片方で給電してやればいい。

Lazy Expression Expansion

ALCSを Lazy Expression Expansion に改名しました

ALCS じゃ何の略だったか自分でも忘れてしまうくらいだったので、名前を変更。
式展開 #{} をその場で評価しないで後で評価する、という意味を込めて名付けました。
Haskellなどの遅延評価と違い、自分で Proc#call を呼ばなければなりませんが。

ヒアドキュメントのバグ修正にも対応して、githubにプッシュしておきました。
https://github.com/FUKUZAWA-Tadashi/mruby/tree/LazyExpressionExpansion

過去記事
ALCS(仮) 仕様まとめ - 福澤テクノロジー

mrubyのヒアドキュメントのバグを修正

mrubyのヒアドキュメントのバグを修正しました

バグがある事はわかっていたのですが、まず使われる事のない文法に対する Syntax Error だったので、半年ほど放置していました。
これを修正し、既にmasterにマージされています。

修正箇所は3箇所。

配列リテラルの途中でのヒアドキュメント

p [1, <<AAA, 3,
2
AAA
   4]
# => [1, "2\n", 3, 4]

引数の途中でのヒアドキュメント

def f(*x)
  p x
end
f(11,<<AAA,13,
12
AAA
  14)
# => [11, "12\n", 13, 14]

式展開 #{} の中でのヒアドキュメント

p "21 #{<<AAA} 23"
x #{b = {b:<<BBB}} y
22
BBB
z
AAA
# => "21 x {:b=>\"22\\n\"} y\nz\n 23"
p b
# => {:b=>"22\n"}

「忍者を探せ!」をiBookstoreからリリースしました

申請してから1ヶ月、ようやくリリースされました。
訳の分からない理由でリジェクトされ、無駄な時間を使わされましたが、なんとかかわす事が出来ました…。 iBookstore Formatting Guidelines の section 2.14 を見て直せと言われたんだけど、そんなセクションは無いんですよ…。

日本語版2巻、英語版2巻です。日本語版と英語版で写真に違いはありません。

忍者を探せ! 1
忍者を探せ! 2
FIND NINJA! 1
FIND NINJA! 2

内容的には「お花見ゆうれい」と同じく、左右2枚からなる写真を立体視すると、隠れている透明な忍者が浮かび上がってくるというものです。
1巻には39枚中7枚の写真に8人の忍者が、2巻には46枚中7枚の写真に7人の忍者が隠れています。
写真枚数の少ない無料サンプルもありますので、試しにダウンロードしてみて、気に入ったら本体を買って頂ければと思います。100円です。
iPhone, iPod touch でも動くはずですが、iPadの大きな画面で見ることをおすすめします。


なんかAppleから、OS X Mavericks will include iBooks for Mac. とかいうメールが来た。
MacでもiBooksが使えるようになるのか。javascriptでピンチとか使ってるから、Macでも動くかどうか調べないといけないのか…。

立体写真ページ大量更新

ずいぶん長い間更新をサボっていたので、沢山の立体写真が溜まっていました。
一気更新。

トップページはこちらです↓
Stereo Photos and Videos of Japan