|
setup diary |
httpへのリンクが張ってあるのを自動で消したりすれば、大半のものは無くなるのだろうが、自分以外の書き込みはほとんどないので、面倒になって、ツッコミを禁止した。
るびまゴルフにトラックバックしたからか、訪問者が多少増えて、ジャンクも増えてしまったのだろう。ところで、第四回のるびまゴルフは出遅れていたら、ほとんど答えが出揃っているようだったので、今回は参戦しないことにした。今回のは短い問題なのだが、個人的にはもう少し長い問題の方が好きだ。
#! /bin/sh su user -c "vnc4server :1" exitという内容にして、あとは
chmod ugo+x /etc/init.d/scanner update-rc.d scanner defaults 98とした。poweroffを使えるようにvisudoで設定したり、scannerのgroupにユーザーを加えたりしたら、ほぼ完成。 基本的には、スキャナーの電源を入れて、LINUXマシンの電源を入れてしばらく待ったら、VNCのViewerでloginして、xscanimageと打てば、スキャナーが使えるようになる。使い終わったら、sudo poweroffと打てば、電源が切れるという仕組である。 LINUXマシンにはマウスもキーボードもつないでいないので、起動時にgdmが落ちるが、sshでログインできるようにしてあるので問題ないだろう。残る問題は、ファイルの転送であるが、sftpを使えばできるのだが、Windowsでは標準で使えないし、それならsshのXでやれば、VNCなんか使う必要も無くなる気がするし。VNCでもファイル転送ができた気がするのだが、やりかたが分からない。
やはりVNCではファイルのできないようだ。仕方がないので、sambaを入れることにした。
本当はinit.dはstart, stop, restartという引数をとるようにしないといけない。上の場合では、終了のときにも起動してしまうことになる。
makebeer /copyとすれば良いようなのだが、パーティションの切る順序が重要だったようで、これがうまくいかない。なんと不自由な。Linuxでパーティションを切ったり、いろいろとやってみたが、結局あまりうまくいかず、最終的には次のような方法でごまかした。 \imagesにあるイメージファイルを\er\pqerを使って復元しているようだったので、それを元にwebを調べたら、
\ER\PQER /CMD=\TOOLS\FULL2KXP.TXT /IMG=\IMAGES\INSTALL1.PQIとすれば良いような感じだったので、やってみた。コマンドの指定するべきファイルは何種類かあったが、違いがわからなかったので、full2kxpにしてみた。その結果、リカバリーはできたようだが、全ディスクを使用して、リカバリ領域も殺してしまった。fullとはそういう意味だったのかな。1st2xpc0とかいうファイルがあった気がするので、これはcドライブの何かという意味だったのだろうか。 まあ、よくわからないが、最低限使えるようになった気がするので、今回はこれでよしとしよう。もう一度リカバリーが必要になったときは、素直にLinuxを入れることにしよう。Linuxだったら、何の苦労もしないでインストールできた気がする。 リカバリ領域に関しては、イメージファイルとそれを書き込むプログラム等を別の場所に保存しておくようにした方が良い用に思う。
recovery用のパーティションは見えないだけで、まだあるのかも知れない。Windowsから見えないので、無いと思っていたのだが、容量から判断するとある気がする。別のOSから立ち上げないといけないなんで、なんて不自由なOSなんだろう。
Let's noteが不調だったので、EeePCを購入してみた。901か900で迷ったが、軽いしSSDの容量も大きいということで、900にしてみた。
研究室の評判としては、思ったよりも良い感じといったところか。SSDは少し遅い気がするが、多少気になる程度だ。外部ディスプレイの切替えでは、内蔵と両方表示させると、外部も上下がけずられて横長になってしまう。通常の使用では、外部のみにして使う必要があるだろう。
そろそろLinux版が出ても良いころだと思うのだが、日本ではなかなか発売されない。日本語を扱うようにするのって、そんなに難しいのかな。まあ、Windows無しで発売してくれれば、なんとかインストールできるような気がしますが。Ubuntuとかではやっている人もいるし。
様々な装置の中には、できるだけ停止している時間を短くした方が良いものがいくつかある。それらを停止するために、停電の直前まで待っていて、さらに停電が終わってすぐに復帰させることを試みる。停電前には、そのための体力を温存しておく必要がある。体力の無いときは、早めにすべての装置を切ってしまうが、今回は何時まで起きていられるだろうか。
停電があるたびに、我々がいかに電気に頼っているかを痛感する。生まれてこのかた、一日たりとも電気を使わなかったことはないのではないか。
計画的な停電は一年に一度ぐらいあるが、雷の季節になると、落雷による瞬間停電も起こることがある。運が悪いとそれで装置が死んだりすることもある。これは停電のためというより、過電圧のためだろうが。今年はどうなるだろう。
久々にwindowsを使う必要に迫られたので、仕方がないのでcygwinを入れた。editorとして、nanoとemacsをいれたのだが、emacsで終了ができない。いろいろと調べてみたら、ctrl-Cが効いていないようだ。
windowsの環境変数CYGWINにntsec tty emacsと入れれば、使えるようになるらしい。いろいろ難しいな。
出張中に、仕事場の自分のパソコンにアクセスする場合がある。もっていくのを忘れたデータも取ることができる。 sshやsftpを使えば、まあ大抵のことはできる。たとえば、sshでXを飛ばせば、仕事場のPCを使っているような感じで使うこともできる。また、sshトンネルを使えば、sambaでファイル共有することもできる。
いつもはlinuxでこれらをやっているが、windows上のcygwinから試みたが、Xもうまく飛ばせないし、sambaもポートのいじり方が分からなかった。やはり、windowsはネットワークが弱いと実感する。
X飛ばしができないのは、cygwinのXが立っていないからだけだった。cygwinのターミナルを使っていると、すでにXがあるような気になっていた。
徹夜で実験していると、だんだん集中力が無くなってくる。絶対にやってはいけない誤りをしないように気を使う必要がある場合には、その他のことに割く労力を少しでも減らすようにするとよい。
測定が終わったら、そのファイルをコピーして、データを解析するという単純作業に飽きたので、その部分をrubyにまかせることにした。ファイルをコピーする方法があった気がして調べたら、FileUtileをrequireして使うらしい。昔は別のmethodを使った気がするのだが。徐々にrubyも変化してきているのですね。進化するのは喜ばしいのですが、あまり変わると覚えられなくなってしまうので、ほどほどの改良が望まれます。
r=open("/dev/ttyS0","r+") system("stty raw -echo -crtscts 9600 -parenb cs8 -ctsopb < /dev/ttyS0") r.write("read\n") print r.gets("\x0d\x0a")という感じでやっている。Windowsでは、いろいろと調べたり試したりした結果、
system("mode com1 baud=9600 parity=N data=8 stop=1") r=open("com1","r+") r.write("read\n") s="" s<<r.sysread(1) until s[-1]==10 print sというようになった。本当はsyswriteにすべきかも知れないが、writeでもとりあえずは動いている。しかし、readでは動かなくてしばらく悪戦苦闘していた。自分でLFを探さなければならないのも少し面倒だ。 まあ、苦労したおかげで、実験が多少楽にできるようになった。
ping localhost -n 6 >nullとすると、だいたい5秒ぐらいのsleepと同じ挙動をする。あとは、gotoをつかって永久ループにすれば、バッチ処理をしてくれるバッチファイルができる。
4.times{|i| print i} data=open("test.dat","r"){|f| f.read.split(/\n/)} data.delete_if{|l| l=~/^#/} data.each{|l| p l}こんな感じだ。この数日しか使わないであろうプログラムを書き殴っていて、iteratorの中でiteratorを使ってしまった。すると、当然のことながら、この変数が重複することになる。このとき注意しなければいけないのは、iteratorの変数が前もって定義されている場合には、変更されてしまうということである。その結果、予想しない結果になってしまう。そのあたりは、次期バージョンでは仕様が変わって、おそらくエラーが出るようになるようだ。 ちなみに今日知ったのだが、イテレータは古い表現で、最近はブロック付きメソッドというらしい。
a.reject{|l| l~/^#/} a.grep(/^[^#]/)の上のような使い方を良くしていたのだが、これは下のように書けることが分かった。ちなみに後者では、空の文字列も除ける。また、sortの時に、いちいち二つのものの比較を書くのが面倒だと思っていたが、
a.sort{|x,y| x.abs<=>y.abs} a.sort_by{|x| x.abs}上と同じことを下のように書けるようだ。実際にはこれらは内部処理も異なっているようだが。それから、maxやminはあるけど、sumが無いと思っていたが、これは足すという作業は一般的ではないからだろう。しかし、
a.inject{|s,i| s+i}とすると、合計を求めることができる。 あと、多項式の値の計算をどうやったらきれいに書けるかで悩んでいる。新しくメソッドを定義すればよいのだが、一行で書けるのならその必要もないし。とりあえず考えたのが、
x=1.2 s=0.0 [0.0,1.0,0.0,-1.0/6].each_with_index{|c,i| s+=c*x**i} p sというものだ。これだと、新しく変数を定義する必要がある。次に考えたのが、
x=1.2 p [0.0,1.0,0.0,-1.0/6].reverse.inject{|s,c| s*x+c}というものだ。これはとりあえずの目的は達しているように思われるが、直感的ではない。今のところこのくらいは仕方が無いのかな。collect_with_indexとかがあればもう少しシンプルに書ける気がする。