2008/04/29

FC5でCPUとHDDの温度を監視する

FedoraCore5を使っているが、近頃どうしようもなくXの調子が悪い。
手始めに時計とかボリュームのアプリが落ち始め、連鎖的に落ちた挙句、最終的にXが落ちたり、あるいはそういう前触れなしに、いきなりXが落ちたりする。
前にディストリを入れ替えたが、そういえばそのときもXの不調が原因だったように思う。

そこでよくよく観察していると、CPUに大きな負荷がかかった時にXが駄目になっていた。
2つのディストリで同じような問題が発生したという事実を踏まえれば、これはハードの問題を疑わざるを得ない。
CPUの負荷を上げたときに落ちやすいことから、今の段階では、電源やメモリではなく、熱による暴走を疑っている。
そこでCPUの温度をモニターすることにした。

FC5でCPUの温度をモニターするには、GNOME Sensors Appletを用いる。
やり方はここここを参考にした。

まずyumでGNOME Sensors Appletとhddtempを持ってくる。

# yum install gnome-applet-sensors
# yum install hddtemp

次にhddtempを起動し、自分の環境に合わせて、HDDを指定する。

# hddtemp -d /dev/hda

さらに[デスクトップ]>[設定]>[他の個人設定]>[セッション]で、[自動起動するプログラム]にhddtemp -d /dev/hdaを追加する。
こうしておいて再度ログインすると、Hardware Sensors Monitorというのが、パネルに追加できるようになっている。
これでパネルに温度を表示できる。
このアイコンを右クリックし、Sensorsタブを見ると、動いているセンサーが確認できる。
自分の環境ではacpiの下にCPUという項目があり、これはデフォルトでONになっていた。
一方HDDのほうはONになっていなかったので、hddtempのプロパティで、Enabledにチェックを入れた。

今の段階では、アイドル状態でCPU温度が51度、HDDの温度は36度になっている。
今後、監視してみて、落ちるときの温度をみてみよう。

2008/04/25

cron

自動的にある時間ごとに実行していて欲しいプログラムがある。
このとき一定時間ごとに動くようにシェルを書くというのも1つの手だが、どんなきっかけでプロセスが終わってしまうとも限らない。
そういうのをターミナルから実行するのは、嬉しくない。

こういうときはcronを使えばいい。
時間間隔と実行して欲しいシェルを指定すると、あとは勝手に実行してくれる。
デーモンとして動いてくれるので、予後を気にする必要がない。

設定は非常に簡単。

$ crontab -e

と打てばいい。
こうすると、デフォルトのエディタで、設定ファイルが立ち上がる。
そこに例えば、

SHELL=/bin/bash
DIR=/home/hoge

0 1 * * * $DIR/hoge.sh

とか書いておく。
この例だと、1時間に1回、/home/hoge以下のhoge.shを実行してくれる。

デフォルトのエディタはFC5だとviだが、これはexportで指定できる。

export EDITOR=emacs

というのを.bashrcに足しておけばいい。

それと自分の環境では、シェルを実行するたびにいちいちメールが来るようになっていた。
これを回避するには、crontabに、

MAILTO=""

という1行を書いておけばいい。

ちなみに実行するhoge.shに、ROOTが入っている場合、hoge.shに環境変数の追加が必要になる。
自分の環境では、ROOTSYSとROOTDIR、PATH、LD_LIBRARYを付け加えると動いた。
それとファイルの場所はフルパスで指定する必要がある。

2008/04/19

bashからROOTのマクロを動かす

シェルからROOTのマクロを呼びたいときがある。
これには下記のように打てばいい。

$ root -r -b -l -q hoge.C("hoge.dat")

-qがROOTの実行後、シェルに復帰させるためのオプション。
さらにこの読み込むファイルを変数にするには、

$ root -r -b -l -q hoge.C(`printf 'hoge.C("%s")' $data`)

と打てばいい。
$dataはファイル名を別途入れる。

ここで注意する必要があるのは、"のところ。
ROOTのマクロでファイルを引数に取るには、"を用いる必要があって、'とかだとエラーを吐く。
printfのほうは"でも'でも問題ないが、ROOTのマクロは"である必要がある。

TGraph2DとTH2

x座標、y座標、値の3つが並んだファイルがあったとする。
このときこれを2次元的なコンターマップにしたいとする。

これにはTGraph2DとTH2のどちらかを使えばいい。
ただし両者の振る舞いはかなり異なる。
TGraph2Dは各座標の値の中間値を計算しているらしく、やたらと時間がかかるし、x座標が全て共通だった場合、つまり線のような入力だとエラーを吐く。
2次元のマップにならないと駄目なようだ。
一方TH2はヒストグラムなので、入力が実質線であろうと関係ないし、時間も短い。
状況に応じて使い分ければいいのだろう。

ROOTのマクロでファイルを引数に取る

ROOTのマクロに限った話ではないが、引数にファイルを取りたいとする。
ついでに存在しないファイルを引数に取ったときは、エラーを吐くようにしたい。
これを実現するには、以下のようにすればいい。

void hoge(const char* fname)
{
ifstream fin;
fin.open(fname);
if(!fin.good()){
cerr << "Can not open " << fname << "!\n";
return NULL;
}
}

fnameはファイル名、finがファイルのポインタ。

2008/04/01

flvファイルをWMPで再生する

まずffdshowを入手する。
適当に検索し、安定版を落としてきて、全てデフォルトでインストールした。
次にFlash Video decoderを落としてくる。
Program Files以下に解凍し、register.batを実行する。
最後にffdshowの設定で、FLV1を有効にした。
参考にしたのはここ
なおFLV Splitterは開発が終了しており、EasySplitterManagerは見つけられなかった。