« 2011年4月 | トップページ | 2011年6月 »

2011年5月16日 (月)

TA7368

先日 マルツパーツ名古屋小田井店で定番のオーディオアンプICであるTA7368を買おうとしたら、なんと「置いていません」と言われてしまった。

メジャーなICなのに何故? と思ったのですが、デジットの2010年12月1日のブログによるとこのICは「メーカー製造中止品」になっているのですね。知らなかった...。

まあ、電子部品の流通在庫は意外と息が長い(ような気がする)ので、当分入手可能だろうとは思いますが。 代わりのICもありそうですし(3Vの低電圧で動かしたいときの代わりは何がよいのかな? NJM2073?)。

2011年5月15日 (日)

VB版"危険なプログラム"

1年ほど前にある開発会社と組んで開発したシステムの、その開発会社の社員が担当したプログラムが1年経っても安定しない(ちょくちょくバグが見つかる。そのつど修正はしているが安定に向かっている印象が無い。)ので、ついに私がプログラムソースに目を通すことにしました。

プログラムはVB6で書かれているのですが、いやはやものすごいコードです。どこがすごいか、箇条書きにしてみると。

(1) グローバル変数依存症。iとかjとかの変数がグローバルで定義されていて(しかもVariant型)、それらの変数に重要な値がセットされプログラム内の随所で参照されている。
(2) ローカル変数がほとんど無い。Forループもグローバルで定義されたkとかlとかを使っている。あるいは関数の中でkとかlとかがいきなり参照されている。呼び出し元かどこかで値がセットされているらしい。
(3) そもそも関数の数が多くない。ボタンのClickイベントハンドラにいきなり長大な処理を書いている。
(4) 隠れグローバル変数がある。Form上に不可視のテキストボックスを置き、それをワーク変数として使っている。(Option Explicit指定していないので他にも隠れ変数があるかもしれない)
(5) コピー&ペースト愛好症。類似のプログラムブロックが随所に見える。
(6) 混乱したインデント。内側ループが外側ループと同じレベルにあったり、インデントのサイズが4(の倍数)で揃っていない。

上記文中の「グローバル変数依存症」「コピー&ペースト愛好症」は、”危険なプログラムの処方箋”(宮坂電人著、ソフトバンククリエイティブ)の第二章”三大疾病”にある言葉ですが、本当に宮坂氏の言う「汚いプログラム」「ダメなプログラム」「危険なプログラム」をVB6で書くとどうなる、見本のようです。

上に列挙した項目は割と「基本的」な事項ばかりと思いますが、「中級レベル」(?)の問題も多いです。

(7) DB(MDB)更新(insert/update/delete)の直前でご丁寧にOn Error Resume Next している。
(8) ユーザ定義型(構造体)を使っていない。社員コード、氏名、年齢、...などがそれぞれ別の(同サイズで一次元のVariant型)配列で管理されている。
(9) If文の複数の条件式が括弧で括られることなくAnd/Or混在で羅列されている。括りは大丈夫なのか。

//////////////////////////////////////////////////////////////

私より年長で、古株社員で、社長(IT出身でないが)も信頼している人なので私も信頼していたが...。
よその会社の社員の「しつけ」など「知ったことではない」とも言えるわけですが、エンドユーザはそれなりの規模の会社で、今後も仕事を期待したいので。

すこし口出しをせざるを得ないかな。身に付いてしまった悪いくせを正せる年齢かどうか。

上記宮坂本の19ページに「作った本人が途中で逃げてしまったので引き継いだ」というくだりがあって、ここを読んだときには思わず吹き出してしまったが、現実になることも想定しておかねば。
ですので頼まれたわけでないのに人の作ったプログラムソースに目を通しているわけです。任せっぱなしにできないですし、逃げるのを待っている(?)わけにもいきません。

2011年5月 4日 (水)

FindFirstPrinterChangeNotification使用例

Win32API - FindFirstPrinterChangeNotification/FindNextPrinterChangeNotification関数の使用例はネット上にも意外と多くないようだ。

印刷を監視するプログラムの必要にせまられて、やっと見つけたサンプルはVB6で書かれていた(そのサイトのURLを保存するのをうっかり忘れた)。それを参考にC(VC6)で作ったプログラム例を載せます。

アップしたのはcppファイルだけですが、ヘッダファイルはstdafx.hでインクルードされていて、windows.h/stdio.h/stdlib.h/memory.h の4つです。

コマンドプロンプトから CheckPrint.exe "プリンタ名" で実行します。タイムアウトになるまで指定したプリンタ上の"イベント"を列挙するするだけです。

このプログラムが動くかどうかはプリンタ(ドライバ)にも依存するようで、試したところでは ゼロックスのDocuCentre 、リコーのIPSiO、などでは動きそうだが、キャノンのPIXUSではだめだった("DISCARDED"が出るだけ)。

« 2011年4月 | トップページ | 2011年6月 »