開発日誌
1996-07-02
暇潰しにキーボード練習ソフトを作ろうと思い立つ
思い立ったのはNIFTY-ServeのCBでそういう話題が出たからなのですが、なにかいい練習ソフトは無いか、と聞かれてどれも気に入らないという話をしたら「ぢゃ、作って」という展開になったのです。
「作れというなら作るけど」という話になったので、どういうのがいいのか聞いてみたところ、
という要望があったのでそのように作ることにする。
さらに、DOS汎用という話もあったのですがさすがにこれは辞退しました(^^;)。
なんとなくアイディアだけ想像する。
この段階では妄想で終わる可能性大。
1996-07-03
Windows プログラミングを始める
というわけで32bitアプリケーションとして開発することが決まってしまっているんだけど、手元には16bitなVisual Basic 2.0しか無いため、32bit環境で使える開発環境を入手する。
一応、ネットワークで流すことを前提として考えていたため、サイズが小さいもので作ることを考える。となるとVisual Basic 4.0はランタイムが莫大(というか爆大というか)で配布するのが厄介だし、Delphi 2.0だとファイルサイズがやたらに大きいので却下。
というわけで、開発言語はCにすることに決定。
しかし、私はWindows環境ではMicrosoft Visual Basic、 Borland Delphiといったお手軽環境しか経験が無い(^^;)。
C はせいぜいDOSで使ってた関数をDLLにしたりした程度。
私にできるのか?
で、購入候補として挙がったのは以下のとおり。
- Microsoft Visual C++ 2.0
- Borland C/C++ 4.5J
- Symantec C++ 7.2J
で、この中から考慮すると何が残るかというとSymantec C++7.2Jが残りました。
理由の決め手は、値段です(^^;)。秋葉原の九十九電気で23,000円で売っていたという。
他にも、こんなことが書いてありました。
- コンパイルが速い
-
勤務先で使っている Visual C++2.0に比べればかなり高速に感じます。
プリコンパイルヘッダを使うとさらに高速です。
- 統合環境が32bitで安定している
-
勤務先で使っていたBoralnd C++4.5J(だっけ? 4.0だったかも)は統合環境は16bitで、よく不安定になっていました。
同じ32bitのVisual C++2.0と比べても安定している感じがします。
- Windows95対応コンパイラ
-
Windows 95にいち早く対応をうたっています。なぜかMicrosoftより早い(^^;)。
今回のターゲットはWindows 95ですから、正式にサポートしているほうが安心。
- 最適化が優秀
-
パッケージや広告に書いてあるのを信じてみただけです。
こういうデータは定量的な測定ができますからデマを書くことはないと判断したためです。もしデマを書いたとしたら後で他社から突っ込みが入りますから。
実際、生成コードはVisual C++2.0と比較したところ私好みでした。
- MFC対応
-
曲がりなりにも業界標準ですから、対応しているというのは安心感があります。
MFC3.0なのでWindows NT3.5対応ですが、Visual C++のAppWizardよりもとっつきやすいです。
ちなみに、後日SC++ と MFC3.0の組み合わせで書いたアプリケーションをNT4.0で動作させたところ正常動作したので、勤務先でVC++4.0 と MFC4.2でコンパイルしたところコケた、ということがあります(^^;)。なんで古いサードパーティ製のコンパイラだとOkで、Microsoftの新しいコンパイラではダメなのかは謎です。
WM_CHARメッセージでキーを取得することに決める
これが一番楽そうだったもので、つい。
手抜き?
垂直格子状にますめを描いて、押したキーに対応した位置を黒く変色させる
(MoveToEx() LineTo() GetStockObject(BLACK_BRUSH), FillRect()を使用)
「A to Z早撃ちゲーム」になる
ウインドウのサイズに合わせてますめの大きさを変える
1996-07-04
ますめをずらしてなんとなくキーボードっぽくする
ますめの縦・横の大きさを独立させる
今まではキートップは正方形にしたかったので縦横同じピクセル数でキーを描いていました。その大きさをウインドウの横幅から計算していたので思いっきり横に広げると上の列が見えなくなるとか。
想像はしていたのですが、想像以上にみっともなかったので修正。
気にしない、という解決でもよかったんだけど気に入らないのでやってみたところ、正方形じゃなくてもいいか、って思ったのもあるし。
CreateSolidBrush()関数の存在を知る
キーの色を黒く変色していたのを赤と青に変える。
これで色が着くぅ〜。
キーボード図の左右を塗りつぶす
FilRect()関数使用。
ウインドウのサイズに合わせてフォントの大きさを変える
MS ゴシックが、実は「MS ゴシック」であることにショックを受ける。
(CreateFont()使用)
ちなみにWM_SETFONTメッセージを送ればいいと思っていた。
あぁ、偉大なり勘違い。
正解はBeginPaint()の後のSelectObject()でした。
会社にあるVisual C++ 2.0のヘルプファイルが欲しくなる
だって日本語なんだもん。
Visual C++ 4.0は英語だったし、Symantec C++ 7.2J もヘルプは英語だし。
どこかに逆引きAPI辞典って無いものか(^^;)。
Borland C++4.5Jは確か日本語だったハズ。
Delphi 2.0にはAPIの「日本語」ヘルプ付いてこないのかなぁ。
256色モードで動かすとディザリングが発生する
会社のNTが256色だったので気が付いた。
私のPCは普段は65536色なんでパレットなんか気にしたことが無かった。
1996-07-05
PALLETERGBマクロを発見
256色でもディザは確認できず。
らっき☆
Polygon()関数を発見
もっと早く知っていればなあ。
キーボードの左右を塗りつぶすときに使ったのに。
WM_KEYDOWNのLPARAMでキーコードが取れる?
でもOEMに依存するというのがちょっと不安。
このバージョンではWM_CHARメッセージでキーを補足します。
98でも101/106キーでも安全だとわかったらこっちを使いたいと思ってます。
思ってるだけかも。
この段階で Version 0.01として公開することにする
後悔しそう(^^;)。
この時のファイルサイズ 22.5KB。
ドキュメントの作成開始
ソースも公開する予定でいたため、コメントを付け直したり、細かなところをfixする。
ヘルプファイルの書き方もすっかり忘れていたので、資料を漁りながら書きなぐる。
1997-07-09
ドキュメント完成
1996-07-11
某大手パソコン通信ネットワークにアップ
担当の方から Windows3.1でも動作しているのですがとメールが来たので驚く。
聞いてみるとWin32sがインストールされていたので動作したらしい。
動作確認もとっていないのにWin32sでも動作します、と追加されてしまった(^^;)。
一応、使用しているAPIすべてがWin32sでサポートされていることは確認したのでOkしましたが。
1996-07-21
Version 0.01公開
自分でダウンして(参照数稼ぐなって)チェック
バグ発見。
なにがバグかというとswitchのbreakが抜けているという。
このため、STEP 5を選択してもSTEP 6を実行してしまうという現象が発生していた。
しかしコレはちゃんと見つけて直しておいたハズ…嗚呼っ! アップするファイル間違えてるぅ〜(^^;)。
1996-08-04
持ち運び用としてIBMのThinkPad220を購入
ふと出かけた時のための通信端末が欲しかったという時に1kgという軽さに惚れる(笑)。
標準状態だと49800円というのも魅力。
コレなら衝動買いでイケると思い購入…したのがHDD増設モデル。
さらについPCMCIAモデムや8Mの増設メモリも購入しDOS環境で使い始める。
結局高くつくのはお約束。
しかし、なんつー日に買っているのやら。
この日は夏コミがあったのでした(^^;)。
1996-09-03
バージョンアップ作業開始
Version 0.02に向けて作業開始。
見栄えがよくない、という評価をいただいたので今回の目的は「見た目」重視で攻めます。
Version 0.01だとほとんどモノクロなので、画面をカラフルにするとか。
タイピング終了時、速度でランク付けする
実はVer0.01だと、所用時間と速度をパネルで表示するだけだったりする(^^;)。
1996-09-07
ホームポジションのキーの色を変える
やはりホームポジションはわかりやすい方がいいな、と思ったもので。
見栄えも大事でしょ。
1996-09-08
キーの入力判定にWM_KEYDOWNとWM_CHARを併用する様に変更
仮名ロックの仕方を知らない人というのが結構多いようで、IMEを起動しないと仮名の練習ができないというメールをいただいたので、その対応として修正。
仮名入力練習モードのとき、実際に仮名を入力しないと入力したと判定されないのですが、仮名入力のときには仮名をロックするものだと思っていたので気にしていなかったのです。
このソフトは、キー入力に反応して動作するので、IMEを使われるとキー入力が先にIMEに取られてしまって反応できません。つまり、押したキーを表示しない。IMEを使っている時には確定しないと次の文字に進まないのです。
そこで、WM_CHARでわたってくるキーコードだけではなく、WM_KEYDOWNでわたってくる仮想キーコードも併用するようにしてみたりする。WM_CHARのコードは結局文字コードで、Aとaが区別されてくるのですが、WM_KEYDOWNでの仮想キーコードではAとaが区別されないので現在の入力モードがなんだろうが押されたキーが判定できるようになります。
この修正によりキーの位置が正確にわかるようになりました。
なお、判定には仮想キーコード(WM_KEYDOWNで取得)とキャラクタコード(WM_CHAR)の2つを使用することにした。
すべて「\」キーのせいだぁ。
ちょっち考えるとWM_KEYDOWNだけでことは足りそうな気がするんだけど、ATのキーボードだと、右下の「ろ」を押すと「\」が入力されるのでこの辺の兼ね合いでどっちも見てます。
1996-09-09
キーの押し下げと離したときに連動して色が変わるように変更
先にキーの色が変わるのがうっとうしいので修正。
実はまだこの辺が怪しい(^^;)。
うまく行かなくて何度も書き直しているんだけどもなんか変。
と、思っていたらキーを押したまま別のキーを押すと押していたキーが押されてなかったことになってしまうことに気付く。このためにキーを離したという情報が来ていないのにもう一回押されたことになっている。
これは対処しろって言われても…すべてのキーの状態を覚えておくわけにもいかないし。
というわけで、この状態でよしとする。
13日まで悩んでたのよ、これで(^^;)。
でもこの処理で本当にいいの?
理論上、メッセージキュー(キーボードバッファみたいなもの)があふれた場合、キーが離されたタイミングを取りそこなうはずなので、ぐちゃぐちゃ押しまくると、キーの表示が離してあっても押された状態で表示されるおそれがあります。
が、テストしたくらいでは発生しませんでした。
1996-09-22
パレットの作成
Version 0.02公開
懲りずに某大手パソコン通信ネットワークにアップ。
今度は(はとはどういう意味だろう)たくさんメールが来ることを期待する。
油断しているうちに気が付いたら公開されていたのでいつ公開されたのかは解ってません。
予想よりかなり早かったと思います。
この時のファイルサイズ29.0KB。
ルートディレクトリで起動すると世界が破滅する
ルートディレクトリで起動するとINIファイルを正常にアクセスできないバグがありました。
1996-10-23
ソースの見直し
冗長な処理を見直して書き直しました。
1996-11-01
林原さんのCDアルバムbertemu発売される
記念にバージョンアップをしよう、というのは当然ウソぴょ〜ん。
引っ越し準備をほったらかして即購入。
当然ながら初回特典のモノです。
ラジカセを箱詰めにしてしまったので愛機のへきちゃんで聴く。
1996-11-02
引っ越しのため愛機へきちゃんを箱詰めにする
TP220買っておいて良かった。
CDはDiskmanで聴けるので問題ありません。
1996-11-15
パレットの扱いの不備を修正
実はこのAPIの使い方がよく解らない。
ドキュメント読んでも理解できなかったので、サンプル見ると全然気にせず使っているようだ。しかもそれで意図した通りに動作している。そういう物なのかもしれない。
ふと見ると参照数が3桁になっているので歓喜し感涙にむせぶ
早くパレット操作のバグを修正した物をアップロードしたいと本気で考える。
予想外に使ってくれる人がいるので非常に申し訳ない。
1996-11-16
描画のやり方をいぢくる
Windows95では描画は16bitで行われているため描画のためのAPIを呼ぶ度に32bitと16bitの間を切り替えているらしい。少しでも機械にやさしいプログラムにするために使用するAPIを変えて、描画関係のAPIを呼び出す回数を減らしました。
主な変更はLineTo()をPolyPolygon()やPolyPolyline()に修正したこと。
確認してないけどこれでWin32sでの動作は期待できないと思う。
追記:現段階ではWin32sでも動作が可能と思われます。
Visual C++4.0でコンパイルできない
メールでVisual C++ 4.0Jでコンパイルできないという報告を頂いた。
早速Visual C++を買って…というような財政状況ではないため勤務先でコンパイルしてみる。
確かにエラーだ(^^;)。Visual C++の2.0と4.0では関数の仕様がわずかに違うらしい。
int WinMain() → int WINAPI WinMain()
ここで気付いたのがSymantec C++は使ってない変数を黙って消すのに対し、Visual C++は散々わめいて騒ぎたててから消す、ということ。
SC++も一言くらい言って欲しいものです。
使ってない変数を削除する
実行ファイルからは既に消えていたけど、ソースからも抹殺。
1996-11-21
ついでにソースに手をいれる
適当にコーディングしてある場所を書きなおす。
コメントも大量に付け出す。
なぜかますます読みにくくなったような気がする。
1996-11-24
さらにパレットの動作を修正
他のアプリケーションがパレットを操作すると、こちらのパレットが信じられないほど乱れていたのを修正しました。
SDKのサンプルを見ていても結局SelectPalette()の使い方がよく解らないので適当に解釈して書く。
動いているからOkということにする。
サイズを小さくまとめる
面白いのでサイズが小さくなるようなコーディングに変える。
以前の29Kというサイズが26.5Kまで減った。
けどメッセージを増やしているうちに27.5Kに増えた(^^;)。
根本的なところを変えれば小さくなるかもしれないけど…
ヘルプファイルの方が大きくなる
ああっとうとうこの日が(爆)。
でも書く(火暴)。
1997-01-15
Libretto衝動買い
これ以後開発のほとんどがLibrettoで行われることになる。
とは思わなかった(^^;)。
AMD 5x86 100MHzというのは偉大です。充分に開発作業を行うことができます。
1997-01-24
Windows 3.1に移植
友達に送り付けるためだけにWin16用に書き直す。
このバージョンは原則的に非公開です。すでに手元にもソースがありません。
今のバージョンをリコンパイルすればいい、という訳にも行かないので同使用もありません。。
この時からまたWin32sでの動作が可能になっています。
1997-03-07
描画の高速化
描画するたびに画面全体を描画していたのを止める。
実はBoundsCheckerというデバグツールの体験版を入手したので試しにインストールしてテスト。このツールから動作させていると、正しく動作しているかどうかを確認しながら実行できます。変な動作をしていればそこで教えてくれるというスグレモノです。しかし、ちまちまとそんなことをしているものですからスローモーションがかかったような動作をするわけです。そしたら、描画がもたもたしているのが気になって気になって(^^;)。
サイズ変更時にのみ描画してダブルバッファリングするように変更しました。
描画が必要なときには、バッファからBitBltするようにしました。
1997-03-12
上位5人分をランキング表示する
歴代のアレを実装する。
ランキング表示が欲しい、とのコトだったので試験的に実装する。割といい感じなので残すことにする。
この時はまだネーミングはできなかった。
バージョン情報をパネル表示からクライアント領域に表示するように変更
表示するフォントも切り替えられるようにする
eva構造体を定義する
ランク評価の高速化とメモリの使用量削減。
1997-03-13
ランキングをファイルに記録する
実はCRCつけて暗号化して…とか考えていたのですが手軽にできる暗号化アルゴリズムが思い付かなかったのでほっとく。
どうせならCSVにしてしまおうか、とも一瞬考えたけども面倒なのでやめる。
1997-03-27
小数点の表示のバグ発見、退治
コレは初期からのバグ。
ナニをやっていたのかというと、printf()の引数に、こんな感じに指定していたのが原因。
printf("%4d.%4d", 整数部, 小数部);
おかげで、1.02という表現が、1.2になってしまっていた。
なぜ今まで気付かなかったのだろうか。
そういえば以前に「計算が違うのでは?」というメールをいただいたのですがその時には「誤差です」と言い切った記憶が(^^;)。
問題無い、誤差の範囲内だ。そうか?
1997-03-29
βテストを友達に依頼
友達の家でコーディングしていたら「欲しい」と言われたのでその場でLibrettoからPHSでその場にある友達の電話に電話してダイアルアップする。
FDDを持ち歩く習慣は今も無いし。
ま、βテスト(^^;)。
友達の勤務先で稼動を始めたそうです。
1997-04-12
東京出張ついでに友達に配布
東京に行ったついでに友達に会ってきました。そのときに開発途中のものをあげてしまう。
βテスト、βテスト(^^;)。
この友達の勤務先でも稼動を始めたそうです。
1997-05-02
入力文字数の表示
βテストの結果、いつ終わるのか判らないという声を頂きました。
というわけで文字数カウンタを作成。
この際にファイルサイズが32KBを超えてしまったので評価テーブルを削除してしまった(^^;)。
32KBというのは一つの壁だと思ったのですね。
Windows終了時にもランキングを記録する
歴代のアレとかソレは、起動時に読み込みプログラム終了時に保存していたのですが、Windows終了時には記録していませんでした。これを、Windows終了時にも記録するように修正。
1997-05-10
Version 0.03 正式公開
FC(C言語フォーラム)でRTC中、このソフトの話をしたら見てみたい、ということでしたので、FCのデータライブラリに登録する。
同時にFPROGのデータライブラリにも登録する。
この時のファイルサイズ32.0KB。
2バイト文字を使っているディレクトリで起動すると世界が崩壊するバグ
良くある話ですが、c:\暴\bkey.exe なんて感じで起動すると世界が破滅したのです。
そのため、FPROGにアップロードしたファイルを削除。
修正後、登録し直すことにする。
ファイルの取り扱いのミス
ファイルオープン時の返り値を勘違いしていました。
hfRec=CreateFile(vszRecFile, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if(hfRec){
/* 読み込む処理 */
}
とか書いていたのですが、本当はこう。
hfRec=CreateFile(vszRecFile, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if(hfRec!=INVALID_HANDLE_VALUE){
/* 読み込む処理 */
}
失敗したらNULLが返ってくると思い込んでいたのが勝因です。
嗚呼、ドキュメント読んでいないのがバレバレ…。
ソースの見直し
冗長な処理を見直して書き直しました。
具体的には、
- グローバル変数を増やす
値が変わらない変数についてはグローバル変数にして関数の引数に渡さないようにしました。コレにより、関数呼び出しのオーバヘッドを削減するとともにモジュール強度を弱めました。
- ウインドウプロシージャのからの引数を省略
ウインドウプロシージャから下請け関数を呼び出す時、下請け関数で使わないパラメータは渡さないようにしました。コレにより拡張性が落ちました。
ネームエントリ実装
歴代のアレ・ソレに認定された場合、ネームエントリできるように実装する。
それまでの歴代のアレとソレは、ランクが表示されていた。
eva構造体を外部に出して独立させる
eva構造体を外部に出して、独立させる。これにより、ドコでもランク情報にアクセスできるようになる。
歴代のアレ・ソレでは、名前しか表示していなかったものを名前とランクの両方を表示するようにした。
1997-08-31
Libretto 60購入
開発PCとして今までLibretto 30を使用していましたが、とうとうリプレースしてしまいました。
Libretto 30と比べて大きいのは「音が出る」というところでしょうか。
というわけで今までファイルサイズが大きくなるという理由で断っていたWAVEファイルの再生機能の追加をもくろみます。
なんでファイルサイズが大きくなる問題が、使っているPCから音が出るようになると解決するのかは永遠の謎です。
1997-09
で、音を出すように実装。やっぱりサイズがぁ〜、というわけで別の手段を考える。
Windows終了時の処理を変更
Windows終了時には、終了処理関数を呼び出すだけにしていたのを、ウインドウを破棄するように修正。
1997-09-09
FPROGでVersion 0.04公開
ってこのバージョンってここでしか公開していないのでは。
この時のファイルサイズ32.0KB。
- ウインドウの見た目をWindows 95対応のものにした
- ソースを見直して余計な変数を削除
1997-09-24
Version 0.05正式公開
1997-10-06
ファイルサイズのダイエット作戦敢行
ファイルサイズ削減のため、Cランタイムライブラリをすべて削除する。
Cランタイムライブラリが無くなったことで動作が異常になることを予想していましたが、無事に動作する。ファイルサイズも大幅に削減(当社比約40%)。
安心して、WAVEファイルの再生を行うように修正に入る。
1997-11-01
WAVEファイルの再生時にプロセスがゾンビになる
WAVEファイルの再生に sndPlaySound() を使用していたんだけど、この関数の呼び出し後プロセスがゾンビになっていることが発覚。
Cランタイムライブラリを使用するとちゃんとプロセスは消えている。しかし、Cランタイムライブラリを使わない場合、こちらのコードからRETした後にもまだプロセスが生き残ってしまうのだ。
sndPlaySound()さえ呼ばなければプロセスは消える。
なんとなく、Windows 95のバグっぽい気はする(^^;)。
想像するにsndPlaySound()で非同期再生を実行するためにスレッドを生成しているのにもかかわらず、このスレッドハンドルをクローズしていないのではないかと思う。なんとかしてsndPlaySound()からスレッドハンドルを取得できないかと試みるも手が見つからない。
1997-11-12
ベクターからメールが届く
9月に公開した Version 0.05を掲載したい、とのこと。
反対する理由はないので許可する。
1997-12-06
Version 0.06正式公開 /FGALAP FWINAC
変更内容は、
とか。
この時のファイルサイズ 20.0KB
1997-12-26
ASCIIからメールが届く
TECH Winに Version 0.06を掲載したいとのこと。
反対する理由はないので許可する。
ただこのメールの書き出し、「RXA01732様」というのがスゴイ。
1998-01-15
TECH Winの掲載号の連絡
TECH Winの3月号(2月7日発売)に収録する、というメールが届く。
今度は「RXA01732様」ではなくて「びい様」になっていた。
日経BP社からメールが届く
いつ届いたのか解らないのですが、12月15日に私が返信しています。
日経WinPC 1998年3月号にVersion 0.06を掲載したいとのこと。
もちろん許可する。
1998-01-18
日経WinPC 3月号が届く
掲載誌が送られてきた。
をを、画面写真も出てるぅ〜♪
1998-02-06
TECH Win3月号が届く
掲載誌が送られてきた。
ををっ、名前だけだぁ〜(爆)。
1998-02-19
ミスタイプした回数を表示してほしいという依頼をいただく
うを〜、Internetからのe-mailだぁ〜\(^^)/
TECH Win 3月号に掲載されたのですが、それを見た方からのe-mailでした。
というわけで、記念に無条件に依頼を承諾することにする。
ただ、制限時間を追加するネタがあったのでそっちを優先することにする。
そのうちやるか、と思っていたところでこういう依頼があったので急に優先順位をあげて作業に取り掛かる。
1998-02-22
ファイルサイズの削減を試みる
そろそろ手が尽きてきたので、コンパイラを変えることにする。
というのもSymantec C++では関数の引数をレジスタで渡すことができない。アセンブルコードを読んでいると、結構この引数の部分が大きいような気がしたのでレジスタ渡しにすることでさらにオプティマイザが活躍することを期待する。
が、リンカがタコで結局サイズが小さくならない(^^;)。
tlinkだとランタイムライブラリをはずすことができなかったのです。
しかし、生成されたコードはSymantec C++7.2JとBorland C++5.02Jでは結構違ってきたので、なんとかしてBC++のコードを使いたいわけで。
やっぱりコンパイラは新しいほうがいいようですね。
1998-02-24
ファイルサイズの削減を試みる
コンパイラをBorland C++5.02Jに変更しようとして、リンカでハマっていたわけですが、リンカはSymantec C++7.21JのOPTLINKを使うことに決定。
これだとランタイムライブラリははずせるし。
結果として、Symantec C++を使っていた時に比べ10%のサイズ削減に成功。
バグを発見
サイズを小さくしようとしていた時に、無駄なものが無いか実行ファイルのダンプを眺めていたところ、データに違和感があるものを発見。
その部分のソースを見てみると、
char *str[]={
"ABC",
"DEF"
"GHI",
"JKL",
};
なんて書いてあったりする。配列の順番を入れ替えた時に、こうなってしまったらしい。
ミスタイプをカウントする
カウントしたミスタイプ数は終了時に表示するようにしました。
入力に制限時間を追加
なんだ、やればできるじゃん。
というくらいにあっけなく作業完了。
結構面倒な気がしていたのでなかなか作業に取り掛かれなかったのです。取り掛かってしまうと、必然的にこちらの作業に集中してしまうので、他のことがおろそかになるとか、ハマると後が恐そうだったのでなかなか手が出せなかったのですが、後が無くなったので着手したら…あら、動いた。
動作のほどは…(^^;)。
1998-02-25
Borland C++5.02JとSymantec C++7.21Jでコードの挙動が変わる
signedとunsignedの比較を行ったときに、暗黙の型変換がおきるのですが、この時の挙動がBorland C++5.02JとSymantec C++7.21Jで異なりました。
私が意図したとおりの挙動をしたのはSymantec C++7.21Jのほうなのですが…。
1998-02
Windows NTで起動できないっ!
Windows NTで起動できないというmailをいただきました。
原因は修正中にミスをしていたため、","が1つ抜けていたためアクセス違反を起こしていたため。
連絡頂いた時にはすでに修正済みでした。
1998-03-01
制限時間の扱いを修正
制限時間は、0.1秒単位で設定できるのですが、この時の入力をどのように扱うかで悩む。
1.2Aと入力したときにエラーとしてはじくかどうか、というところで悩んでいたのです。
最大限見たとしても、小数点以下1位までしか必要ありませんから、"1.2"という情報さえ得られればいいと思ったのですが、なんとなく釈然としないものがあるのです。
結局、1.2Aはエラーとして扱い、1.23は1.2として扱うようにしました。
1998-03-03
ベクターから締め切りのメールが届く
書籍掲載の締め切りが3月11日であるというメールが。
うお〜あと1週間しかないでわないくゎあぁ〜っ!
あらかた作業が完了していたのであとはのんびりテストするつもりでほったらかしていたので、あわてて作業を再開する。
1998-03-10
作業終了
なんとか間に合ったような気がする。
とりあえず、当面の目標であったベクターとFWINDC、FGALAPにアップロードする。
とかやっていたら、なにかバグがあったために修正した記憶がある。
1998-03-11
Version 0.07として正式公開
3月10日の分をキャンセルして、あわてて修正作業を行い、公開する。
- タイマーによる入力時間制限機能
- ミスタイプのカウント
- Windows NTで起動できないバグの修正
1998-03-13
スコラ社のムックへの掲載依頼
別冊スコラムック 「まるごとキーボードレッスン」(仮称)にVersion 0.07を掲載したいとのこと。
当然許可する。
1998-03-25
DOS/V POWER REPORT誌への掲載依頼
もちろん、許可する。
この時の紹介記事がツボを押さえたもので肩凝りに効くというか、気に入っているのでここにコピーしてあります。
コレに関してはFWINDOWSを経由した掲載依頼でした。
1998-05
スコラ社から見本誌が届く
「すぐできるシリーズ(1) キーボードレッスン」というタイトルでした。
1998-05-21
東京水産大学の情報処理センターにて使用したいとのメールが届く
どうせフリーソフトなんで、好きに使ってくださって構わない、とメールする。
1998-05
またもファイルサイズ削減を計画する
WATCOM C++11.0Jでコンパイルするとさらに小さなファイルになることが判明。
…が、家でコンパイルするとサイズが小さくならない。理由はよく解らない。
ただ、生成されたコードを読んでいてさらに思い付いた点があるので、ソースのほうで最適化を試みる。
22KBから20.5KBにサイズを小さくすることに成功。そのため、保守性はどこかに捨ててしまいました。
1998-05
描画の高速化を図る
Plus!をインストールしている環境で、ウインドウの大きさをぐいんぐいんと変えていると、描画がもたついているような気がするので手を入れはじめる。
とりあえずベンチマークを取り、どれが一番速くなるかを計測。
現状は、キーボードの外側をPolyPolygon()で、キーの枠をLineTo()・MoveTo()、中をFillRect()で塗りつぶしている。
このPolyPoligon()をまずFillRect()で置き換えてみる。
- 全体を塗りつぶしてしまう(FillRect()は1度だけ呼び出す)
- 両端を一気に塗りつぶす(FillRect()は右と左で合わせて2回呼び出す)
- 左右で1列ごとちまちまと呼び出す(全部で8回呼び出す)
一番速かったのは、3番目。
次に、キーボードのキートップの描画についても考慮する。
現状では、枠線をざざっとひいて、キートップをFillRect()でぐりぐり塗りつぶしている。
ここでRectangle()の使用を検討する。これは、四角を指定すると枠と内部を一気に描画してくれる。ただ、隣同士の枠は重なって描画されるので無駄な描画が発生する。どうなるかは計測してみないと判らない。
感覚としては、枠をちまちま書くことになるぶん、遅くなると思っていたので使わなかったのですが…。
実は速い(^^;)。枠を一気に描画するより、枠と内部を一気に描画していく方がいいらしい。もしかしたらディスプレイドライバにもよるのかもしれないけど。
これで、12%程度の高速化。計測した環境は以下の通り。
- Pentium 100MHz Trio64 1024x768 16bit
- MMX Pentium 200MHz Trio64V2 1024x768 16bit
1998-05
ランキング記録ファイルを暗号化する
なかなかいい暗号化方法を思い付かなかったので保留していたのですが、そのまま1年が経ちましたのでいいかげんにどーにかしないと。
ファイルサイズの壁もあるのでいかにしてサイズが小さい暗号化と復号化を行うルーチンを作成するかで悩む。
個人的にはサイズの割には速度・質ともにgoodな出来ではないかと思っているのですが…。
1998-06-01
INIファイルからの設定を正しく読み込めないバグ
手動で最適化を行っていた際に、配列の取り扱いを間違えてしまい、フォントの読み込みで一つずれてしまっていた。
1998-06-09
Windows100%(晋遊舎刊)から掲載依頼
どんな雑誌か知らない(^^;)。でも、承諾メールを出す(^^;;)。
でもやっぱり気になったので探してみたところ隔月刊のようで、本屋に無い(^^;)。
で、最近見つけたのですが、なんかこれって
あだると
な感じがしていやぁん(^^;)。
1998-06-10
Version 0.08として正式公開
この時のファイルサイズ20.5KB。
1998-06-12
『わくわくWIN道(仮)』(発行(株)祥伝社)から掲載依頼
なんだか判らないけど、許可。
1998-06-14
ちまちまとコード削減にいそしむ
歴代の記録から歴代のアレと歴代のソレを表示するのですが、プログラム中に「歴代のアレ」「歴代のソレ」と2つの文字列を抱えているのがムダに思えるので一つにまとめる。
"ア"と"ソ"しか違わないのだし。文字コード上は
というわけで1バイトしか違わない。にも関わらず20バイト確保しているのはどうか。
つーわけで、こんな風にしてしまう。
static char AreTitle[10]="歴代のアレ";
AreTitle[7]=nAre ? 0x5c : 0x41;
1998-06-18
宝島社「遊ぶwindows」編集部からメールが届く
またかいって感じだが、最近やたら多いような気がするのはなぜ?
なんか急に多くなったような気がするのだが。
しかも続けて
あだると
だし。
そう言えばベクターにまだVer0.08を登録していないのだが、こういう返信に手間取っているせいもあったりする(ということになっている)。
さて、私は「〜させていただく」という表現がキライである。「する」の謙譲語は「いたす」であって、「させる」でも「いただく」でも無いからだ。
というわけで、この手の返信でも「許可いたします」というように返信していたのだが、どうもこれはこれで
なんかエラそう
に見えてきたのだ。
というわけで、どう返事をするのがいいだろうか、というのを悩みつつFPROGでRTCしていたのだが…。
案としては以下の通り。
- どうぞご自由に・・・
- 貴誌への掲載要求を承諾致しました
- 好きにしていいよ・・・
- 好きにして〜♪
- よきにはからへ
- 200 OK
この中で「よきにはからへ」がFPROGのRTCで絶賛でしたので、subjectに採用してしまいました(^^;)。
ごめんなさい、他意は無いんです(^^;)>宝島社
ちなみに、BRAIN.EXEも収録していただきました。
1998-06-21
ベクターから見本誌が届く
本屋で見たらやたらデカいし、立ち読みする気力も起きないサイズでしたので届いてから見ようと思っていたら届いてました。
しかし、デカイ(^^;)。
1998-06-25
ベクターにVer0.08を登録
登録フォーマットの作成に手間取っていたのでいままで遅れていたとか(^^;)。
バグだっ!
リソースリークを起こすバグを発見。
ウインドウデバイスコンテキストと、背景色用のブラシをリリースしていませんでした(^^;)。
というわけで、修正。
環境に優しくキャッチ&リリース。
1998-06-26
Ver0.08を再度登録
FWINAC FGALAP ベクターに再度登録。
1998-06-28
TECH Winから掲載依頼
おお、2度目だぁ〜\(^^)/。
読者から反応があったのはこの雑誌くらいな物です。読者の数が桁違いなのでしょうか?
といっても1通しかありませんでしたが。0か1かというのはかなり大きいです。
ちなみに、なぜか知りませんがTECH Winでは1998年7月号から「フリーウエア」、じゃなかった、「フリーウェア」しか掲載しないことになったそうです。IE4.0みたいな「OSのいちぶ」もフリーウェアなんでしょうか?
しかし、MicrosoftもIEをMSブランドで出さずに、別会社作ってそっちブランドで配布してしまう、というのは考えなかったのでしょうか。IEってどう考えても他社ブラウザメーカーの利益を減少させているだけでMicrosoftの利益にはなっていないと思うのですが。相対的には利益、という考え方なのでしょうか。
あと、無料にするからマズいわけでMS-IME97みたいに3,000円くらいで販売していればここまで騒ぎが大きくなることはなかったかも。MS-IME97って今だとWindows 95のパッケージを購入すると一緒になって付いてきますがこちらは誰も訴えないというのもおかしい。ジャストシステムとかバックス、AIソフト…他に仮名漢字変換を開発しているところはありましたっけ、NEC?とにかく、他のメーカーは何をしているのでしょう。訴えなくても勝てる、という見通しなのでしょうか。
はっきりいって、アレだけ充分に実用的な仮名漢字変換が添付されてしまうとよほど強い動機が無い限り仮名漢字変換を買い替えて使おうなんて考えるわけがありません。DOSの頃だとコンベンショナルメモリの消費量が少ない仮名漢字変換を、とか、割と明確な判断基準が個人にあったりしたわけですが(そうしないと使いたいアプリが動かない)もはや、世界は革命されてしまったのです。
ちなみに、私の場合変換効率よりも速度とディスクスペースを優先します。下手にいろいろ考えて変換してくれるより、考えずに変換してくれる方が動作を想像しやすいので、誤変換が有りそうな時には誤変換しないような入力をして回避しているので、変換効率が上がろうが下がろうがあまり気になりません。それよりも変に気を利かせて文脈依存の変換をされるとこちらの意図とは違った変換結果になるのですんごく困ります。
で、書きたかったのはこういうことじゃなくって、TECH Winはなんでフリーソフト…じゃない、フリーウェアのみにしたのか。なにかトラブルがあったのでしょうか。パスコード解除してしまったままCD-ROMに焼いてしまったとか。とにかく、理由が書かれていなかったので妄想するしかありません。あまり妄想すると都市伝説となってとんでもない理由でシェアウエア、違う、シェアウェアの掲載をやめてしまったということになってしまうのではないかと他人事ながら心配です。
いままで掲載してきたシェアウェアのレジスト料の請求が一気に来たとか。
そういうことを想像する前に承諾メール書けって? そりゃそうだ。
ちなみに、「通常、このメールより約2ヶ月先の発売の号になります」という一文があったのですが、その後音沙汰がない。
ここにアップロード
NIFTY SERVEにアップロードしたくせにここにアップロードしていなかったという。
1998-06-30
TECH Winに収録許可メール
なんでこんなに遅くなるんだか(^^;)。
1998-07-14
札幌ぱふぇえオフ
快晴で、やたら暑かった(東京より暑かったらしい)のですが-50度の部屋に入ったりしてやたら寒かったりしました。
この時の模様はあっちに書いてあるのでよろしく。
1998-07-15
遊ぶWindowsから収録依頼メール・再び
今回もBRAIN.EXEとセットでした。
そそくさと返信する。
1998-07-17
Windows100%掲載誌襲来
1998-07-19
わくわくWIN道 付録CD-ROM襲来
CD-ROMのみです。掲載依頼のメールにも、「付録CD-ROM」とありましたのでコレには異存は無いのですが、このCD-ROM単体ではナニがなんだか解らない、と言う状態でして、おもわず本誌を購入してしまいました。
これが作戦かっ?
1998-08-09
やっとランキングに応募が…
苦節x年、やっと…。というのは置いといて。
来たのは良いのですが、集計用のプログラムを作っていなかったので、手動でナニする(^^;)。
MIMEエンコードで送られてきたので、まずMIMEのデコーダを作製、それでアレファイルを展開し、BKEYを起動して目標を肉眼で確認。手入力にてランキングを作成するという原始的な作戦でした。
1998-08-10
さらにランキングが…
こうなると手で作業できるのもいずれ破綻するのが見えてきますから、アレファイルのデコーダを作ります。
デコーダを作ってから気づいたのですが、実はアレファイルの中には入力ミスもカウントしてあったので、これも表示するようにして…。とか。
アレファイルのデコーダがなぜかうまく動かず、悩んでしまったのですが、コンパイラを変えるとうまく動作してしまったりしてこれまた悩んでしまう原因になっています。
ついでにHTMLのテーブル形式でファイルを作製するようにして、まあ、あんな感じになりました。
またいじるかも。
1998-08-17
アレが…
不具合報告をいただいたのでちょっち改良していたものを送付して、それで様子を見ていただく。
1998-08-18
アレが… つぅ♪
特に不具合が無いようなので安心する。というわけでこっちにリプレースするため、各部に手を入れだす。
あと、アレファイルを送っていただくと結構ファイルが大きくなるので小さくできるように考えてみる。
要は圧縮しようとしているわけですが…。
1998-08-19
アレが… すりぃ♪
もともと圧縮していなかったものを圧縮・展開するようにしたら結構コケまくるのでなかなか。
以前はデータを改竄されても偶然コケなかったのですが、今回はかなり貧弱と言うか、エラー対策をしないと簡単にコケてしまうことが判り手間取る。
こういうコードを追加したため、さらにサイズ削減に勤しんでみたりする。アセンブラにしろという声が少し聞こえてきた。
続続遊ぶWindowsから収録依頼メール
今回もBRAIN.EXEとセットでした。
そそくさと返信する。
ただし、この時まだ前回の掲載誌が届いていなかったので何がどうなっていたのかよくわからない。
1998-08-20
アレが… ふぉー♪
大体動作するようになった。手元の環境では安定動作している。懸念していたサイズも変わらず何よりである。コンパイラオプションをちょっと詰めて設定したところ、さらに小さくなり20KBになった。こちらでリリースすることを考える。
1998-08-24
Version 0.09 第一次リリース
手元で動作確認後、再度コンパイルして圧縮、NIFTY SERVEとここににアップロード。
1998-08-25
届かない
宝島社では送付したらしいのですがなぜかこちらにはまだ届いていない。
実は、自宅に届けてもらっているわけではないので話がややこしいのかもしれない(^^;)。
こっちに届けてもらっても普段いないから訳がわからなくなるので。
『お役立ち Windowsソフト(仮)』
上記の編集者から掲載依頼。
大抵Internet経由でくるんですがNIFTY SERVE内のメールだったのでちょっち感激。
ただ、「ハンドルネーム」という表現が気になる。
1998-08-27
バグ
バグを発見したとの報告があり、調査。なんでも練習メニューから選択するととんでもないものを選択してしまうとか。
手元のバイナリは正しく動作する。
むぅ。
再コンパイルしてみる。正しく動作する。
アップロードしたファイルを展開し、動作させてみる。誤動作。
むぅ〜。
さらに悩んでみるとどうやらリンクしている一部のファイルが古かったことが原因。コレって開発中でもやらかしたのでそのファイル消して作業していたのですが…。
1998-08-28
Version 0.09 再公開
ディスク 飛ぶ
デフラグかけて寝る。朝起きたら止まっていた。嫌な予感がしたので再起動。起動時にスキャンディスクが起動して…8MBもの破損ファイルの出来上がり。
NIFTY SERVEのログとか、そのへんがぱぁ。
この日作った、Version 0.09用のアレファイルビューアもソースごとgood bye.
ランキング生成用のディレクトリがまるごとふっ飛んでいて、復旧させるのに手間取りました。
1998-10-10
ソフトバンクから掲載依頼
今度出る「PC Life」という雑誌に掲載したい、という話でした。
PC Lifeという名前にはなじみがないかと思いますが
とあったのですが、なんかなじみがあるというか以前にこんな名前の雑誌ありませんでしたっけ。
1998-10-27
ソフトバンクから掲載依頼
DOS/V マガジンに掲載したい、というメール。
なんと、この担当されている方はわざわざこっちのメールアドレスとかホームページのURLなんかを事前に調査されていたようで、〜だが間違い無いかという感じのメールでした。こーいうパターンだと楽かもしれない。
ってメールアドレスが解らないとメール出せませんが。
割と「ホームページなどございましたらこちらに書いてください」みたいなメールが多いものですからちょっち驚きでした。
ただ、惜しかったのがURLとしてわなのページ、http://member.nifty.ne.jp/rxa01732/を書いてあったことです。いやあ実に惜しい。
ちなみに[DOS/Vマガジンのページ]にも何か載るらしい。
12月発売なんで、なんか載る頃にはすっかり忘れていそう(^^;)。
1998-11-03
宝島社から掲載依頼
『DOS/V USER』誌に掲載される模様。
宝島社ってこの手の雑誌いくつ出してるんだ(^^;)?
1998-11-04
ベクターからメール
例のバカでかいやつの見本誌の送付先の確認だった。
1998-11-06
宝島社からメール
『使えるオンラインソフト1000 Vol.5』(12月16日発売予定)への掲載依頼でした。
1998-12-14
ベクターのアレ
届いていました。
まだ受け取ってませんが。
1998-12-18
メール
いきなりWordファイルが届いた。Wordpadでは見えない(^^;)。
多分掲載依頼かなんかだと思うんだけど…。
あとでなんとかして見てみると「すぐできる『ブラインドタッチ』」というムックらしいです。
ソフマップワールドハイパーから収録依頼
頼む、札幌にもソフマップ…(^^;)。
ちなみに以前使っていたLibretto 60はソフマップ新宿店で買ったものです。いまだにドット落ちがありません。
このへん、LibrettoのHDDクラッシュとともに記録が失われています。
1999-07-14
雑誌掲載依頼
ASAHIパソコンの10月15日号に掲載したいということ。
当然Okなのでそのようにメールを出す。
どういう経緯でBKEYを作ったのかという話もあったので簡単に説明するとともにこのページも紹介した。
1999-07
雑誌掲載
宝島社発行、宝島MOOK「ウルトラオンラインソフトDX」にBKEYが収録されました。
1999-08-01
Libretto 逝く
今まで開発に多大な貢献をしてくれたLibretto SS 1000。
どうもHDDがコケたらしく起動時にすさまじい異音を発するようになってしまいました。
めちゃくちゃ恐いので封印。
1999-08-04
FIVA購入
Librettoがなくなったために何もできなくなったので、PCを購入。
ちょっちキーボードに難があるけどまあ、使える。
1999-08-15
β版開発開始
そろそろバージョンアップでも…というわけでプログラムに手を入れ始める。
個人的に制限時間モードというか、文字がデタラメに出てくるモードが欲しかったので取り合えず追加。
制限時間はとりあえず商工会議所のキータッチ2000というテストを意識していた。
1999-08-23
時間制限モードをタイムアタックモードと呼称。制限時間を自由に設定できるようにした。
制限時間入力ダイアログは、もう一つの時間制限モードのものを使いまわす。このダイアログが手抜きで、値を入力するといきなりタイマーを起動するは制限時間はセットするはで手を抜き過ぎ。
とりあえず内部で何を入力しているのかというモードを保持してごまかす。
ここは処理速度はあまり関係ないので後で書き直すことにする。
1999-08-25
タイムアタックモードのメニューが「TimeAttack」だったのを「タイムアタック」に変更。
とりあえず本業が忙しくなってきたのでここで中断。
1999-08-27
ASAHIパソコンの10月15日号に掲載したいという話が流れた。
ショックぅ〜
1999-09-07
ラップタイム
NIFTY SERVEの会議室で、コマンド入力速度をBKEYで計測したという話がでた。
どうせなら各文字のラップタイムも判った方がおもしろいのではないかと思ったので会議室で直接訊いてみたところ別の方が「それは素敵」とおっしゃるので付けることを決意。
しかしまだ忙しい。
1999-09-08
テックウィン別冊への収録依頼
どうやら以前にテックウインがフリーソフトしか収録しないような話があったのは、こちらの別冊のことだったらしい。
とにもかくにも承諾するメールを書く。10月18日発売とのこと。
1999-09-13
ラップタイム その後
突貫工事で、とりあえずA to Zの直前の結果のみグラフ表示するようにした。
問題は他の記録を表示する方法。
何らかの形でファイルに記録しない限りは無理。時間は4バイト整数で管理しているので26文字分*4バイトで1つあたり100バイト、5つで500バイトと、現状のアレが2倍から3倍くらいに脹れ上がってしまう。
圧縮する手段を考えなくては。
1999-09-14
ラップタイム その後
とりあえず
- ラップタイムもファイルに落としたほうがいいか
- グラフの表示はどうか
という諸問題について訊いてみた。
するとそこまでの必要性は無いが、その場で数字を見れば傾向が解るしボトルネックが解ればOk、という話。
設定ファイルには最大で256文字設定できるので各文字のラップタイムを表示しようとすると画面に収まらないのではないか、では小さいフォントで表示すれば…読めないって。
さて困った。
1999-09-20
ラップタイム その後
256文字分も表示してしまったら読めないのではないかという不安がどうしても止まらなかったのでさらに会議室にて質問。すると、あっさりと「なんで256文字?」と言うようなことを書かれた。
そういえば255文字だったかもしれない。
1999-09-22
とりあえず、複数の記録を保持することは決定。
問題はどうやって他の順位に切り替えるか、というところ。
1を押したら1位の記録、2を押したら2位の記録、というのを思い付いたけどこれはきっと使い方を判ってくれない。
個人的にはF2を押したら2位の記録、F3を押したら3位の記録というのはどうだろう、と思っている。ちなみにF1を押すとヘルプが表示される :-)。
チャットでは「ボタンを付けてはどうか」という案があったが、キーボード練習ソフトがポインティングデバイスで操作可能というのはイマイチ気に入らない。
現実的にはカーソルキーの上下とかPage Up/Downという感じの切り替わりが連想できそうなキーに割り当てるのがいいと思う。
ただ、それをどこかでナビゲーションしないと誰も判ってくれない。
画面下部に「カーソルキーで切り替え」とか表示してしまえば解決するがその分グラフの表示範囲が狭くなるのが難点。
どちらにしろ複数のグラフを表示するようにしたら、今表示しているのはなんのグラフか解らなくなるのでタイトル表示領域は必須かもしれない。
ウインドウを小さくされるとなかなか大変な気がする。
1999-09-23
以前、ランキングデータを圧縮してからファイルに保存するように変更した。
で、このランキングデータの後ろにグラフのデータもくっつけたところ、見事に誤動作。
圧縮を復元するためにごちゃごちゃいじると、後ろにあるグラフのデータを破壊してしまう。
問題は、どこからどこまでがランキングのデータなのかわからない、というところにある。元のサイズは記録していないので復元して見ないことには解らないのだ。
もともとはファイル全体を処理すればいいというノリだったわけで、しかも、復元したところでデータの区切りがあるわけでもないので大ピンチ。
今までのデータと互換性を持たせるのは無理かもしれない。
2000-04-09
神山中学校の教材に
なんと、中学校の情報の授業で使いたいとのこと。
喜んで許可する。
ついでに自慢したいのでWWWで自慢してもいいかと質問してみたところ快諾いただく。
ありがたく自慢させていただく。
2000-04-21
ウインドウズ・パワー5月号にてBKEYが収録される。と言うわけで見本誌を頂いた。
って収録されているのはβ版やんけ。おいおい。
読むなら早くしろ。でなければ帰れっ!
[トップへ]
[BKEYについて]
[ランキング]
[入手方法]
[開発日記]
[闇の書]
メールはこちらCopyrigiht © 1998 びい(@nifty ID:RXA01732)