2008年1月31日木曜日

powerdで最小の周波数を設定 part 2

「powerdで最小の周波数を設定」という記事を以前書いたが, もっといい方法を見つけた. それは, sysctl で debug.cpufreq.lowest を設定するというもの. 例えば, 最小の周波数を1GHzにしたければ,

root# sysctl debug.cpufreq.lowest=1000

としてやる. /etc/sysctl.conf に書き込めばシステム起動時から設定ができる. こんなのも知らんとはまだまだ僕も未熟やのう.

2008年1月28日月曜日

feh のランダム表示

僕は画像ビューワーとして ports/graphics/feh を愛用している. シンプルなインターフェースがお気に入りだ. 時々, feh を使ってデジカメで撮った写真をランダムに表示させて暇を潰すことがあるのだが, 一部の画像が何度も出て, 一部の画像は全く出ないという偏りがあるような気がしていた.

現実逃避でソースを調べてみたら, feh が依存している ports/graphics/giblib の gib_list.c の gib_list_randomize と言う関数で, ファイルリストを乱数で混ぜるとき次の様に rand を使っていた.
r = (int) ((len - i - 1) * (float) rand() / (RAND_MAX + 1.0)) + i + 1;

ただし, rand % FOO という形でないので, それほど問題でもないと思うのだが, とりあえず, この rand を random に変えてみて, しばらく使ってみて様子を見ることにした.

2008年1月22日火曜日

FreeBSD 6.3R を入れた

もともと stable を追いかけていたので特に変化無し. これからは 7.0 Release が楽しみ. そろそろテストを始めるかな.

Micropolis は忙しくて遊べず. パッチもそのうち更新するかも. とにかく仕事が忙しい.

2008年1月15日火曜日

Micropolis on FreeBSD part 2

昨日に引き続きMicropolisを FreeBSD で動かす話. 結果から言うと動くようになった. ちゃんとチェックはしていないけど, とりあえずパッチをさらしてみる. 以下はコンパイルの仕方.

1. 最新のスナップショットをダウンロード (http://rmdir.de/~michael/micropolis_mac-osx.patch 参照)

  • http://git.zerfleddert.de/cgi-bin/gitweb.cgi/micropolis

  • tar.gzファイル: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/micropolis?a=snapshot;h=HEAD;sf=tgz


2. FreeBSD用のパッチもダウンロード (http://www.kcat.zaq.ne.jp/aabqq103/micropolis_freebsd.patch)
3. スナップショットを展開. ここでは, ~/micropolis と仮定.
4. パッチを適用したら, コンパイル, インストールして, 後は遊ぶだけ.

$ cd ~/micropolis
$ patch -p2 < micropolis_freebsd.patch
$ cd src
$ make all install
$ cd ..
$ ./Micropolis

これで動くはず. Micropolisに必要なソフトはきちんと把握していません. 多分 X 関係を一通り入れておけばいいのではないかと思う. 音を出すには bash が必要.

2008年1月14日月曜日

FreeBSDでMicropolisに挑戦

初代 SimCity が Micropolis として公開されている. 現実逃避で FreeBSD 上で遊んでみることに.

まず, Linux 用のバイナリを試してみたら floating point exception が起きたので, 地道にソースをコンパイルすることに. 結構ソースをいじることになった. 一応コンパイルはできたけど, 画面がきちんと表示されないなどの不具合があるので今日は諦める. 画像は起動させたところ. Fluxbox のスリットにウィンドーができたのも謎だ.

このパッチでよくなるとの噂もあるので試してみないと.

2008年1月12日土曜日

acroread8

ports を見ていたら acroread8 があったのでインストールしてみた. acroread7 に比べると確かにスクロールのスピードが速くなったりしたのだが, ハングアップはするし, 見開き表示にしたら普通の表示には戻らなくなって ~/.adobe/Acrobat を消すはめになったりして散々だったので acroread7 に戻ることにした.

特に戸惑ったのが, acroread8 がハングアップしたときに
pkill -9 acroread
としても強制終了できなかったこと. ps auxw で確認したら,
/lib/ld-linux.so.2 /usr/local/Adobe/Reader8/JPN/Adobe/Reader8/Reader/inte
llinux/bin/acroread hoge.pdf (ld-2.3.6.so)
と出たので,
pkill -9 ld-2.3.6.so

とやったらようやく消えた. 分かりにくいわ〜.

2008年1月10日木曜日

linux-flashplugin

ブラウザは linux-firefox を使っていて, flash は ports/www/linux-flashplugin7 を使っていたのだが, 興味本位で linux-flashplugin9 をインストールしてみた. しかし, flash のページに行くと core dump をしてブラウザが死んでしまって使えない. どうも, 7系の新しい linux emulator が必要なようだ. 当方 6-stable なので諦める.

そこで, 元の linux-flashplugin7 に戻そうとしたら, make fetch に失敗して困る. f7_archiveがダウンロードできずに終了するのだ. ちょっと調べてみたところ.
http://fpdownload.macromedia.com/get/flashplayer/installers/archive/fp7_archive.zip

をダウンロードしたらうまくいった.

2008年1月7日月曜日

powerdで最小の周波数を設定

FreeBSD では powerd を使うと CPU の周波数を自動的に変化させることができる. しかし, 標準のまま使うと, 周波数が低くなりすぎるようで, 全体的に反応が遅くなるので, 普段は使っていなかった. なんとなく気が向いたので, src/usr.sbin/powerd/powerd.c をちょっといじってみた.

使い方としては, -x オプションで最小の周波数を指定すると, powerd はその周波数以下には下げないようになる. それ以外は変わらない. 現在 "-x 1600" にして使っている.

(追記) これと同様のことは sysctl でも実現できます. 続き

--- powerd.c.orig 2008-01-07 21:57:28.000000000 +0900
+++ powerd.c 2008-01-07 22:15:45.000000000 +0900
@@ -95,6 +95,9 @@
static int apm_fd;
static int exit_requested;

+/* Minimum CPU Frequency */
+static int cpu_min_freq = 0;
+
static int
read_usage_times(long *idle, long *total)
{
@@ -249,7 +252,7 @@
{

fprintf(stderr,
-"usage: powerd [-v] [-a mode] [-b mode] [-i %%] [-n mode] [-p ival] [-r %%] [-P pidfile]\n");
+"usage: powerd [-v] [-a mode] [-b mode] [-i %%] [-n mode] [-p ival] [-r %%] [-P pidfile] [-x min_freq]\n");
exit(1);
}

@@ -277,7 +280,7 @@
if (geteuid() != 0)
errx(1, "must be root to run");

- while ((ch = getopt(argc, argv, "a:b:i:n:p:P:r:v")) != EOF)
+ while ((ch = getopt(argc, argv, "a:b:i:n:p:P:r:x:v")) != EOF)
switch (ch) {
case 'a':
parse_mode(optarg, &mode_ac, ch);
@@ -317,6 +320,9 @@
case 'v':
vflag = 1;
break;
+ case 'x':
+ cpu_min_freq = atoi(optarg);
+ break;
default:
usage();
}
@@ -459,7 +465,10 @@
warn("read_usage_times() failed");
continue;
}
-
+ if(curfreq < cpu_min_freq){
+ set_freq(cpu_min_freq);
+ curfreq = cpu_min_freq;
+ }
/*
* If we're idle less than the active mark, bump up two levels.
* If we're idle more than the idle mark, drop down one level.
@@ -482,7 +491,7 @@
warn("error setting CPU frequency %d",
freqs[i]);
} else if (idle > (total * cpu_idle_mark) / 100 &&
- curfreq > freqs[numfreqs - 1]) {
+ curfreq > freqs[numfreqs - 1] && freqs[i + 1] >= cpu_min_freq) {
i++;
if (vflag) {
printf("idle time > %d%%, decreasing clock"

chflags

ports で opera を入れたら一緒に compat4x が入った. そして, compat4x を make clean しようとしたら
rm -rf compat4x/work/var/empty
rm: empty: Operation not permitted

という感じになって消せないディレクトリができてしまった. chmod で書き込み権限を付けることもできず, こういう場合どうすんのかなあと悩んで man chmod を見たら, "chflags" というキーワードをみつけて思い出した.
ls -lo

をしたら案の定 schg フラグが付いていたので,
chflags noschg empty
rm -r empty

として一件落着.

2008年1月2日水曜日

caps lock -> ctrl (xorg.conf)

明けましておめでとうございます.
今年はバタバタしそうな予感です. どうなることやら.

X 上では普段 caps lock は ctrl に xmodmap でマッピングしているのだが, いつぞやに xorg をアップデートしてからうまく機能しなくなった. 正確には, 一度 caps lock キーに触って以降に xmodmap を呼ばないといけなくなった. そのうち直るだろうと思っていたが, 一向に直らないので, 諦めて xorg.conf のキーボードのセクションに以下の一文を追加して caps lock を ctrl にマップした.
Option "Xkboptions" "ctrl:nocaps"

さて原稿の続きを書くか.