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は便利だけど、メジャーアップデートとかがあると面倒臭い。

2008/06/18

Firefox 3

本日(6/18)午前2:00から正式版がリリースされた。
Firefoxのサイトはつながりづらくなっているが、早速DLしてみた。
Windowsだとexe形式で落ちてくる。
落としてきたファイルを実行するだけで、非常に簡単にFirefox 2から移行できた。

インターフェースは多少変わったが、特に大きな変更はないという印象。
設定は引き継がれるし、ブックマークもそのまま。
気になったのは、これまでのアドオンが一部使えなくなったということ。
Skypeはそのまま使えたが、SageとAll-in-One Gesturesが使えない旨の警告が出た。
SageはFirefox 3に対応した1.4が出ていたので、それを使えば問題なかったが、All-in-One Gesturesは使えなくなってしまった。
マウスジェスチャが使えないと非常に不便だ。

速度はややスピードアップしたかなという感想。
GmailとかGoogle Docs & Spreadsheetsとかがサクサク動くことを期待していたのだが、やっぱりそこまでは速くならなかった。
X23のハード的な問題も絡んでいるのかもしれない。
食べログ.comとか、YouTubeの表示は結構速くなった。

1つだけ気になる点は、Gmailからのログアウト時の挙動。
Gmailからログアウトしようとすると、突然CPU使用率が100%になり、メモリの使用量が際限なく上がっていく、ということが起こった。
この現象は再現性があった。
これはGoogleからのログアウトでは起こらなかった。

大騒ぎすることもないが、今回のバージョンアップで全体的に使いやすくなったと感じた。
後はマウスジェスチャとGmailの問題が何とかなってくれればいいのだが。

2008/06/11

USBメモリを洗濯した

最近、USBメモリを買い換えた。
これまでは1GBのTS1GJF150というのを使っていたが、少し容量が少ないと感じることが増えたためだ。
そこで同じくTranscendのTS4GJFV30というのにした。
こちらは4GB。
Amazonで2580円也。

このTS4GJFV30をうっかり洗濯してしまった。
たまたま中には何のデータも入っていなかったのだが、データ以上にハード死亡は痛い。
ところが駄目元でPCに突き刺してみたら、何と認識した。
今のところ、データのコピー等にも問題無し。
嬉しい誤算。

2008/06/01

Solid Edge 2D Draftingでdxfファイルを扱う

Solid Edgeを使っていて、dxfファイルを開きたくなるときがある。
ところがこのとき問題がおきる。
デフォルトがインチになっていて、mmで書かれた図が拡大されて取り込まれてしまうのだ。
開発元がアメリカだからなのだろうが、こういった仕様は何とかして欲しい。
世界的にはmmだろう。
設定をいじってもうまく読めないので、配布元に連絡してみた。
そこで判明したやり方は以下のとおり。

1.まず[ファイルを開く]を用いて、dxfファイルをクリックする。
2.ダイアログボックスの[オプション]をクリックする。
3.[AutoCADからSolid Edgeへの変換ウィザードーステップ8の1]というウィンドウで[次へ]をクリックする。
4.[AutoCADからSolid Edgeへの変換ウィザードーステップ8の2]で単位をmmとし、[次へ]をクリックする。
5.[AutoCADからSolid Edgeへの変換ウィザードーステップ8の4-7]で[次へ]をクリックする。
6.[AutoCADからSolid Edgeへの変換ウィザードーステップ8の8]で[新規構成ファイルを作成する]を選択し、[コピー先]をクリックする。
7.[名前をつけて保存]で適当なファイル名をつけて、[保存]をクリックする。
8.[AutoCADからSolid Edgeへの変換ウィザードーステップ8の8]で[完了]をクリックする。

これで開けばいい。
7.で決めた設定ファイルが呼ばれるので、次からは特に指定する必要は無い。

2008/05/28

イイ話

GoogleSatTrackの作者の方が、NASAからスペースシャトルの打ち上げに招待されたそうだ。
ここでご本人が経緯とともに報告されている。

一読して、やっぱり人は人に認められたいもんなんだと改めて思った。
自分の存在が社会に肯定されるっていうのは、そりゃ嬉しいもんだろうなあ。
シャトルの打ち上げの招待状はそれが具体的な形になったもののように思えてならない。

2008/05/25

Cでのプログラムあれこれ

1つ目のTipsはガウス記号について。
ガウス記号を用いるのにどうすればいいのか、良く知らなかった。
そこでこれまでは、(int)(double x)みたいな書き方をしていた。
こうするとxが正だったら、小数点以下を取ってくれる。
ただし負だと期待した動作にならない。
ただ小数点以下を取ってしまうので、欲しい値よりも+1された値が返ってくる。
具体的には、例えば-2.8は-3になって欲しいのに、-2になってしまう。
なので、正か負かをあらかじめ考えておく必要があった。

実際にはfloor関数を用いればよい。
これはガウス記号とまったく同じ動作をしてくれるので、正負に注意する必要がない。
これは床関数といい、これとは反対に天井関数というものもある。
天井関数はceil関数を用いる。

2つ目はgccについて。
sinとかcosの三角関数を使うようなとき、gccでコンパイルしようとするとエラーを吐く。
これを回避するには、-lmオプションを指定すればいい。

2008/05/21

緯度と経度を求めるには

緯度や経度は普通気にする必要はないが、時々知りたくなったりする。
こういうとき、手軽に求める方法を見つけた。
ネタ元はここ

Google Mapを開き、経度と緯度を求めたい地点を地図の真ん中に持ってきて、[このページのリンク]をクリックすると、URLの中に入っている。
下6桁まで入っているが、そんな精度は普通要らない。
下2桁くらいの精度で求めたいときは、目の精度で十分。
URLは長いが、見てすぐにそれと分かる。

2008/05/17

MobileMeter

MobileMeterはノートPCのCPUとHDDの温度をモニターする。
仕組みはよく分からないのだが、Core Tempと違って、X23でも温度モニター可能。
その他、CPUのクロック数が変動している様も見ることが出来る。
が、X23で900MHz以上の周波数を返してくることがあったりした。
ちなみに上限は866MHz。

X23のCPU温度は60度程度、HDDは40-45度。
ノートだとこんなもんか。
VMwareのXPに入れてみたが、こちらはCPUのクロックのみモニターできた。

2008/05/07

XP SP3

SP3が公開になったので、VMWareで動かしてるXPに突っ込んでみた。
ちなみにProfessional。
1度目は失敗したが、2度目で成功。
ちなみにIE7を入れたままやると、IE6に戻せなくなるようだが、別にIEを使わないので無視。

HDDの使用量は5.35GBから6.61GBに増えた。
インストール前後で1.26GBも増えたということだ。
あまり大きな変化があるようには見えないのに、やたらと大きい。
HDD容量小さめのPC使ってる人だと、入らないんじゃないだろうか。
SSDとか、今はやりのEee PCとか。

2008/05/05

FC5その後

CPUを注意してモニターしていると、スクリーンセーバを表示しているとき、CPU使用率が100%になり、温度が70度程度まで上がることに気づいた。
そこでCPUに負担をかけないように、スクリーンセーバを真っ暗になるだけにした。
これで劇的な改善が見られた。
CPU温度は大体50-60度で安定するようになり、この状態でシステムも安定した。
CPU温度60度後半は危険水域で、これくらいでほぼ間違いなく熱暴走し始める。
もう少しマージンを取りたいのだが、PCの蓋を開けっ放しにしても効果が見られない。
モニターできているので、危なくなるとすぐにそれと分かるようになっただけだが、それでも幾分マシな状況にはなった。

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は見つけられなかった。