OSのupgrade
Debian stretchが出てから約三ヶ月が経過し、少し仕事も落ち着いたので、upgradeしてみた。/homeを別のパーティションにしているので、データは消えないが、念の為にbackupしてから、作業に入る。
いつもはisoをCDRに焼くが、今回は1GのUSBメモリに入れることにした。isoファイルをcpで/dev/sdbにコピーして、syncすれば準備は終わった。biosの設定をUSBからbootできるように変えて、インストール。パーティションを切るところで、ルートと/homeの設定をする以外は、特に特別なことは無い。
必要なソフトを入れたが、苦労したのはやはりプリンターだった。okiのc301dnというプリンターなのだが、hipercというdriverを使わないといけない。以前の記録を頼りにインストールした。まず、foo2zjs.tar.gzを取ってきて、展開してmakeしてmake installする。このとき、dcをインストールする必要があった。これで、cupsからppdを指定すれば無事終了。
まあ、OSをupgradeしても、背景の色が変わったぐらいで、大きな変化は感じられないけど、以前と同じような感覚で使えるのは、良いことだろう。
utf8で
新しい元素の漢字の文字コード
118までの元素名が決まってしばらくした5/9に中国語の漢字が決まったらしい。遅ればせながら、homepageを更新した。
新しい漢字もあるのだが、それに対して新しいユニコードも定義されたようだ。
今回、新しく定義されたのは、ニホニウムの簡体字とテネシンとオガネソンの漢字である。ニホニウムの漢字の予想は外れたが、あとの二つは予想通りである。ニホニウムは金偏に尔という字で鿭、テネシンは石偏に田で鿬、オガネソンは気がまえに奥で鿫である。でも、自分の環境だと新しい漢字はPCに表示出来ていない。まだフォントが無いので仕方ないが。新しいdebianだと表示できるかな。そろそろOSをupgradeしようかな。
GPIB adapter using Arduino Nano
用途限定の抵抗測定システム
arduino UNO用の電気抵抗測定シールド
電気抵抗を測定するシステムが不安定になっていたので、システムの更新を計画している。そのシステムは、限られた用途にしか使わないので、1ミリオーム程度から1オーム程度まで測定できれば良い。これまでは、GPIBで電源とデジボルを制御して測定していたが、抵抗の値が限定されるのであれば、安価なICを組み合わせれば、ほぼ同等のシステムを構築できるのでは無いかと考えられる。
そこで、計装アンプとADコンバーターとarduino UNOを使って、抵抗測定システムを作ることにした。仕様としては、白金抵抗温度計以外に4つの試料を同時に測定できるようにした。arduinoのピンから供給する0Vと5Vを使って、抵抗と直列に繋いだ試料に電流を流す。電流は標準抵抗にかかっている電圧から求め、それと試料にかかっている電圧から、抵抗が計算できる。熱起電力を打ち消すためには、arduinoのピンの電圧を反転させれば良い。
ADコンバーターとしては、MCP3425を用いた。このICは、プラスマイナスの電圧をそれぞれ15bitで読み取ることが出来、2/4/8倍のアンプも内蔵しているので、ダイナミックレンジは18bitと言える。温度計を測るには十分であるが、試料には5mA程度の電流を流すことにすると、電圧が小さすぎるので、計測アンプで増幅する必要がある。計装アンプはLT1167を使って200倍程度の増幅することにした。
最終的には、MCP3425を10個とLT1167を4個使って、arduinoで4つの試料を同時に測定できるシステムが完成した。測定時間も片側0.5秒ぐらいで測定しても、ノイズはそれほど大きくなかったので、1秒程度で測定ができる。まだ、試運転の段階で、本格稼働はしていないが、予定程度の性能を持つシステムができた気がする。
シリアルをRで使ってみた
Rでarduino
arduinoとシリアルで通信するときに、その結果をグラフをにしたかったので、Rを使ってみた。少し検索してみたが、あまり情報が見つからなかったので、手探りでやってみた。まず、fileコマンドで/dev/ttyUSB0を開けて、読んだり書いたりしてみたら、多少は動くことが分かった。しかし、読むときに、最後まで読んでしまうと、それ以上読み込めなくなることが分かった。そこで、開いて読んで閉じるということを繰り返すことによって、やりたいことができることを確認したのだが、しばしばエラーが出てしまう。手でコマンドを打つと動くのだけど、コードにすると、エラーがでる。でも、それなりに動くからいいか。必ずしも必要かどうかは不明だが、適宜sleepを入れて、結果として以下のようなコードになった。もちろん、読み込んだデータの処理もしないといけないが、それは省略している。
while(TRUE){ f<-file("/dev/ttyUSB0","r+") Sys.sleep(0.1) cat("G0000\n",file=f) Sys.sleep(0.1) d<-scan(f,quiet=TRUE) Sys.sleep(0.1) close(f) Sys.sleep(1) }
形式によるコマンドの違い
Rのグラフのセーブ
Rで作ったグラフを画像ファイルにセーブするときには、ファイル形式によって、コマンドが違う例えば、epsやpdfの場合には、
dev.copy2eps(file="temp.eps") dev.copy2pdf(file="temp.pdf")
とすると表示されているグラフがセーブできる。幅や高さも表示されている通りになる。具体的に指定するためには、グラフを書く前に、X11(width=6,height=4)として、指定すれば良い。ちなみに単位はインチである。一方pngやjpegの場合には、幅や高さのdefault値が四角くなっているらしく、表示されているグラフと、セーフされたグラフの形が違ってくる。 これを指定するためには、以下のように解像度をdpi単位で、幅と高さをpoint単位で指定する必要がある。
dev.copy(png,file="temp.png",width=72*6,height=72*4,res=72);dev.off() dev.copy(jpeg,file="temp.jpg",width=72*6,height=72*4,res=72);dev.off()
ドットで構成された図の形式だと仕方ないのかも知れないが、面倒だ。
バイナリのレジストリ
regコマンドを使って
以前、HDDが死んで、HDDの入れ替えを行ったPCのソフトが不調になった。古いHDDの中身は取り出していたのだが、ソフトの部分を置き換えても、レジストリが違うので動かない。レジストリはバックアップしていなかったのだが、システムファイルがあるので、そこからレジストリの情報を取り出せないかと思って調べたら、できるようだ。
レジストリは、windows/system32/config内に保存されているが、バイナリなので、そのままでは読めない。レジストリをいじるためには、regeditを良く使っていたが、組み込まれていないレジストリはこれでは扱えない。XP以降ではregというツールを使えるようになっており、これを使うとバイナリファイルに保存されているレジストリを取り出すことができる。コマンドプロンプトでバックアップされたバイナリのレジストリファイルがあるところに行って、reg load HKLM\Temp_software softwareとすると、System\Temp_softwareというレジストリの下に、softwareというファイルに保存されていたレジストリが展開される。これをregeditを用いて取り出せば良い。注意しないといけないのは、regeditを立ち上げていると、エラーが出てしまうことである。このせいで、しばらく悪戦苦闘してしまった。
レジストリを入れ替えて、ソフトのファイルを古いHDDのものに入れ替えたら、無事に動くようになった。
xvkbdを使ってみた
古いwineのインストール
wineとdebianの相性
昨日debian stretchにwine0.9.25を入れるのに失敗したので、仕方なく古いdebianを使うことにした。選んだのはdebian lennyの5.0.10 i386である。CDイメージからインストールして、まずは/etc/apt/sources.listに
deb http://archive.debian.org/debian/ lenny main deb-src http://archive.debian.org/debian/ lenny main
を追加して、
aptitude update aptitude install build-essential flex bison libx11-dev libxext-dev
とする。 ここで、wine 0.9.25をコンパイルするのだが、何も工夫せずに./tools/wineinstallを実行するだけで、インストールできた。問題のソフトも無事に動く。ただ、シリアルのエラーは出ている。このソフトが動くか動かないかが何で決まっているのか、さっぱり分からない。タイミングかな?
i386をインストール
wineとdebian stretch
古い測定システムのPCが死亡したので、別のPCを測定用に立ち上げようとして苦労している。そのシステムは2012年の2月に立ち上げて、一度PCが死んだけど、近い世代のPCにHDDを載せ替えて使っていたが、そのPCも死んで、同じ世代のPCが見当たら無かったので、仕方無く別のPCにシステムをインストールしようとしている。
このソフトは、windows95かNT4.0でしか動かないらしく、シリアルポートも使っている。これをwineで動かしていたのだが、wineのversionによって動かないことが分かっている。最新のwineで動いてくれないかなと思って試してみたが、
fixme:comm:set_queue_size insize 4096 outsize 4096 unimplemented stub
と出て、装置が認識されなかった。また、昔の記録によると、0.9.25で動かしていたので、これをインストールしようとしたが、64ではコンパイルできなかった。そこで、OSをi386のdebianにしようと思って調べたら、つい最近新しくstretchが出ていたので、このi386をインストールすることにした。
とりあえず、isoイメージを落として、CDRに焼いて、LXDEをインストールした。aptitudeとwineのコンパイルに必要なbuild-essential flex bison libx11-dev libxext-devをインストール。そして、https://dl.winehq.org/wine/source/0.9/からwine-0.9.25.tar.bz2を取ってきて展開する。2012-02-09のところに書いてあるように、ファイルを変更して、./tools/wineinstallを実行する。しかし、libs/port/interlocked.cのところでエラーが出る。tools/wineinstallを
CONFARGS="CFLAGS=-fgnu89-inline"
と変更して、config.cacheを削除して、コンパイルすると、少し進んでtools/wrc/parser.yでエラーになる。このファイルに
#define YYLEX yylex()
を付け加えたら、また少し進んだ。今度は、いくつかの関数が重複して定義されていますと言われる。これは、おそらくinterlocked.cのところのエラーを回避したために起こっているようだ。 ううん、難しいな。