上へ

開発メモ

2003/08/02 lua

lua Borland C++ フリーウェア版で dll 作成
  bcc32 -elua.dll -WD -I../include luadll.c *.c lib/*.c
dll 中の標準出力の取得、SetStdHandle で標準出力先をパイプにする方針は駄目。
dll 中の標準出力は通常 dll のロード時に設定されてしまうので、その後で SetStdHandle をしても無駄らしい。

SetStdHandle した後、dll を動的ロードしてやれば可能性はあるが、コンパイラやコンパイルオプションによって初期化のタイミングは変わることもあるので必ずしも出力先が切り替わるとは限らない、なにより lua API 全てを動的ロード対応にするのはめちゃめちゃ大変。

結局 dll 側に Cランタイムライブラリ のパイプを持たせて、アクセス関数を持たせた。パイプが溢れると書き込みがブロックされるけど、windows 環境ではO_NONBLOCK オプションは使えないしパイプの空き容量取得手段もどうも無さそうだ。内部で読み出し側をスレッド化するしかないかな?
とりあえず dll 呼び出し側で注意してもらうことにする。
const int PIPE_SIZE = 4096;
const int R = 0;
const int W = 1;
static int old_stdout_fd;
static int stdout_pipe[2];

void OpenPipe(int PipeSize)
{
        old_stdout_fd = dup(1);

        _pipe(stdout_pipe, PipeSize, O_BINARY | O_NOINHERIT);
        dup2(stdout_pipe[W], 1);
        close(stdout_pipe[W]);
}

void ClosePipe(void)
{
        close(stdout_pipe[R]);
        dup2(old_stdout_fd, 1);
        close(old_stdout_fd);
}

int ReadStdout(char* s, int n)
{
        if (eof(stdout_pipe[R]))
                return 0;
        return read(stdout_pipe[R], s, n);
}

int WriteStdin(const char* s, int n)
{
        return write(0, s, n);
}

2003/08/10 仕事

ピクセルサイズ5um程度、50x50ピクセル程度、秒1000回程度読み出せるエリアセンサが欲しい、分割PDでも、
CMOSでも(CMOS は任意の画素読み出しが出来るはず)、CCDでも、いっそのこと横長ピクセルのラインセンサ
でも良いや、できれば対数スケール出力な(←贅沢)、
・・・といろいろ探したけど、世間一般にそんな用途は無いらしい。

と思っていたら、浜松ホトニクスのエリア/リニアイメージセンサのランナップが大幅に増えていて、
動作周波数1MHz、最小エリア500x60ピクセル、画素サイズ25um程度のものなら入手できそうな状況に、
ピクセルサイズが大きいのを除けば、ピクセル数も読み出し回数もクリアできそう。
行スキャンモードで秒1000回程度(1M/(500+60))。ピクセル数は逆に多すぎて勿体無い。

ピクセルサイズ25um で設計してみる・・・、無限系顕微鏡の倍率Mは
 M=結像レンズ焦点距離/対物焦点距離
対物は入手できるものが限られているので、結像レンズの焦点距離をいろいろ変えてみる。
倍率小さくするとピクセルサイズ 25um じゃ識別できないし、倍率大きくすると物点の移動ですぐに像面が−∞に
飛んでいってしまう、これでも使えるはずだけど、ピクセルサイズ25um はちょっと大きすぎかも知れない。


携帯用CMOSで動作周波数20MHz、QCIF(176x144)のものがあれば、秒700回程度読み出せるのではと
思い立つ、無駄に撮像素子を収集する男の手記あたりから辿っていって、VV6410OV6130 といった型番に
たどり着く、データシートをダウンロードして・・・英語かぁ・・・。

ウィンドウサイズは 2x2〜256x292、場所も256x292からはみでない範囲で何処でも、QCIF で 60fps はでる。
とのことなので、ウィンドウサイズを40x40 程度(sqrt(176x144x60/1000))にすれば 1000fps 程度行きそう。

あとは、ADコンバータの変換時間やなんかで制限がされないかの確認と、入手先と納期の確認か、
弱小ユーザーに大量生産物の入手は難しいんだよな・・・。

2003/08/15 GIF

GIF特許アメリカでは既に期限が切れていて、日本でも来年6月には切れるらしい、米湯に死すも
延長はしないらしい。

GIF の価値は自由に使えたから多くの対応ソフトが作られて、広く使われている点なのに、
価値の低い LZW 特許に対して高額な対価を払えといわれても、
特許権者が夜店のおやじだったら逆に詐欺と訴えられてると思うんだけど。

2003/08/16 msblast

一分間に2,3回くらいの頻度でポート 135 にアタックされてる。

2003/08/31 出稼ぎ中

都会に出稼ぎ中、要求仕様はもらったけど、「延命措置は高くつくから、迷惑掛けない日程で根本から作り直す、
仕様は俺が決める(*)」といって仕様策定と設計とコーディング同時進行中。

1ブロック目、この機能で○千行なら妥当か、ほぼ見積もり通りの規模と日程で無事終了。
2ブロック目で苦戦中、仕様から設計に展開すると規模が膨れ上がる、なにかいい手があるはずだけど。
設計、コーディング、コード膨張、やり直し、と一週間苦しんで、ようやくいい手が見つかったような気がする。

設計失敗、コード膨張を繰り返してファンクションポイント法は、結構本質を突いているかもという実感がもてたので、
帰ったらファンクションポイントカウントしてみよ。

(*)
要求仕様満たして後はサヨナラなら迷わず?延命措置するだろうけど、このソフトおそらく末永く
面倒みることになるので、作者的には作り直しても十分元が取れる。