2008年
12月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

setup diary

2007|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|06|08|11|
2015|01|02|03|04|05|06|07|08|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|

2008-12-19 LinuxのUMPC

_ ubuntu

最近、いろいxろなメーカーからUMPCと呼ばれる、小型で安価なモバイルPCが発売されている。ASUS,MSI,Gigabyteなどのマザーボードメーカー、Acer,MCJなどに加えて、Dell,HP,Lenovoなどのメーカー、さらにはNECや東芝などの日本メーカーも参入してきた。気に入らないのが、日本で発売されているものは、なぜかWindowsだということだ。海外ではLinux版もあるのに。これまで、有名なPCメーカーのものはあまり期待していなかったが、実はDellのInspiron miniでは、Ubuntu版があるらしい。他の会社のはまだ見つけていないが、あるのだろうか。

_ 2008/12/20追記

やはり九月の発売の時点では、日本では初のLinuxということらしい。


2008-12-22 IOからの一行読み込み

_ readlineとgets

rubyには、似たようなmothodがいろいろとある。ファイルからデータを取り込んで処理する場合には、最近はreadで一気に読み込んで、改行でsplitしているが、一行ごとに読み込んだ方が良い場合もある。このような目的には、readlineを使っていたが、これだとEOFでエラーがでる。一方、getsでは、nilが返るので、プログラムが終了することはない。また、eachでもエラーになることはない。getsは一見何をするか分かりにくいので、あまり好きではなかったが、この方が動作が素直な気がする。これからは、eachを使うことにしよう。


2008-12-24 rubyでsocket

_ socketを使ったプログラムを書いてみた。

測定用の自動化には、いろいろな仕組みがある。全部、ひとつのプログラムがやっているのが多い気がするが、制御の部分にサーバーを立ててGUI部分がクライアントとしてそれにアクセスしに行っているようなシステムも見受けられる。装置の制御部分は、一つのタスクからのみにした方がconflictが無くて良いと思うので、それをサーバーに任せるというのは理にかなっているように感じる。 そこで、そのようなシステムを組む練習がてら、遅ればせながらsocketというものを使ってみた。rubyでは、socketを簡単に使えるらしい。試しに書いてみたサーバー部がこれ。
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 true
cygwin上で書いていたのだが、ポートは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なんかも勉強すると参考になるかな。

_ 2008/12/25追記

接続を切ったときには、Errno::ECONNABORTEDというエラーが起こっているようだ。スレッドはこのエラーで終了してしまうので、どんどんスレッドが増えることはないようだ。気持ちわるいので、rescueとかensureとかでこのエラーが起こったときの対処をすれば、それなりに動いた。

_ 2008/12/25追記

いろいろいじっているうちに、二行以上も受け取れるようになった。おそらく主な原因は、
p s.gets until $_=~/^END/
としていたが、
begin
  p s.gets
end until $_=~/END/
と書き換えることによって、getsが条件判定よりも前に行うようになったからだと思う。untilが後にあるから、後に実行しているような気になっていた。でも、なんか変な気がする。

2008-12-28 rubyを用いたsocketによる装置制御

_ socketで装置制御

研究室にsocketを用いて制御されている装置があるのだが、既成のソフトだといろいろと拡張することが困難である。socketの使い方がなんとなく分かって来たので、この装置の制御を試してみた。コマンドに関する情報が不完全なので、そのコマンドを調べながらだったので、それなりに苦労はしたが、とりあえず動くようにはなった。

少し問題だと感じるのは、socketからの入力で、バッファの中にあるものを読み取る方法が分からないということだ。readとかだとEOFまで読もうとしてブロックしてしまうし。getsでも、何行あるかが分からなければ、同じことだし。サーバーも自分で設計する場合には、データのやりとりの際に、データの量などをあらかじめ通信しておけば良いので問題はないでしょうが。


2008-12-29 丈夫なハードディスク

_ 裸のハードディスクを動かしてみた。

ハードディスクの中を見たいという人がいたので、中身を空けて動作中の様子を見せるために、蓋を開けたまま使用してみた。先日、家を片付けていたら出てきた外付けのHDDを使って、蓋をあけて、パソコンに接続して、さて動作をみようとしたら、Linuxでのフォーマットの仕方とかを忘れてしまっていて手間取ってしまった。

ディスクが回転すると、引き起こされる風によってほこりは吹きとぶので、それほどほこりは気にならないということは聞いたことはあったのですが、思ったよりも大丈夫なようだ。いまのところ全く問題なく読み書きできている。もっとも、長期的にはダメだろうが。

最近では1Tとかも出てきて、容量はどんどん大きくなってきている。もうそろそろ限界に近い気もするのだが。