訳あって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カテゴリ、おもしろそうなので後で読もう。
google-code-prettify
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ではないと判定した
という意味になる。
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
2008-07-14
MAKEDEV wdとすると、不正なデバイスができる
他にハマる人もいないとは思うけど、地味に30分くらいハマッたのでメモ。
MAKEDEVでwdのデバイスファイルを作る時
warningくらい出してくれてもいいのに…
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のパーサーは、kernel内とdisklabel内の2つが存在し、disklabel(8)に-rを渡すと後者が使われる。
で、このパーサーに違いがある。
これによって、どんな現象が起こるかと言うと、i386でdisklabelを付けたCFをsh3-ebで読もうとした場合に、
SH3でdisksubr.cをEndian Independentにするには、confにoptions BSDDISKLABEL_EIと書くと良い。
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と書くと良い。
登録:
投稿 (Atom)