google-code-prettify

2008-07-25

全部のbfdnameが入ったobjcopyを作る

訳あってelf32-littlearmのobjcopyが欲しかったのだが、cygwinの標準バイナリのobjcopyはelf32-littlearmには対応していない。

objcopyくらい、最初から全てのbfdnameに対応していればいいのに。
とは思うが、無い物はしかたないので自分でビルド。

1. cygwinのsetup.exeで、objcopyのソースを持ってくる。
2. $ cd /usr/src/binutils-xxx/
3. $ ./configure --enable-targets=all
4. $ make
5. $ cp binutils/.libs/objcopy.exe <どこか好きなディレクトリ>

なぜかビルドが途中でエラーで止まるが、目的のobjcopyはビルドされたので、気にしない事にする。

参考
ぱた☆へね 2008-04-29

ところで、上記の「ぱた☆へね」サイトのbinaryカテゴリ、おもしろそうなので後で読もう。

2008-07-24

false positiveとfalse negative

false positiveとfalse negative、どっちがどっちかの覚え方。
falseは「間違って」と訳す。
http://chalow.net/2008-06-22-2.html

なるほどー。
spam filterの例で言えば、spam filterはスパムと判定するのが役目なので、
false positive → 間違ってspamと判定した
false negative → 間違ってspamではないと判定した
という意味になる。

2008-07-22

ソースコードのコメントに書くべき事

ソースコードは、何をしているかは(ある程度)表す事ができるが、以下の点は表現する事ができない。
・なぜそうしているか。
・他の選択肢には何があったか。なぜそれらではダメなのか。
・どういった思想で作っているのか。

これらの点はコメントとして記述するべき。

結合テストは単体テストよりも先に行うべき

正確に言うと、結合テストのスタートは、単体テストの作り込みよりも前に行うべき。

粘土造形で例えると、単体テストと結合テストは以下のようになる。

単体テスト:
細かいディテールを作り込む。大まかな形が正しく作成されている事が前程となる。

結合テスト:
粘土で大まかな形を作る。他とのバランスも考える。

結合テストの結果次第では、既に作成したモジュールの大幅な作り直しが必要になる事がある。
そのため、単体テストでテストの作り込みを行った後にモジュールの作り直しを行うと、それまで作った単体テストが無駄になる可能性がある。

2008-07-15

2時間で学ぶgit

gitのscreen cast。前後半合わせて2時間。

via OSnews

2008-07-14

MAKEDEV wdとすると、不正なデバイスができる

他にハマる人もいないとは思うけど、地味に30分くらいハマッたのでメモ。

MAKEDEVでwdのデバイスファイルを作る時
# cd /dev/
# ./MAKEDEV wd
とすると、不正なファイルが作成される。
# ls -l
c------r-x 1 root wheel 0, 0x00000280 Jul 14 18:09 rwd0a*
c------r-x 1 root wheel 1, 0x00000280 Jul 14 18:09 rwd0b*
c------r-x 1 root wheel 2, 0x00000280 Jul 14 18:09 rwd0c*
c------r-x 1 root wheel 3, 0x00000280 Jul 14 18:09 rwd0d*
c------r-x 1 root wheel 4, 0x00000280 Jul 14 18:09 rwd0e*
c------r-x 1 root wheel 5, 0x00000280 Jul 14 18:09 rwd0f*
c------r-x 1 root wheel 6, 0x00000280 Jul 14 18:09 rwd0g*
c------r-x 1 root wheel 7, 0x00000280 Jul 14 18:09 rwd0h*
brw-r----- 1 root operator 3, 0 Jul 14 18:09 wd0a
brw-r----- 1 root operator 3, 1 Jul 14 18:09 wd0b
brw-r----- 1 root operator 3, 2 Jul 14 18:09 wd0c
brw-r----- 1 root operator 3, 3 Jul 14 18:09 wd0d
brw-r----- 1 root operator 3, 4 Jul 14 18:09 wd0e
brw-r----- 1 root operator 3, 5 Jul 14 18:09 wd0f
brw-r----- 1 root operator 3, 6 Jul 14 18:09 wd0g
brw-r----- 1 root operator 3, 7 Jul 14 18:09 wd0h
正しくは、
# ./MAKEDEV wd0
のように、数字を付ける。
crw-r-----  1 root     operator    3,   0 Jul 14 18:12 rwd0a
crw-r----- 1 root operator 3, 1 Jul 14 18:12 rwd0b
crw-r----- 1 root operator 3, 2 Jul 14 18:12 rwd0c
crw-r----- 1 root operator 3, 3 Jul 14 18:12 rwd0d
crw-r----- 1 root operator 3, 4 Jul 14 18:12 rwd0e
crw-r----- 1 root operator 3, 5 Jul 14 18:12 rwd0f
crw-r----- 1 root operator 3, 6 Jul 14 18:12 rwd0g
crw-r----- 1 root operator 3, 7 Jul 14 18:12 rwd0h
brw-r----- 1 root operator 0, 0 Jul 14 18:12 wd0a
brw-r----- 1 root operator 0, 1 Jul 14 18:12 wd0b
brw-r----- 1 root operator 0, 2 Jul 14 18:12 wd0c
brw-r----- 1 root operator 0, 3 Jul 14 18:12 wd0d
brw-r----- 1 root operator 0, 4 Jul 14 18:12 wd0e
brw-r----- 1 root operator 0, 5 Jul 14 18:12 wd0f
brw-r----- 1 root operator 0, 6 Jul 14 18:12 wd0g
brw-r----- 1 root operator 0, 7 Jul 14 18:12 wd0h

warningくらい出してくれてもいいのに…

漢直win+TortoiseSVN

TortoiseSVN1.4で漢直winを使う時には、
[TortoiseSVN]
className=Scintilla
outputMethod=1
としないと日本語を入力できなかったが、TortoiseSVN1.5では
[TortoiseSVN]
className=Scintilla
outputMethod=0
とする必要があるようだ。

2008-07-10

disklabelとエンディアン

disklabelを調べて、ちょっとわかった事をまとめる。
disklabelを読み書きするにはdisklabel(8)を使うのだが、2通りの方法がある。
  • disklabel(8)は、ioctlでdisklabelの内容をkernel経由で読み(書き)する。

  • disklabel(8)に-rを渡すと、ディスクから直接disklabelを読み(書き)する。


disklabelのパーサーは、kernel内とdisklabel内の2つが存在し、disklabel(8)に-rを渡すと後者が使われる。

で、このパーサーに違いがある。
  • kernel内でのdisklabelのパーサーはSH3ではarch/sh3/sh3/disksubr.c。これは、デフォルトではEndian Independentではない。つまり、i386で作ったdisklabelをBig EndianのCPUでは読めない。

  • disklabel(8)内のdisklabelのパーサーは、Endian Independent。


これによって、どんな現象が起こるかと言うと、i386でdisklabelを付けたCFをsh3-ebで読もうとした場合に、
  • # disklabel wd0のようにすると、disklabelが無いかのように扱われる。(kernelが自動作成したfictitiousなdisklabelが見える)
  • # disklabel -r wd0とすると、i386で作ったdisklabelが読める


SH3でdisksubr.cをEndian Independentにするには、confにoptions BSDDISKLABEL_EIと書くと良い。