epsの切り出し

Imagemagickでのepsへの変換
latexで図が必要なときには、epsを用いる。自分で図をつくる場合は、出力形式をepsにすれば良いが、別のところから図を取ってくる場合には、epsに変換する必要がある。画像を扱うときに非常に便利なのがImagemagickである。pdfからepsを作るときには、しばしばconvertを使っていたのだが、なぜか画質が落ちてしまうので、苦労していた。ようやくその理由が分かった。デフォルトでは、解像度が72となっているらしい。何も指定しなければ、元の画像の解像度を利用するのかと思っていたのが間違いらしい。pdfから直接だと不安だったので、psに直してから、こんな感じで解像度を指定して切り出したらうまくいった。

convert -density 288 -crop 960x680+1200+400 original.ps output.eps

pdfやpsの中に含まれている図の解像度を調べる方法が分かれば、その解像度を指定して切り出すと、元の情報を失わないようにできるのだが。

Read more...

Rとlatex

latexの式をepsに
グラフを書くときにはRを使っているが、Rで書いたグラフの欠点の一つに、数式などの表記が美しくないという点が挙げられる。expressionとpasteを使えば、いろいろな式を表現することができるが、見栄えがあまり良くない。psfragを使うとRで書いたグラフにlatexの文字を埋め込むことができるようなので、試してみた。まず、比較のためにRでグラフを書いてみる。

x<-seq(from=0, to=7, by=0.01)
y<-sin(x)
xl<-c(0,2*pi)
yl<-c(-1,1)
X11(width=100/25.4,height=80/25.4)
par(bg=rgb(0.99,0.99,0.99),fg="black")
par(tcl=0.5,xaxs="i",yaxs="i")
par(mar=c(3,4,1,1))
par(las=1,ps=11)
plot(x,y,type="l",xlim=xl,ylim=yl,ann=FALSE,axes=FALSE)
box()
axis(1,at=c(0,pi,2*pi),labels=c(0,expression(pi),expression(2*pi)),padj=-1)
axis(2,labels=TRUE)
axis(3,at=c(0,pi,2*pi),labels=FALSE)
axis(4,labels=FALSE)
mtext(expression(italic(x)),side=1,line=2)
mtext(expression(italic(y)),side=2,line=3)
text(4,0.5,expression(paste(italic(y),"=",sin," ",italic(x))))
dev.copy2eps(file="sin.eps")

最近は、こんな感じで書いたグラフをepsにして、latexに取り込んでいる。いよいよpsfragで処理するために、もとになるepsを作る。

x<-seq(from=0, to=7, by=0.01)
y<-sin(x)
xl<-c(0,2*pi)
yl<-c(-1,1)
X11(width=100/25.4,height=80/25.4)
par(bg=rgb(0.99,0.99,0.99),fg="black")
par(tcl=0.5,xaxs="i",yaxs="i")
par(mar=c(3,4,1,1))
par(las=1,ps=11)
plot(x,y,type="l",xlim=xl,ylim=yl,ann=FALSE,axes=FALSE)
box()
axis(1,at=c(0,pi,2*pi),labels=c("l1","l2","l3"),padj=-1)
axis(2,labels=TRUE)
axis(3,at=c(0,pi,2*pi),labels=FALSE)
axis(4,labels=FALSE)
mtext("x",side=1,line=2)
mtext("y",side=2,line=3)
text(4,0.5,"title")
dev.copy2eps(file="sintex.eps")

これはほとんど同じなのだが、文字は置き換えるために、単純な文字列にしている。そして、このepsをpsfragを使ってlatexで処理する。

\documentclass[11pt]{jarticle}
\usepackage[dvips]{graphicx}
\usepackage{psfrag}
\pagestyle{empty}
\begin{document}
\psfrag{title}{$y=\sin x$}
\psfrag{x}{$x$}
\psfrag{y}{$y$}
\psfrag{l1}{$0$}
\psfrag{l2}{$\pi$}
\psfrag{l3}{$2\pi$}
\includegraphics{sintex.eps} 
\end{document}

このファイルをplatex, dvips, ps2epsで処理すると、文字がlatexの文字で置換されたepsファイルができる。このdiaryには基本的には図は載せないことにしているので、見せることができないが、出来上がった二つの図を比較してみると、やはりlatexの文字は綺麗だと感じる。ただし、y軸の数字は置換していないので、Rのフォントになってしまっていて、少し違和感がある。picture環境で図と文字を配置しても同じようなことができる気もするが、psfragも有用な手法だと感じる。

Read more...

SCSI機器の接続

電源を切らずにSCSI機器を接続、切断
久しぶりにMOを使うことになったが、MOを読めるPCが無かったので、SCSIを積んだlinuxマシンでMOを認識させることにした。MOの電源を入れて再起動すれば、使えるのだが、できれば電源を切りたくない。Windowsの場合には、ハードウェアの再認識をさせれば良いのだが、linuxでどうやるのか知らなかったので、調べてみたら、やはり方法はあるようだ。 まずは、scsiaddとlsscsiをインストール。

sudo scsiadd -s

を実行すると、

Host: scsi0 Channel: 00 Id: 01 Lun: 00

で認識された。そこで、

sudo scsiadd -a 0 0 1 0

とすると、無事MOの認識に成功した。取り外すのも簡単である。まずはlsscsiを実行すると、

[0:0:1:0]    *************  /dev/sda

などと表示されるので、

sudo scsiadd -r 0 0 1 0

を実行して、MOの電源を切れば良い。 これでMOを手軽に使えるようになった。

Read more...

wineのシリアルポート

最近のwineは未対応なのか
windowsからシリアルポート(RS232C)を使って装置をコントロールするプログラムがあったのだが、古いwindowsはサポートが切れてきたし、networkにつなぐのは不安なので、wineを使ってlinux上で動かしていた。数年前にセットアップしたものだったので、debian etchぐらいで動いていたのだと思う。そろそろOSを新しくしようと思ってLennyにしてみたが、肝心のプログラムが動かなくなってしまった。色々と調べていたら、比較的新しいwineではシリアルポートが動かなかったとかいう報告があった。プログラムが動いていた古いwineを

wine --version

で確認するとwine-0.9.25だった。一方、lennyのものは1.0.1のようだ。原因はよく分からないし、シリアルポートを使っている人は少なくなってしまったのか、インターネット上でもあまり情報が見つからなかったので、古いwineをコンパイルしてインストールすることにした。とりあえず、以前と同じversionのソースを取ってきて展開してREADMEを読むと、

../tools/wineinstall

とすると、簡単にインストールしてくれるようだ。何度もパッケージが無いと警告されて、その度に必要なパッケージをインストールたが、結局build-essential,flex,bison,libx11-dev,libxext-devを入れたら、無事インストールできた。さて、問題のプログラムはというと、無事に起動した。つまり、新しいwineだとシリアルポートをきちんと扱えていないということなのだろう。どのversionからダメになったのだろうか。その後、他の人が使い易いように設定をしたりしていたが、なぜかnetworkが認識できていないことに気がついた。まあ、どうせ四月になったら別のPCに入れ替えるつもりだったし、まあいいか。

Read more...

rubyで順列

permutation
ruby1.9では、いろいろと新しいmethodが追加されている。arrayには、順列や組み合わせを生成するメソッドが新しくできていて、いつか使おうと思っていた。文字列を組み合わせた文字列を生成する必要があったので、やってみた。

parts=["a","b","c","d"]
parts.permutation.to_a.each{|a|
puts a.join("")
}

これをruby1.9で動かせば、すべての場合が表示される。

Read more...

mini10vの無線LAN

一通りの設定が終了
mini10vのsetupの最終段階として、wifiが使えるようにした。DebianWikiにしたがって、32bit用のdriverのsourceを落としてきて、tar xzfで展開して、

make
sudo cp wl.ko /lib/modules/2.6.26-2-686/kernel/net/wireless
sudo depmod

として、driverをインストール。iwconfigで確認すると、eth1になっていたので、wicdの設定を変更すると、無事に使えるようになった。

Read more...

lennyのtouchpadの設定

synclientを使えるように
mini10vのtouchpadの設定をしたかったのだが、SHMConfigを有効する方法がなかなか分からなくて悪戦苦闘した。ubuntuではhalで設定したが、debianでは違うようだ。/etc/X11/xorg.confを編集するしかないようだったので、いろいろと試したり、調べたりしていたが、結局次のようにするとsynclientが動くようになった。まず、ServerLayoutを書く。

Section "ServerLayout"
	Identifier	"Layout1"
	Screen		"Default Screen"
	InputDevice	"Generic Keyboard"	"CoreKeyboard"
	InputDevice	"Synaptics Touchpad"	"CorePointer"
EndSection

次に、mouseのところをsynapticsと書き換える。

Section "InputDevice"
#	Identifier	"Configured Mouse"
#	Driver		"mouse"
	Identifier	"Synaptics Touchpad"
	Driver		"synaptics"
	Option		"SHMConfig"	"true"
EndSection

これで、ようやくいろいろと設定できるようになった。synclientで設定してもよいし、Optionで指定すれば、touchpadの挙動を変えることができる。

Read more...

mini10vでdebian

DebianWiki
debian lennyをインストールしたmini10vだが、無線LANとスピーカーが動いていないことが分かった。いろいろと調べていると、優れた先人はいるもので、DebianWikiにmini10vへのインストールのコツが書いてあった。無線LANはすでに分かっていたように、BCM4312のdriverをなんとかしないといけない。スピーカーは最新のalsaをコンパイルし直さなければいけないらしい。イヤホンでは聞けるのが不思議なのだが。 wikiを参考にalsaをいじってみることにした。まずは、alsaのページから、driver,library,utilitiesをdownloadする。そして、build-essentialとncurses-dev,libncursesw5-dev,xmltoをインストールする。現在使っているkernelのheaderもインストールする。私の場合はlinux-headers-2.6.26-2-686だった。そして、tar xjfでファイルを展開して./configure,make,sudo make installを順に実行する。driverを入れた後にsudo alsaconfを実行すると、とりあえずは音が出るようになった。気持ち悪いのでlibraryとutilitiesも入れようとしたら、エラーが出ている。まあ、動いているからいいか。

Read more...

mini10vの無線LAN

debianで使えるように
いろいろ調べてみると、mini10vにdebianを入れると、動かないものが結構あるようだ。まず、無線LANとスピーカーはうまく動かないらしい。他の人の記録を見ると、以前は有線LANも動かなかったらしい。lennyの新しいリリースではこれは解決しているようだが。 無線LANは、lspci -vnnで確認すると、BroadcomのBCM4312の14e4:4315というものを使っているらしい。このdriverは"supported 2.6.32 and later"らしく、debian lennyではそのままでは使えないようだ。しかし、b43-fwcutterをインストールして、modprobe b43とすると、何かmoduleが組み込まれているようだ。動かないが。もう少し試してみよう。

Read more...

4度目のインストール

結局debian lennyに落ち着いた。
mini10vであるが、xubuntuのlxdeが遅いので、osを入れ替えることになった。いろいろと試行錯誤の結果、やはりdebianが良いだろうということになった。昔作ったxfce+lxde用のインストールCDでは、ネットワークがうまく認識できなかったので、5.04という最新のものを焼いてLXDEのdesktopとlaptopと標準システムをインストールした。やはりlxdeは起動が速い。こうでなければ。/etc/apt/source.listにcontribとnon-freeを加えて、CDROMをはずす。無線LANを使いやすいようにwicdを入れようとしたら、これはdebianには入っていないらしい。wicdのサイトによると、backportに入っているらしい。

deb http://www.backports.org/debian lenny-backports main contrib non-free

を加えて、aptitude updateを実行し、その後、debian-backports-keyringをインストールする。そうすると、wicdがインストールできるようになる。途中でkeyringがうまくいっていないのかもと思う警告が出たが、そのままインストール。wicdはうまく入ったが、無線LANはうまくいっていない。まあいいか。あとは、タッチパッドの設定。mini10vでは、タッチパッドの下の部分がボタンになっているので、ボタンを押そうとすると、変な位置にカーソルが飛んで行ってしまうことがあり、不便である。そこで、タッチパッドの設定が必須である。しかし、debianでsynclientをどうやって有効にするのかまだ分からないので、しばらく保留になってしまった。

Read more...