2008年3月22日土曜日

Graphvizのフォント

プログラムのプロファイリングに最近 Google CPU Profilerを使うようになった. 特にコンパイルしなおさなくても, LD_PRELOAD で libprofiler.so を渡すだけでなので楽だ.

また, pprof --pdf とかで出力されるコールグラフも見やすくていい. ただ,
Error: Could not find/open font
というのが無数に出力されるのが気になったので調べてみた. pprof の問題ではなく, 内部で使っている Graphviz の問題のようだ. "times.ttf" というファイルを /usr/local/lib/X11/fonts/ で探すのだが, それが見つからないために出力されていた.
# cd /usr/local/X11/fonts/
# ln -fs TTF/luxisr.ttf times.ttf
とかで適当にリンクを張ってごまかしたら, エラーメッセージが消えた.

2008年3月20日木曜日

VPython を FreeBSD にインストール

研究でデータの可視化に利用している VPython を FreeBSD にインストールしなおしたのでメモ. ports/graphics/py-visual はバージョンが古いので, 自分で visual-4.beta26.tar.bz2 を入れた.

  1. VPython が依存するパッケージのインストール
    # portinstall -RP boost-python py25-numpy libglademm24 gtkglextmm

  2. ソースの修正
    src/python/cvisualmodule.cpp, src/python/vector_array.cpp の一行目に
    #include <iostream>
    を追加する
  3. configure & make

2008年3月19日水曜日

FreeBSD 7.0-Release をインストール part2

自宅のPCも FreeBSD 7-stable にした. 多分, 普通に入れる人にはほとんど参考にならないだろうけど, 手順を公開してみる. メジャーバージョンアップの際はクリーンインストールをするようにしていて, そのため FreeBSD のために二つのパーティションを切っている. 普段使っていない方のパーティションに 7.0-release を入れて stable を追いかける.


  1. FreeBSD 7.0-release の CD1 を焼く
  2. CDブートして Expert モードで Minimum インストール
  3. リブート
  4. 最低限の設定をする
    /boot/loader.conf /etc/{resolv.conf, rc.conf, ntp.conf, hosts, fstab, aliases, sysctl.conf}

  5. (必要な人だけ) 以降のコンパイルのオプションを変更する
    # cp /usr/share/example/etc/make.conf /etc
    # vi /etc/make.conf

    ちなみに僕は tmpfs を mtmp にマウントして ports の一時ファイル置き場にしている.
    (/etc/make.conf)
    WRKDIRPREFIX=/mtmp/ports

  6. /usr/share/example/cvsup/stable-supfile をコピーして, cvsup のホスト名を変更しソースツリーをダウンロード.
    # csup stable-supfile

  7. OSのコンパイル
    # cd /usr/src
    # make buildworld
    # make buildkernel KERNCONF=GENERIC
    # make installkernel KERNCONF=GENERIC

    (必要なら, /usr/src/sys/i386/conf/GENERIC をコピーして編集する. しかし, すでに stable ではデフォルトスケジューラがULEになっていたので, GENERICのまま作業した)
  8. リブート
  9. single user mode で起動
  10. インストール
    # /sbin/mount -a
    # set HOME=/root
    # source ~/.cshrc
    # cd /usr/src
    # mergemaster -p
    # make installworld
    # mergemaster
    # exit
    (ここまでで所要時間1時間半ぐらい)
  11. ports ツリーのダウンロード.
    # portsnap fetch extract

  12. portupgrade のインストール
    # cd /usr/ports/ports-mgmt/portupgrade
    # make install

  13. いろんなアプリケーションのインストール
    # portinstall -RPwW --batch `cat pkg.list`

    前もって, "pkg.list" に必要なパッケージ名の一覧をコピーしておく. もともと使っているシステムがあるなら,
    # ls /var/db/pkg > pkg.list
    してから調整するのもあり.
  14. あとは無事インストールが終わるのを待つ. それなりにアプリを入れるとかなり時間がかかる. 僕の場合で3-4時間.
  15. アプリの設定をする. (今回は普段使っているホームディレクトリをそのまま使ったので省略)

おまけ1: linux-firefox について
今回インストールした 7-stable では linux-firefox が不安定になって困った. 理由は分からないが linux エミュレーションのバージョンを変えたら安定した.
(/etc/sysctl.conf)
compat.linux.osrelease=2.6.16

おまけ2: インストールしたパッケージのリスト
これだけ見るとパッケージ数はあまり多くないが, 実際には依存するパッケージも入れるので, 最終的にパッケージの数は580個ぐらいになった. xorg が細かく分割されてからパッケージ数がインフレだ.
(pkg.list)
aspell
autotools
bash
bitstream-vera
blas
boehm-gc
boost-python
bsfilter
cdrtools
compat5x-i386
db46
dnsmasq
dvipdfmx
fd
feh
ffmpeg
fluxbox
gcc42
gdk-pixbuf
ghostscript-gpl
gimp
global
glpk
gmake
gnuplot
google-perftools
graphviz
gsl
gv
hugs98
inkscape
ja-a2ps
ja-acroread7
ja-anthy-9100e
ja-dvipsk-tetex
ja-ipa-ttfonts
ja-kasumi
ja-mplusfonts
ja-nkf
ja-platex-jsclasses
ja-ptex-tetex
ja-qkc
ja-sazanami-ttf
ja-vlgothic-20071015
ja-w3m
ja-xdvik-tetex
ja-xpdf
kmovisto
lame
lapack
lftp
lha
linux-firefox
linux-flashplugin
linux-xorg-libs
linux_base-fc-4
lv
maxima
mbmon
mencoder
mercurial
mesa-demos
mlterm
mmsrip
mplayer
naturaldocs
octave
opengl-man
pkg_cleanup
pkg_remove
pkg_rmleaves
pngcrush
portupgrade
povray
pstoedit
psutils-a4
python25
qhull
queequeg
rlwrap
rpm
rsync
ruby
screen
smartmontools
source-highlight
subversion
sudo
sylpheed
transfig
unzip
valgrind
vim
wget
wine
wmmemfree
wmweather
wxMaxima
xfig
xmms
xorg
xvidcap
zip
zsh

2008年3月11日火曜日

異なるサイズのvalarrayの代入

C++でプログラムを書いていたときに valarray にハマった. それは, サイズの異なる valarray を代入しようとした際に起こった. 始め, 下のソースの(1)みたいにただ単に代入しただけだったのだが, そうすると, GNU C++ 3.4で試したところ, 実行結果が代入前と後で変わらなかった.
01: #include <valarray>
02: #include <iostream>
03:
04: using namespace std;
05:
06: int main(void){
07: // 初期化
08: valarray<int> a(1), b(2);
09: cout << "before: " << a.size() << endl;
10:
11: // (1) 間違い
12: a = b;
13: cout << "after1: " << a.size() << endl;
14:
15: // (2) 正解
16: a.resize(b.size());
17: a = b;
18: cout << "after2: " << a.size() << endl;
19:
20: return 0;
21: }
インクルードファイルを見てみると, サイズの異なる valarray の代入は動作未定義とあって凹む. 今回の場合は(2)のように, 代入する前に valarray のサイズを揃える必要があるらしい. 思い込みとは恐ろしいものだ.

2008年3月8日土曜日

FreeBSDで無線LAN

先週は大学の近所で行われていた学会に参加していた. 普段のテーマとは少し違う分野だったので非常に新鮮だった. すごい発想の違いを見て感動もした. 朝早くから通ってよかった.

そんな会場では無線LANが使えた. しかも, WEP. 家では WPA を使っていて, WEP の設定法は分からなかったので, man ifconfig を読みながら試行錯誤した. 今日はそのメモ. 無線LANのインターフェース ath0 は適当に置き換えてください.

1. アクセスポイントの検索
# ifconfig ath0 list scan

これは一発でうまくいかなかったりもした. 何度かやってると見えた. 接続したい SSID をチェック.
2. アクセスポイントへの接続
# ifconfig ath0 ssid [SSID] wepmode on wepkey [キー] weptxkey 1
# dhclient ath0

"weptxkey 1"がポイントで, "wepkey hogehoge" でキーを設定しただけではダメだった. これはかなり悩んだ.

おまけ: WPAの簡易設定法
1. WPAの設定ファイルを書く (sample.conf)
network={
ssid=[SSID]
psk=[キー]
}

2. 接続
# wpa_supplicant -i ath0 -c sample.conf
# dhclient ath0


詳細は man wpa_supplicant と man wpa_supplicant.conf を読んでください.

2008年3月5日水曜日

Firefoxの高速化?

最近 polipo が話題になっていたので FreeBSD と Windows にインストールしてみる. それほど劇的には変化していない. polipo のインストールしたときに, ついでに, もうちょっと Firefox が速くならないかなあと思っていろいろいじっていたらあることに気づいた. それは, 「アドオン入れすぎかも」ということ. 試しにセーフモードで起動してみたらめちゃくちゃ速い. Firefox ってこんなに速く動けたのかあ〜, と驚いた. その後, どのアドオンが Firefox を遅くしているのか調べてみたら, どれも少しずつ影響があるみたいだったので, adblock plusだけにする. Firefox の機能は前よりも減って少し不便になったけど, 格段にサクサクと動くようになったので満足.

2008年3月4日火曜日

FreeBSD 7.0-Release をインストール

2月半ばからスタートした花粉症が徐々にひどくなってきて憂鬱な今日この頃. 知り合いの先生に会いに行ったら, 巷で噂の Mac Book Air があった! 思わず興奮してしまいましたよ. でも, 自分の研究費はもうないので指をくわえて見るだけ.

FreeBSD 7.0-Release が出たので研究室のPCに入れてみた. インストーラも変わってなくて, いつも通りだけど, 少しだけ手間取ったところをメモ.

1. re0でDHCPが取れず, bootonly の CD ではインストールできなかった. 仕方なく disk1 だけを焼いて最小限インストール. パーティションを切るところで謎のメッセージが出たが, 特に問題なさそうだったので無視. ちょっと気になる.

2. GENERIC カーネルが SMP に対応していた. 今まで SMP 用のカーネルをあとでコンパイルしていたので, 少しだけ楽になったかなと思ったけど, ULE スケジューラを使うためにカーネルをコンパイルしたので変わらず.
(ちなみに, SCHED_4BSD を SCHED_ULE に変更するだけ)

3. nvidia-driver をインストールしたときに, ビデオカードをすぐに認識するもんだと思い込んでいたら違ったので苦労した. 6-stable では kldload nvidia.ko するだけで認識したが, 7-Release では /boot/loader.conf に nvidia_load="YES" を書く方法しか使えないらしい. make install 時のメッセージにそう書いてあったが, 気づいていなかったのが残念だ. 油断大敵.

さて, 一通りアプリケーションをインストールしたら CUDA が使えるかどうかチェックするか.

(続く)