MOの増設
最近はUSBが普及して来たため、SCSIを使う機会も徐々に減ってきた。昔は自分のPCにはかならずSCSIカードを積んで、いろいろなものを繋いでいたが、現在使っているマシンには、SCSIが無いものもある。Macも昔はSCSIが標準だったが、もう無くなっているし。
研究室では測定用のWindowsはLANには繋がないことになっているので、データの転送に苦労することがある。前は面倒になって、Linuxに変えてしまい、wineで測定ソフトを動かしたこともあった。今回はWindowsNTで動いているもので、MOが標準でついていたので、それを使うことにした。
SCSIカードを積んで、立ち上げたら、見慣れたSCSIの認識画面が出ない。何か失敗したかなと思ったが、問題無く動いた。これはマザーボードの仕様なのかな。
しかし、最近の学生は、MOを使ったこともないようだ。個人的な認識では、MOはまだぎりぎり現役のメディアだと思っているが、数年先にはどうなっているか分からない。今のうちに買い溜めて置かないといけないかな。
ACアダプダー
小さくなったACアダプター
本日、LED照明用の電源が届いた。15V,0.8Aのものだが、思っていたよりも、ずいぶん小さい。電源回路も徐々に進化しているのを実感する。コンセントよりもひとまわり大きいぐらいで、ほとんど邪魔にならない。少し前のスイッチング電源でももう二まわりぐらい大きかったのに。
ちなみに、EeePC701は9.5V,2.5Aで、901は12V,3Aだが、ACアダプターの大きさは後者の方が小さい感じだ。9/13に発売予定の900は12V,3Aだろうか。なお、今度のは1kgを切るようです。
rubyでOpenGL
rubyでgraphics
GUIをrubyでつくる時には、最近はruby/Tkを使っている。簡単なgraphicsはTkのCanvasで実現できる。研究室でOpenGLの話が出たので、rubyでも使えるのかどうかやってみた。
sudo aptitude install libopengl-ruby
でインストールして、GLUTを使うとcと同じ感覚で使えるようだ。こんな感じ。
require "opengl" require "glut" shape = proc { GL.Clear(GL::COLOR_BUFFER_BIT) GL.Color3d(1.0,0,0) GL.Begin(GL::LINES) GL.Vertex2d(-1,-1) GL.Vertex2d(1,1) GL.End() GL.Flush() } mouse = proc{|button,state,x,y| p [button,state,x,y] } GLUT.Init() GLUT.InitDisplayMode(GLUT::RGBA) GLUT.CreateWindow("OpenGL:test") GLUT.DisplayFunc(shape) GLUT.MouseFunc(mouse) GLUT.MainLoop()
まあ、でも覚えるのが面倒なので、必要性が出てこない限り使わないだろう。
結晶構造用のソフト
VESTAのインストール
UNIXで使える結晶構造表示ソフトはいくつかあるが、見栄えや使い勝手の面で良いものは少ない。最近ときどき使っているもので比較的よいのがVESTAであるが、debianでのインストールがあまりうまくいっていなかった。
amd64版では、
sudo ln -s /usr/lib/libtiff.so.4 /usr/lib/libtiff.so.3
とするだけで動いたが、686版ではなぜかうまく動かなかった。libstdc++.so.5が必要らしいので、
sudo aptitude install libstdc++5
として、64版と同様にlibtiffのリンクを作っても、動きそうで動かない。さらに、2008/7/11版では、permissionがうまく設定されていないので、goでの許可をした方が良いだろう。実行すると、
*** glibc detected *** free(): invalid pointer: 0 ***
で終了する。いろいろといじっていて、発見したのが、sudoで実行すると、動くということだ。super userで実行するのは、非常に気持ち悪いのだが、実用上はなんとかなるかも知れない。間違って、システムにセーブしたりしないようにしないといけないだろうが。これは、libstdc++5の問題なのか、VESTAの問題なのか、少し調べてみたが分からなかった。まあ、次のマシンはamd64にするつもりなので、気にしないことにしよう。
Linuxで録音
装置の音の録音に向けて
装置から異常な音がすることがある。実験中の音を録音しておけば、いろいろと役に立つのではということで、録音に挑戦した。
まずは、alsaをインストールして、alsaconfでドライバを認識させて、alsamixerで設定する。このときにわかり難かったのは、micがoffになっている場合には、mで有効にすることと、captureを表示させるときにtabを押す必要があることとと、micを選択するときにspaceで行うという点だろうか。あとは、micとcaptureをそれなりの値にすれば良いようだ。
arecord temp.wav
で記録して、
aplay temp.wav
で再生しても、非常に小さい音にしか聞こえない。マイクが悪いのかな。まだいろいろと調整が必要なようだ。
2008/9/10追記 あるPCでは、captureのところでもspaceで選択する必要があった。
eepic
texで図
この前はPSTrickを使ったが、通常のお絵書きには、eepicで十分である。eepicでは、いろいろな制限が取り払われて使い易くなっているのがだ、不満なのは、vectorの傾きに制限があるということである。また、うまく使いこなせていないので、一点破線や二点破線などはあまり納得できるものが書けていない。これは設計図や折紙の展開図で必要になるのだが、今後の課題である。
今日新しく知ったのが、Thicklinesとallinethicknessである。前者はticklinesの1.5倍の太さになるらしい。後者は、all line thicknessをくっつけたもののようだが、lは三つではなく二つなのが間違いそうだ。任意の太さを指定を
\allinethickness{1mm}
と指定できるので、便利である。まあ、他のコマンドはだいたい使っているので、問題無い。やはりあとはdrawlineとdottedlineとdashlineの細かい使い方だ。
PSTrickを使ってみた
ProsperとPSTrick
プレゼンテーションをする機会が多くなってきたが、世の中ではPowerPointなるものがよく使われているようである。私も、使おうと試みたことがあったのだが、難し過ぎて使えなかった。よく他の人は、こんな使いにくいものを使えるものだと関心する。
そこで、TeXを使って行うのだが、使うものは、普通のTeX、slide class、seminar class、と変遷を経て、現在はProsperを使っている。見た目がきれいなものが作りやすいので、重宝している。
図を書くときに、picture環境ではうまくいかなかったので、PSTrickを使ってみた。Prosperでも使われているので、なにも宣言しないで良い。unitlengthの代わりに
\psset{unit=1mm}
と宣言して、picture環境の代わりにpspicture環境にして、putの代わりにrputとすれば、picture環境と同じことはほぼできるようである。
\pscircle[linestyle=none,fillstyle=gradient,gradbegin=cyan,gradend=blue](0,60){20}
などとしてみたが、半径指定であることが、picture環境のcircleとの違いでしょうか。あと、putするわけではない点も違うか。今後、PSTrickも徐々に使えるように勉強しよう。
matrix.rbのinv
逆行列がうまく計算できない。
matrix.rbをつかって、行列を計算していて、なんだかおかしいので、自分の組んだ部分にバグがあるのかと思って、いろいろと調べていたが、分からない。pで、途中の変数を表示して調べていると、逆行列がうまく計算できていないようだ。
invを用いて逆行列を計算しているのだが、
Matrix[[1.66533453693773e-16, 0.0, -0.5, -0.866025403784439], [0.0, 1.66533453693773e-16, 0.866025403784439, -0.5], [-0.5, -0.866025403784439, 1.66533453693773e-16, 0.0], [0.866025403784439, -0.5, 0.0, 1.66533453693773e-16]]
の逆行列を計算すると、変な値になってしまう。matrix.rb中ではどのように逆行列を計算しているのかは読んでいないが、どうも通常良く用いられる余因子を使った計算ではないようだ。自分で書いても良いが、面倒なので、今回は直交行列しか用いないことにして、transposeで代用することにしよう。
matrix.rbのeql?
バグかも知れない
行列の計算をしていて気がついたのだが、matrix.rbの中に書き間違いがあるかも知れない。Matrix classの中には、
alias eql? ==
という定義がされているのだが、Vector classには、
alias eqn? ==
という定義がある。eqnは通常equationの略として使うように思われるので、おそらくこれはeqlの打ち間違いではないかと思う。1.8でも1.9でもそうなっていたので、まだあまり気づかれていないのだろう。こういうことはどこに報告すれば良いのか分からないが、ここに書いておくと、誰かが見付けて報告してくれたりしないかな。
2008/9/15追記 なんか、bugレポートがされているようだ。書いてみるもんだ。
2009/4/4追記 Lennyのruby1.8でもまだ変更されていないようだ。bug reportではもうclosedになっているんだけどな。
rubyの同一の判断
arrayと==
最近、四次元について考えているが、やはり人間は二次元から三次元の動物で、四次元はなかなか頭で描くことができない。そうなると、数学で考えるしか無い。
Matrixの==の定義を書き換えて、多少値が異なっても、同じものだという判断をするようにしてみたが、同一の判断にはいろいろあるようで、思ったように動くときと、動かないときがある。
たとえば、arrayのinclude?は良いようだが、arrayの==や-やuniqはうまくいかないようだ。この判断には、Matrixの==を使っていないのかな。
arrayの中身の処理は、どのようにしているか分からないので、本当は短く書きたいのだが、include?等を使って、その部分を書き下すことによって処理している。arrayの中で使っている同一の判定を書き換えれば良いはずなのだが。
2008/8/7追記 eql?かと思ったが違うようだ。hashを使っているのかもしれない。