USBTMCを使ってみた
PCと測定装置の間のインターフェースとしては、少し前まではGPIBが一般的だった。しかし、最近ではGPIBは使えない装置も増えてきた。代わりに増えてきたのがLANかUSBである。LANの場合には、IPの設定や測定装置用のLANの構築が面倒だ。一方USBはどのようにPCに認識されるかが問題である。特にLINUXで制御する場合には問題である。
いろいろと調べていたら、USBTMCという規格があるらしく、LINUXでも標準で対応しているようだ。そこで、近くにあったagilentのUSBを持つ装置をubuntuで試してみた。USBケーブルとつなぐと、/dev/usbtmc0ができて、これをIOとして読み書きできるようだ。そこで、rubyから"r+“でopenしてコマンドを書き込んでみると、いくつかのコマンドは受け付けたが、エラーが返ってくるときもある。いろいろと試してみたら、コマンドを送ったあとで、flushすると、うまく動くようになった。これで、基本的にはLINUXマシンのUSBから装置の制御ができる。
しかし、考慮しなければいけない問題も残っている。まず、USBの装置が何台かあった場合に、それをどのように区別するかである。一つの方法としては、*IDN?をつかって、装置を特定して、プログラムの上からそれを割り当てることができる。また、ファイルのアクセスの権限がrootにしか無いので、これをどうするかである。今回はchownして使ったが、それはあまり良い方法とは言えない。ケーブルを接続するときにできるデバイスなので、あらかじめ権限を変えておくわけには行かないし。おそらく何か設定する方法があるのだろうから、それを探さないと。
USBを使った測定システムを構築することが、これでずいぶん簡単になった。まだあまりUSBの装置は手元に無いが、今度装置を買うときには、GPIBが無くてもUSBがあれば、気にせずに買うことができる。
AZの再セットアップ
AZへのubuntuセットアップメモ
折角AZがハングアップして、再インストールできるようになってくれたので、もう一度セットアップの仕方を復習しながらメモをしておこう。 まず、2011-12-18のように、ubuntuをインストールするところまでは同じだ。注意点としては、まずはwifiを使わずにインストールすることと、言語として一番下の日本語を選び、キーボードはOADG 109Aとすることぐらいだろうか。
次に、unity2Dで立ち上げて、wifiを使えるようにする。まずはlxdeをインストールして、次に、swapに圧縮を有効にするために、zramswap.confを/etc/init/にコピーして、rebootする。
以下ではlxdeで立ち上げて、セットアップを行う。キーボードの一部のキーを使えるようにするために、~/.Xmodmapに
keycode 234 = Escape keycode 81 = backslash bar keycode 84 = backslash underscore
と記述する。そして、言語サポートを設定して、入力methodとしては、iBusを選ぶと、日本語入力が可能になる。
ここで、スピーカーを有効にするための設定を行う。/var/lib/apt/lists/*を削除してからaptitude updateとaptitude safe-upgadeを行うと、多くのパッケージがupgradeされる。このとき、linux-image-2.6.38-1001-ac100も入っているはずである。これが終了したらrebootする。alsamixerを立ち上げて、SpeakerOut MuxをSpeaker Mixにして、SpeakerOut N MuxをMuteとし、Lineをunmuteとする。この切り替えには、mを押すと良い。これで、スピーカーが使えるようになるが、イヤホンを差してもスピーカーの音は消えない。
次にflashを設定する。 ディスプレイドライバをダウンロードして、dpkgでインストールする。そしてlibflashplayer.soを~/.mozilla/pluginsと/usr/lib/chromium-browser/plugins/にコピーする。そして、/etc/chromium-browser/defaultのオプションに--allow-outdated-pluginsを記述する。
最後に、電源管理をインストールする。スタンバイに入ると、時々うまくいかないようだが、まあ良いだろう。xfce4-power-managerをインストールして、/etc/xdg/lxsession/LXDE/autostartに@xfce4-power-managerを加える。設定は、xfce4-power-manager ---customizeとして行う。
まあ、こんなものかな。次にセットアップするときの参考にしよう。
AZのubuntuがクラッシュ
ubuntuが起動できなくなった。
upgradeするようにGUIでメッセージが出たので、それを実行している最中にハングアップした。電源長押しで落として、立ち上げたら、立ち上がらなくなってしまった。再インストールかな。
AZで日本語とflash
ubuntuの日本語化とflashの実行に成功
AZにいくつかのdesktop環境をインストールしたが、日本語が入力できないので、できるようにする必要がある。まずは、ubuntu Japanese teamのレポジトリを登録して、update, upgradeした。そして、システムの言語サポートを選んで、日本語のインストールを完了させる。そのままでは、入力メソッドの切り替えが出来ないので、設定のところあたりから、設定する。詳しくは覚えていないが、LXDEでは、iBusを選んだらうまく動いた。
次はflashだ。flashは公式にはまだ対応していないようなのだが、動かす方法があるらしいので、試してみた。まずは、tegraのdriverをインストールする。
deb http://people.debian.org/~jak/ac100/ unreleased main non-free
をaptのsourceに加えて、
wget http://people.debian.org/~jak/ac100/archive-keyring.gpg sudo apt-key add ./archive-keyring.gpg sudo apt-get update sudo apt-get install xserver-xorg-video-tegra
とする。次に、tegra用のlibflashplayer.soをdownloadして、~/.mozilla/pluginsにコピーすると、Firefoxでflashが動くようになる。同じファイルを/usr/lib/chromium-browser/plugins/に入れると、chromiumで動くようになるが、このときに警告が出るが無視する必要がある。この警告を出さないようにするためには、/etc/chromium-browser/defaultを編集して、--allow-outdated-pluginsというオプションを設定すれば良い。 あと、swapを圧縮して実効的に増やすために、zramswap.confを/etc/initに入れておくとシステムが安定するようだ。 しかし、aptitudeで時々固まるのは困ったものだ。何がおかしくなっているのかを調べるために、システムモニタを起動していると、なぜか固まらないんだよな。
AZのデスクトップ環境
unityからxfce4またはLXDEに
ubuntu11.10の標準のデスクトップは、unityというものになっている。dynabook AZにインストールされたものも、例外ではない。しかし、それは重いので、tegra2にはつらい。unity 2Dにしたら、多少はマシになったが、かなり重いことには変わりない。
AZ用に良いものは何かを調べていると、xfce4が良いという噂があったので、aptitudeでxfce4とxfce4-power-managerをインストールした。ここで問題だったのが、負荷が重くなると、LANが不安定になるらしく、そのせいか、ハングアップしてしまうことがあることである。最初は二つを同時に指定したら、止まってしまったので、別々にインストールしたら、なんとかうまくいった。ログイン画面の歯車のマークから、sessionを選べるようになるので、xfce4を選ぶと、立ち上がる。やはり、体感速度が速くなった。無線LANも使えている。ファイルマネージャーを立ち上げようとしたら、nautilusかthunarのどちらを使うか聞かれたので、前者を選んだら、壁紙が変わって上部にメニューが出るようになってしまった。ツールバーからファイルマネージャーをはずして、thunarを登録しても、どこかでnautilusを立ち上げる設定になってしまっている。仕方がないので、killで殺したら良くなった。ファイルマネージャーとしては、thunarを使うべきだったようだ。
次に、LXDEも試してみた。インストールはaptitudeであっさりできた。心配した無線LANも問題無いようだ。当然、起動なども速くなったので、LXDEという選択も悪くないのでは無いかと思うが、まだいろいろと試してみないと分からないこともあるだろう。
使いやすい環境にするまでには、まだいろいろと楽しめそうだ。
dynabook AZにubuntu11.10
一応できたubuntu on AZ
知り合いがdynabook AZを購入したが、Androidが使い難いということなので、linuxを入れてみた。このマシンはtegra2なので、通常のlinuxなどはインストールできない。ubuntu11.10ではサポートされ、ubuntu wikiでインストール方法などが解説している。以下に、インストールの時に行った作業についてまとめておく。
まず、別のubuntuマシンでAZと通信できるように、nvflashを使えるようにする。これは、http://share.grandou.net/debian/nvflash/nvflash_20110628-2_all.debをダウンロードして、dpkg -iでインストールすると、使えるようになった。
次に、AZのバックアップだが、これにかなり時間を要してしまった。ubuntuマシンとAZをUSBケーブルで接続し、ctrlとescを押しながらAZを立ち上げ、ubuntu側から、
nvflash --bl /usr/lib/nvflash/fastboot.bin --sync nvflash -r --getpartitiontable partitiontable.txt nvflash -r --read 2 partition2.bin .... nvflash -r --read 14 partition14.bin
として、パーティションテーブルと、2から14までのパーティションのデータをセーブする。14が14Gぐらいあり、ネットワーク越しにセーブしていたので、やたらと時間がかかってしまった。
続いて、ubuntuのデータを書き込む。ブートイメージをダウンロードした後で、
nvflash -r --download 6 ubuntu-11.10-preinstalled-desktop-armel+ac100.bootimg
として、書き込む。さらに、他のデータを消したusbメモリにインストール用のデータを書き込む。
いよいよ、インストールである。usbケーブルを抜き、usbメモリを挿して、AZを起動する。すると、usbからデータを読み込んで、インストールが開始する。数分たつと、rebootされ、設定画面が表示される。キーボードの設定で迷ったが、日本語-日本語(OADG 109A)を選択するのが正解らしい。それでも、いくつかのキーは効かないようだが。
これで、とりあえずのインストールは完了だが、まだ様々な設定をしなければならない。これは明日以降に書こう。
データフレームの操作
Rのデータ
Rでグラフをいろいろと書いていると、データ点の一部を取り出したくなるときがある。読み込む元のデータを加工しても良いが、Rの上で取り除くこともある。
ベクトルの場合には、v[1:10]で部分を取り出したり、v[-1]で要素を取り除いたりできる。Rではデータはファイルから読み込むときには、データフレームに入るので、これらをデータフレームに対して行う必要がある。以前は、d[1:10]としようとして、エラーが出て断念していた。実は、d[1:10,]とすると良いらしい。
Rは、プログラムを書く感覚でグラフが書ける点は好きなのだが、かゆいところに手が届きにくい点はあまり好きでは無い。
WindowsとLinuxのファイル
大文字から小文字へ
人に頼まれてtexのコンパイルをしようとしたら、思わぬところで引っかかった。まず、USBメモリの中でやろうとしたら、styファイルが見つからないと言われてしまった。よく見ると、それが大文字のファイル名になっている。Unixでは、ファイル名の大文字と小文字を区別するので、エラーが起こるのは当然である。そこで、ファイル名を小文字にしようとしたら、すでにファイルがあると文句を言われてしまった。USBメモリがWindowsフォーマットになっているために、小文字にできないようだ。なるほど。仕方が無いので、一旦ファイルをUnixのファイルシステムに移してから、小文字にしてコンパイルしたらうまく行った。なかなか難しいな。
システムの容量
システム領域
ふと気が向いてdfをしたら、システムを入れているpartitionが98%も使用していた。aptitude cleanしたら、69%になった。
HDDは、システムを入れ替えるときに、backupの心配をしなくて良いように、システム領域と、home領域に分けている。システムには、昔の設定のデフォルトだった7Gが割り当ててあるが、debianのバージョンが上がるにつれて、必要な容量も増えてきているようだ。
もう一年ぐらいしたらwheezyが出るだろうけど、容量が足りるか心配になってきた。もう少し多めにシステム領域を取っておくんだった。
ruby1.9でのミス
binaryデータ
ruby1.9をインストールして使ったら、プログラムが動かなかったので、1.8をインストールし直さなければならなかった。ruby1.9を使うのは久しぶりだったので、すぐに対応はできなかったが、binaryデータを数値に変換するときに、
d[0]*256+d[1]
としていたので、そこでバグが生じていることは分かった。1.9では、
d.getbyte(0)*256+d.getbyte(1)
と書かなければならない。というか、
d.unpack("n")[0]
とすべきなのだろう。でも、packのテンプレート文字は覚えていないので、仕方無いだろう。