2008/09/27

Linuxサーバへのインストールあれこれ

Linuxサーバにソフトをインストールした。
ここでサーバと書いたのは、root権限を持たないPCという意味だ。
root権限が無いので、/usr/localとかは触ることが出来ない。
ROOTのインストールはバイナリを持ってきただけなので、ソースを落としてきてコンパイルしたわけでは無い。
今回インストールしたのは、cfitsioとCCfits、gqviewの3つ。

まずcfitsioのtarをここから落としてくる。
解凍してできたディレクトリに移動し、configureを実行する。

$ tar xzvf cfitsio3100.tar.gz
$ cd cfitsio
$./configure --prefix =/home/chonan/

これで自分のホームディレクトリ以下にインストールするためのMakefileが出来る。
後はmakeしてやればいい。

$ make
$ make install

こうすると、/home/chonan以下の/libにlibcfitsio.aが、/includeにdrvrsmem.h, fitsio.h, fitsio2.h, longnam.hが出来る。

次にCCfitsをここから落としてきて解凍し、そこに移動する。

$ tar xzvf CCfits-2.0.tar.gz
$ cd CCfits
$./configure --prefix =/home/chonan/ --with-cfitsio=/home/chonan/cfitsio

README.INSTALLに従って、cfitsioの場所を指定している。
しかしこのようにすると、

configure: error: C++ compiler cannot create executables

というエラーを吐いて止まってしまう。
config.logというのを見ると、CCという変数が指定されていないために、C++のコンパイラが無いというエラーが表示されている。
そこでconfigureの中に

CC=gcc

の1行を追加してやったら、今度はMakefileが出来た。
実はREADME.INSTALLの上の方に、CCを指定するようにという記述があったのだが、こいつを無視していた。

$ gmake
$ gmake DESTDIR=/home/chonan/CCfits install

ここでもインストールする場所を/home/chonan/CCfitsに指定している。
デフォルトでは/usr/localにインストールするようになっている。
それで良ければ、DESTDIR=の部分は要らない。

gqviewも上に同じ。
ここから落としてくる。

$ tar xzvf gqview-2.0.4.tar.gz
$ cd gqview-2.0.4
$./configure --prefix =/home/chonan/
$ make
$ make check
$ make install
$ make clean

これで/home/chonan/bin以下に、gqviewの実行ファイルが出来る。

PDF reDirect

PDFを作ったり、編集したりするソフトといえば、Adobe Acrobatだが、Standardでさえ30000円以上する。
Adobe Acrobat 7の頃、Elementというのが出来て、PDF化とちょっとした編集が出来て10000円以下、というのがあったが、それ以降消滅してしまった。
ちなみにTeXはdvipdfmxでPDF化出来るし、Open OfficeとかStar suiteとかは直接PDFにエクスポートできるが、編集できない。
自分が求める機能は、PDF作成、結合+分割、ページの回転。
作ったファイルに広告が入ったりするものや、日本語フォントで文字化けしたりするのは論外。

純正品はお高いので、フリーでPDF化するツールを探すと、これが結構いっぱいある。
しかしたったこれだけの条件に、適合するソフトは、自分の調べた範囲では1つもなかった。
圧倒的に多いのが、プリンタとして動いて、PDFを作成するだけのソフト。
あるいは結合するだけ、分割するだけ、回転するだけのソフトがそれぞれある。
広告が入ってしまうのも結構ある。

色々と調べた挙句、自分にはPDF reDirectがベストだという結論に達した。
PDF reDirectは作成と結合が出来るソフトで、広告無しの日本語OK。
メニュー等の日本語化は出来ないようだ。

PDF reDirectはここから落としてくる。
インストールは言語を選択可能だが、日本語はないので英語。
実行すると、途中でWindowsでは認証されていないプリンタドライバを入れる許可を求めてくる。
これを許可しないで、もたもたと注意書きを読んでいたら、インストールに失敗した。
気を取り直し、再実行して、ドライバにもOKを押すと、インストール完了。

作成は印刷でプリンタにPDF reDirect v2を選べばよいだけ。
もっさりとだが、勝手にPDF reDirectのUIが立ち上がる。
画質、カラー、ページの回転、保存場所、ファイル名を指定できる。
日本語や全角数字もファイル名にしてOKで、暗号化も出来る。
保存場所はFoldersの中の好きなフォルダを選べばよい。

結合はPDF reDirectを立ち上げる必要がある。
プログラムから立ち上げ、Foldersで結合したいファイルの場所に行くと、Filesというところに勝手にPDFが読み込まれる。
これをドラッグ&ドロップでMerge Listに入れて、上と同様に画質やら何やらを指定し、Saveを押す。

これだけのことがフリーで出来るのは、自分が知る限りPDF reDirectだけだ。
デフォルトでFoldersが毎回デスクトップに戻ることと、結合するファイル名がもとのファイル名になっていること、いちいちプレビューを読み込もうとすることの3点が気になるが、おおむね満足。

2008/09/20

ROOTでのフィット

ROOTでは任意の関数で、任意のグラフやヒストグラムをフィットできる。
例として2次元ガウス関数で、読み込んだファイルをフィットしたいとすると、次のようになる。

double par[6];
f1 = new TF2("f1", "[0]+[1]*exp(-(x-[2])*(x-[2])/2/([4]*[4])-(y-[3])*(y-[3])/2/([5]*[5]))", 100., 200., 100., 200.);
f1->SetParameters(100., 500., 150., 150., 30., 30.);
g1 = new TGraph2D("hoge.dat");
g1->Fit("f1");
f1->GetParameters(par);

parはフィットした結果を格納するための配列。
まず、f1で2次元ガウス関数を用意している。
このときフィットで求める値は[n]の形で書く。
上の例だと、[0]がオフセット、[1]はピーク高さ、[2]と[3]が中心のxy座標、[4]と[5]がxyのσになっている。
その後の数字は、式を定義する範囲であり、何も書かないと、デフォルトでは0から1になる。
SetParametersでは初期値を決め、g1はhoge.datという、(x y 値)という形式のファイルを読み込んだグラフである。
最後のGetParametersでフィットの結果をparに格納している。

ROOTの軸あれこれ

ROOTでグラフを書くとき、軸を追加したり改変したりしたいときがある。
たとえばy軸は普段、上が大きく下が小さいが、これを逆にしたかったりする。
こういうときはTGaxisを使う。
たとえばy軸の上下を反転させる場合だと、次のようになる。

frame = new TH1F("frame", "", 10, -50, 1000);
frame->SetMinimum(0.0);
frame->SetMaximum(20.0);
frame->Draw("AB");
TF1 *f1 = new TF1("f1", "-x", 20, 0);
TGaxis *a1 = new TGaxis(-50, 0, -50, 20, "f1", 510, "-");
a1->Draw();

まず始めにframeという枠を指定している。
x座標は-50から1000までで、yは0から20である。
このときDrawのオプション"AB"は軸を描画しないことを意味する。
軸の表記が重ねがきになるのを防ぐためである。

次にf1という関数を作る。
-xで軸の値の分布の関数を作っていて、20と0はその範囲を示している。
TGaxisの始めの4つの数字は、元の図の中での軸の始点と終点の座標を入れる。
ここでは軸は(-50, 0)から(-50, 20)までを指定している。
510は軸の目盛りの分割数を意味していて、510がデフォルトだが、510個に分割するわけではない。
数値の詳細は不明だが、これを大きくすると分割数が上昇した。
最後の"-"は軸に書かれる数値やタイトルが軸のどちら側に来るかを指定する。
ちなみに軸のタイトルとかは
a1->SetTitle("");
とかやればいい。

これだけだとx軸には何も出ないので、新たに軸を書いてやる必要がある。

Cでlogを使う

logを計算したいときは、lnと10を底にしたlogの2つの場合が多い。
関数電卓ではlnというボタンとlogというボタンがあるので、理由もなくCでもそうだと思っていた。

実際には、Cではlogはlnに相当している。
つまり、

y = log(x);

とすると、yにはln(x)が入る。
では10を底にしたlogの関数はというと、log10という関数がそれだ。

y = log10(x);

とすると、yにlog(x)が入る。

2008/09/11

DV-410V

DVDプレイヤーを探して欲しいと頼まれた。
そこで性能と価格について調べた。
必要な機能はDVDの再生とTVへ出力できること。
それとケーブルの取り回しが楽なHDMI端子付きであればなおよし。
この条件で調べ、DV-410Vを買ってみた。
10300円@Amazon。

思っていたよりも奥行きが無い。
そして軽い。
なので省スペースだが、何かの台にするには、あまりよろしくない。
それと付属のケーブルが1mしかない。
1mだと大きいTVの場合、端子位置にもよるけど、かなり設置場所が限られる。
本体のボタンもやや小さめ。

HDMIケーブルが付属しないので、2mのを1380円@Amazonで購入して、実際にDVDを見てみた。
結論としては、俺基準だと画質的にはまったく問題なし。
ただ2画面表示(4:3)にしたときと全画面(16:9)とで、色が違うように見えたのがやや気になった。
アスペクト比が4:3のときのほうが、16:9よりも鮮明だったように思えた。
こいつはUSBとかに入れたDivXの動画とかも見れるし、CDも聞けるようなので、そこら辺は追々。

ファイルの行数を知る

今までファイルの行数を知るのに、wcコマンドを知らなかった。
仕方なくEmacsとかで開いていたが、やたら大きいサイズのファイルだとEmacsのバッファサイズを超えてしまって、開けなかったり、えらい時間がかかったりしてしまう。

$ wc -l hoge.txt

とすれば、行数が表示される。

2008/09/06

fitsのネガポジ反転

fits画像をネガポジ反転させたくなったのだが、Irfanviewでうまくいかないので調べた。
Irfanviewでは、読み込んで反転させるまではいいのだが、それをfitsで吐き出せない。
irafとかSDFREDとかでは出来るようだが、インストールとか設定が面倒だ。

自分の環境では、もっとも簡単なのはGIMPでやることだ。
画像を開き、メニューバーの色(C)>反転(V)で反転させることが出来る。
なお、おなじくメニューバーの選択(S)>反転(I)というのがあるが、こちらはうまくいかない。

2008/08/23

sprintf

これまであまり文字列をCで扱う機会が無くて、Cで文字列を合成するsprintfを知らなかった。
sprintfはprintfと同じ感覚で使える。
stdio.hをインクルードする必要がある。
ちなみに文字列はPythonで扱うと非常に楽で、結合したければ+で出来てしまうし、切り出すにはsplitが使いやすい。

#include <stdio.h>
char str[10];
char str1[5] = "Today";
char str2[2] = "is";
int month = 8;
int day = 23;
sprintf(str,"%s %s %2d/%2d\n", str1, str2, month, day);

このように書けばいいだけだ。
この関数のおかげで、strcpyとか、strcatとかの存在意義がよくわからなくなった。

Pythonでの時刻取得

PythonでもCと同様に時刻取得が出来る。
Cだと、time.hをインクルードして、gmtime()を使えばいい。
#include <time.h>
time_t t;
struct tm *ut;
time(&t);
ut = gmtime(&t);

こうするとtに、1970年1月1日からの秒が入る。
さらに構造体utに、UTの時刻の表示形式に変えて格納している。
PCのある地域のローカルタイムにするには、localtime()を使う。
これで年、月、日、時、分、秒、曜日、1/1からの日数、夏時間フラグが取り出せる。

基本的にはPythonも同じ。
timeモジュールをインポートして、gmtime()とすると、時刻を取ってこれる。

import os
from time import gmtime, strftime
year = time.gmtime()[0]
month = strftime("%b", gmtime())

gmtime()が返す時刻は9項目で、Cと同じく、年、月、時、分、秒、曜日、1/1からの日数、夏時間フラグ。
上では1つ目の出力をyearに入力している。
またstrftime()は時刻を入力し、その出力を所定の文字列で返す関数。
%bは省略形の月名(先頭大文字の3文字)を指定している。
他にもいろいろな形式を指定できる。

ちなみにbashでもdateと打つと、時刻を持ってこれる。

wget

wgetはコマンドラインから、URLを指定して、Webページを取得するコマンド。

$ wget (URL)

で持ってこれる。
ファイル名を指定したい場合は、

$ wget (URL) -O hoge.html

などとすればいい。

2008/08/13

ifの制御式

ソースを書いたり読んだりしていて、すぐに忘れてしまうので記述。

ifは制御式を評価して、それが非0なら、以降の文を実行するようになっている。
制御文が変数のみだった場合、その数値が非0なら、実行される。
0なら実行されない。

2008/07/23

pLaTeXとdvipdfmxのインストール

cygwinもofficeも無事インストール終了したので、pLaTeX関係。
1年前にもやったので、流れも要領も分かっている。

まずここからインストーラを落としてきて、/usr/localに解凍。
注意すべきは、落ちてきたexeファイルに実行権限が無いこと。
そのままだとアクセス権限が無いので、インストールできない。

$ chmod a+x *.exe

同様に標準インストールの20個のファイルを落としてきて、/usr/local/tmpに格納。

$ ./texinst757 tmp/

これで終わり。
要らなくなったtmp/を削除し、exeファイルはbinに格納、残りは消去。
ユーザーの環境変数PATHにC:\cygwin\usr\local\binを追加した。

これでtexファイルをコンパイルしてみると通らない。
jsarticle.clsが見つからないというエラー。
デスクトップ検索してみたが、見当たらないので、ここから落としてきた。
/usr/local/share/texmf/tex/platexにjs/というフォルダを作って、そこに解凍する。
これでコンパイルが通るようになった。

次にGIMPをインストール。
これでEPSをいじれるようになる。
GTK+2はGIMP 2.4になって、要らなくなった。
最後にGhostscriptをインストール。
日本語版はここから落とせばいい。
環境変数PATHにC:\gs\gs8.62\bin;C:\gs\gs8.62\libを追加する。

作業は以上。
これでplatexもdvipdfmxも復活。

2008/07/20

X23のACアダプタとHDD

一昨日からX23の様子が少し変だった。
発端はACでつないでいるのにバッテリ駆動だったこと。
といっても、バッテリはもうほとんど空っぽなので、電力はすぐ尽きてしまった。
とりあえずバッテリをはずしたりしてみたが、どうにも改善しない。
そこでACアダプタの入力側のケーブルをいじったところ、AC駆動になった。
しかし非常に不安定なままだった。
思えばここで気付いて、適切に対応していればよかった。

一昨日はそのままにしておいて、昨日朝にもう一度いじる。
この時点で、おそらくACアダプタの入力側ケーブルが断線しているであろうことに気付いていた。
しかし先にやってしまいたいことがあったので、ACアダプタを注意して固定しておき、X23を起動させた。
当然、状態は非常に不安定で、使用中に唐突に電源がOFFになるということがあり、そのたびに立ち上げていた。

こういうのを何回か繰り返した後、Windowsがうまく立ち上がらなくなってしまった。
XPのロゴは出るが、直後にブルースクリーン&再起動のループ。
セーフモードでも同じ。
HDDを抜いて、USB接続のケースに入れ、他のPCにつないだところ、システム領域が空だと認識されていた。
また入力のACは中の2本のうちの1本が断線しているのをテスターで確認した。

こうなってしまうと再インストールか、修復かしかない。
そこでACの入力ケーブル(400円也)を購入しつつ、ウルトラベースX2のある自宅に帰宅した。
まずCDから修復を試みたが、システム領域には見事に何も無く、どうしようもなかった。
そこでシステム領域をフォーマットし、そこに改めてXPをインストールした。
ウイルスバスターを入れ、Microsoft Updateを掛けて、アプリをいくつかインストールして、作業としては一段落。
あとはMicrosoft OfficeとCygwinの再インストールと設定が非常に面倒くさいので、今日以降に。

それにしてもドライバ類とかアプリを入れるのがますます簡単になった。
Lenovoのサイトから、ThinkVantage System Updateというのを落としてきて動かすだけ。
これで必要な分を自動で探してきてくれる。
前はいちいち確認して手で1つずつ入れていた。

2008/07/12

ウイニングイレブン2008のネットワーク設定

PS2のウイイレ2008ではネットワーク対戦が出来るようだ。
そこでネットワークケーブルを買ってきて設定してみた。
買ってきたのはカテ6eのケーブル。
ギガビットも10ギガも対応している。
端子の保護がついていて、5mで約1000円@ビックカメラ。

PS2の型番はSCPH-75000なので、専用ネットワークアダプタは不必要。
ルータとLANケーブルでつなげばいいだけ。
WE2008を立ち上げ、ネットワークを選ぶと、自分のネットワークの設定を打ち込む画面になる。
PPPoE不使用にし、IPを割り振り、ゲートウェイとDNSにルータのIPを入れる。
サブネットマスクは255.255.255.0。
次にPCからポート5738(UDP)を開く。
WE2008で決めたIPについて、ポートを開く設定にした。

作業はこれだけ。
設定の後のネットワークチェックで、ネットワーク接続が確認できた。
とりあえず今日はここまで。

2008/07/03

ROOTのgStyle

ROOTでヒストグラムを書いたり、グラフを書いたりすると、右肩に名前とか、平均値とかの情報が表示される。
デフォルトでそうなっている。
だが、この表示が鬱陶しくなるときがある。
TH1だとSetStats(kFlase);とか書けば消すことができるのだが、他の場合ではどうするのか知らなかった。

この設定をいじくるにはgStyleという構造体の中の、SetOptStatという変数を指定してやればいい。
ここによれば、セットできるパラメータは9つ。
9桁の数字は、尖度(k)、歪度(s)、ビン数(i)、オーバーフロー数(o)、アンダーフロー数(u)、RMS(r)、平均値(m)、データ数(e)、ヒスト名(n)の9つに対応している。
kとsとrとmは0-2の値、その他は0-1の値を取る。
0は表記せず、1は値の表記あり、2は値とそのエラーの表記ありという風になっている。
ちなみにデフォルトだと000001111になっているので、RMS、平均値、データ数、ヒスト名が記入される。
また000001111のうち、0以外の最大の桁の数字より左側の0は省略可能。
つまり000001111と1111は同じになる。
全てがゼロの場合、統計情報のボックスは消える。

例1)gStyle->SetOptStat(0); //統計情報ボックス無し
例2)gStyle->SetOptStat(11); //ヒスト名とデータ数

またコンターマップの色を指定するときも、gStyleの変数SetPalleteを指定する。
デフォルトは色使いのセンスがイマイチなので、

gStyle->SetPallete(1);

とかしてやればいい。

2008/06/28

タンジェントの逆関数

Cのタンジェントの逆関数atan(double)は-π/2からπ/2の値を返す。
しかしタンジェントは180度周期なので、360°で考えるときには、このままでは駄目だ。
そのため0°から360°の範囲で考えなくてはいけないときには、別途cosとかsinを見る必要がある。
atan2(double, double)はその点、-πからπまでの値を返してくれる。
どうせcosとsinが分かっていて、角度を知りたいときがほとんどなので、atanよりもatan2の方が使い易い。

ちなみに三角関数の逆関数が返す値の範囲をいつも忘れるのでメモ。
acosは-π/2からπ/2。
asinは0からπ。

それと角度を計算する時は単位に気を付ける。
大体、妙な動作をするときは決まって、度のまま三角関数を計算しようとしてしまっている。

2008/06/23

VMplayerのアップデート

yumでさまざまなアプリをアップデートしたせいで、カーネルもアップデートされてしまった。
そのせいでVMplayerが使えなくなってしまった。
これはかなり痛い。
/usr/bin/vmware-config.plを実行してみたが、途中でエラーを吐いて止まってしまう。

仕方が無くVMplayerをアップデートすることにした。
バージョンアップされていたので、アップデートしたら使えるのではないかと期待。
前と同じrpm版を落としてくる。

# rpm -Uvh VMware-player-2.0.4-93057.i386.rpm

でアップデート。
次いで、

# /usr/bin/vmware-config.pl

で設定。
デフォルトのまま、Enterを押していると、今度はOKだった。
これで今までのWindowsのイメージファイルが使えるようになった。

2008/06/20

ヒートシンクお掃除

FC5を入れているPCのCPUがやたら熱くなっていた。
そこでケースについていた壊れたファンを交換してみた。
これで冷えるだろうと思いきや、全く効果が無かった。
最近は常時60度前後で、何か重い処理をするとすぐに70度とかになる。
ヒートシンクに直接風を当てても冷えないということなので、ヒートシンクからの放熱に問題があると思われた。

そこでヒートシンクの上についている、CPUファンを取り外してみた。
するとファンとヒートシンクの間に綿埃が層になって挟まっていた。
さらにヒートシンクの薄い金属板の間にも埃が挟まっていた。

埃を圧縮空気で吹き飛ばし、PCの電源をオンにすると、驚くほど温度が下がっていた。
常時60度前後だったのが、45度前後になった。
これで問題なく今年の夏を越せる。

Firefox 3 続き

いくつかのPCで試したけど、Gmailから抜けるとき、おかしくなるのはThinkPad X23だけだと判明。
しかも必ずというわけでもなくて、問題なく抜けられることもある。
訳が分からない。
マウスジェスチャに関しては、All-in-One Gesturesのインストーラを書き換えると使えるらしい。
すぐに対応してくれても良さそうなものだ。

Linux版もFedora Core 5に入れようとしたけど、あえなく失敗。
GTK+のバージョンが2.10以降じゃないと使えないが、Fedora Core 5は2.8なので、GTK+をアップグレードしてくれと言われてしまう。
そもそもFC5にはもともとFirefox 2さえ入ってなかったし、ディストリ的にもう時代遅れだということか。

GTK+のアップグレードは面倒で試していない。
yumで簡単に出来るようなものでもなさそうなので、今のところFC5だけはFirefox 2で行く予定。

# yum update

ではうまく行かなかった。

余談だが、これでアップデートすると、Firefoxが2から1に戻されてしまった。
/usr/bin以下のFirefoxの実行ファイルを消して、Firefox 2の実行ファイルにリンクを貼っていたからだ。
なので後から直してやらないといけない。
yumは便利だけど、メジャーアップデートとかがあると面倒臭い。