2015年12月19日土曜日

Eject Advent Calendar 19日目:CDドライブに運をまかせてみる

どうも、島田です。
今回は久々のEJECTアドベントカレンダーということで書こうかと思います。

が、しかしネタ切れにも程があるこの頃、何やろうかと散々悩んでいました。一応買い出しには行ったのですが、なんというかどーしようで終わっていた感じでした。

というわけで、家の中を捜索して見つけたEJECT装置をなんとなく並べてみました。

 3台見つかりました。つまり3EJECT。

実はここまでで結構へとへとだったりしますが、出すだけでは何もできません。幸い3台ともUSBインターフェイスがついているので、これとUSBハブにつないでまとめます。更には、CDドライブの電源をタップにまとめます。

こうすることで、PCにつなげるインターフェイスは1本のUSBケーブルにまとまりますし、タップの抜き差しor電源スイッチでまとめてCDドライブのオンオフができます。実験環境のとっかかりはシンプルな方がよいでしょう。


では、次に手元のLinux端末でスクリプトを書いてみます。3台もあるので、何台増やしてもいいように、少しはインテリジェントに書きたいなーと思い、Shell script での配列の使い方を学びながら、こう書いてみました。

(fortune_eject.sh)

#!/bin/bash

# Linuxで認識されているCDドライブをすべて配列に入れる
drives=(`ls -1 /dev/sr*`)

#どれをEJECTするか決める(この場合はランダム)

num=` expr $RANDOM % ${#drives[*]} `

eject -T ${drives[$num]}



スクリプトを書いたら実行権限をつけましょう。

$ chmod +x fortune_eject.sh

num変数にて、どのドライブをウイーンさせるかというのを指定することができますが、ここではランダムにしてみました。するとどうなるかといいますと、3台あるCDドライブのどれかがEJECTするようになります。どれかは選べません。

あとはこれ繰り返し実行しましょう。以下のコマンドでさくっと永久ループできます。

$ while :; do ./fortune_eject.sh ; done

すると、延々と EJECT しては戻りを繰り返すようになります。

ちょっとランダムにしては偏ってないか気になる感じですね。

ここまでで気づいたのは、ドライブによってウイーンする時間が異なることと、特に下のドライブが、クローズ後にロードするような挙動をすることがある程度でしょうか。やはり均等で高品質なEJECTをするには、ドライブを揃えたほうがいいのでしょうか。

さて、ここまで揃えたところで、表題の通り運を任せてみましょうか。といってもよさげなAfter Eject ネタがないので、とりあえずCDドライブのところにぬいぐるみを並べ、fortuneしてみましょう。


気になる結果は...?



あひるが動きましたね。今夜のご飯はあひる焼きとしましょうか。


とこんな感じで、複数台でのEJECTは割と簡単にできますし、慣れればどんどん増やすことができます。USBハブを介してるので、このままRpiとかにつないでも安心です。

ただ欠点は配線が面倒なのがありますし、やはり12EJECTぐらい無いとインパクトがありませんね。
もっとハードオフで買い漁りたいものです。

今回は時間がなくネタができませんでしたが、次はベルをいろいろと買って、シーケンス的に何か鳴らすとかやってみたいものです。あとShell scriptでも非同期実行を極めて、よりスムーズなEJECTをしたいなぁというのも思いました。

ではでは、明日のEJECT アドベントはあひる焼きさんです

0 件のコメント:

コメントを投稿