rubyとsh
コマンドラインからのコマンドを実行する必要のある簡単なプログラムは、rubyで書くよりはシェルスクリプトの方が自然だと思うので、時々シェルスクリプトを使うのだが、文法がまだ覚えられない。今日は、
if then else fi
while do done
と、ファイルがあるかを調べるtest -fを覚えた。それから、前のコマンドが成功したときに実行するための&&と、失敗したときに実行するための||も知った。
あまり深く勉強するつもりはないが、シェルスクリプトをまともに書けるようになるのはそうとう先のことになりそうだ。
rejectとdelete_ifとselect
rejectとselectはこれまで知らなかった。
rubyでarrayの処理にはdelete_ifをよく使っていたが、reject!の方が一般的な記述のようだ。当然rejectもあって、その逆もselectという名前であるらしい。「Rubyデスクトップリファレンス」を愛用しているのだが、rejectは配列の所に載っていたが、selectはEnumarableの所にあって、なかなか見付けられなかった。また、以前から欲しいと思っていたmethodであるmaxとかminとかも実はEnumarableにあった。これまでは、delete_if{|l| not l==0}のような感じで使っていたことも多かったのだが、selectを使うようにしよう。
2008/4/21追記 しかし、select!はない。
sargeからetchへ
測定用のPCのOSをsargeからetchにした。
今回は二台目なので、ほとんど問題なくいったが、GPIBを入れるときに、シェルスクリプトを動かしたのだが、ソースをtarで展開するところがスキップされてしまったようだ。一行ずつコピーして実行したら動いたので、結局何が悪かったのかよく分からないけど。
LANG変数
DebianのLANG
LANGの設定が日本語になっていて、うまく動かないので、それを解除しようと思ったが、なかなかどこで指定されているのか見つからなかった。.bashrcや/etc/profileを見ても無かったが、/etc/environmentで設定してあるのを見つけた。これをコメントアウトしたら、うまくいった。インストールのときに、決まってしまうのかと思うと、少し押し付けがましい気がする。
大阪出張
デジットへ
新しく購入したPCを立ち上げていて気がついたのだが、プリンタポートが無い。確認を怠ったのが悪いのだが、なんとかしたい。パラレルポートはTTL出力で、いろいろなことに使えるので、いろいろと便利だ。マザーボードを調べてみると、ピンヘッダーは出ているので、これをD-subにするケーブルがあれば良いことが分かった。そこで、ケーブルを探すために日本橋へ。いろいろと探し回ったが、そのようなケーブルは見つからなかった。自作するかということで、デジットへ。出張中で半田ごてが手元にないので、フラットケーブル用のコネクタを購入して適当につないだら、あっさりと動作。ピンの番号はD-subのとピンヘッダのがずれることになるが、1番が一致するようにすれば良いようだ。ついでにいくつか玩具を購入。出張から戻ったら動かしてみよう。
プリンターポートの設定
etchでプリンターポート
測定用のパソコンで、プリンターポートを使えるようにした。まず、双方向通信ができるように、biosの設定でEPPにした。次に、cupsysを組み込んでいると、lpを占有するようなので、これを開放する必要がある。rootでrmmod lpとすれば良いのだが、これを毎回するのも面倒なので、
echo '#! /bin/sh' > /etc/init.d/rmlp echo 'rmmod lp' >> /etc/init.d/rmlp chmod ugo+x /etc/init.d/rmlp update-rc.d rmlp defaults 98
として、起動時にrmmodが自動的に行われるようにした。 そういえば、プリンターの設定をまだしていないな。まあ、あまり使わないけど。ppdを探すのが面倒だなあ。
Macのバックスラッシュ
Macでは、yenとバックスラッシュが違うらしい。
昔、発見して知っていたのだが、またこのせいで時間を取られてしまった。プログラムでspecial codeを表すときによく使うので、注意が必要だ。
hostnameの変更
debianのhostnameを変更した。
etchで測定用のPCを立ち上げ直したが、とりあえずは臨時のホスト名にしていたが、うまく動いてきたので、もともと使っていたホスト名に変更した。
/etc/hostnameで自分の名前を変更して、/etc/hostsも変更すれば完了です。あとは/etc/network/interfacesでDHCPから固定IPに変えて置きました。
測定のインターフェースとしては、GPIBとRS232Cとプリンターポートを使っているので、これらがすべて動くことを確認しないといけないのだが、前の二つは無事に動いたので、最後のも大丈夫だろう。
modprobeとudev
etchのGPIBは難しい。
なんとかGPIBが使えるようになったと思ったが、再起動するとpermissionが変わったりして、なかなかうまくいかない。この原因は、modprobeでモジュールを組み込むときに、udevがうまく働かないということが原因らしいことが分かった。手動でmodprobe tnt4882とするとgpibのグループになるのだが、/etc/modprobe.d/gpibに記述して組み込むと、グループが変わらない。waitを入れると良いという話も見付けたので試してみたが。うまくいかない。しかたがないので、install tnt4882 /sbin/modprobe –ignore-install tnt4882; chgrp gpib /dev/gpib*; /usr/local/sbin/gpib_config –minor 0としてごまかした。今のところはこれでうまく動いているようだ。
linux-gpibのインストール
optiplex 745を測定用に。
Etchを入れてみたら、xorgが動かない。他にやっている人が居ないかと探してみたら、driverをvesaにしたら良いようなので、
dpkg-reconfigure xserver-xorg
で変更したら、無事Xが立ち上がった。次はGPIBだが、headerを取ってきてコンパイルして、gpib-rubyを入れようとしたら、
/usr/bin/ld: cannot find -lfl
と出たので、
aptitude install flex
として、コンパイルして無事終了。と思ったら、なぜか動かない。結局、/etc/gpib.confをni_pciからni_pci_accelにしたり、/dev/gpib*のgroupを変更したりしていたら動いた。結局何が問題だったのだろう。ni_pciとni_pci_accelの違いは何だったか忘れてしまった。