日々のつぶやき(98/9/1〜)

1998/09/12(Sat)〜15(Tue)

グランツーリスモのサルと化して、ひたすらひたすらやりまくる。でもまだ国際A級ライセンスが取れない。(T_T どうやらこの期間中に台風がやってきたらしいが、ほとんど外に出なかったので、あまり関係がなかった。

1998/09/11(Fri)

ドキュメントをちまちま読んで、BIFF7レベル(Excel95)のフォーマットと、BIFF8(Excel97)レベルでのフォーマットのつじつまあわせをする作業に追われる。まあ、よくもこうまで仕様を変えてくれるもんだと感心する。XFレコードなんてほとんど互換性がないじゃん。で、Excel95形式のファイルのバージョンレコードだけをちょっといじってExcelに食わせてみたら、Excelが死んでしまう。以外にやわにできているなぁ。まあ、同じプログランマーとして分からないでもないけれど。(^_^;

それらのつじつま合わせをしているうちに、今日は4:00でゲームオーバー。いつもはこんなに早く退社することなんてないのだが、今日は同期入社のN氏が酒田に送り出されることになったので(^_^;、同期の仲間との宴会があったのだ。会場が私の会社からかなり離れているので、それくらいの時刻に会社を出ないと間に合わない。

宴会会場には私が一番乗りだったが、その後久しく会っていない顔が、来るは来るは。(^_^気のおけない仲間である。色々な話をしてすごく楽しめた。しかし、あの料理の量は多すぎて、全然食べきれなかったぞ。(^_^;

地方にいると、結構電車の時間の制約があって、2次会で盛り上がっている最中に途中退場。まあ、仕方がないか。帰りの電車ではK氏の趣味の天体観測と、PalmPilotの話題で盛り上がった。

1998/09/10(Thu)

ちょっと日記を読み直してみたら、xlsファイルの作業ってもう半月近く作業しているのね。xlsファイルのフォーマットに関するドキュメントを探し当てた時は、「これは長くても3〜4日あればプロトタイプが出来て、遅くても2週間でモジュールが完成するだろうな」なんて考えていたことを思い出す。ドキュメントが不完全だということを差し引いても、予定の倍以上かかっても未だに完成させられないとは…。とほほ。MSDNのドキュメントの範囲内で何とかしようとして、かえって工数を増やしてしまったかもしれない。でも、あの意味不明のバイナリー列、どうにかならんかなぁ。

.xlsファイルでセルの罫線設定をする部分のコーディングを行う。セルの罫線情報はブックストリームのXFレコードにある。あらかじめ仕様上想定されるXFレコードのパターンを全部ブックストリームに埋めこんでしまうのと、全部のセルデータの罫線パターンを調べて、最小限のXFレコードのパターンを出力する2つの方法がある。問題はどっちがコーディングが楽か?ということだ。直感的には前者は単純作業なプログラムになるが、あらかじめ用意しておくデータ量が多くなる。後者のほうはちょっと複雑なプログラムになりそうだが、あらかじめ用意しておくデータ量はほとんど0になる。特に後者は、既に制作済みのXFレコードパターンかどうかを調べるのに、かなりコストがかかりそうなのが気にかかる。あらかじめ、全部のパターンを用意しておく方式だと、あの手この手を使えばパターン検索についてかなり有利になるな、などと考えていた。

どっちがいいかと考えながら、Communicatorを4.06にバージョンアップしている時に上司のNさんから「ちょっとお前とミーティングをしたい」と声をかけられる。どっちかといえばあんまりうれしくない情報を伝えるという雰囲気。一体何を言いたいんだろうか?

「お前、会社で遊びすぎ。」うんうん、これは思いっきり心当たりがあるぞ。(^_^;「部署が変わったのを機会に心を入れ換えて仕事をするかと思ったら、部署が変わっても全然仕事ぶりが変わらん。そんな奴はこの不景気に不必要だからお前、クビ!明日から会社に来なくていいからね。」ガ〜ン。明日職業安定所に行かないと…。あれ?職業安定所ってどこにあったけ?…

などという光景を思い浮かべながら、ミーティングに望む。最初に現在抱えている、もしくは予定しているタスクについての簡単なブリーフィングがあった。どうやらクビにするって話じゃないらしい(^_^;が、それにしてもタイトなスケジュールだよなぁ。特に厳しいのが製品がWindows版だけじゃなくてMac版も絡んでいること。まあ、このスケジュールをまともにこなすくらいだったら、クビになった方がよっぽどマシというスケジュールだ。まあ私はWindowsしか分からないから、Macは関係ないし、Windows版のスケジュールだけを見れば、頑張れば致命傷になるほど遅れなくても済みそうな感じがする。Mac版をやる奴は地獄を見るだろうけど、私には関係ないな、と思って結構気楽な気分で聞いていた。

Nさん「こんな状況で、特にMacについては大変なんだよ。」
vyama「ええ、そうですね。」
Nさん「で、Macについて詳しいSが来ることになっているんだけど」
vyama「(これで地獄を見るのはSさんに決まりだな)」
Nさん「Sだけじゃ、これだけの量を出来ないだろうから」
vyama「(チーム全員でWin版をやって、その移植が一人じゃ無理だよな)」
Nさん「お前にはMac版も関ってもらうことにしたから」
vyama「え゛っ?」
学生時代に、マイナー機種路線をひた走ってきて、周囲に同じ環境で情報交換できるような仲間がいなくて、プログラマーとして職についた時に、「今後、マイナー機種を相手にするのは止めよう」と誓った(そのくせX68Kなどを後生大事に持っていたりする)のに、またマイナー機種部隊にアサインされるとは。(T_T って、Mac信者から殺されそうなことを言っているなぁ。(^_^;

とりあえず、移行期間として与えられた1.5ヶ月の間(といっても移行作業--というか勉強--だけをしている訳じゃない)、死ぬ気になってMacのI/Fを勉強しなくてはいけない。当面の目標はMacで「Hello World!」を出力できるプログラムを組むことだな。(^_^;大体Macなんて全然いじったことがないのにぃ。とりあえずガンバルモードになってやるしかないか…。ま、これを機会にMacの世界に足を踏み入れるのもいいのだが、いかんせん、Macって私の中ではマイナー機種扱いで(^_^;、魅力に欠けるんだよなぁ。とりあえず、自宅にiMacでも買って、「Macって最高!」くらいに叫べるくらいのユーザにならんといけないと思うのだが…。誰かiMac恵んでくれないかなぁ。(^_^;

あと、もう1つ。私とマイナー機種に関しては、1つのジンクスがあって、「私が関係したマイナー機種は、私が関係してから5年以上シリーズを続けたことがない。」この法則は今まで3機種についてあてはまっているが、Macについてはどうだろうか?(^_^;

ミーティングが終ってから、気を取り直して.xlsファイルの出力プログラムに取り掛かる。未来に待ち受けている不幸な(?)事を忘れるにはとりあえず当面の仕事に集中するのが手っ取り早い。(^_^;

セルが持っている罫線のパターンは、線の種類が7種類、上下左右の4方向に設定できるから、7 x 4 = 28種類のパターンに分けられる。これだったら、レコードのパターンをあらかじめ全部埋めこんでいっても大したことはないなと思って、さてコーディングするぞとキーボードに向かってから、あれ?必要なパターンって6^4 = 1296通りじゃん。(^_^;何を勘違いしていたんだろう?こんなに大量のパターンを必要もないのにいちいち登録するなんて馬鹿げている。早速方針変更。早いうちに気がついてよかった。(^_^;

事前の予測では、必要最小限のXFレコードしか出力しない方が大変だと思っていたが、やってみると以外に単純にできた。まあ、もちろん速度的なことは度外視してやっているから簡単になるのだが、速度的に問題になるようだったら、その時にちゃんとプロファイルをとってから検討しても遅くはない。まあ、速度を問題にするんだったら、File I/Oが一番時間を食っているのは確かなので、そんな所の最適化をやりはじめたら時間がいくらあっても足りないし。まあ、パターンの検索に時間がかかっているなら、線形検索を止めて、Hashサーチにでもするだろうけど。

コーディング自体はあまりにあっけなさすぎて、こんなもんで本当に動くんだろうか?と疑心暗鬼に陥ったが、テストデータを通してみると、ちゃんと動作しているようだったし、Excelで読ませた時にもちゃんと罫線が引かれているようで一安心。あとやるとしたら、セル内の文字の右/左/中央揃えの設定だけど、こいつは設定できなくても構わないだろう。やったぁ、これで完成じゃぁ!v(^_^

ご機嫌状態で、作成したExcelファイルをいじってみるが、取り立てて目立った不具合はない。で、そうすると変な所に目が行ってしまうもので、私の書いたプログラムで出力した.xlsファイルをExcel97で開いて、編集してセーブすると、「この形式は古い形式だから云々」と文句を垂れてくる。これはExcel95形式で出力しているから、仕様といえば仕様なのだが、ちょっと気に入らなかったし、どうせ.xlsファイルの中に埋めこまれているバージョン番号をちょっといじくれば解決する問題だろうと思って、バージョン番号をちょっといじくってみて、Excel97で読み込ませてみた。げげ、今度はExcelがあえなく死んでしまう。(^_^;

何がおかしかったのかな?と思ってBIFF5/7(Excel5/95形式)とBIFF8(Excel97形式)がどこが違うのか調べてみたら、げろげろ、結構違っているじゃん。(^_^;まあ結構違うといっても、基本的な構造は一緒で、BIFF5/7形式のマニュアルが200ページ弱ある中で、BIFF8で変更された所は1割弱だったので、意を決してBIFF8形式でも何とか出力出来るように改造を試みる。まあ、こうやってやらなくてもいい仕事を増やしていく訳だ。我ながら業が深いというか。(^_^;せっかく終ったと喜んだのも束の間、これじゃあ、今週中に終るのも怪しい状況になってきた。(^_^;;

1998/09/09(Wed)

あい、あむ、おんりー、すりーぴー。油断していると脊椎の辺りからばっさり意識を刈り取られるような気がするほどだ。ちゃんと睡眠時間は確保しているつもりなんだけどなぁ。

プロトタイププログラムを、まともにパラメータが受けとれるようにする作業が続く。最下層の関数が要求するようなパラメータをちゃんと上位のプログラムでもハンドリング出来るように作り直すのが作業の中心だ。プロトタイプでは即値で埋めこまれていたデータをパラメータで、置き換えるという単純といえば単純な作業なのだが、一番下っ端をいじると、その上位の関数が更にパラメータを要求せざるをえなくなり、さらに上位の関数も同様に…ってなことで、単純ではあるが、そのパラメータを制御するだけで疲れてしまう。もっともソース自体がヘッダーファイルまで入れても2〜3000行程度なので、制御の大変さも高が知れているが、なんせ今日は意識を刈り取るような悪魔とも戦いつつの作業だったしので(^_^;。

で、何とか主要なパラメータに関しては、最上位の関数から色々制御できるようになった。早速テストデータを作ってみて動作を確かめてみる。と、書いてしまえば、一言で済むのだが、まだパラメータのエラーチェックとかが相当甘いので、テストデータを作るのにも結構一苦労だったのだが、メモリアクセス違反とかの致命的エラーは出なかったし、一応想定した動作をして、Excelで読み込んだ状態もそれなりになっているので、とりあえず一安心。罫線部分の処理が残っているが、これは結構ボリュームがありそうなので、明日以降に処理することにする。大体セルの罫線を処理するのに、なんでBookストリームに属するXFレコードを作成する所から始めないといけないんだ?面倒臭いったらありゃしない。

一応Bookファイルに2つ以上のworksheetが入った時にもそれなりのデータを処理するように書いておいたが、この部分については全く自信ナシ。動けばラッキーって所だけど、まあ、今のプロジェクトで想定される用途としては1つのBookファイルに1つのworksheetがあるってだけだから、特に問題ないだろう。いよいよ困ったらその時に調べることにする。あまり誉められた態度ではないが、オーバースペックのプログラムを書いてもしょうがないし。

とりあえず、Excelファイルは書けるようになったし、XFレコードを処理する所を書いていたらとても今日中には間に合わないと思ったので、少しは何とかなりそうなundocument部分の解析に挑戦してみる。undocumentな部分には、私の個人名や会社名が入っていて、おまけにそれを[ファイル]-[プロパティ]で見ることができるので、そこだけは何とか潰さないといけない。いくつかのファイルでダンプリストを取って見ても、完全にはパターンをつかめなかったのだが、ええい!と度胸一発で適当に設定してみたら、偶然うまくいった。やれやれ。

ダンプリストを取って見て気がついたのだが、Excel97形式のファイルで、プロダクトIDを書き込んでいるような場所を見つける。なんかそれっぽいバイナリー列があって、こんなの書いていいのか?と思った。今のところは、Excel5/95形式で出力しているから、とりあえず関係ないけれど、Excel97形式でも出力しなきゃいけないとなったら、この部分ってどうすればいいんだろうか?(^_^;

サポートのSさんからの差し入れがあった。なんでもうちの会社の某製品のユーザーから届けられた差し入れのおすそ分けだとのこと。09/02分の日記でネタにしたということがばれた時に「パンチだ〜」と吠えていたというので、一瞬びびったが(^_^;、当人はすっかり忘れている様子。あ、別に思い出させなくてもいいですので念のため。>別名「歩く社内広告塔」Sさん

09/04分で書いたダンプリストプログラムを書いた先輩社員からメールが届く。

数字はアドレスとして解釈する。
そうか、仕様だったんですね。でも数字のファイル名でも大丈夫なようなダンプツールを作っちゃった後だったので、ちょっと遅かった。(^_^;

1998/09/08(Tue)

一転して、今日はいい天気。こんな日は一日中ボ〜と露天風呂にでも使ってのんびりしたら気持ちがいいだろうなぁ。

読み込ませる所までは、何とかうまくいったので、プログラムのそこかしこに埋めこまれている即値データーをパラメータ化して受渡しが出来るように、プロトタイプの改造を始める。パラメータといってもExcelファイルの中には、決め打ちでもいいものもあるから、決め打ち出来るパラメータと、変更が可能なパラメータとを切り分け、決め打ち出来るものは適当なシンボルを定義し、本当に変更が必要なパラメータをパラメータ渡しにしていくという作業が続く。ついでに色々決め打ちをしていたおかげで、変な制限をしていた所も書き直しておく。まだ完全には制限が外れていないが、今日は全部やるまで手が回らなかった。1ラインまるまる空白だという場合に、ROWデータをどのように出力するのかも調べていないから、まだまだやることは多い。

ファイルの制限ということで言えば、このロジックだと16000ラインちょっとを超えると、それ以降のラインが出力されない。CONTINUEブロックを作ってあげればワークシートの限界までライン数を広げられることは分かっているのだが、どうせスキャナから読み込む表の限界値が100 x 100 程度の表(これは表認識ルーチンの限界値で、私が作った限界じゃない(^_^;)なのが分かったので、それ以上やってもオーバースペックだろうということで、その点については仕様ということにする。

パラメータ化するのにあたって、面食らったのが、カラムの幅の単位。.xlsの中ではこの単位が1/256キャラクタなんだとドキュメントに書いてある。こんなの、どうやってtwipsとかポイントサイズから計算すればいいのか途方に暮れる。各々のセルのフォントサイズから動的に計算しろってことなんだろうか?他は大体twipsで計っているのに、ここだけ面倒な単位で計っているなぁ…。(x_x;

今日はパラメータ化する作業だけで手一杯で、その作業のデバッグまでには至らず。もっともデバッグする前にパラメータの実体を作んなけりゃいけない。設定できる項目が増えた分、実体を作る作業も大変な訳で、明日はそのパラメータを作る作業だけで終っちゃいそう。あ〜あ。

N社から連絡が届いて、翻訳作業に使えるスタッフの数が足りないので、どこかいい所を紹介してくれないかと泣きが入った。N社が引きずっていた英語版の制定がメチャメチャ遅れてやっと先週制定、これで今週から日本語版の作業を始められる体制になったかな?と思っていた矢先の出来事。いくら単なるローカライズ作業といっても、βまであと1ヶ月ないんだろうけど、大丈夫なんだろうか?N社が遅れると、管理不行き届きとなってこっちにとばっちりが来るので、大いに不安を感じる。

酒田に行く同僚N氏の激励会(=宴会)が上諏訪であるとのこと。で、会場の地図が送られてきた。以下、その地図。(固定ピッチで読んでね。)



       R20                                 NTT

      ───────┬───────┬────

      上諏訪駅      │              │

                    │              │

                    │              │養老

                    ├───────┼────

                    │              │

                    │        げんき│

       中央線       │              │

      ━━━━━━━┿━━━━━━━┿━━━━━━━━

                    │              │

                    │              │

                    └───────┴──────

                        並木通

これで分かるんだったら、地図なんぞ送らなくても分かるのでは?(^_^;

VC6.0の優待販売の案内が届く。Visual Studio 6.0 Enterprizeへのバージョンアップが11万円位、Professionalが6万円位。これはさすがにあきらめるとして、Visual C++のProfessionalが34800円(消費税込み)。取り合えず魅力かな?と思える点は、ClassViewとデバッガの強化。MFC6.0かな。ProfessionalにVisual Source Safeが付いてくるパッケージがあれば相当迷うと思うんだけど、某氏みたいに経費で落とせるわけじゃないしなぁ。リクワイヤメント項目にInternet Explorer 4.01が付いていたってのはちょっとびっくり。メモリも64Mbyte推奨かぁ。まあ、今のところ、自宅で使う分には、VC++4.2でそんなに不自由を感じていない(単に使っていないからと言う話もある(^_^;)から、やっぱり今回もパスかなぁ。

Shinshu Linux Users Group(SLUG)の入会案内がnagano.miscに届く。とりあえず入ってみようかな?

1998/09/07(Mon)

風邪を引いたのか、単に気温が低いだけなのか?なんかTシャツだと堪えられないくらい涼しい。

金曜日の作業の甲斐あって、マジックデータを出力するようにしたら、Microsoftから配布されているExcelファイルのレコード解析ツールはそのファイルをちゃんと読み込むようになった。喜び勇んでExcelでそのファイルを開いてみたら、Excelが一般保護エラーで死んでしまった。(T_T「ここまでやってもまだ駄目なの?」とがっかりしたが、まあ、今までは単に「ファイルが開けない」とエラーが出て終わりという門前払い状態だったので、それに比べればマシかもしれないと気を取り直す。

とりあえず、省略していたレコードを全部出力するようにして、RESERVEフィールドも含めて全部オリジナルのExcelファイルの真似っこするようにする。ドキュメントには、.xlsファイルを出力するプログラムはRESERVEデータは0クリアしろって書いてあるのに、何故こんな値が入っているんだ?とか、このフィールドってこの値でも問題ないはずなんだけどなぁと思う所が沢山あったが、もうそんな事はExcelでちゃんと読み込めるファイルを作ってから考えることにしようという訳だ。

結局、それらのつじつまあわせに1日かかる。PLSレコードなんかは、ドキュメントにはDEVMODE構造体が書かれているだけだと書いてあるのに、実際にはどうやら別物が書かれているらしい。色々関連しそうな所を調べたのだが、どうにも何が書いてあるのか、見当がつかない。仕方がない、これもバイナリーデータをそのまま出力することにしよう。畜生、こんなプログラム、恥ずかしくて人に見せられないぞ。(-_-;

で、苦労して作ったプログラムの吐き出したデータをExcelで開いてみたら、今度は何とか開くことができた。やれやれである。まあ、元のExcelファイルとバイナリーレベルで一致しているんだから、開けて当然なのだが。しかし、あのソースファイル中にばらまかれたマジックナンバーの謎を解きほぐす作業が残っている。あ〜あ。(-_-;

1998/09/06(Sun)

サルのようにやって、やっとA級ライセンスを取得できた。でもハイスピードサーキットを除けば、初心者用コースでも全然レースに勝てない。予選なんて10秒程度トップと離される珍しくない。こつこつやって、もうちょっといい車を買うことにしよう。

北朝鮮問題。打ち上げたのはミサイルじゃなくて人工衛星だという当局側の発表があった。どうしてあの国の公式発表ってあんなに信憑性がないんだろう?打ち上げたのが人工衛星だったら(軍事目的でなくても周辺海域、空域で事故が起きたらどうするつもりだったのだろう?)、米朝会談でさっさと言ってしまえばいいのに。これも北朝鮮お得意のブラフか?(^_^;

1998/09/05(Sat)

グランツーリスモ。車の制御が難しい。リッジレーサーの感覚でドリフトをすると確実にスピンしてしまう。サルのようにやってやっとB級ライセンスを獲得できた。

所ジョージの曲。「全くやる気がございません」。いい曲だなぁ。

1998/09/04(Fri)

やっぱり.xlsファイル。今まではExcel5/95形式のBookファイルを相手にしていたのだが、ちょっと発想を変えて、Excel4のWorksheet形式をダンプしてみる。ダンプしてみてすぐに分かったのだが、こっちの形式はファイルの先頭に意味不明の情報が入っていなくて、いきなりExcelのレコードデータが入っていることが分かった。レコードが終った後にも意味不明の情報が入っていないので、こっちのほうが作りやすそうだ。さっそくExcelのレコード解析ツールをExcel4形式に対応するように修正する。修正といっても自動判別のやり方が分からないので、コマンドラインのオプションで切り替えられるようにしただけだが。

やれやれ、これで今日中には何とかなりそうかな、と思った矢先、Excel5形式よりもExcel4形式のほうがFONTレコードのサイズが大きいことに気がつく。バージョンが上がって情報が削除されるなんてのありか、普通?で、ダンプリストを眺めていてもさっぱり意味が分からないので、この路線もあえなく棄却。(x_x

仕方がないので、ファイルの先頭と終わりにある意味不明のバイト列は、既存のExcelファイルからコピーすることにした。これをやりはじめると言い分けじみたドキュメントしか書けなくなるし、ソースファイルは意味不明のデータが並んだものになるから、本音を言えばやりたくなかったのだが、背に腹はかえられない。

と言う訳で、コピーする関数を書きはじめる。やることは単純で、



static BYTE s_MagicNumber1[] = {

	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,

	...

};

というような、テーブルを延々と書いていって、適切な所でそれをファイルに書きこむという、ただそれだけのことだ。


00000000 00 01 02 03 04 05 06 07 ........

という形式のダンプリストは手元にあるので、ファイルオフセット部分を消して、データ部分の頭に"0x"を、お尻に","をつけるという単純作業。こんな単純作業を手でやっていたら馬鹿馬鹿しいので、当然プログラムを組んでテーブル部分をある程度自動生成するようにする。こんな時、Perlの便利さが実感できる。

その作業をしている途中で、使っているダンププログラムが変な挙動をすることに気がついた。ちゃんとファイルを指定してあるにもかかわらず、ファイルが開けないといってくる。このダンププログラムはず〜と昔に先輩社員のkさんからもらったものだけど、どうやら入力ファイル名が全部数字だとオプション関連の解釈が変になるらしい。(仕様かもしれないけど。)とりあえずファイル名を変更して対処。多分このプログラムって作った時期が古いだけにロングファイルネームに対応していないだろうから、後で作り直そうっと。

1998/09/03(Thu)

昨日の作業の続き。相変わらず.xlsで開けない。ダンプリストを見つめながらちょこまかと修正を入れる作業が続く。とりあえず一通りチェックをしてみて、おかしな所を修正してみたのだが、それでもうまく開けない。(x_x;

プロトタイププログラムということで、出力する.xlsファイルにはパスワード関連だとか、国の種別だとかといったあまり重要でないと思われるレコードについては一切出力していなかったので、ひょっとするとそれが原因かも知れないと思い、せっせと省略していたレコードを出力するように修正を始める。コーディング作業自体は、適切なレコードのIDとサイズをシンボル定義して、レコード本体をドキュメントに書いてあるビットパターンで埋めていくという単純なものなのだが、追加するレコードの数が結構多くて、それに伴なって定義しなくちゃいけないシンボルの数も増える。単純な分だけ単調なコーディングになるので、ちょっとうんざり。それらのシンボルを自動生成できればいいんだけれど、その自動生成プログラムを組むのもちょっと大変そうなので、地道にやるしかない。

で、やっと追加コーディングが終了して、プログラムを動かしてみる。そうしたら、今までまともに動いていたはずの部分で、怪しげなASSERTが出てくる。メモリアクセス違反が起きているとのこと。大体こんな感じのコードだ。



BOOL COutputExcelFile::WriteSomeRecord()

{

	INT nRecordCount, i;

	nRecordCount = m_aArray.GetSize();	//m_aArrayの型はCTypedPtrArray

	//細部を省略

}

ASSERTが出てくる場所は、GetSize()を呼び出しているところだったが、このメソッドはCObArrayのメンバ変数を参照しているだけなので、なぜASSERTが出てくるのかさっぱり分からない。ASSERTが出るけれども、とりあえず「無視」を選択して実行を継続してみると、とりあえず意図したとおりに動いているようだ。しかし、どうにも気になるので、ASSERTの出る原因を追求しはじめる。

とりあえず疑ったのは、どこかでスタックをぶち壊しているということ。このプログラムでは、必要な大きさのBYTE配列を確保してそこにビットパターンを書き込み、レコードのビットパターンを全部書きおえたら、それをファイルに書き込むというコードがほとんどなので、どこかで1byteか2byte程度大きめに書いてしまってスタックをぶち壊すというありがちパターンを想定した訳だ。今回のプログラムでは各々のメソッドは依存関係が少ないので、WriteSomeRecord()を実行する前に実行したメソッドをちょっとずつ減らしていって様子を見てみる。こうすれば(確実に分かるとは言えないが)どこかおかしいのかのヒントにはなる。まず、半分に減らし、1/4に減らし、1/8に減らし…とやっていったが、全然状況が改善されない。終いにはWriteSomeRecord()を呼び出す前に実行していたメソッドを全部飛ばしても、そのASSERTが出るということになってしまった。ふみゅみゅ。

一体なんなんだ?と思ったが、ここでくじけちゃいけない。(^_^;混合モードにしてアセンブラレベルで追っかけてみる。WriteSomeRecord()の先頭からこんなコードが続いていた。



push    ebp

mov     ebp,esp

sub     esp,0000000c

mov     dword ptr [ebp-0c],ecx

最初の3行はCでの典型的なスタックフレームの作り方だからいいといして、4行めは何だろうな?とちょっと悩んだが、どうやらecxにはthisが入っているらしいと分かって納得。なるほど、thisってこんなふうに実装しているのか。で、アセンブラレベルでトレースしてみると、そのthisへの代入、つまり4行目でエラーが起きている。えぇ〜!スタックオーバーフローをしている訳でもなし、どう見たってアクセス保護エラーなんか起きるはずがないじゃん!おかしいよなぁ、おかしいよなぁ、と思いつつ、とんでもない所がコメントアウトされているとか(^_^;、その手の間違いを探してみたのだが、全然見つからない。で、実行してみるとASSERTが出てしまう。う〜む。

数時間訳が分からなくてうんうんうなっていたのだが、何回目かのテスト実行の時にWindows95がフリーズ。画面がぐちゃぐちゃになっているし、CTRL+ALT+DELETEの必殺技も効かないようだったので、こんなにいらつく状況でOSもフリーズかよ(-_-;、と悪態をつきながら、仕方なしにリセット。再起動時にscandiskが壊れているクラスタを見つけてくれたが、状況から見てそのようなクラスタが出てくるのもやむを得まい。幸いソースファイルのあるドライブは無事だったようだ。やれやれ。

で、現象を確認しようとしてテストをしてみると、あれれ、今度はASSERTが全然出ない。(?_?その前がどこかおかしかったのだろうと思って、WriteSomeRecord()を呼ぶ前に実行するはずだったメソッドの呼び出しを復活させてみたが、それでも大丈夫。う〜む、じゃああのASSERTって一体何だったんだ?変わったことといえばRebootしたことだけなのに。この前このマシンをリブートしたのって火曜日だったと思うけど、やっぱりWindows95って毎日リブートしないと駄目なのかな?なんとも不思議な話だけど、とりあえず問題が解決したから、ま、いいか。(^_^;

いやいや、ASSERT問題は解決したとして、そのプログラムで出力した.xlsファイルをExcelで開けていないのだ。試してみたらやっぱり駄目。(-_-;想像するに、ピボットテーブルとかVBで使うエリア、文書自体のサマリー情報とかをちゃんと設定しないと駄目なようだ。で、これに関するドキュメントがあれば何とか作れそうなのだが、MSDNの関連ドキュメントを読んでみたら、その部分については「not documented」としっかり書いてある。(^_^;ファイルの素のダンプリストを見ても、意味がつかめそうにない。う〜ん、困った。がっかりして帰宅。

昨日の日記で

そういえば、IさんECさんrさんのページ、最近更新されていないなぁ。(と、軽くプレッシャーをかけてみる。)

と書いたら、早速rumbaさんから反応があって、なんでも今自宅のコンピュータが故障しているとのこと。9/1に修理に出したということなので、あのページが更新されるまでにはもうちょっとかかりそう。合掌(-人-)ナンマイダブナンマイダブ

意図が良く把握できないメールが届く。


はじめましてxxxと申します。

私もJANISにホームページを開いています。

是非ご覧ください。

では。

なんか、これだけ読むと単なるSPAMメールかな?と思えてしまう。「私も」と書いてあるからには、SPAMだとしてもJANISネット会員限定のSPAMだから影響は高が知れているから、トラフィック云々の点ではどうでもいい。「私も」ということは読んではいるということなのかな?しかし、わざわざSPAMっぽいメールを送ってくるのがよく分からない。さすがにこれだけの文面ではそれを分かってやっているのか、分からないでやっているのか判断できない。でもせめてこれくらいの文面にはならないかなぁ。

はじめましてxxxと申します。

よく見に行きますが面白いですね。x月x日分なんて

思わず笑っちゃいました。

私もJANISにホームページを開いています。そちらに

対抗すべく(笑)頑張っていますので、ご覧ください。

では。

ほんのちょっとしか変えていないけど、修正前と修正後では、ぱっと読んだ時にかなり印象が違うんじゃないかな。な〜んて偉そうなことを言ったりして。人に偉そうに色々言う前に自分のWWWページの誤字脱字をどうにかしろっての。<vyama(^_^;;

1998/09/02(Wed)

あいかわらず、プロトタイププログラムが吐き出した.xlsファイルをExcelで開けない。あせっても仕方がないので、ダンプリストを見つめながら、ちょこまかと修正を入れる。ついでに、プロトタイププログラムでは大胆に省略していたレコードもちょこちょこ入れる。今日はそのチェックと追加作業を全体の半分程度やった。

そういえば、N社から製品マスターをFTPサイトにおいておいたから、取ってきてほしいと要請があったっけ。という訳で、サイトにアクセスしたのだが、やっぱりCD-ROMのイメージをそのまま置いてあるので、転送すべきファイルが20以上ある。ファイル名をいちいち打ち込むのが面倒なので、GetRightとかを使って何とかならないかと格闘してみるが、Proxyの設定がおかしいのか、パスワードの設定がおかしいのか、はたまたその両方なのか分からないのだが、1byteも転送されないうちに失敗してしまう。(-_-;あれこれやったのだが、結局駄目。幸い社内のUNIXマシンからrftpが使えるので、それを使って対処。まあ、そんなに何回もやる作業じゃないと思うので、rftpからmgetコマンドを発行すればいいのだが、思ったとおりに楽が出来ないので、なんだか釈然としない。

サポートのSさんからMS-WORDにDDE転送する時の障害報告が届く。DDE転送に失敗して変なエラーメッセージが出てくるとのこと。再現実験をしてみるのだが、全然再現しない。私の担当分のソースファイルを見ても特にそんな変な所はない。で、実際にDDE転送をしている部分を書いたIさんに相談してみると、MS-WORDで1つもドキュメントを開いていない状態で、新規文書の作成を選択し、テンプレートの選択をしている最中にDDE転送しようとすると、エラーが起きたことがあったという。じゃあそれを再現させてみようとすると、確かにエラーが出る。ただし、障害報告とは別物のエラーが。(^_^;とりあえず新しく見つけたエラーについては「見なかったこと」にしておこう。

Iさんが言うにはMS-WORDを起動した直後にテンプレートの選択ダイアログが現れることがあるということだったが、いまだかつて私はそんな起動画面を見たことがない。オプションとかを見てもそれっぽいものがなかったし、レジストリにも、マクロファイルにもそれっぽいものがなかった。う〜む。とにかく何か怪しそうなオプションとかにチェックを入れたり外したりして、挙動を観察してみるがちっとも問題のエラーが発生しない。もう一度Iさんの所に相談しに言ったら、Iさんも再現実験をしてくれていた。(Iさんは既に別部署に移っているので、本来なら付き合う義理はない。感謝、感謝。)最初は発生しなかったらしいのだが、色々オプション関連などをいじっているうちに再現できるようになったらしい。実演してもらうと、確かに報告のあった障害が再現する。よ〜し、これで問題解決だ!

と思ったのだが、あまりにも多くの場所をいじりすぎてもはやどんなオプションが原因で発生するのか分からなくなっているとのこと。(^_^;それどころか、いったん再現するようになってからはどうやっても再現しないように戻せないらしい。MS-WORDを起動し直すどころか、OSをリブートしても駄目。こいつは困った。(x_x;とりあえず、DDEで文書全体を渡している所を、いったんテンポラリファイルに落として、そのファイル名を渡すだけにする設定にするとその現象は発生しないようなので、その設定でユーザに試してもらうことにする。Iさんも気持ちが悪いといっていたけど、私もちょっと釈然としない。原因さえはっきり分かればすっきりするのだけれど。

で、そのSさん(女性)。障害を届けに来た時のことだが、なんだか疲れている感じで、ユーザーからのレポートを届けに来るなり、プラスチックのゴミ箱の上にどかっと腰を下ろしてしまう。なんだか疲れているっぽいなぁと思って聞いてみると、このところ結構残業しているので、疲れているとのこと。もうそんなに若くないんだから、無理すると体がつらいよねと言ったら、「あんたと一緒にするんじゃない」といたくご立腹の様子。(^_^;どうせ、私と同じ昭和うん十年代生まれのくせに、見栄を張っちゃって。(と、Kさん経由でSさんにも情報が流れることを見越して、火に油を注いでみる。(^_^;)

サポート業務の大変さが分かるページを教えてもらった。まだちょっとしか読んでいないが、サポート業務にまつわる話というのは、間違いなく面白い。ただし、当事者じゃなければ。(^_^;これを「面白い」といって笑えるうちの会社のサポート部隊ってタフだなぁと感心することしきり。

総務で働いていた外注のSさんが辞めて、アルバイトのTさんが入ってくるという連絡があった。で、その旨を伝えるメールの一部。

x月x日からアルバイトの方で、Tさんにきていただきますので、お知らせいたします。
文書配布等で職場にもおゃまいたします。よろしくお願いいたします。
辞書によると
おしゃま
子供がませたまね、振る舞いをすること、またはそういう子供。主に女の子について言う。
小学校じゃあるまいし、職場で子供がませたような真似をしてほしくないなぁ。え、精神年齢がそのまんま子供の私に言われたくないって?それは失礼しました。(^_^;

non's internet sketchのリンクページの工事中が終ったと思ったら、あれあれ、すごいことになっている。なんと最初に私のページのリンクがババ〜ンと出ているではありませんか。いやはや、びっくらこいた。(^_^;なんか誉めてくれているみたいだけど、それって誉め殺し?(^_^;ちなみに「VYAMA'S "DOTUBO"+」となっているけど、VYAMAって小文字じゃない?とか、+ は旧称恵比須君のページを一時期取り込んだ時の名称で、今は英語表記では「vyama's "DOTUBO" Page」と戻っているはずなのだけれど…って重箱隅突の面目躍如。(^_^;ええ、別に修正してくれって言っているわけじゃないですから、安心してください。>N女史(^_^;

そういえば、IさんECさんrさんのページ、最近更新されていないなぁ。(と、軽くプレッシャーをかけてみる。)

北朝鮮問題。日本人の国防に対する意識を高めたという意味では評価できるかもしれないけど、なんか過剰反応というか、感情に流されているような気がしないでもない。

例をあげて言えば、今更偵察衛星を打ち上げるとして(偵察衛星を打ち上げること自体は賛成)、一体その衛星はいつ出来るんだ?とか、日の丸ロケットの開発が凍結されそうな現状でどうやって打ち上げるんだ?とか、それやこれやの問題が解決されて、めでたく打ち上げられる前に北朝鮮政府がつぶれちゃうのが先なのかもね、とか。で、うまく偵察衛星が打ち上げられたとして、その管理は誰がやるの?とか。今の自衛隊の組織って陸自、海自、空自の連係プレーが出来るような訓練もされていなければ、組織も3軍そろって行動するようにもなっていないから、独自に情報を得ても宝の持ち腐れじゃん、とか。

ちょっと注目したいのが、TMDに関する議論。TMDの開発に力を入れるべきだとか言っているけど、かの有名な「パトリオットミサイル」が湾岸戦争でどれほどの戦果をあげたのか知っているのか?実はあのミサイルの迎撃成功率は数%だったと読んだことがある。まあ、もともと飛行機を狙い撃ちするミサイルなんだから、弾道弾相手じゃ外れて当然だけどね。で、迎撃に成功した場合でさえ、向こうから打ってきたミサイルとこっちから打ったミサイルの残骸が市街地に降り注ぐことになって、迎撃に成功した方がかえって被害が大きくなったなんて報告さえあるらしい。そういうのって知っているのかなぁ。

笑ったのが、ミサイルが日本の領空を侵犯しているという話。大気圏外も日本の領空だと思っているらしい。だったらスペースシャトルって一体何ヶ国の領空を侵犯していることになるんだろう?(^_^;まあ、頭の上をミサイルが飛んでいくというのは確かにうれしくない話ではあるが、非常識の論理に無知の論理で対抗する構図というのは、なんだかなぁ。

1998/09/01(Tue)

酒が飲める、酒が飲める、酒が飲めるゾ〜、という訳で今日は血液の再検査の非。とりあえず今日までは酒をひかえなさいということだったので、今日まで控えてきたのだが、とりあえず今日から解禁じゃ。(^_^;という訳で、再検査での一コマ。


看護婦「とりあえず、検査の結果が出るまでは節酒を続けてください。」

vyama 「そうですか。じゃあ、今日から浴びるほど飲む程度にしときます。」

看護婦「え、いつも浴びるほど飲んでいるの?」

vyama 「いいえ、いつもは浸る位には飲んでいるんです。」

看護婦「…」

コーディングは一応終了して、debug。メモリリークとか、ポインタの計算間違いで1byte余計に変な所に書き込んでしまったりとか、すぐに分かるような間違いはさっさと直せたのだが、それを直してもExcelが出来上がったファイルの読み込みを拒否してしまう。どうやらなにかが間違っているらしい。

じゃあ、とりあえず出来上がったファイルをダンプして何か変な所があるか調べようと思ったら、今度はこの前から使っていたダンププログラムが動かない。(^_^;どうやら、このダンププログラムもファイルの内部構造を見ているらしく、その構造が変だとファイルを開くことさえ拒否してしまう。役に立たないダンプツールだなぁ。(-_-;仕方がないので自分である程度XLSのレコード構造を意識した自家製ダンプツールを作りはじめる。ダンプツールを作ること自体はそんなに時間がかからなかったのだが、そのダンプ情報に、レコードの属性値をシンボルで表示するようにしたら、そのシンボル情報がメチャメチャ数が多い。(^_^;それらを定義するだけでほとんど一日終わる。しかし、ドキュメント化されていない項目がやたらと多いなぁ。(-_-;

北朝鮮のミサイルが日本上空を飛んでいって、三陸沖に落ちたらしい。まあ、軍事的政治的な面はともかく、よくちゃんと飛んでくれたもんだ。まあ、命中精度なんて度外視していると思うから、狙ったとしても原子炉に落ちるなんてことはないと思うけど、それでも何かのミスがあって日本国内にでも落ちたら、即戦争だぜ。実は、戦争になって北朝鮮政府がつぶれて朝鮮半島統一となれば、全ては丸く治まる…なんてのを狙っていたりしてね。もっとも今北朝鮮政府がつぶれると一番困るのは韓国政府だと思うんだけど、それを狙った捨て身の戦略だったりして。(^_^;もっともそんな状態で統一された時には北朝鮮の指導部は軒並み命はないだろうけど。

しかし、このミサイル計画に参加した技術者ってすごい。万が一、日本国内にでも落ちたら、即戦争。多分、失敗したら殺されるくらいの覚悟で実験したんじゃないのかな。私のような能天気な(一応)技術者には考えられない世界ではある。


1998/9 後半のぶつぶつ

1998/8 後半のぶつぶつ

日々のつぶやき 目次

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

目次ページ