|
setup diary |
最近、いろいxろなメーカーからUMPCと呼ばれる、小型で安価なモバイルPCが発売されている。ASUS,MSI,Gigabyteなどのマザーボードメーカー、Acer,MCJなどに加えて、Dell,HP,Lenovoなどのメーカー、さらにはNECや東芝などの日本メーカーも参入してきた。気に入らないのが、日本で発売されているものは、なぜかWindowsだということだ。海外ではLinux版もあるのに。これまで、有名なPCメーカーのものはあまり期待していなかったが、実はDellのInspiron miniでは、Ubuntu版があるらしい。他の会社のはまだ見つけていないが、あるのだろうか。
やはり九月の発売の時点では、日本では初のLinuxということらしい。
rubyには、似たようなmothodがいろいろとある。ファイルからデータを取り込んで処理する場合には、最近はreadで一気に読み込んで、改行でsplitしているが、一行ごとに読み込んだ方が良い場合もある。このような目的には、readlineを使っていたが、これだとEOFでエラーがでる。一方、getsでは、nilが返るので、プログラムが終了することはない。また、eachでもエラーになることはない。getsは一見何をするか分かりにくいので、あまり好きではなかったが、この方が動作が素直な気がする。これからは、eachを使うことにしよう。
require 'socket' s=TCPServer.new(12344) Thread.start(s.accept){|cl| print "%s is accepted\n"%cl.peeraddr cl.each{|cmd| str="" case cmd.strip when "status" str=(rand(2)>0)?"good":"bad" when "color" str=["red","green","blue"][rand(3)] end cl.puts str } cl.close print "%s is terminated\n"%cl.peeraddr } while truecygwin上で書いていたのだが、ポートは12345はトロイの木馬と勘違いされてだめだった。そして、クライアントはこれ。
s=TCPSocket.open("localhost",12344) 5.times{ s.write(["status\n","color\n"][rand(2)]) p s.gets sleep 2 } s.closeとりあえずは動くのだが、いろいろと気に入らない点がある。まず、クライアントからの入力に対して、出力を二行以上にしようとしたら、なぜかうまくいかなかった。print文が働かないように見える。それから、クライアントの接続が切れたことを認識してくれない。これだと、接続がつながって切れる度に、スレッドが増えていくことになってしまう。windows上で動かしているからなのかもしれない。時間ができたらlinux上でいろいろと試してみよう。 他の人が書いたプログラムとかを参考にいろいろと勉強しないといけないようだ。HTMLとかPOPなんかも勉強すると参考になるかな。
接続を切ったときには、Errno::ECONNABORTEDというエラーが起こっているようだ。スレッドはこのエラーで終了してしまうので、どんどんスレッドが増えることはないようだ。気持ちわるいので、rescueとかensureとかでこのエラーが起こったときの対処をすれば、それなりに動いた。
p s.gets until $_=~/^END/としていたが、
begin p s.gets end until $_=~/END/と書き換えることによって、getsが条件判定よりも前に行うようになったからだと思う。untilが後にあるから、後に実行しているような気になっていた。でも、なんか変な気がする。
研究室にsocketを用いて制御されている装置があるのだが、既成のソフトだといろいろと拡張することが困難である。socketの使い方がなんとなく分かって来たので、この装置の制御を試してみた。コマンドに関する情報が不完全なので、そのコマンドを調べながらだったので、それなりに苦労はしたが、とりあえず動くようにはなった。
少し問題だと感じるのは、socketからの入力で、バッファの中にあるものを読み取る方法が分からないということだ。readとかだとEOFまで読もうとしてブロックしてしまうし。getsでも、何行あるかが分からなければ、同じことだし。サーバーも自分で設計する場合には、データのやりとりの際に、データの量などをあらかじめ通信しておけば良いので問題はないでしょうが。
ハードディスクの中を見たいという人がいたので、中身を空けて動作中の様子を見せるために、蓋を開けたまま使用してみた。先日、家を片付けていたら出てきた外付けのHDDを使って、蓋をあけて、パソコンに接続して、さて動作をみようとしたら、Linuxでのフォーマットの仕方とかを忘れてしまっていて手間取ってしまった。
ディスクが回転すると、引き起こされる風によってほこりは吹きとぶので、それほどほこりは気にならないということは聞いたことはあったのですが、思ったよりも大丈夫なようだ。いまのところ全く問題なく読み書きできている。もっとも、長期的にはダメだろうが。
最近では1Tとかも出てきて、容量はどんどん大きくなってきている。もうそろそろ限界に近い気もするのだが。