|
setup diary |
cannot create /dev/null: Permission deniedとなって、Xが立ち上がらないのが原因のようだ。こうなってしまった理由は良く分からないのだが、/etc/rc.localのexit 0の前に、
chmod 0666 /dev/nullと入れれば良いというのを見つけたので、そうしたらloginできるようになった。なんか、気持ち悪いけど、まあいいか。
これまで、rubyでGUIを作る必要があるときには、主にtkを使っていた。しかし、最近のubuntuは、ruby/tkとは相性が悪いようで、今後はruby/tkがどうなって行くのかが不安である。そこで、ruby/tkの代わりにruby/gtk2を使ってみることにした。これまでtkを使って書いていたのものを、gtkに簡単に移植するために、tkライクにgtkを使えるwrapperのようなものを書いたら、なんとかひとつのプログラムの移植は完了した。その作業の中で、tkとgtkの違いについて、いくつか感じたことを書いておこう。
tkの場合には、toplevelの中に、一つずつpackしたり、frameを作ってその中にpackしたりして、配置する。一方、gtkでは、windowの中に入れることができるのは、一つだけで、通常はvboxなどを入れて、その中に配置していく。わざわざboxを入れないといけないのは、少し面倒だなと感じた。
面倒と言えば、gtkではwindowを閉じたときの処理とか、fileを開くための画面などで、ボタンを押したときの処理を一々指定しないといけない。これは、細かい指定ができるという意味ではメリットかも知れないが、何も指定しなくても、cancelのときは、普通にcancelしてくれる方が良い気もする。
gtkでaddしたあとにshowしないといけないのも、面倒かな。
また、tclの仕様のために、tkの場合には、数字という概念があまり無いので、数字を扱うときには、rubyで受け取るときに、数字に変換する必要がある。
まとめると、ruby/tkはオプションの指定などの仕方が独特で、取っ付きにくいけど、意外に指定することが少ない場合もある。ruby/gtkはきめ細やかな設定ができる代わりに、デフォルトの設定が少なくて、いろいろと指定する必要がある。まあ、一応つかえるようになってしまえば、tkもgtkもあまり変わらない気がする。
数年間計測に使っていたnote PCが遅くなってきたので、制御用のPCを入れ替えることにした。noteは余っていないし、desktopも邪魔なので、raspberry piを使ってはどうかと考えた。しかし、raspbianではusbtmcを使うためにkernelをコンパイルしないといけない。raspberry pi2で動くubuntu mateだと、usbtmcはそのままで使えるというわけで、これを使って測定系を組むことにした。いくつかのハードルはあるとは思っていたが、予想していたよりも、少し苦労させられることになったが、なんとかうまく動くようになった。
まず、最初にはまったのが、rubyのversionによる問題である。それまでのシステムはruby1.8で動いていたのだが、今回はruby2.1で動かしている。version依存の命令は使っていないつもりだったので、そのままで動くと予想していたのだが、考えが甘かった。usb-serialで通信していたのだが、なぜかうまく動かない。オシロを使って信号を読んでみると、送ろうと思っている文字列と違う文字列が送られていることに気がついた。このとき、"%c"%nのような書き方をしていたのだが、このときに、勝手にunicodeに変換されてしまっていた。そこで、[n].unpack("c")としたら、変換されなくなり、通信できるようになった。
次の問題は、ruby/tkである。ubuntuでは、なぜかruby/tkがサポートされなくなってきているようなので、ruby/gtk2に移植する必要があった。少し時間はかかったが、tkとほぼ同じ感じでgtk2も使えるようになった。
しかし、実際に動かしてみると、通信エラーを頻繁に起こすことが分かった。いろいろと原因を考えた結果、usbのhubを疑うことにした。raspberry pi2には四つのusb portがある。ここに、mouseとkeyboardとusbtmcとusb-serial*2の合計五つのusb機器をつないでいる。そのため、usbのhubが必要で、それまでは、測定機器はすべてhubを介して接続されていた。そこで、mouseとkeyboardをhubを介して接続し、残りの三つの装置を直接つなぐようにしたら、通信エラーが起こらなくなった。
これで、測定できるシステムが完成した。あとはftpdを入れて、固定IPにして、ntpの設定をして、keyboardのlocaleを合わせるぐらいかな。ftpは以前使っていたvsftpdを入れればよい。固定IPにするのは、/etc/network/interfacesをいじりたくなるのだが、メニューからネットワーク接続を選んで、設定すればよいようだ。ntpはおそらく/etc/ntp.confをいじるのだと予想している。keyboardもmateのメニューのkeyboardで種類を設定できるようだ。あと、自動起動で不要なものを消しておくと良いかも知れない。