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

1998/06/15(Mon)

最近の寝不足が解消されたのはいいけれど、解消されすぎてかえって寝すぎのようで、頭がぼ〜としたまま会社にいく。

あいかわらず、RTF出力部分はやっと読み切れた。今度はライトの出力プログラムだ。完全には読み切れていないのだが、もう細かい部分まで読み進めるような気力がなくなっている。だって、読んでも読んでも前に読んだようなコードの繰り返しなんだもん。(^_^;ただ、今日読んだ部分は「なるほどなぁ」と思ったコードがあった。といっても感心したわけじゃなくて、RTFとか、WRIの出力ロジックをHTML出力に強引に改造しようと思ったら、確かにHTML出力プログラムとしてはかなり「妙な」ロジックを使うのは仕方がないのかな、というレベルでだが、なんとなくこれを書いていたプログラマーの心境が分かるようになってきた。時間がなかったんだろうなぁ、きっと。でも、やっぱり汚いことは汚いんだよね。仕方がない事だったのかも知れないと同情はしておくが、そんなの読まされるこっちの身にもなって欲しい。(^_^;でも、もうほとんど峠は超えたので笑って済ませられる。

共産党が比例代表候補を発表したけど、その中に「田中節子」って名前があった。まさか、あの「田中節子」とは別人だよなぁ。いくらなんでも。(^_^;

1998/06/14(Sun)

論文を書きあげたと思ったら、「もう一回再提出」なんてのが2回続いたせいだろう。「2度あることは3度ある」と体が憶えているらしく(^_^;、なかなか寝つけない日が続いた。それがLRCに参加した事で体も「もう全面的に休んでも大丈夫だ」と納得したらしい。なんだか最近の10日くらいの疲れがどっと出てきた。本当だったら来年の日本SF大会「ヤネコン」の打ち合わせにも顔を出さないといけないのだが、他のスタッフもかなり同行するみたいなので、今回はパスさせて貰って、一路自宅に向かう。自宅について、完全にグロッキー状態になってとにかく寝る。荷物なんかを車から降ろすなんて余裕もなかった。zzz...

ふっと目が覚めたら、もう夜の2時。あれ、確か今日はWカップ、日本代表の試合があったはずだけど。がちょ〜ん(死語)。すごく楽しみにしていたのにぃ。(T_T)多分負けに決まっているんだけど、ライブで見られなかったのはすごく残念!でも体がやっと「お休みモード」を受け入れてくれるようになったので、今回のコンベンションは私にとってはそれだけでも意味があった。

1998/06/13(Sat)

第16回Local Refresh Convention(LRC、通称ロリコン(^_^;)開催。去年よりは忘れ物が少なくて済んだ。(^_^;1年ぶりに会う人もある。馬鹿な話をするのが中心なんだが、楽しかった。でもちょっと羽目を外しすぎたかも。ここの所、夜寝られなかったりして体調が万全とはいかなかったので、夜になって元気が続かなくなっていた。(^_^;

1998/06/12(Fri)

RTFの迷宮をさまよっている。が、さまよっているなりにゴールは見えてきた。似たような表現、冗長な表現の繰り返しが出てくるのはあいかわらずだが、もうこのソースファイルにつきあって1月近くになるので、かなりパターンがつかめてきた。この1月、一体私は何をやっているのかなぁという気持ちもするが、戦力になるためにはこのソース(事実上唯一のドキュメント)を理解しなければ話にならない訳で、私の実力では仕方がないのかなという気がする。

途中でまたもや、関数名以外完全一致している関数を見つけたが、30行程度の関数なので、もう全然驚きもしないし、どうせ両方読んだとしても高が知れている。終わりが見えてきたな、という感じで、1000行ほど残して今週の読み込みが終る。

全体が13000程だったから、今週に限れば1日2000行以上は読んでいたことになる。まあ、HTML部分を読んだ時に重複する部分もかなりあったし、似たような関数の差分をとってそこだけ読んで行くという「ズル」をしたせいもあるから実質1000行以下しか読んでいないのは確実なんだが。(^_^;でもソースファイルの読み込みにWinDiffを多用するとは思わなかった。(^_^;何事も経験か。

残りのXXX形式で出力なんてのは、RTF出力部分に比べればよっぽど楽なはずなので、推定あと18000行あるのだが、多分来週いっぱいで全部読み終えてしまえると思う。WRI形式がちょっとネックになるかも知れないが、RTFに比べれば楽なものだろう(と期待する。(^_^;)

今年の新人研修について、九州の別会社に研修にいった「プログラム初心者コース」(女の子二人)のドツボのはまり方がすごいので、「ドツボの記録」に載せようと思ったのだが、それをちゃんと分かるように書こうと思うと、彼女たちの書いた週報を引用しないと臨場感がないし、面白くもならない。そのような条件下では関係者以外が読んでも理解できるようにうまく書く自信がないし、週報を全面的に公開する訳にもいかないので、「ドツボの記録」としては断念する。面白すぎるんだけどなぁ。(^_^;どのように面白いかは社員にしか分からないが、社員で興味のある人は九州組の週報を読んでいれば分かります。:-)

非常に気がかりなのが、なんだか週報を読んでいるかぎり彼女たちが自分の実力に関して、どんどん自信を失っているらしい事。特に最近「分からない」とか「追いつかないと」とかいう文が目立つあたりで、その兆候がうかがえる。これってとってもまずい状態じゃないのか?

で、今日送られてきた日報を読んだら、講師グループが研修生を前にして自分たちの仕事の成果のプレゼンテーションをやったらしい。週報には「分からない単語が沢山ありました」みたいなことが書いてあった。おそらく私が出ていてもたっぷり分からない単語がばんばん出ただろう(所詮専門分野が違うから変な省略をされたらすぐには分からない。)ところが、専門家同士のプレゼンテーションならいざ知らず、「分かっている奴だけ分かればいい」というのは、プレゼンテーションの最悪のものなんだよね。で、最悪のプレゼンテーションを見せられたあげく、どんどん自信を失って行くこの二人の新人がとっても不憫。あんな研修をさせるくらいだったら、九州なんかに送らなければ良かったとつくづく思う。

明日からLocal Refresh Conventionなので、土曜日はこの日記はお休みです。来年以降、長野県白馬でドンチャン騒ぎをしたい人は私に連絡をして下さい。SFに興味のある人じゃないとつらいですが、なんとかなるかもしれません。(^_^;

1998/06/11(Thu)

早めに仕事を切り上げて土曜日のコンベンションのために、酒を買ったり、酒を買ったり、酒を買ったり、酒を買ったりした。もっともコンベンションで自分が飲む分+αを確保したくらいであるけれども。(^_^;ついでにStarTrek Final Season Part1のLD BOXを購入。8時くらいまでお店を開いていてくれるというのは、私のような人間からすればとてもありがたい。

いつもだったら睡眠時間をかなり削ってでもとりあえずLD-BOXを必死に見るのだが、なんだか見る気力が起こらない。最近なんだか良く眠れなくなっているせいかな。深夜になってもそんなに眠くならないし、感覚的には眠い時でも、やっと明け方になったくらいで意識がなくなったりする。生活習慣を買えなければいかんなぁ。

1998/06/10(Wed)

RTF出力DLLソースの読み込みも一番の難所にさしかかってきた。ところどころ意味不明の式や、即値があるのだが、いい加減細かく意味を考えていたらノイローゼになりそうなので、分からない所は「分からない」とコメントを付けてどんどん読み飛ばす事にする。どうせ書き直すつもりなんだから、いい加減細かく分析しなくてもいいだろう。似たような処理の繰り返しが多いので、なんだか読んでいて疲れてきてもいる。

この前まで読んだ所では「良く似た別の関数群」が4つに分かれていたのだが、今日読み進めて行った途中で、それらが2つの分岐に収まった。やれやれと思って、読み進めて行く。そしたら、読んだことはないはずなのになんだか読んだ事のあるような関数にぶち当たる。おかしいなぁと思って、似たような名前の関数を探してみると、やっぱり似たような処理をしている関数が見つかった。で、例によって、関数部分だけを取り出して差分を取って見ると、280行ある関数なのに、違っているのは関数名だけ。(^_^;

厳密に言えば、2行だけ(そのうち、コメント1行だから実質1行)違っていたのだが、これってソースを読んで見るとこの違いのために別関数に分けたってわけじゃなく、同時に修正しなけりゃいけないのに、片方の修正を忘れたような感じだ。もっともあってもなくてもRTFで出力した時に人間が読みやすくなるようなSyntax Sugarを加えるか、加えないかと言う部分なので、その意味では2つの関数は同じものだといっていい。でも、もう驚かないぞ。(^_^;

さんざん、今読んでいるプログラムが「変だ」と最近書いているのだが、今日まで読み進めて、これって時間のない時のプログラマーが切羽詰まって書くテクニックが多用されているような気がしてきた。とりあえず似たような処理をしている関数(群)を全部コピーしちゃって、必要な所だけ書き換えるとそこそこ動くプログラムって出来ちゃうんだよね。でもこれって、禁断のテクニックでメンテナンス性は最悪なんだよね。(^_^;

ああ、W杯のオープニングゲームが始まっている!もう日記なんか書いている場合じゃないや。(^_^;

1998/06/09(Tue)

昨日の日記を読んだ某Sさんから「昨日の例えは良くない」と意見された。代議員を国会議員に、執行委員を大臣に例えたんだが、「国会議員も大臣も沢山なり手がいるんだから適当じゃない。」という訳だ。Sさんによれば町会長に例える方がよっぽどいいという。なるほどと思ったのだが、これは酔っぱらって書いているせいだろう。素面だったらもっといいたとえが思いついたに違いないと負け惜しみ。(^_^;

先週手に入ったマシンにVisual C++ 5.0をインストールしようと思ったら、CD-ROMドライバーがリアルモードなのでインストールできないといわれてしまう。ドライバーがおかしいにしては、同じNEC用ドライバーを使ってインストールした別のマシンではきっちり動いているんだけどなぁ、と思い色々設定を確認してみるが、どうもプロテクトモードドライバーとして認識してくれない。

どうもこれは初手から間違っているんじゃないのかという気がして、ねじを外してマシンの中を覗き、CD-ROMメーカーを確認してみる。そしたら案の定、メーカーが違っていて、このマシンについてきたCD-ROMは日立製だった。(^_^;なんでこれで今までうまく読めたのかがよく分からないのだが(^_^;、日立製のCD-ROMドライバーを組み込んでみてもWindows95からは認識されない。もう、こうなったら最初からインストールするしかない。泣く泣くFormatから始める再インストール。

まあ、この前インストールしたばかりだし、おおよそのバックアップとか設定ファイルは、それまでサブマシンに使っていたマシンに残っていたので、インストール作業自体はさくさく進む。でも、インストール作業ばっかりしているとさっぱり本業が進まないんだよなぁ。おそらくこれを読んでいると思われる上司のNさん、ゴメン。(^_^;

ソースの読み込みに関しては、RTFの文書中に埋めこまれたmetafileを出力する部分の読み込みに取り掛かっている。ところがmetafileもそうなんだが、画像なんてのはいままでまともにいじったことがなかったので、画像フォーマットなんて全然知らんけんしゅたいんなのだ。(^_^;そんな訳でちょっと壁にぶち当たる。もうちょっと勉強しないとだめだなぁ。今回は仕様書がある世界だったのだが、この後仕様書無き世界に突入するので、この程度では泣き言を言っていられないのだが‥。

welcomeページのタイトルが未だに「ドツボのページ+」になっているとの指摘をされる。よく気がつくものだなぁ。(^_^;とりあえず指摘してくれたKさんには感謝。

歯科賞、休止宣言の記事を読む。せっかくノミネーターになったばかりだったから残念といえば残念だけど、まあ、これも1つの時代の流れと言うか。なんか、変なノミネートしかしていなくて歯科賞休業の片棒を担いだような気がして、ちょっと心苦しい。もう再開するつもりはないという主催者の意見表明がノミネーターMLであったけど、なんか私が歯科賞を潰してしまったような感じがしないでもない。

1998/06/08(Mon)

うちの会社にも組合がある。といっても、親会社の組合の1支部内の1職場という扱いだ。毎年2〜3人程度の代議員を選んで、その組合支部の意思決定機関「代議員会」に送り込んでいた。もっとも組合活動はそんなに盛んではない。

会社の規模が小さいうちはこれでよかったのだが、もうそろそろ組合員が増えてきたので、執行委員を出してくれと執行部から要請があった。分かりやすくいえば「今まで国会議員しか送り込んでこなかったけど、人数も増えたんだから大臣を一人くらい出してくれ」という訳だ。当然のことながら、代議員になったら本業とは別の仕事を抱える訳だから、面倒臭くてあまりなり手がいない。執行委員なんてのは、もっと仕事が増える訳だから、やりたいなんて奴はそうそういない。

で、結局投票で「貧乏くじ」(^_^;を引く奴を決める事になった。で、投票といっても候補者リストがなければ投票できない。仕方がないのでここ3〜4年以内に代議員をやった人のうち、現在プロダクトマネージャーになっていない10人が候補者になった。で、運が悪い事に私もその候補者リストに名前が上がっていた。(x_x;)

投票は慎重に行った。私の1票で選挙結果が決まるかも知れないのだ。じっくり吟味せざるを得ない。ただ、じっくり吟味したといっても「誰が執行委員になるのが一番良いか」なんて殊勝な考えはまるでない。「誰が一番得票するか」を吟味していたのだ。要するに執行委員なんてやりたくないから、他の人で一番当選他しからしい奴の当選確率をあげて、そいつを当選させてしまおうという腹である。逆選挙キャンペーンなんかが出来ればいいんだが、それほど時間もないし、逆に変に注目を浴びるこの場合禁物である。(^_^;まあ、日ごろの行いからいって、私に投票する人がいるとも思えないが、万が一ということもある。例えば私が5位くらいの人に投票し、私が1票差で当選してしまったら「あの時、2位の奴に投票していれば‥」と相当後悔する羽目になる。そんな理由で投票していた「とんでもない奴」である。(^_^;

10票程度の中間経過が発表されていたし、その後、クレームが付いて中間経過は発表されなくなったが、その時点での「この人に投票した理由」みたいなものからある程度上位は予想できた。どうやら予想できる範囲では、私は上位グループに入っていないらしい。(まずは一息)

今日の18時で投票が締め切り。即日開票。結果は有効投票数57票のうち、結果はTさんが17票を集め、2位の9票に大差を付けて当選。残念ながら、私の投票した候補ではなかったが、とりあえず私以外の候補が当選すればそれでよい。(^_^;

ちょっと私の予想に反していたのだが、vyama票が2票あって、最下位じゃなかったこと。で、vyamaに投票した人のコメント。「彼なら十分働いてくれそうな気がします。」この人、私という人間を分かっていないなぁ。(笑)誰が投票したのか突き止めたい気もするが、一応秘密投票となっている事だし、これで私がやらなくてもすむことは決定的になったのだから、まあいいや。投票してくれた人が名乗り出てくれたら、感謝の気持ちとともにメール爆弾でも送ってやろう。(^_^;

さて、見事に当選したTさんだが、今日明日とお休みらしい。水曜日に出社してきたら驚くぞ。B-)その件に関して、Mさんが面白いことを言っていた。マーフィーの法則みたいにちょっと小難しくいってみる。


「学級委員の法則」

誰もが嫌がる役を誰がやるのか決める場合に、重要な

判断材料となるのは「誰が適任か」でなく「誰がその

場にいないか」である。

妙に納得。

そういえば、金曜日だったのかな?ニュートリノに質量がある事が実験的に分かったという発表があったと新聞で報道されていた。政治面にその記事が載っていたのがよく分からないのだが(^_^;、大ニュースであることは物理学の素人目でも間違いない。早急な追試実験が望まれる。以前の常温核融合実験は結局大失敗だった(間違いだったと分かったという意味では成功だけど‥)が、今度はかなり追試でも同様の実験結果が出る可能性が高そう。まあ追試をするにしても相当お金がかかるんだろうけど(^_^;。

RTFの迷宮。RTF仕様書の電子ドキュメント化が、とりあえず必要な部分だけ終わった。後はRTFファイル出力ルーチンで訳が分からないキーワードが出てきても、検索一発で済むようになった。もちろん、OCRで取り込んだ全部が処理できたわけじゃなくて、ほとんど判読不可能な部分もあるんだけど、まあ今の所その部分は関係ないし、今後も関係が出てくるとも思えないので、しばらく放っておくことにする。

1998/06/07(Sun)

一日中、グランディアの続きをやっていた。今度は1回目は意地でも攻略本を見ないで解いたのだが、今度は攻略本を見ながら進めている。今日やっとラップとの対面が適った。

で、眠る前になって気がついた。「ああ、今日はドツボの記録を更新しようと思っていたんだっけ?」まあ来週でもいいやって、来週は予定が埋まっているじゃないか。(^_^;さて、いつ書き出す事やら。(^_^;

1998/06/06(Sat)

久しぶりに「何もしなくてもいい」休日。お昼ごろまで寝て、朝食兼昼食を食べ終わったあと、久しぶりに近所(車で40min位)の温泉に出かける。お湯がぬるめだったが、ぼ〜と入っているには都合がいい。

その温泉には「遠赤外線サウナ風呂」というのがある。普通のサウナ風呂は温めた空気で体に熱を伝えるのだが、このサウナ風呂は、天井に黒い金属板みたいなものから赤外線を照射して、体に熱を伝えるらしい。要するにでっかい赤外線こたつみたいなものなんだろう。浴室内は70度程度とサウナ風呂にしては温度が低い。

ここは結構お気に入りで、浴室内温度が低いにもかかわらず5分も入っていると全身汗びっしょりになる。ところが今日に限って、10分入っていても15分入っていてもちっとも汗をかかない。体調がどこかおかしいのだろうかと心配になってきたが、一緒に入っていた人(見ず知らずの他人)も、「汗をかかない」とかぼやいていたから何か設定を変更したか、機械の調子がおかしいのだろう。

2時間弱入っていて、いい加減飽きてきたので家に戻る。

家に戻ってからはグランディア2回目の続きをやる。ああ、なんて平和な日なんだ。

1998/06/05(Fri)

RTF出力部文を読んでいるのだが、RTFはWindows95付属のワードパットをお情け程度にしかいじったことがない。親プログラムから渡されたデータを別の出力側から見て扱いやすいデータ構造に変換する所までは理解したんだが、実際にファイル出力する辺りにさしかかった途端、RTFの(私にとっては)意味不明のキーワードがずらずら並ぶコードを読む羽目になる。

一応、RTFの仕様書(日本語で書かれたもの)は手元にあるのだが、紙に書いたものしかないので、「このキーワードはどんな意味なんだろう」とか思って、探し出すにはとっても不便。大体キーワード自身が鬼のように沢山あって、私の記憶力の限界を超えている。まあ、それをいえばHTMLだって私の記憶力の限界をとっくの昔に超えているのだが(^_^;、HTMLの場合は電子化されているから検索はかなり楽。せっかくスキャナがあって、OCRのチームにいるんだから、それを使わない手はない。と言う訳で、非合法かも知れないが(^_^;、紙に書かれている仕様書をスキャナーとOCRでどんどん処理して行く。

ただ、やはりプログラム関係の仕様書であるせいか、斜体文字とか結構使われているのでそこら辺は日本語OCRだと極端に認識率が下がるようだ。最初からマニュアルを手で打ち込んで電子化する手間に比べたらよっぽどマシだが、やはり誤認識のせいでまともに検索していてはヒットしない場合もある。日本語部分についてはほとんど問題がないのだが、キーワード部分はほとんど英数文字で「l(エル)」、「I(アイ)」、「1」の間違いが結構ある。それらを修正しているうちに1日が終ってしまう。

やっぱり人の書いたプログラムを読み進めて行くのが、結構つらいのは私だけじゃないみたい。フフフ。

1998/06/04(Thu)

いつもこのページを読んでくれている(らしい)Sさんから「そんなに頭に血が昇っていると、いいコードなんて書けないよ」と注意をされる。まあ、私も大人げなく頭に血が昇ってしまったと反省をする。でもまあ頭に血が昇った事には違いないし、書いたりいったりした事実自体は消せないからそのままにしておこう。(^_^;

以前の部署に所属していた部署とのお約束で6月になったらマシンを一台もらえる事になっていた。newマシンを買ってもらうという訳にはいかないが、一応予定では、DELLの166Mhz Pentiumマシンをもらえる事になっていた。

ところがそのマシンは現在、以前の上司だったNさんのメインマシンとして稼働中である。私に引き渡すなら、バックアップを取ったりしなけりゃならず、面倒な事になると思ったのだろう。以前外注が使っていた、Endevor Pentium MMX 200Mhzマシンが私の手元に転がり込むことになった。ラッキー!v(^_^)

とりあえず、添付のFD、CDがあることを確認してから、HDをフォーマットしてDOSから入れなおす。今更DOSなんて入れなおさなくても、どうせDOSコマンドなんて使いっこないんだが、入っていないとなんだか不安で。(^_^;DOSを入れたあと、Windows95をインストールするのだが、そういえばこいつのCD-ROMドライバーが見当たらないぞ、とちょっとあせる。幸い使っているのがNEC製のCD-ROMだったので手元にDOS用ドライバーがあり、それを試してみるとちゃんと認識してくれたので一安心。

で、Windows95をインストールして色々設定を始めたのがどうもネットワークがらみがうまく動いてくれない。BIOSはちゃんとネットワークカードを認識しているんだが、他のコンピュータが見えない。それが解決したと思ったら、今度はNetwareサーバーにログインするとログインスクリプトを処理している所でhangupしてしまう。これもあれこれいじっているうちに、何とか解決できたのだが、どこをどういじったのが悪かったのか、今度はCD-ROMが見えなくなってしまった。(^_^;

設定周りを見なおしたのだが、何をやっても駄目なのであきらめて再インストール。今度はほとんどノートラブルでうまいこと動くようになった。最初は一体何が悪かったのかは全く不明。まあ、まともに動いているみたいだからもうどうでもいいや。(^_^;

うちの会社の場合、1人に2つネットワークケーブルが割り当ててある。1つはメインマシンに、もう1つはサブマシン用というわけだ。だから、新しいマシンが入った事によって、今までサブで使っていたPentium 90Mhzマシンから、ネットワークケーブルを引き抜いて新しく手に入れたマシンに割り当てる予定である。だから、今までサブマシンで運営してきたネットワーク関連のサービスを全部、引き継がせないといけない。一旦メインマシン(Pentium Pro 200Mhz)からネットワークケーブルを引き抜いて、ファイルのコピーなどをして行ったのだが、これに思いのほか時間がかかる。作業途中で、日も変わった事なので無理せず帰宅。帰宅後は何も考えず布団に直行と言う1日だった。

総額1兆円を書けた自衛隊の次期支援戦闘機F2に深刻な欠陥があるのだという報道がされている。これ、続報とかがないけど、税金1兆円まるまるどぶに捨てる結果になるかも知れないということだから、もっと報道されてもいいと思うんだけど。報道の通りなら1兆円かけて、戦力としてまるで役に立たないクズ飛行機が出来る訳だ。

どれくらいこの戦闘機が高価か、「自衛隊兵器カタログ」日本兵器研究会編アリアドネ企画版から見る。F2 123億円、F15 108億円、Su-27 29億円、F/A-18E/F (推定)50億円、F-16 40億円。例えばF-16を輸入するんだったら、初期の開発費用3000億円以上はまるまる浮いた訳だし、配備できる機体数は3倍になる。大体、主力戦闘機よりも高い支援戦闘機って一体何なんだ?

1998/06/03(Wed)

今読んでいるプログラムは親プログラムで作ったデータをHTML形式にして出力する下請けDLLだ。Cで書いてあって、全部で8500行ほど。*.cファイルが8000行弱。このプログラムをやっと今日読み切った。高々この程度のプログラムを読み切るのに、3週間、1日平均600行程度しか読めなくなっているとは情けない。

まあ、これまでここで書いた以外にも色々問題点があった。思いつくままにあげてみると…。最初にデータ構造を説明された時に、その説明がデタラメだったのでそのデタラメを信じてソースを読んでいき、1weekほど無駄にした。内部構造に関するまともなドキュメントもなければ、プログラムの中に意味のあるコメントもなかったので、ソースを読みながらそれらを書いて行かざるをえなかった。「書いた人しか分からない」マジックナンバーがごろごろしていたのでそれを意味の分かるようなシンボルに直さないといけなかった。Editorでコピーしたんだろうと思われる同じ表現の繰り返しが沢山あったので、それらを可読性向上のために書き直さないといけなかった。これだけ障害があったら、私の実力・才能ではこの程度のペースで読むのがが精一杯かも知れない。

今度はRTF形式にして出力するDLLのソースを読み始める。使っている構造体の名前が違うので、やっぱりHTML形式を読んだくらいの時間がかかるのかな?と思っていたが、ちょっと読んで見ると違っているのは名前だけ。やっていることは変わらないので唖然とする。確かに別のDLLだからってのはあるかも知れないが、それにしても同じような事をやるのに、わざわざ別のファイルを用意するというのがすごい。まあ、私も前に携わっていたプロジェクトでは、変更とか追加が著しいOEM提供先のプロジェクト2つはオリジナルとは別に管理していたんだからあまり非難できないんだが、同じプロジェクトで同じような事を、しかもわざわざ読みにくいようにやるっていうのは、私には理解できない。

ただ、やっている事が基本的に同じ事だと分かると、後は楽なものだ。「ああ、確かここはこんな事をやっていたんだから」ってのが分かってくるので、既に読み終わったHTML出力部分との比較をしながら読み進めて行けばよい。(HTML出力部分には私がたっぷりコメントを付けてある。)マジックナンバーが出てきても、対応するHTML出力部文を読めば大体の見当がつくようになったし(対応するHTML出力プログラムでは、適切なマクロ名で意味が分かるように置き換えられている)、ほとんどが依然読んだ部分のコピーなのでがんがん読み飛ばせる。改良すべき点は多々あるのだが、とりあえず現状のソースを読み進めるのが大切な時だ。

で、そのRTF出力プログラムを読み進めて行くうちに、ちょっと奇妙な事に気がついた。hogehogefooという関数と対になってhogehogeLayfooという関数が存在しているのだ。よく読んで見ると.iniファイルの"Layout"とかいうフラグがセットされている場合には、hogehogeLayfoo系統の関数が実行されており、セットされていない時には、hogehogefoo系統の関数が実行されている事が分かった。で、「一体どこが違うんだ?」と関数単位で見ると、ソースファイルの5%位しか対になった関数の差がない。まあ、関数内のブロックの深い所での条件判断が違うとか、急いでいたら仕方がないなと思える所もあったので、対応する関数を比較しながら、どこが違うのかを読み進めて行った。

直したい所は沢山あったのだが、このソースは全面廃棄して書き直すか、触らないで放っておくしかないと判断しているので、どんどん読み飛ばす。今日は親プログラムから渡されたデータを、出力用に都合のいいデータ構造に変換するという部分を読んでいたせいかも知れないが、なんでこんなの別ファイルの別関数にしたんだ?とかいうところが多々あって頭を抱える。そうやって余計な手間をかけながら、読み進めて行くうちに信じられないような部分にぶつかった。

先ほども述べた通り、今読み進めているプログラムはhogehogefooという関数に対応して「ほんのちょっとだけ異なる」hogehogeLayfooという関数が存在し、2つを読み比べて(当然どんな違いかなんてドキュメントはない。)、動作の違いを理解しようとした。ところが、ある関数をぱっと読んだ限りではどこにも差が見つからない。まあ、200行もある(!)関数なんだし、ぱっと読んだくらいでは違いを見つけられないくらいの小さな変更点があるんだろうな、と思って、関数部分だけを取り出してWinDiffにかけてみる。結果が信じられなかった。この200行ある(というだけで言語道断なんだが)2つの関数は関数の名前以外、トークンどころか、スペース、タブ、改行位置にいたるまで全く同一だったのだ!(以下色々書いたんだけど内容が過激なので結局自主削除(^_^;)

私は自分のソースを読んでいる時には「バカヤロウ。こいつ一回死んだほうがいいんじゃない?」とか「ソースと暗号化ファイルと区別がつかないんじゃないの?引退したほうが世のため人のためじゃない?」とか罵詈雑言を尽くして独り言をいう。他の人のソースを見た時には、あまり言わない方(当社比(^_^;)なんだけど、さすがに今読んでいるソースは、読んでいるうちにひとりでに罵詈雑言が出てくる。まあ、人の書いたソースとはいえ、もはや自分の担当コードなんだし、変なコードを目にすると、なぜこんなコードを書いたんだ?とか考えているうちに、頭に血がのぼった状態になってしまい過激な独り言をいっちゃうのだが、いつもだと過激な独り言を言っているうちにストレスが発散されているので、過激な独り言の割には以外と本人は落ちついていたりする。

ところが、今日読んだコードは私を「プッツン」させちゃう種のものだったらしく、もう誰彼構わず話しかけてくる相手に対して、そのコードに対する罵詈雑言の嵐。もう自分でも歯止めが効かない。(^_^;これは自分でもまずい精神状態だなと思ったので、いったんソースを読むのを中止し、ASCIIから出ているRTFに関するドキュメントを読む事にした。

ところがこのドキュメントが紙のドキュメントしかないので、ちょっと検索したいなんて時にはとっても不便。不法なのかも知れないが、ドキュメントをスキャナで取り込んでOCRソフトにかけて、すぐに検索できるような体制づくりを整える。もっとも100ページもあるドキュメントなので、数日かかるだろうが、まあ仕方がないだろう。何百とある\hogehogeというキーワードを全部憶えていられるほど、私の頭は賢くない。

上司のNさんから別の仕事もしてもらいたいと提案される。まあ、出力部分では大体どんなことをやっているか把握したし、あと残り4万行読み残しがあるといっても、そのほとんどが前に読んだ事の繰り返しということであれば、あと2week程度あれば余裕で全部読み切れるだろう。まあ、私の荒れ方(といっても私にとってみれば自分のソースを見ている時でさえ、これくらい荒れるのは普通なんだが(^_^;)を見て、見るに見かねたという面もあるだろう。全く扱いにくい部下である。(^_^;;

新人研修がえらい事になっているらしい。今年の新人研修は「比較的よく分かっている組」が本社で研修を受け、「プログラムを組んだ経験があまりない組」が九州で別会社の新人と一緒に研修をする事になっていた。前者のチームの中には時々部分的にとんでもない勘違いをしでかす時もあるのだが、概ね順調のようだ。まあ、ある程度大学時代にプログラミング経験のある人間が集まったので、ある程度放っておいても大丈夫と言う所はある。

問題なのは後者、九州で研修を受けたグループだ。週に1回、どんなことをやったのかレポートを提出させているのだが(そのレポートは社員だったら誰でも読める)、なんだかプログラミングに対する理解を深めているようには思えないし、どんどん自信をなくしているような気がする。危険な兆候である。ただし、あの状況では分からないのも当然だろう。その理由は…、後でどつぼの記録に登録する積もりなので、お楽しみに。:-)

1998/06/02(Tue)

会社に来たら、上司のNさんに「お〜いvyama、論文返ってきたぞ。」と言われた。要するにこの出来は2次審査で通る、通らないと言うレベルじゃなくて、二次審査での審査官があまりの出来に怒り出す、怒り出さないというレベルなので、最後のチャンス1日あげるから、怒り出さない程度にまとめろという一時審査員(部長)の最後の温情だ。

ところが頭の中にある書き足すネタはとっくに尽きているので、もうどうまとめればいいのか分からない。人間、自分の力の限界が見えてくると悲しいものだが、まあ事実なんだからしょうがない。普通悲しい場合には涙を流したりするものだろうが、私の場合にはそのことをはっきり認識した時点で思いっきりげらげら笑い出してしまった。今後、私が人の感情表現を読む場合の参考になるかも知れない。

上司のNさんもげらげら笑っていた。きっと降って湧いたように4月から私の論文指導をさせられた揚げ句、後で「お前は何を指導していたんだ?」とか部長に怒られている自分の姿を想像して笑っているに違いない。気持ちはよ〜く分かる。(^_^;←お前のせいだろうが。

とりあえずNさんに読んでもらって、構成とか追加ネタの助言をもらう。ところが、もうどんな風に書いていいのかさえ頭に浮かばなくなってきている。このページに書くネタだったらいくらでも浮かぶし、すいすい書けるのにねぇ。(^_^;仕事をストップして、ひたすらそのネタを表現するにはどんな文を書けばいいのか悩む。悩むって言っても頭真っ白状態だから、全然浮かんでこないんだけど。(^_^;

結局まる1日かかって40行ほど追加しただけ。怒り狂った審査官の顔が目に浮かぶ。もっとも2次審査で誰が審査するのか知らないし、名前を知っていたとしてもきっと顔を知らない人なんだけど。(^_^;

私の会社のある製品のユーザーから、「あんたの会社ではプログラマーが多いはずだけど、Mule/Meadowを使っている人は少ないんですか?」と聞かれた。回答は私の担当分野じゃないから、実際の担当者がどんな回答をするかは分からない。ただ、私の周りを見渡せば回答は「Yes」となる。WindowsでMuleがまともに動き出したのなんてつい最近の話だし、MS-Windowsを開発主力として考えていればMuleで書きたくても書けなかった訳で、Windows用かDOS用のEditorを使って書くのが普通だと思う。もちろんUNIXで開発している人もいるんだけど、その人が使うのってviなのね。(^_^;その人達に言わせるとEmacsとかMuleなんてのは重くて仕方がないらしい。私はEmacs派だけど、UNIXで開発している訳じゃないからどうでもいいし、Windowsで使うんだったらもっと手に馴染んだツールが存在する。

別部署では、ノートンのWinDoctorとの相性の問題が表面化したらしい。担当者に詳しく噺を聞いた訳でもないし、自分で調べる気もさらさらない(^_^;ので、断片的な情報でしか判断できないのはお断りしておく。不具合の原因は、WinDoctorがWindowsシステム全体の動作に関わるようなレジストリ情報をクリーンアップしてしまうおかげで、システム情報を正しく追跡できなくなって、変な事が起きるとの事。そんなのシステム情報を追跡できなくするWinDoctorが悪いんだから、「文句はあっちにいってね」で私だったら済ませちゃうだろう。この担当者は違った。

しかし、現実にこのような通常の環境ではありえない異常なことをしてくれる
ソフトウェアがある以上、こちらでも方でも対応をするしかないと思います。
立派と言うか、よくやるというか、もっといえば普通そこまで面倒を見るか?というか。(^_^;ソースファイルが理解不能だと買いって文句を垂れている私のような奴は、爪の垢でも煎じて飲まなければならないな。

1998/06/01(Mon)

社内論文だが、締切日が一次採点者(部長)の裁量(お情け)で2日延びた。その二日の間に「ここが弱いよね」と指摘された所を加筆して行ったのだが、もうパニック状態になっていてまともに書けない。「もう不合格でいいから早くとどめを刺してくれ」と言う気持ちが20%、「どうせ審査に通らない論文なんだから、いい機会だ。言いたい事を言ってやれ。」という気分が30%。「何を伝えようとしているのか、自分でも訳がわからなくなっている」というのが残りの50%。そんな気分で書いているから、書いても書いても、自分の考えている事とは相当隔たりがあって、そのギャップをどう埋めていいのかさっぱり見えてこない。

その論文は、端的に言えば「こんなツールを開発すればバカ受け間違いなし」という趣旨なんだが(内容はヒ・ミ・ツ@ハートって馬鹿か、俺は)、金曜日には「開発すべきだって結論が出ているけど、売れるって(需要予測が)どこにも書いていないじゃん。」という指摘をされた。まさしく図星で、ぐうの音も出なかった。まあ、あの程度の出来では斜め読みしてもらったのかすら怪しいものだが、その程度の読み込みで分かるほどの巨大な穴が論理展開に空いていたのは事実なので、うなだれるしかない。

言い訳させてもらえば、最初その開発初期コストを見積もった時には、店頭ベースで1億円売り上げないと赤字になるという悲観的な計算だったのだ。需要がある事は確信していたのだが、1億円を売り上げないとPayしないとなると相当勇気がいる。最初この数字を指導教官のNさんに見せた時には「一億円売って、やっと採算分岐点かぁ」と言っていた。もちろん表情からは「これは箸にも棒にもって奴だな」と言いたげな表情が見えている。私も「これじゃあ門前払いになるだろうな」と感じていた。

ところが、その後色々初期経費削減のアイデアを追加したり、開発費用を細かく見積もってみたら、必要経費が減る、減る。(^_^;一番減らせるケースなら、最初の見積もりの1/4、多めに見積もっても最初の3/5程度の費用で済むという試算が出た。最初、1億円と言う見積もりが出た時には、「これは相当媒体告知とか、販売促進をやらないと赤字が出るぞ」と思っていたのだが、これだけ採算分岐点が低くなれば市場規模から見て達成できない方がおかしいって気分になっちゃったんだよね。

後もう一つ、コストに関して書きたくなかった理由は、「私が使いたい」ツールだったから。要するに「俺が欲しいものはみんなも欲しがるはずだろ」っていうのが、表立っては書いていないけど、一番のベースコンセプトだったりする。こんなコンセプトの企画に需要予測が立てられる訳がない。(^_^;

まあ、この理由が前面に出てくると「俺が欲しいツールなんだから、会社は黙って開発させろ〜」という支離滅裂になっちゃうんで、その事は書かないように気をつけていたのだが、どうも指導教官の目から見るとそのような雰囲気が端々に漂っているらしい。(^_^;隠し事は下手なつもりはないんで、きっと指導教官が優秀なんでしょう。ちなみにその指導教官もこのページを読んでいるというのが計算に入っています。:-)でも、前書きなんか思い入れ以外の何者でもないからなぁ。(^_^;;

と言う訳で、とりあえず社内論文は今日でおしまい。やっと今日から普通の生活に戻れ、日記も再開できる。まあ、来年の今頃にはまた中断するだろうけど。(^_^;;

10日ほど日記が停滞していたが、とりあえずその間に起こったことは折々「過去にこんなことがあった」という形で最新版に書いて行く事にする。そんな事を言っても絶対忘れるに決まっているが。(爆)

まあ、忘れないうちに。5月に入ってから引き継ぎを受けたコードを読んでいるのだが、色々面白いコーディングをしている所があるので忘れないうちに紹介してみよう。とりあえず私は笑った。(^_^;;

あるCソースの関数(1つではない)で、

WORD wLft;
と変数が定義されていた。ハンガリー記法により、最初のwはこの変数の型がWORD型であることを示している。結局変数の使い方を示しているのは"Lft"の部分だけ。まあ、このスペルから想像するに、なにか左(Left)に関係した変数であることは間違いない。この関数も例によって100行以上ある関数なんだが、どうも読み進めていると、左右方向じゃなくて上下方向の座標の計算に使われているようだ。あれれ、と思ってよくよく関数全部を見渡してみたら、

// Length From Top

wLft = なにかの計算;

という部分を発見した。つまりLftというのはLeftの省略形じゃなくて、Length From Topの省略形らしい。つまりこの変数は左右方向の座標位置ではなくて、上下方向の座標位置に関する変数だった訳だ。とても私にはついていけない省略。(^_^;

まだある。次のソースを見て欲しい。


wyMin = (some initialize value);

while (lpDetailの終端判定)

	//lpDetailの更新処理

	…

	if (wyMin < lpDetailDataC->wxStart) {

		wyMin = lpDetailDataC->wxStart;

	}

	//次のDetailデータを追う

	…

}

これを分かりやすくマクロで書けば、次のようになる。

wyMin = (some max value);

while (lpDetailの終端判定)

	//lpDetailの更新処理

	…

	wyMin = max(wyMin, lpDetailDataC->wxStart);

	//次のDetailデータを追う

	…

}	

ある配列の値の最大値を格納する変数にwyMinという変数を使うなんて、私の想像力では考えつかない。(-_-;)

驚いたのが、次のコード。


while (1) {

	if (ある条件) {

		…

		break;

	}

	…

}

while (1)という構文は難らかの理由で、単純なwhile、do whileを使ってはループを脱出できない時に使われるけど、明らかにこの場合は

while (ある条件) {

	…

}

と同値である。プログラムの行数を増やす以外には、全く何の意味もない。

もう、笑っちゃうしかないというのが次のコード。


while (1) {

	if (ある条件) {

		…

		break;

	} else if (別の条件) {

	   …

	   break;

	}

	break;

}

無限ループに入って、特殊な脱出方法があるんだなと身構えた瞬間、ループではないことに気がつかされる。じゃあ、whileの意味って何?というと、全く無意味。以下の同値コードを見れば一目瞭然。

if (ある条件) {

	…

} else if (ある条件) {

   …

}

これも結構笑える。30行ほどある関数のローカル変数の宣言部である。

WORD wTmp1, wTmp2, wTmp3, wTmp4;
他に変数宣言はされていない。本当に1、2ヶ所で使われる寿命の短い変数だったらともかく、数字1,2,3,4を頼りにその関数が何をやっているのか解読するなんてのは、まさに暗号を解いているような作業である。

本当に、行数稼ぎのコードじゃないんだし、勘弁してくれよ〜という気分になってくる。ちなみに、このコード、現段階ではそれでも最初の印象よりはかなりの部分を再利用できそうである。全体(といっても1万行程だが)の40%ほどは再利用できるだろう。

しかし、全体を読んで見ると、アルゴリズムの構造的な欠陥が、プログラム構造とがっちり結びついているので、改良するとしたら構造的に欠陥を抱えている部分は全面廃棄するしかない。廃棄しなければメンテナンス不可能だし、廃棄したら余計な工数がかかってこっちの評価が下がる。どうすりゃいいんだ?(-_-#


1998/5 後半のぶつぶつ

1998/6 後半のぶつぶつ

日々のつぶやき 目次

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

目次ページ