日々のつぶやき(99/08/1〜)

1999/08/19〜31

嫌なことは忘れようと、会社から帰ってからはひたすらギターフリークスというゲームにのめり込む。日記は全然更新できなかった。(^_^;ごめん。

1999/08/18

相変わらずMac。チュートリアルプログラムを読んでいると、ダイアログでOK/Cancelボタンをユーザーが押したら、アプリケーション側でObeyCommand()で、そのコマンドを受けて、処理しなきゃいけないらしい。何のことか分かんないでしょう。ええ、私もよく分かりません。(^_^;

多分分かりやすく言えば、MFCだと、OKボタンを押されたら、ダイアログクラスのOnOK()を上書きすればいい。Modallessダイアログだとちょっと面倒だけど、Modalダイアログだったら、CDialog::DoModal()を呼び出せば、リソースの解放やら何やら全部面倒を見てくれる。ダイアログクラスのほうで、publicなメンバー変数(もしくはアクセス関数)を使えば楽々、ダイアログの操作の結果が分かる。で、Macは違うんだな。(^_^;

PowerPlantを使ったMacのダイアログの場合、OKボタンを押されたらそのメッセージはダイアログクラスに行くんじゃなくて、いきなりアプリケーションクラスに行ってしまう。で、アプリケーションクラスでこいつはどのダイアログに対してのOKボタンなんだ?ということをわざわざ調べてから分岐しないといけないらしい。ああ面倒臭いったらありゃしない。

1999/08/13〜16

疲れが溜まっていたのか、単なる夏ばてなのか、ひたすら寝ていた。少し起きている間は「PS版ギターフリークス」の練習。ああ、こんなことやっていていいんか?(^_^;

1999/08/12(Thu)

新人配属。私の部署にはS''さんとIさんが配属になった。一人だけだと思っていたので、ちょっと意外。うれしい誤算というか。後は配属された新人をびしびし鍛えて…と思っていたのだが、前日の打ち上げの酒が全然抜けなくて全然仕事にならず。(^_^;;;;

一応研修のリーダーということで、研修で使った参考書などがこっちに回ってきた。私には役に立たない本(例えば、Effective C++。この本は役には立つけど、自宅と会社で2冊もいる本じゃないよな。)もあったので、さっさと新人たちに「これ、読んどきな」と渡してしまう。

1999/08/11(Wed)

今年度新入社員達の研修の最終発表会。4月に箸にも棒にも…という連中がここまで成長してくれたんだと思うと感慨深いものがある。よくがんばったな、みんな。夜は研修の打ち上げ。

1999/08/10(Tue)

朝8:30受付のCarbonセミナー。開始が9:00。勘弁してくれよ〜。

このセミナーではっきり分かったのがAppleが「APIセットを変えるから覚悟しておいてくんな」という仁義を切ったということ。Windows3.1からWindows95に移行する時にはほとんどすべてのAPIで互換ぽかったのでかなり助かったのだが、今回ははっきりと20%程度のAPIについてはサポートしないといっている。控え室でMacの専門家達が「作法を守ってプログラムしていれば大丈夫だろ。」とか言っていたけど、SCSI周りが結構変更になるらしいから、スキャナ関連のアプリケーションとしては結構頭が痛い。このジャンプに数少ないMacデベロッパー達は耐えられるんだろうか?WindowPtrとGrafPort周りのキャストが全部利かなくなるって相当重大な変更のような気がするんだけど。

午後は東京の営業所に顔を出してから秋葉原巡り。秋葉原も久しぶりなのでついつい色々なものを買い込んでしまう。(^_^;で、またもや足がつりそうになったのでリタイヤして、松本行きの電車に乗りこんだ。

1999/08/09(Mon)

いつもの通り、重役出勤の11時出社なんだけど、今日は30分ほどかかる本社の某H工場(Hな工場ではない(^_^;)に来年の新入社員に対する入社前講習に関する会議があって、15:00からつぶれてしまう。電車の都合で、14:00頃に出ていったのだが(このへんが田舎のつらいところ)、会議が終る予定の17:00頃から仕事を始めたとしても、明日はMacOS X (コードネーム Carbon) に関する会議が東京であるので、その会議に出席するために前日から東京で宿泊しなければならないから、集中して仕事が出来ない。半日の会議のために1日潰してしまうとは…。

会議自体も発言しているのが議長と私と同僚のKさんがほとんど。他の人達って、発言してない。会議って根回し済みまくりのしゃんしゃん会議じゃなければ、徹底的に相手の意見を叩きまくり、こっちの意見も叩かれまくる、ある意味バトルなんだと思っている私にとってはこんな会議だったらやる必要ないよなぁ、と思わせるものだった。Kさんも会議が終った後、うんざりしていたようだ。思いっきり脱力したのは、前回の会議のときに「これを自戒の会議までの各人の宿題にしておきます。」と言われたので、忙しいくて、最善をつくしたとはとても言えないけれど、精一杯の努力をした。宿題というのは「テキストを探すこと、達成目標としてのレポート問題を作ってくること」だった。で、こっちはそれを真に受けて、休日・昼休みに本屋を周り、「ひょっとするといい本かも知れない」と思ったC言語の入門書は片っ端から買いまくり、必死こいて問題を考えて会議に望んだんだが、そんな準備をしていたのは私とKさんだけ。どっと力が抜けた。

明日の東京でのセミナーに向けて夕方に東京に向かう。東京の夜は暑かった。ホテルがサービスで100mlの缶ピールを冷蔵庫に用意してくれていた。でもこの程度じゃ焼け石に水。(^_^;

夜、足がつって、風呂に入るのにすごく苦労する。ベッドに横になったはいいが、足がつりそうになってベッドから降りられない。だましだまし這うようにして部屋の中を進み、ぬるま湯にしばらく使っていたら何とか直った。

1999/08/05(Thu)

海外の大学では、一定期間どこかの会社に半年ほど実習として働くという単位があるらしい。で、うちの会社では毎年数人そういう学生を実習生として受け入れている。で、そういった実習生の一人、M君の成果発表会があった。日本に来て、日本語の研修も行っているので、それを含めて日本語での発表となる。発表の内容は興味深かったのだが、正直言って日本語はまだまだかな。(^_^;内容自体はかなり興味深い内容だっただけに、日本語にできなくて相当詰まってしまった所があって、プレゼンテーション全体としてはイマイチだったような気がするのが残念。

相変わらずMacは苦戦中。明日デモをやんなきゃいけないというこの時期になって、まだエンジンがまともに動かない。動作条件を極端に制限して認識エンジンの動作を見てみるんだけど、認識エンジンからはめちゃめちゃな文字コードしか出てこない。(x_x)がっかりして、めちゃくちゃな認識エンジンの出力結果を呆然として眺めていた。で、あきらめきれずに「この結果ってどうやったらつじつまがあうんだろう?」と関数電卓を叩いていて、ふと気がついた。「あれ?この文字コードの中にEndian違いのやつがあるじゃん?」

で、認識エンジンとファイルアクセスモジュールの関係を徹底的に見直してみたら、またまた出ました。エンディアンの問題。(おいおい)(^_^;例によって、


_lread(hFile, somewhere, somelengtht);

とやった後に

some_stcuct_ptr = (SOME_STRUCT_PTR)somewhere;

とダイレクトにキャストしている。(x_x;ちなみに、_lread()を発行している場所と、実際にキャストしてデータを利用している場所とは地球とイスカンダルくらい離れていたりする。いかにも倍とデータを読んでいるように見えて、実は構造体を読んでいたという、そんなもん分かるか。(^_^;

仕方ないので、読み出し部分は書き直しを始めた。今からこんなだい問題が分かったんじゃ、明日のデモは殆ど絶望的。(x_x;書き直したら、結構きれいになったけど、キレイになるよりはとりあえず、ウソでもいいから動いてくれるほうがうれしいんだけどなぁ。(_ _;

1999/08/04(Wed)

金曜日にスケジュールを確定させて、ちょっとしたデモをやる予定なので必死になってMac版のコーディング作業を行う。昨日までで何とか画像を読み込んで、内部形式に変換し、スクロール付きで表示するところまで出来たので、いよいよ認識エンジンを動かして認識させてみることになった。今まででも認識エンジンは少しは動かして見ていたんだけど、暴走しないで返ってくる程度くらいしか動作確認をしていないので、ある程度結果が出てくるまで確認をするのは今日が最初。まあ暴走していないみたいだし、Windowsではちゃんと動いているんだし、コンパイルもリンクも無事終ったから、動いて当たり前だのクラッカーだと思ったのだが、これがまたどつぼの始まりなのであった。(^_^;

まず、一発め。Windows版では、認識する四角形の領域を表すのに、アプリケーション側ではRECT構造体を使い、認識エンジンでは次のような構造体を使っていた。


typedef struct tagREGION {

    WORD wxStart, wxEnd, wyStart, wyEnd;

} REGION;

で、RECTからREGIONへのこんな変換関数を書いた。

inline void ToRegion(RECT rect) {

	REGION Region = { rect.left, left.top, left.right, rect.bottom };

	return Region;

}

見比べてみれば分かるけど、座標の順番が違っているので、正解は

	REGION Region = { rect.left, left.right, left.top, rect.bottom };

まさか2行の関数で間違うとは思ってみなかったので、認識エンジンのかなり深いところまで読み進めていってやっと気がついた次第。認識エンジン自体は私が書いたものじゃないし、内部構造の予備知識も全然なかったので結構無駄に時間がかかってしまった。(;_;

で、ハマリ第2段。認識エンジンモジュールはDLLになっていて、アプリケーションから呼び出すようになっている。で、認識エンジンに「どのへんに文字がありそうか教えてちょ」とお願いしてみた。で、ちゃんと戻ってくるしリターン値も正常終了を示しているんだけれど、認識エンジンが戻してきたパラメータのどこを見ても「この辺に文字がありそう」という情報がない。で、色々調べてみたんだけれどやっぱりどこにもそれらしき情報がない。(?_? いよいよ分からなくなって認識エンジンの担当者に聞いてみたら、「ああ、これはSendMessage使って情報を返しているんです。」との返事。で、よくよく調べてみたら、

DLLの終了した辺りで、データを受け取っているようにみえなかったから、「不思議だな〜」とは思っていたのだが、戻ってくる関数だったら呼び出し元に結果を返してくれぃ。(x_x; おまけにパケットみたいにひとまとまりにして送っている訳じゃなくて、一番大きいのがRECT。後の属性データはぱらぱらとWORD単位で送られてくるもんだから、データの流れを追っかけるのが死ぬほど大変だった。(x_x もっとも結局はデータの流れを追うのをあきらめちゃったけど。(^_^;

当然こんなのMacでどうやって移植していいのかなんて分からないので、このI/Fは廃止して、ちゃんと呼び出し元に結果が戻るようにエンジンを変えてしまった。今まで結構苦労してなんとかWindowsとMacでせめて見かけだけでも同じようなソースになるように努力していたんだけど、この部分を見てその努力を破棄した。(^_^;まあ、後はエンジンの担当者が何とかしてくれるんだろう。(←投げやりモード)

さんざん苦労して何とか「ここの部分を認識して」とお願いするところまで行った。ところがお願いしてみると、戻ってくるのはめちゃめちゃな文字。これは辞書アクセス部分が変なんだろうな。賭けてもいいけど、認識エンジンは10万行近くあるし、辞書アクセス部はそれをトレースしてみないと変な部分が分からないから、金曜日までなんて不可能だぞ。(^_^;;;

休みをとって海外旅行に行く人達をうらやましがっている人、もとい怪獣がいるらしい。締め切りのプレッシャーがないだけ、休めるだけいいじゃん。(^_^;ちょっとでいいから手伝ってくれないかなぁ。(;_;どう手伝えばいいかというと、いやね、私の上司にちょっともうちょっと締め切りが何とかならないかなぁという感じで脅しを…(以下自粛)。

1999/08/02(Mon)

風邪ひいた。気が変になりそうにぬくい九州とかとは違って、私の済んでいる松本市は比較的涼しい…はず、なんだが、それでもやっぱりクソ暑い。で、そのクソ暑いなか、熱が出て寒くて、ぶるぶる震えながら毛布にくるまって一日中震えていたという…。当然会社はお休み。


1999/7 のぶつぶつ

1999/9 のぶつぶつ

日々のつぶやき 目次

作者(vyama_at_janis_dot_or_dot_jp)への感想・意見など。
spamよけのため、_at_や_dot_は適宜@や.に入れ替えてください。

目次ページ