2007年12月27日木曜日

dirhash

「大量のファイルを扱う為の最適化」を読んでちょっと気になったので実験.

find / | wc -l

とやって総ファイル数をカウントしてみた.

ファイル数は58万個. で, vfs.ufs.dirhash_mem のほうはというと,
% sysctl vfs.ufs
vfs.ufs.dirhash_minsize: 2560
vfs.ufs.dirhash_maxmem: 2097152
vfs.ufs.dirhash_mem: 1997116
vfs.ufs.dirhash_docheck: 0

となって, ほぼ dirhash_maxmem に近づいた. しかし, 通常はファイルシステム全部なめることもないので, デフォルト値で放置決定. ただし, 大量のファイルを扱うサーバでは気をつける必要がありそうだ.

2007年12月23日日曜日

FreeBSD上でEnemy Territoryの音を出す

暇つぶしにEnemy Territoryで遊ぼうとしたら音が出なくて困った (FreeBSD 6-stable上).
ログを見ると
------- sound initialization -------
/dev/dsp: Invalid argument
Could not mmap /dev/dsp
------------------------------------

となっていたので, truss で調べてみたら,
------- sound initialization -------
write(2,"\n------- sound initialization -"...,38) = 38 (0x26)
setresuid(0xffffffff,0x3e9,0xffffffff) = 0 (0x0)
linux_open("/dev/dsp",0x2,01) = 35 (0x23)
linux_getuid() = 1001 (0x3e9)
setresuid(0xffffffff,0x3e9,0xffffffff) = 0 (0x0)
linux_ioctl(0x23,0x8004500f,0xbfbfe8a4) = 0 (0x0)
linux_ioctl(0x23,0xc0045003,0xbfbfe8a8) = 0 (0x0)
linux_ioctl(0x23,0xc0045002,0x926d3b4) = 0 (0x0)
linux_ioctl(0x23,0xc0045005,0xbfbfe8b0) = 0 (0x0)
linux_ioctl(0x23,0x8010500c,0xbfbfe894) = 0 (0x0)
linux_mmap(0xbfbfe870) ERR#22 'Invalid argument'
/dev/dsp: Invalid argument
write(2,"/dev/dsp: Invalid argument\n",27) = 27 (0x1b)
Could not mmap /dev/dsp
write(2,"Could not mmap /dev/dsp\n",24) = 24 (0x18)
close(35) = 0 (0x0)
------------------------------------

と出た. どうも, linux_mmap がうまくいかないようだった. そんなこんなで色々調べていく内に, sysctl を見てみると,
% sysctl hw.snd.compat_linux_mmap
hw.snd.compat_linux_mmap: 0

といういかにもなパラメータがあったのでこれを1に設定.
% sudo sysctl hw.snd.compat_linux_mmap=1
hw.snd.compat_linux_mmap: 0 -> 1

これで無事に音が出るようになった.

これを調べること自体が暇つぶしになってしまったので, そろそろ仕事に戻らないと(苦笑).

メモリ増設できず

最近メモリが安いらしいので, 自宅用のマシンに追加しようと思って, マザーボードのマニュアルを読んでみたら, 最大2GBと書かれていた. すでに2GB積んでいるので, 何もできず. 残念すぎる.

あと, CUDA 1.1 が出たらしいので, 時間ができたら試したいなあ, と思っている今日この頃.

2007年12月20日木曜日

風邪でダウン

今月3本目の論文を投稿し終えて気がゆるんだのか, 風邪を引いてダウンしてしまった. まだ1本残っているのにやばすぎる. 寝込んでいるうちにポスターの作成も先生に頼まれてさらにやばいことに. どうなる俺!?

2007年12月12日水曜日

ブラクラ

なんとなく「はてな」のサイトを見ていたら, 「クリックでゲームできるポン」というのがあって, それをクリックしてみた. すると, 「Flash version 9 を入れてください」というメッセージを止めどなく流れ出してびっくり. まさにブラクラといった感じだ. 多分Flash9を入れていたら大丈夫なんだろうけど, FreeBSD上ではいまだFlash7を使っている. 暇があったら詳しく調べたいところだけどそんな時間もない悲しさ.

2007年12月6日木曜日

論文投稿その1

今月3つある論文のうち1本をいまさっき投稿した.
先生がたや後輩たちにも手伝ってもらって完成させたので
いい意味で自分の色が出ていないと思う.
なにより先生2人が手伝ってくださったので英語の質が高い.
本当にありがとうございます.

次の締切りは9日です.
さっさと最終稿を先生に送ってチェックしてもらわないと.
ああ死にそう. もう今日は寝る.

2007年11月27日火曜日

rubyではまる

最近, 下のようなrubyのプログラムを書いてはまった.

def f x
p x
x.each do |y|
y.each do |z|
f z
end
end
end

f '0'


原因は String の each が1文字ずつ返すもんだと勘違いをしていたこと.
リファレンスマニュアルを読んで勉強勉強.


http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=String#each より
each([rs]) {|line| ... }
each_line([rs]) {|line| ... }

文字列中の各行に対して繰り返します。行の区切りは rs に指定した文字列で、そのデフォルトは変数 $/ の値です。各 line には区切りの文字列も含みます。

rs に nil を指定すると行区切りなしとみなします。空文字列 "" を指定すると連続する改行を行の区切りとみなします (パラグラフモード)。

self を返します。

2007年11月25日日曜日

vim syntax file for CUDA

今日は大学祭を後輩と回って気分転換. 紅葉の季節ということもあって人手が尋常ではない. 明日は自宅で頑張るか.

vimの設定ファイルを見ていたら, 以前作ったCUDA用のsyntax fileが見つかったのでアップしてみる.

" Vim syntax file
" Language: CUDA
" Maintainer: ztw
" Last Change: 2007 Nov 23

runtime! syntax/cpp.vim

syn keyword cType char1 uchar1 char2 uchar2 char3 uchar3 char4 uchar4 short1 ushort1 short2 ushort2 short3 ushort3 short4 ushort4 int1 uint1 int2 uint2 int3 uint3 int4 uint4 long1 ulong1 long2 ulong2 long3 ulong3 long4 ulong4 float1 float2 float3 float4 dim3

syn keyword cStorageClass __device__ __global__ __host__ __constant__ __shared__ __inline__

let b:current_syntax = "cu"

" vim: ts=8

2007年11月23日金曜日

教授の証明

以前やった証明のメモを教授に渡したら, 原稿に起こしてくれた. 多分先生も僕がやばいことに気づきつつあるらしい. ともかくその証明を見たら, あまりに簡潔になっていたので驚いた. そこでこの話を使うかー, っていうのはまさに目から鱗だった. 自分の未熟さを改めて痛感. 一個証明ができたぐらいでいい気になってはいけない.
それにさっさと原稿を書いていかなければやばい. なのにinkscapeが謎のクラッシュを起こす. xfigに戻るべきかも.

2007年11月18日日曜日

xdvi

現在論文執筆中. vimで書いてxdviで確認するのだけど, 今まではlatexでコンパイルするたびに, xdviのウインドーに移って再描画のコマンド'R'を打っていたが, 面倒なのでマニュアルを調べてみたら, SIGUSR1のシグナルを送ればxdviが再描画してくれることを発見. Makefileの中で, latexの後にkillをたして, 期待通りの動作をするようになった.

2007年11月17日土曜日

vimトリビア

なんとなくvimのユーザーマニュアルを読んでいたら, 次のような記述を見つけた. hjklが上下左右のどれに当たるかの*日本人向き*覚え方らしい.

usr_02.txt
For Japanese users, Hiroshi Iwatani suggested using this:

Komsomolsk
^
|
Huan Ho <--- ---> Los Angeles
(Yellow river) |
v
Java (the island, not the programming language)


まず"Komsomolsk"ってどこっすか? Google Mapによるとトルクメニスタンらしい. Wikipediaによるとウクライナにもあるらしい. なんでこんな地名を使うのだろうか?



あと, 確かに"Huan Ho"は中国語読みの"黄河"のことなのだが, 普通日本語だと"Kohga"って読むので"k"と間違えちゃうんじゃないかなあ.

この覚え方初めて見た. 有名なのかなあ. ちなみに僕はrogue cloneで覚えた.

2007年11月16日金曜日

現実逃避

論文を書かないといけないのだけれども, 全然モチベーションが湧かず, 思いつきでいろいろ実験してしまった... 結果は出ないし, 論文は進まないし...

2007年11月15日木曜日

LNCSの原稿の拡大

Changing PDF Margins With The pdfpages Packageにインスパイヤされて, LNCSの小さい原稿をA4一杯にするrubyスクリプトを書いてみた. パラメータは適当に試行錯誤してみてください.

#!/usr/local/bin/ruby
# pdf-rescale.rb [infile] [outfile] [scale=1.4] [offset=0]
#

def usage
exit
end

usage if ARGV.size < 2

infile = ARGV[0]
outfile = ARGV[1]
scale = 1.2

scale = ARGV[2].to_f if ARGV.size > 2
offset = 0
offset = ARGV[3].to_i if ARGV.size > 3

tmpfile='_pdf-rescale_'

latex=<<"EOS"
\\documentclass[twoside]{article}

\\usepackage{a4wide,pdfpages}
\\begin{document}
\\includepdf[pages=-,scale=#{scale},offset=0 #{offset}]{#{infile}}

\\end{document}
EOS

f = File.open(tmpfile+'.tex','w')

f.puts(latex)
f.close

system("pdflatex #{tmpfile}.tex > pdf-rescale.log")
system("pdftops #{tmpfile}.pdf #{tmpfile}.ps")

system("ps2pdf #{tmpfile}.ps #{outfile}")
system("rm #{tmpfile}*")

2007年11月14日水曜日

Android

最近ずっと考えている証明は一応完成した. 先生に説明して納得してもらえた. 次は原稿に書く.

ところで, GoogleのAndroidが面白そうだ. 時間さえあれば何か作って遊びたい所. タイミング的にMulticsのエミュレーターでも作ってみるかw

2007年11月8日木曜日

CUDA on FreeBSD part 2

Linuxの開発環境を整えてからの話. 今回は"linux_base-fc4"を入れたことを前提に話を進める.

1. NVIDIAのドライバやらSDKをダウンロード
NVIDIAのドライバの最新版は多分ここの上に載っている.
portsから入れても多分大丈夫.

CUDAのSDKはここから.
"CUDA Toolkit version 1.0 for Redhat Enterprise Linux 4.x"と"CUDA SDK version 1.0 for Linux"をダウンロード.

2. Linux用のXorgのインストール
Fedora Core 4 の xorg-x11-6.8.2-31.i386.rpm, xorg-x11-libs-6.8.2-31.i386.rpm, xorg-x11-devel-6.8.2-31.i386.rpm をダウンロードして以下を実行.
freebsd$ su
freebsd# cd /usr/local/gentoo-stage3
freebsd# rpm2cpio xorg-x11-6.8.2-31.i386.rpm | cpio -idv
freebsd# rpm2cpio xorg-x11-libs-6.8.2-31.i386.rpm | cpio -idv
freebsd# rpm2cpio xorg-x11-devel-6.8.2-31.i386.rpm | cpio -idv


3. Linux用NVIDIAドライバーのインストール
portsで入れた人は省略.
freebsd# cd /tmp
freebsd# ./NVIDIA-Linux-x86-100.14.xx-pkg1.run -x
freebsd# cp -rp NVIDIA-Linux-x86-100.14.xx-pkg1/usr /usr/local/gentoo-stage3/


4. CUDAのインストール
ユーザー名は"foo"を仮定.
freebsd# chroot /usr/local/gentoo-stage3
linux # ./NVIDIA_CUDA_Toolkit_1.0_rhel4_x86.run
linux # su foo
linux $ ./NVIDIA_CUDA_SDK_1.0.run


5. GLU & GLUT のインストール
Mesa Home PageからMesaLibとMesaGLUTの最新版をダウンロードする.
linux$ tar jxvf MesaLib-X.Y.tar.gz
linux$ tar jxvf MesaGLUT-X.Y.tar.gz
linux$ cd Mesa-X
linux$ make linux-x86
(すぐにCtrl-Cで止める)
linux$ su
linux# cd src/glu; make install
linux# cd ../glut/glx/; make install
linux# cp /usr/local/lib/* /usr/X11R6/lib


6. 調整
linux$ su
linux# cd /usr/lib
linux# ln -sf libGL.so.100.14.xx libGL.so.1
linux# ln -sf libGL.so.100.14.xx libGL.so
linux# ln -sf libGLcore.so.100.14.xx libGLcore.so.1


(linux側)
linux$ export LD_LIBRARY_PATH=/usr/X11R6/lib:/usr/local/cuda/lib
linux$ export PATH=/usr/local/cuda/bin:/usr/local/bin:/usr/bin:/bin


(FreeBSD側)
freebsd$ setenv LD_LIBRARY_PATH /usr/local/gentoo-stage3/usr/lib: /usr/local/gentoo-stage3/usr/local/lib/: /usr/local/gentoo-stage3/usr/local/cuda/lib


7. 確認
CUDAのToolkitを展開したディレクトリにて
linux$ cd projects/deviceQuery
linux$ make
linux$ ../../bin/linux/release/deviceQuery
There is 1 device supporting CUDA

Device 0: "GeForce 8600 GTS"
Major revision number: 1
Minor revision number: 1
Total amount of global memory: 267714560 bytes
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 16384 bytes
Total number of registers available per block: 8192
Warp size: 32
Maximum number of threads per block: 512
Maximum sizes of each dimension of a block: 512 x 512 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 1
Maximum memory pitch: 262144 bytes
Texture alignment: 256 bytes
Clock rate: 1458000 kilohertz

Test PASSED

Press ENTER to exit...

と表示したらOK. 出力内容はビデオカードによって違います. 上の出力はGeForce 8600 GTSのもの. これが動けば他のもOpenGL関係のを除いて動くでしょう.

Happy CUDA Hack!

証明が思いついた

数週間ずっと悩んでいた証明ができたような気がした. 昨日の帰りの電車の中でふと思いついたアイデアをこねくり続けて, うまくいった気がした. それを今日先生に説明したら, 納得してもらえたので良かった. あとは, これをまとめて論文にするべし. 締切りは1ヵ月後.

2007年11月6日火曜日

FreeBSDでLinuxの開発環境を作る

FreeBSD上でCUDAを使う話を書くはずだったのに, いつの間にか放置してしまっていました. 今回は反省して, 第一歩としてFreeBSD上にLinuxの開発環境を作る方法を述べます.


  1. ports/emulators/linux_base-(fc4 | fc6 | f7)
    ports/emulators/linux_dist-gentoo-stage3
    をインストール. linux_baseは適当なのをどうぞ.
    僕は少し古くfc4を入れています.

  2. 設定ファイルへの追加

    loader_conf:
    linux_load="YES"

    rc.conf:
    linux_enable="YES"

  3. chroot環境の構築
    shells/bashのインストール. rootのデフォルトシェルをbashに変更. その後, いろいろ設定. mount_nullfsのところはまとめてシェルスクリプトにしておくとCUDA環境を立ち上げるのが楽になるかも. ユーザー名の"hoge"は適当にどうぞ.
    freebsd$ su
    freebsd# chsh -s bash
    freebsd# cd /usr/local/gentoo-stage3
    freebsd# cp bin/bash usr/local/bin/
    freebsd# mkdir dev
    freebsd# mount_devfs devfs dev
    freebsd# mkdir proc
    freebsd# mount_linprocfs linprocfs proc
    freebsd# mkdir home
    freebsd# mount_nullfs /home home
    freebsd# mkdir tmp
    freebsd# mount_nullfs /tmp tmp
    freebsd# chroot .
    linux# passwd
    linux# adduser hoge ...

  4. 試してみる.
    freebsd$ uname -sr
    FreeBSD 6.2-STABLE
    freebsd$ su
    freebsd# cd /usr/local/gentoo-stage3
    freebsd# chroot .
    linux# su hoge
    linux$ cd
    linux$ uname -sr
    Linux 2.4.2


近況

先週末は東京にACM-ICPCにコーチとして参加してきた. 色々ありましたが, 京都大学のチームが外国チームを抑えて1位になってよかった! 苦節10年, 初めての快挙にみんな盛り上がりました.

話は変わりますが, Googleが携帯用のOSを発表したようですね. 僕は詳細を見ていないのですが, 結構興味があります. 最近の携帯は無駄な昨日ばかり増える一方で, 基本的なレスポンスが低かったり, 通話音質が大してよくなってなかったりして大いに不満があります. そのせいで4年前の携帯をいまだに変更せずに使っています.

そんな中Googleのニュースを見て, 気に入らないなら自分で携帯を作っちゃえばいいんじゃないかと思い始めました. 本体自体はそこそこ汎用的なものにして, OSはPCみたいに自由に入れられるようにならんかなあと妄想中.

2007年10月27日土曜日

mltermのフォント

なんとなくmltermのフォントを変えてみたくなったので, いろいろフォントを探してみた. VL Gothicが好みにあったので入れてみる. FreeBSDだと ports/japanese/vlgothic

mltermの設定 (.mlterm/aafont)
ISO8859_1=VL Gothic-iso10646-1;
JISX0201_ROMAN=VL Gothic-iso10646-1;
JISX0201_KATA=VL Gothic-iso10646-1;
JISX0208_1978=VL Gothic-iso10646-1;
JISX0208_1983=VL Gothic-iso10646-1;
JISX0208_1990=VL Gothic-iso10646-1;

しばらく様子見.

2007年10月26日金曜日

OSのバージョンをいつ上げるか

FreeBSDの7-Releaseが今年のうちに出そうになってきた. そろそろベータを追いかけようかとも思っているのだが, NVIDIAのドライバが対応しているかが気になる. 6月に試したときは動かずに, 結局 6-Stable をインストールすることになった. 研究室のいらないマシンで試してみたいところだが, 手頃なNVIDIAのグラフィックカードがない罠.

2007年10月22日月曜日

考える

週末は現在取り組んでいるアルゴリズムの計算量の評価をなんとかできないかと悩んでいた. 大分手がかりが増えてきて, 当たりがつきつつあるのだが後一歩が足りずに困る. さて, これで論文が書けるのだろうか?

2007年10月17日水曜日

確率

最近実装したアルゴリズムを解析するために, 久しぶりに確率論を用いていろいろと遊んでいた. 実際には, 数式の計算はMaximaでやっていたんだが, 簡単なモデルでもそこそこの結果が出たので満足している. 今日の教授とのディスカッションでも, この結果が受け入れられて, もう1ステップ済まして論文を書くかという話をした.

2007年10月11日木曜日

vector

昨日バグっていて困った問題は一応解決した.

理由は分からないが, vectorにつっこんだ要素のメンバ変数をいじるメソッドを呼び出したことが悪かったらしい. しかし, 理由が分からない.

2007年10月10日水曜日

istreamとmudflap

プログラムのデバッグをしようとしてmudflapを使ってみると, エラーメッセージが出るわ出るわでびっくり. 結構気を使って実装していたのになあと凹む.

それで, そのデバッグをしていたところ, mudflapのエラーメッセージの原因がistreamにあるらしいことが分かった. 以下にエラーメッセージが出る最小のコードを載せる. ポイントは is.eof() を operator>> の中で読んでいることらしい. これを除くとメッセージは消える.
# is.fail()を呼んでもエラーが起きる.

さあ, 原因は分かったので対策はどうするか考えないといけないが, 明日の発表資料が未完なので, そっちに移る.

問題のコード

#include<iostream>

using namespace std;

class A{};

istream& operator>>(istream& is, A& a)
{ is.eof(); return is; }

int main(void){
A a;
cin >> a;
return 0;
}



mudflapのエラーメッセージ (g++4.2 on FreeBSD 6-stable)
mudflap violation 1 (check/read): time=1191946554.020591 ptr=0x2821c0a0 size=4
pc=0x28085c12 location=`c.cpp:7 (operator>>)'
[0x0x28083a7a]
number of nearby objects: 0

2007年10月9日火曜日

円の交差判定2

新しいテーマを考えなければならないんだけど, いいネタが思い浮かばないので, 前々から思っていたアイデアをいろいろ実装して円の交差判定の高速化を試した. 走査線法とバケットソートの組み合わせ. 理論的には, オーダーの改善はできていないけど, 簡単な実験の結果だと, 単純にバウンディングボックスのみを使う場合に比べて, 数倍から数十倍の改善が見られたの満足. 教授にこれを報告しよう.

2007年10月8日月曜日

円の交差判定

今の研究の中で大切なパートとして, 「円の交差列挙問題」がある.
n枚の円が与えられた時に, 交差する円のペアを全て列挙する. (ただし, 円の半径は異なってもよい)

Preparata & Shamosの本によると, 交差するペアの数をKとしたとき, 下界はΩ(n log n + K)になる. 現在僕が困っているのは, この最適なオーダーのアルゴリズムが知られているかどうかということ. この本には, 長方形の場合の最適なオーダーのアルゴリズムが紹介されている. また, 線分の場合はBalabanによって記憶量的にも最適なオーダーのアルゴリズムが提案されている.

ところが, 円の場合の最適なオーダーのアルゴリズムが見つからない. それっぽいキーワードでググっても, 別の問題の話ばかりなのだ. 仕方なく, 簡単なアルゴリズムを考えて実装してみた. 計算量はO(n^2)でナイーブな場合と変わらないけど, 実験では数倍早くなった. なんかめっちゃ地味なことしてるわ.

2007年10月4日木曜日

CPUの温度

研究室用の新マシンを買ったときに問題になったのがCPUの温度。
BIOSで確認すると, 起動直後で50度を越えるので驚いた。
自宅の似た構成のマシンでも40度はなかなか越えないからだ。
そんなこんなで, 買った店に連絡して調べてもらったが
結局原因も解決法も分からず, そのときはCPUのファンを高性能な
やつに交換して終わった. 本当はmbmonでも調べるべきだったのが,
マザーボードが対応していないらしく温度を調べられなかった.

さて, 最近coretempがMFCされたので, これを使ってCPUの温度を
調べてみた. csup & make world でシステムを新しくする.
そしたら,
kldload coretemp

で準備完了. あとは
sysctl dev.cpu

をして, "coretemp"の欄を見れば温度が出た.
これによると, 僕のマシンのCPU温度はBIOSでは50度を越えるけど,
coretempでは30度程度で普通ということになった.
マザーボードの温度センサーがおかしいのかな?

2007年10月3日水曜日

PDF viewer

月末の発表を終えて, 発表地獄は一段落.
これで, 腰を据えて研究に取り組めるわー, と安心してたら,
教授から, 論文をすぐに2本書くようにと言われて凹む.
11月に予定していた海外旅行はあっさりキャンセル(涙).

さて, 論文のネタを見つけるためにサーベイを泥縄でしてます.
そんなときに, Adobe Readerが意外に遅いよなあと思って,
なんとなくWindowsにPDF-XChange Viewerというものを
入れてみた. これが予想外にサクサク動くので感動した.
しかも, タブ対応というのがうれしいね.
論文をたくさん開いても安心さ!

と言ったものの, メインのマシンはFreeBSDなので,
X Window対応のタブ付きPDFビューワーが急に欲しくなった.
Adobe Readerの代替はXpdf, Evince, KPDFなのだが
どれもタブ対応じゃなくて残念.
GTK+Cairoベースで作ってやろうかなと一瞬思った.
でも, そんな時間ないよ〜.

2007年9月25日火曜日

sortの比較

挿入ソートは, ほとんどソート済みのデータ列のソートが高速にできる
性質があるのだが, それがどれくらいなのかを簡単に調べてみた.

比較は, STLの std::sort(クイックソート)と
std::stable_sort(マージソート)と
std::__insertion_sort(挿入ソート).

100000のデータ列を20回ランダムにスワップしたものをソートすると
いうのを100回繰り返した.

結果からいうと, std::sortの圧勝.
たしかにスワップ回数が10以下なら挿入ソートに分があるが,
O(N^2)のアルゴリズムなので, スワップ回数が増えると急激に
計算時間がかかる.
マージソートはO(N log N)のアルゴリズムなので傾向はクイックソート
と同じだが, 計算時間は倍くらい遅かった.

データ列がほとんどソート済みという確信でもない限り,
素直にstd::sortを使うのが無難そうだ.

2007年8月30日木曜日

初めてのPublisher

来週学会のポスターセッションで使うポスターをMicrosoft Publisher
で作成中. しかし, 初めて使うのでなかなかうまくいかない.
一番困っているのが, EPSファイルのインポート.
僕は普段発表資料をbeamerで作るので, PSかPDFでしか出力できないのだ.
普通にインポートすると, 荒いビットマップになるので使えない.
pstoeditで変換しようにも, 変換に時間がかかって大変なことになった.
仕方なく適当なプリンタに出力してEMFファイルを取る戦略に出る.
ここに気づくのに1日かかった. ああしんどい.

2007年8月28日火曜日

xpdfの設定 & pdfにフォント埋め込む

相変わらず原稿作成中.

pdfファイルは普段acroreadでも読むけど, 非常に軽いxpdfも捨てがたい.
ただ, FreeBSDの標準のxpdfrcではkochiフォントを読むのでIPAフォント
に変更.
#Japanese PDF resources
cidToUnicode Adobe-Japan1 /usr/local/share/xpdf/japanese/Adobe-Japan1.cidToUnicode
unicodeMap ISO-2022-JP /usr/local/share/xpdf/japanese/ISO-2022-JP.unicodeMap
unicodeMap EUC-JP /usr/local/share/xpdf/japanese/EUC-JP.unicodeMap
unicodeMap Shift-JIS /usr/local/share/xpdf/japanese/Shift-JIS.unicodeMap
cMapDir Adobe-Japan1 /usr/local/share/fonts/adobe-cmaps/aj16/CMap
toUnicodeDir /usr/local/share/fonts/adobe-cmaps
displayNamedCIDFontTT Ryumin-Light "/usr/local/share/ipa-ttfonts/fonts/ipam.ttf"
displayNamedCIDFontTT Ryumin-Light-H "/usr/local/share/ipa-ttfonts/fonts/ipam.ttf"
displayNamedCIDFontTT Ryumin-Light-V "/usr/local/share/ipa-ttfonts/fonts/ipam.ttf"
displayNamedCIDFontTT Ryumin-Light-Identity "/usr/local/share/ipa-ttfonts/fonts/ipam.ttf"
displayNamedCIDFontTT Ryumin-Light-Identity-H "/usr/local/share/ipa-ttfonts/fonts/ipam.ttf"
displayNamedCIDFontTT Ryumin-Light-Identity-V "/usr/local/share/ipa-ttfonts/fonts/ipam.ttf"
displayNamedCIDFontTT HeiseiMin-W3H "/usr/local/share/ipa-ttfonts/fonts/ipam.ttf"
displayNamedCIDFontTT FutoMinA101-Bold "/usr/local/share/ipa-ttfonts/fonts/ipam.ttf"
displayNamedCIDFontTT FutoMinA101-Bold-H "/usr/local/share/ipa-ttfonts/fonts/ipam.ttf"
displayNamedCIDFontTT FutoMinA101-Bold-V "/usr/local/share/ipa-ttfonts/fonts/ipam.ttf"
displayNamedCIDFontTT GothicBBB-Medium "/usr/local/share/ipa-ttfonts/fonts/ipag.ttf"
displayNamedCIDFontTT GothicBBB-Medium-H "/usr/local/share/ipa-ttfonts/fonts/ipag.ttf"
displayNamedCIDFontTT GothicBBB-Medium-V "/usr/local/share/ipa-ttfonts/fonts/ipag.ttf"
displayNamedCIDFontTT GothicBBB-Medium-Identity "/usr/local/share/ipa-ttfonts/fonts/ipag.ttf"
displayNamedCIDFontTT GothicBBB-Medium-Identity-H "/usr/local/share/ipa-ttfonts/fonts/ipag.ttf"
displayNamedCIDFontTT GothicBBB-Medium-Identity-V "/usr/local/share/ipa-ttfonts/fonts/ipag.ttf"
displayNamedCIDFontTT HeiseiKakuGo-W5H "/usr/local/share/ipa-ttfonts/fonts/ipag.ttf"
displayNamedCIDFontTT FutoGoB101-Bold "/usr/local/share/ipa-ttfonts/fonts/ipag.ttf"
displayNamedCIDFontTT FutoGoB101-Bold-H "/usr/local/share/ipa-ttfonts/fonts/ipag.ttf"
displayNamedCIDFontTT FutoGoB101-Bold-V "/usr/local/share/ipa-ttfonts/fonts/ipag.ttf"
#Japanese PDF resources
textEncoding EUC-JP

今回の原稿はフォントの埋め込みをしていされているが,
普通にdvipdfmxをかけると日本語フォントとSymbolが埋め込まれない.
dvipdfmxでフォントを埋め込む方法を試してみたがうまくいかず.
しかたないのでdvips+ps2pdfで凌ぐことにする.
ここを参考にしてgs_pdfwr.psを書き換えたらうまくいった.

LaTeXで段組みの調整

今日は月末締めの原稿を書く.
と言っても, 以前書いた原稿をちょこっと修正してとうこうするつもり.
もとの原稿が1段組みなのを2段組みにするのだが,
予想以上に手間取る. こんなんならもっと計画的にしとけばよかった.
こんな後悔いつものことか...

一番悩んだ作業が, 表のみを1段組みにすること.
multicolパッケージを使えばOKかなと思っていたら
使えないことが判明. 正しくは
\begin{table*}
.....
\end{table*}
とする. figureでも同じらしい.
(参考: http://d.hatena.ne.jp/seihiguchi/20060713)
これだけでも30分は費やしてしまった. もったいない.

追記:
これもメモ.
図と表のキャプションを変更するには
\renewcommand{\figurename}{Figure}
\renewcommand{\tablename}{Table}
を適当に変えてやればよい.

2007年8月27日月曜日

発表準備

9月は発表が多い。
9/6のベルギー、9/12のポルトガル、9/30のうちの大学でと3回もある。
しかも、どれも形式がことなる。ベルギーはポスター、ポルトガルは
英語で1時間(!)、大学のやつは日本語。
英語で1時間がありえない。つい先日明らかになったばかりだけど
本当にどうしたもんかという感じ。全部資料がまだほとんどできていない。
でも、週末はちょっと研究で新しいことに気づいたりしてさっぱり進まず。
なんて非効率なんだ!

2007年8月22日水曜日

修論のプログラム

今日はネットで調べ物をしたり, 先生に頼まれた実験をした.
その実験というのが, 2年前の修論のプログラムを使ったものなのだが,
いざ使おうにも使い方が思い出せず困る.

2年前あんなに苦労して作ったのに, あんまり簡単に忘れてしまうことに
絶望した!

2007年8月20日月曜日

CUDAで遊ぶ

ここずっと, プログラミングができなくてストレスが
溜まっていたので, 仕事を放置して, CUDA で遊ぶ.

いろいろ計算して遊んでみたところ, 確かに GPU を
使うのはそれほど難しいことではないし,
結構早くすることができるようだと思った.

ただ, 計算精度が通常の float に比べて劣るのだろうか?
Core 2 Duo 上の float や double を使った計算結果と
比べてると, 予想外に誤差が大きかった.
うーん. これでいいのだろうか.

あと, Core 2 Duo の 32bitモードで使っているが,
float のみで計算するより, double で計算した方が
4倍ほど高速になった. アセンブルの結果をみないと
なんとも言えないが, 暗黙の型変換が行われているのだろうか.

2007年8月18日土曜日

FreeBSD 謎のハングアップ

研究室用に新しいPCを1ヵ月前に買って, FreeBSD 6-stableをインストールしたのだが,
使っている最中に徐々にレスポンスが悪くなって, 最後には全く反応しなくなる
事態が発生していて困っていた.

よく調べてみると, [thread taskq] というのがCPUを食っていることが判明.
しかし, 自宅のFreeBSD 6-stableマシンではこのようなことにならないので
何かのデバイスが悪さをしているのではないかと思って試行錯誤を繰り返す.

結果として, JMicronのATAのチップが原因であることが判明.
とりあえずこのチップをオフにして凌ぐことにする.
副作用としてDVDドライブが使えなくなるが, しばらくはDVDドライブは利用しない
つもりなので気にしないことに.

そういえば講師の先生から, JMicronのチップを積んだマシンにLinuxをインストールする際に
かなり苦労をしたという話を聞いていたのを思い出した.
ひょっとしたらPC-UNIXに対してJMicronは鬼門なのかもしれない.

2007年8月17日金曜日

盆休み

前の投稿から2週間が経ってしまった. 相変わらずブログが続きにくい.
その間は韓国の学会の準備やら, 実際に行ったりして忙しかったです.
帰国してからも, まだまだ仕事が残っていてがっくり...

2007年7月29日日曜日

AMPL&CPLEXのインストール

研究室でずっと使ってた, CPLEXのサーバーが故障したので,
サーバーを一新するとともに, AMPLとCPLEXも更新した.

64bitのCentOS5にインストール.
  1. ILM, AMPL, CPLEX, それぞれのtarボールを展開
  2. ILMのディレクトリにプロダクトキーを置く
  3. ilmcheckでキーを確認
  4. ライセンスサーバーのilmdを起動
  5. ilmlistでilmdの起動を確認
次に問題なのは, このマシンが起動するたびに, 自動的にilmdを起動すること.
http://centos.it-cafe.jp/lsys06.htmlを参考にスクリプトを作成し設置.
とりあえず動いているようだ.

ついでに, GLPK, CBC, SCIPをインストール.
SCIPのSOPLEX版がCPLEXに引けを取らない性能なのには驚いた.
CBCは動作がおかしい. きちんとメンテされていないのか,
こっちが食わせている問題が悪いのか.


♯ /etc/init.d/ilmd

. /etc/init.d/functions

RETVAL=0
progpath="/opt/ilog/ilm/"
prog="ilmd"

start() {
♯ Start daemons.
echo -n $"Starting $prog: "
daemon $progpath$prog -log /var/log/ilmd.log &
echo
touch "/var/lock/subsys/$prog"
return $RETVAL
}

stop() {
echo -n $"Shutting down $prog: "
$progpath$prog -stop
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f "/var/lock/subsys/$prog"
return $RETVAL
}
♯ See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $prog
RETVAL=$?
;;
restart|reload)
stop
start
RETVAL=$?
;;
condrestart)
if [ -f /var/lock/subsys/$prog ]; then
stop
start
RETVAL=$?
fi
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac

exit $RETVAL


P.S.
CBCのAMPL対応版のインストールの仕方はマニュアルとは異なっていた. 以下にメモ.
  1. cd Cbc-1.1.1/ThirdParty/ASL
  2. ftp://www.netlib.org/ampl/solvers.tarをダウンロードして展開
  3. ln -s ampl/solvers .
  4. cp solvers/asl.h .
  5. cd ../..; ./configure; make install

2007年7月27日金曜日

CUDA on FreeBSD part 1

今週は北部の研究所で行われているセミナーに参加中.
朝早いのでしんどい. 特に今日の話は連続最適化の話なので後半はほとんどついていけず.

さて話変わって, 最近のマイブームはCUDA.
グラフィックボードの計算能力を普通の計算にも使えるらしいということで興味津々だった.
研究室にはGeForce 8800GTSのマシンを, 自宅にはGeForce 8600GTSのマシンを新調.
最近マニュアルを読みつつ, 少しずつ試している所.

僕は普段FreeBSDを使っているので, まずインストールからつまづく.
NVIDIAの掲示板でもFreeBSDでの実行に成功したという話が載っていなかったので,
情報があんまりないなかインストールをした訳だが,
試行錯誤の結果, 一部のサンプルを動かすところまで成功する.
現在の所, OpenGL interpolation以外は動いている模様.

このブログでは, しばらくCUDAをFreeBSD上で動かす方法について
まとめていくつもり.

2007年7月24日火曜日

テスト

投稿のテスト.


♯include <stdio.h>

int main(void){
printf("Hello, world!\n");
return 0;
}

ブログを書いてみる

なんとなくブログを書いてみる気になった.
研究の話やらプログラミングの話でも書いていこうかと思う.
せいぜい三日坊主にならないようにしたい.