2006-12-25

クリスマス

ふと日付をみたらすでに25日に! イブはどこにいったのー?

ていうか、ここまで国民的行事が気にならないってのは、もう人として終わってるかもね orz...

単語のクロスリファレンス作成用PukiWikiプラグイン

仕様書に出現するパラメータの一覧を出力するPukiWiki用のプラグインを探してみたけどなさそうだったので作成。
正規表現で指定した範囲のページから、特定のパターン(例えば《単語》など)を正規表現で抽出し、単語ごとに出現ページと出現頻度を出力するというもの。
これも実用になりそうだったら本家に出してみるか…

しかし、PukiWikiのプラグインは数が多すぎるなあ。見出し混みでページの一覧を出してくれるプラグインを作ってみたのだけど、ls2プラグインに含まれている機能だったりしてとほほんですよ。
まあ、良く読まない自分が悪いんだけどさw

2006-12-23

Solarisの周期処理のジッタ測定

さて、実時間の測定方法を押さえたところでSolarisの周期処理のジッタ測定をやってみる。

周期の作り方はnanosleepによるウェイトを利用したものと、setitimerによるシグナルを使ったもの。JDS上でxmmsを実行している、というかなりラフな負荷状態で、10/15/17/20msの周期処理を1000回繰り返した結果が以下の表(単位はすべてms)。

nanosleep
周期(=目標値)平均 標準偏差 最小 最大
10
15.4782 4.91366 10.002 20.8937
15
20.0454 1.21523 15.4322 56.6567
17
20.013 0.303867 18.8926 26.6976
20
28.4769 3.5365 20.0017 33.5873


itimer
周期(=目標値)平均 標準偏差 最小 最大
10
10 0.695859 6.40657 13.4345
15
15.0299 5.01306 6.96788 32.863
17
17.0228 4.80681 6.43815 32.7525
20
20 1.25318 7.29573 32.7424


統計からは見えてこないけど、いずれの測定でもスレッドの起床周期はタイマ割り込み周期である10msに丸められているようだ。ただ、setitimerの測定平均値が狙い値に近いことをみてもわかるように、この丸めは累積しないようになっている。

まあ、普通はsetitimerでいいのかなあ… ただ、タイマ割り込み周期の倍数にならない周期を使いたい場合は適不適が分かれそう。1/30sごとの処理とかしたいんだけどなあ…

Solarisの実時刻計測

Solaris10/amd64で経過実時間を測定する方法を調べてみた。

  • gettimeofday(): 分解能1μs。UNIX系OS全般で使えるかも。
  • RDTSC命令: 分解能1/CPUクロック周波数。自分のマシンだと1/1.8GHz=0.55ns。x86系専用。SPARCマシンにも同等機能のものがあった気がする。
  • clock(): C89の時代からある関数だけど、プロセスが使用したCPU時間がベースなので実時間ベースではない。分解能自体は1μs。
  • gethrtime(): 分解能は1ns。Solaris用? time.hを見るとRDTSC命令をラップしているようだが確証はない。

RTLinuxのカーネルとサイトがダウン

自社開発のシミュレータはRTLinuxを使っているのだけど、近頃担当者が代わって何度か相談を受けている。「USBメモリの使い方」とか「gccの警告の対処法」とか「デバッグのやりかた」とか他愛のない内容なんで、Linuxユーザじゃない自分もなんとか答えられる範囲ではあるんだけど、カーネルのバージョンが2.4.4とかすごいことになっているのでなんとも返答に困ることが多い。

例えばUSBメモリを刺してもUSBデバイスとして認識すらしない場合がある。当然USBサポート自体は有効にしているんだけど、それでも認識できないもののほうが多い。なので今時フロッピーディスク渡し。うはw

カーネルのバージョン上げればいいじゃんと言っても、わからんからやらないとか言い出すし。じゃあ分かるように調べればいいじゃん仕事なんだからさ、と言って放置しといたけど、さすがに酷だった気もしないでもない。

で、この間はgdbで実行してみたんだけど、RTLinuxごとお亡くなりに。RTカーネル側で死んだのかOopsも出さないし、syslogにも残ってない。Linuxだからクラッシュダンプもないし、かといってPCベースのマシンだからICEも使えないし。

しょうがないのでprintfデバッグないしcppunit-xあたりを使うように言ったけど、いずれ新しいバージョンのRTLinuxにせざるを得ないでしょうな。
その時は質問攻めにされそうな気がするので今のうちから情報収集をしてみようかと思い、RTLinuxをダウンロードするため公式サイトでユーザ登録をしてみた。ところがいくら待てどもアクティベーション通知が全然来ない。あそこのサイトはライセンス違反でつるし上げをくってたところだからなんとなく信用できない印象があって、アドレス蒐集だけされたか!?と一瞬思ったのだけど、単にサイトが落ちていただけだった。クリスマス近いのに大変ね。

2006-12-21

HHK lite2購入

W1100z用のメモリをネットで購入。DIMM DDR SDRAM PC3200 512MB CL3 ECC Registeredを2枚、約13000円。これで少しはFirefoxによるスラッシングが減るかなあ…

で、送料同じならついでに何か買っとこうと思って、HHK lite2(黒のUS配列のUSB版)を注文。会社で使ってるDellマシンの付属キーボードがヘロヘロで反応が鈍くてしかもスペースキーも小さくて気に入らなかったので、ちょっと替えてみようかなと。

続Solaris10 11/06 (u3)リリース

以前からSun Blade 100にSolaris 10を入れるとPCIがらみのエラーがdmesgに出力されてたんだけど、u3ではメッセージも出さすにリブートするように!
いよいよハードウェアがおかしくなってるのかなあ…と思っていたのだけど、Solaris9を入れたらあっさり動いてしまって嬉しいやら悲しいやら。

続続: ○本の住人

結局7&yで注文した > ○本の住人

ところで。

百合星人ナオコさん買ってしまいましたよ。
電撃大王は苺ましまろのフィギュアがついていた号しか買ってなかったので、あんなナイスなツンデレ幼女が出てたとは嬉しい予想外。やおい星人はさすがにどうかと思ったけど。

以前「CDビミョー」と書いたけど、あれは撤回ということでw
なかなかの電界強度ですばらしい。

2006-12-17

整数の対数

整数の平方根を求めるアルゴリズムは奥村先生の本やHacker's Delightで紹介されているけど、整数の対数を求めるアルゴリズムはないようだ。

いや、log2(x)やlog10(x)を求めるのはあるんだけど、使いたいのは1024*log2(x)とかのあらかじめスケーリングされた値。固定小数点形式で得たいというべきか。ちなみにNewton法は遅くて使い物にならなそうだった。

ちょっと考えてみたんだけど、(1<<K)*log2(x)についてはlog2(x)をベースにしてrange coder風の求め方でいけるんじゃないかなと思ってこんなのを作ってみた。

#define K 7

/**
* (1<<K)*log2(x)を求める。
* xは0≦x<(1<<16)を満たす必要がある。
*/
unsigned ilog(unsigned x)
{
int i;
unsigned r, th, tl, tm;

/* log2(x)の整数部分を得る */
for(i = 31; i > 0; --i) {
if(x >= (1u << i)) {
r = i;
break;
}
}
if(i == 0) return 0;

/* range coderを使ってlog2(x)の小数点以下の桁をKビット決定する */
th = 0x10000;
tl = 0x8000;
x = x << (15 - r);
for(i = 0; i < K; i++) {
tm = isqrt(th * tl);
if(x >= tm) {
r = (r << 1) | 1;
tl = tm;
} else {
r = r << 1;
th = tm;
}
}
return r;
}

intが32ビット(以上)のマシン用。どうでしょう?

コンピュータの構成と設計 ハードウエアとソフトウエアのインタフェース 第3版

いわゆるパタヘネ。これも順次読み進めていって、今下巻にさしかかっているところ。

妙にIntelをバカにしている(ように思える)記述があり、その度にニヤリとしてしまうw しかし、やはり名著と呼ばれるだけのことはあって、RISC(MIPS)の設計理念が非常に良く伝わってくる。

8年ほど前に大学の講義で8ビットCPUを設計・実装したことがあったのだけど、この本が出ていたらもっと良いものが作れていたに違いない。

…いや、それはないか。だってあの時は74LSシリーズを手配線していたからなあw メモリ空間が8ビットしかなかったけど、それでもA4サイズ強の基板がワイヤで埋め尽くされたのだっけ。写真取っとけばよかった。

それはそうと、この本の付録CD-ROMを今日になって見てみたのだけど、VHDLやVerilogのチュートリアルが入っていてかなり得した気分。素晴らしい。

Solaris10 11/06 (u3)リリース

Solaris10 11/06 (u3)がリリースされた。Wnnがなくなったらしく、ちょっといただけない。とはいえ、6/06でATOK17になったらしいので、これを機会に乗り換えてみましょうかね。

あと、ZFSがシーケンシャルアクセスで爆速らしいと聞いたので、いまさらながらZFSを試そうかなあと思っていたり。

コードコンプリート 続き2

「コードコンプリート」はやはり素晴らしかった、というのは前回書いたけど、多少は気にいらない点もある。

1つめはプログラミング言語としてC/C++/Javaといった"一級言語"と、VB"ごとき"を同格に扱っている点。まあ、気に入らないというだけであって、現実世界におけるVBの価値を否定するというわけではないのだけれど… なんか身びいきな感じで良い印象を受けない。

2つめはMSローカルな型の命名規則を、あたかも普遍的な慣習であるかのように紹介している点。C/C++の世界でstructタグ名/typedef名を大文字だけで表記するのはFILE型くらいなのに、C/C++、あるいはUNIX/Linuxの伝統であるという嘘が書いてある。STL(あるいはC++の仕様書)やPOSIXの仕様書を確認したほうがいいんじゃないか。

3つめはどうでもいいんだけど、カッコの内側のスペースの入れ方がまちまちなこと。

for ( i = 0; i < 100; i++ ) ...
if( type == 2 ) ...
corpExpense[ crntQtr ][ i ];
などと書いてある一方で、

profit[i] = 0;
index = (key - 10) / 5;
などという書き方もあって統一が取れておらず、ちょっと気持ち悪い。自分なら後者に統一するところ。

まあ、ケチはつけてみたけど、こういった難癖程度しかつけられないってことはやっぱり良い本だからなんだよね。

続: ○本の住人

売ってneeeeeeeeeeeeeeeeeeeeeeee!
三省堂とSATYと近所の駅ビル探してもない。
またAmazonさんに頼むか…

ていうか、意外と(と言っては失礼か)あちこちで話題になってる気がする。だからなのか。むむむ、なんだかジェラシー

2006-12-16

遅刻

同僚(後輩くん)の披露宴に呼ばれたので、30分前に式場到着の予定で家を出たら… 見事に遅刻。恥ずかしいーーーー

いや、だって、みなとみらい線のホームって分かりづらくありません? みなとみらい駅だって地下3Fにホームがあって、地上に出るのも時間かかるし、出たら出たでホテル遠いし… すいません、そういうのも考慮に入れろってことですよね。

お祝いも式が終わった後でご両親に直接渡すハメに。こちらが悪いのに丁寧なご挨拶までして頂いて、本当に申し訳ありませんでした orz...

新郎上司(つまり自分の上司)の挨拶が聞けなくて残念w
社内結婚、しかも同期同士の結婚なので互いに顔見知りなゲストが多く、楽しいふいんきで式がすすんだのは良かったなと。

トラブルトラブルトラブル

ああ、今週は忙しかった…
QAテストが始まる直前にあるトラブルが発覚し、自分のせいじゃないってのを証明し、最適パラメータを見つけるための評価用プログラムを作った。
バスがなくなって久しぶりに駅まで歩いていったり、その電車すらなくなってタクシーで帰宅したり。
んで、上司と弁理士さんとシミュレータの業者さんと面談があって… いやはや、なんでこの時期に集中するかなあ。

ただ、会社の勤怠管理システムが"25:30"などという時刻を受け付けてくれるのには感動したw

2006-12-11

PCDN News Letter 休刊

PCDN News Letterがいつのまにか12/3に休刊していた。
確かにRSSがあるから、リンク集としての価値は低下していたのは確かだなあと。
そういえばURLのみを列挙したニュースサイトもほとんどなくなったね。

年末

はー、いよいよ年末。

忙しいし、でもプライベートは暇だしwwww

年賀状の準備も面倒だな〜 ていうか忌中だけど。

2006-12-01

CppUnit/cppunit-xのPukiWikiプラグイン

例えば

* ファイル操作/File
ファイルに関する操作をまとめたクラスです。

** オープン/open
ファイルを開く
** クローズ/close
ファイルを閉じる

とPukiWikiに書いたら、

/// ファイルに関する操作をまとめたクラスです。
class File {
/// ファイルを開く
open();
/// ファイルを閉じる
close();
};




class FileTest: public Test {
/// File::openのテスト
void test_open();
/// File::closeのテスト
void test_close();

static Test *suite() {
TestSuite *ts = new TestSuite();
ts->addTest(new TEST_CALLER(FileTest, test_open));
ts->addTest(new TEST_CALLER(FileTest, test_close));
return ts;
}
};


を出力するプラグイン作った。実戦投入して、便利だったら上流に投げてみようかなあ…

テキスト届いた

情報処理技術者試験(TE(ES))のテキストがamazonから届いた。

む、難しい… orz

なんか1ページ目からいきなりアナログ/ロジック混在回路の問題ですか。
一応電気電子工学科卒だけど、ピュアな論理回路くらいしかやらなかったから、かなりキビシイ。まあ、早めにテキスト買ってよかったと思うことにしよう。

ただ、紙が薄いから意外とページあるんだろうな。しくしく…