すべての修正をフィックスし「再開発スタート版」のインタクトな開始点を確保する

サブマシンにログインしようとしたらパスワードが間違っています,になった.何度打ち直しても通らない.電源を落として再起動したが,変わらない.仕方がないのでキーボードを外してタブレットでスクリーンキーボードを使って入力したら通った.キーボードをつなぎエディタを起動してテキストを入力してみると,”ai”と入力したつもりが,”a5”となっている.NUMキーがオンになっていた.いつもと違ってキーボードの右上にあるインジケータ3つのうち2つが点灯していることには気付いていたが,文字というより刻印のアイコンが小さくて読めない.ともかくログインできたらネットでマニュアルを探して調べてみようと思っていたが,ログインできないのだからどうすることもできなかった.

NUMキーをオンにするためにはFnキーを押しながらInsキーを押さなくてはならない.そんな込み入ったことを間違ってもやるはずはないと思うのだが,そうなっていたのだからいつの間にかそんなことをしていたのだろう.昨夜は意識はかなりはっきりしていたのでまだまだ作業できそうな気分だったが,思っているよりずっと意識が希薄になっていたのかもしれない.昨日は仕掛りの修正をいくつかFIXしておこうと思ったのだが,何度も惨めな失敗を繰り返している.

クリティカルな修正を行う場合には,まず共通ヘッダファイルで「SIMPLEEDGE_generationを廃止@20201020」のようなリテラルを定義し,それから#ifdef #else #endifで修正前のコードを保存したまま修正する.Visual Studioは偽になっているプラグマのブロックをグレー表示してくれるので,FIXするときにはグレーのブロックを削除すればよいというだけの話だが,#if #endifがネストしているような場合もあり,そういうときにはすべてグレーで塗りつぶされてしまうので見間違えるリスクはかなり高くなる.実際問題として100箇所修正を入れるより,修正点が100箇所ある修正Aをフィックスする方が難しい.

今日はもちろん全天快晴でクリアできるとは思うが,やってみなければ分からない.対策としては失敗に備えて細かくバックアップを取るしかないが,パッケージ全体をバックアップするのではなくDLLのソースとヘッダに限定すればかなり簡単になるだろう.

昨日の目標は「いくつかの修正をFIXする」ことだったが,今日は「すべての修正をFIXする」ところまで拡張しようと思う.このセッションを「再開発スタート版」というテーマで開始した以上,まず,それに相応しい開始ポジションを確保しなくてはならない.#defineで定義された条件コンパイルによる修正の他に,「仮修正」ないし「暫定修正」のコメント付き修正が無数にある.これらを一掃して完全にクリアな状態までソースコードを戻すというのが今日の目標だ.作業に掛かる前の版を別に保存しておくことにしよう.

とは言え,STOP文の実行を一時的に抑制するために入れた暫定修正などもある.⇒これらは一度通常の状態に戻してから改めて逐次止めるなどの措置を取り直すことにする.このような暫定修正が2本ある.暫定修正@20201026と暫定修正@20201028だ.⇒一応現行のサンプルではどこにも停止しない.あとはグレー表示のブロックを一掃するだけだ.ただし,日付だけはコメントに残して置いた方がよい.日付があれば後日ログを逆引きすることも可能だ.いや,これでも結構失敗する.大きいブロックでは修正するたびにコンパイルして失敗したらUNDOで戻るというのしかない.VSはプラグマブロックをーで閉じると「アクティブな/でないプリプロセッサブロック」を表示してくれる.これに従うのが一番確かだ.小さい+ーのチェックボックスを使うので,マウスが滑らかに動かないと作業にならない.⇒大体要領がつかめた.

ようやく調子に乗ってきたと思ったら,

fatal error C1004: 予期せぬ EOF が検出されました。

が出てしまった.UNDOでどこまで戻ればよいか?⇒一つ戻っただけで収まった!つねにプラグマ(ディレクティブ)を3つ削除しなくてはならないのだが,最後に除去する#elseを取り忘れていたのだろう?これでソースファイル1本が終わった.SimpleGraph.cppには元のコードが見えなくなるくらい修正が入っていた.ビルドしてみよう.ビルドも通る.実行も可能だ.⇒if (0)などのコードがある.暫定修正で処分が決まらない場合は,「保留」のリテラルを使ってコードを残しておく.「NOTHING」は無条件削除.Jikusenzu.cppが終わった.いや,終わっていない.Bobject.hにもかなりのコンパイルオプションがある.これらも一旦すべてFIXしてしまうしかないだろう.もし,後日問題が発生したら,「ZELKOVA 2020-11-06 最終版」まで戻って調べ直すしかない.⇒ともかく先にnodule.hのオプションに集中しよう.

ここでバックアップを取っておこう.ZelkovaDLLフォルダの中にはINCLUDEとSRCがあるが,フォルダごとバックアップすることにする.370MB,コピーは数秒で終わる.⇒どうも大失敗をやらかしたような気がする.「SIMPLEGRAPHのattributeを廃止@20201105」を止めたままで作業を開始してしまった.全部一からやり直さなくてはならない.⇒この修正は一旦放棄することにしよう.DrawingObjectを実装するときにもう一度見直せばよい.それほど大きな修正ではない.残っている部分は「保留」にしておけばよい.

「有効結婚リンク判定の重複処理削減@20201031」をFIXして実行時エラーが出てしまった.修正に失敗している可能性が高いが…UNDOでそこまで戻せるかどうか?やってみよう.関係するファイルは,KinshipDegree.cpp,PartialMap.cpp,TableSort.cppの3本だけだ.ファイルを比較してしまった方が早いだろう.⇒余分なことをしていた.FilteringKinshipを実行後でなければ意味がない検査を前方に移動していた.その場の思い付きが命取り…なんでそんなことをやったかって?見た目にその方がかっこいいと思ったから,そばにあった大文字のASSERT_NEVER3つを寄せて並べてみただけ…

「SIMPLEGRAPHのattributeを廃止@20201105」はやっぱり復活させておかないと不都合だ.すでにこの修正を当てにしているところがある…⇒いや,それも少しおかしいのでは…止めた状態でこれまでビルドできていたのだから,どこかが変わってしまったと見るしかない.未定義エラーが出ているところで修正を誤ったのではないか?⇒確かにそのようだ.バックアップから復元した.⇒フルバックアップしておこう.⇒また修正を誤っているようだ.未定義が出てきた.DataList.cpp.DATALIST::cancelでBottomlistを呼び出している.⇒修正した.

nodule.hの分が完了した.17本の条件コンパイル付き修正をFIXした.他にテスト用暫定修正が3件.次はBobject.hで定義されているものを見てみよう.ここではまとめてバックアップしておこう.⇒Bobjectの分が完了した.14件をFIXした.うち4件は廃止.その他に保留としたものが2件.「ファイルへ出力をサポートしない@20180314」とCOLLAPTIBLEMARRIAGE(結婚枠を折り畳む機能をサポートする)だが,よくわからないので保留としておいた.DLLだけバックアップ.

仮修正が41件,暫定修正が35件,そのほかに暫定を含む文字列が26件ある.暫定と仮修正では仮修正の方が一時的なものという度合いが強いので,まずこれからチェックしてみよう.いや,こちらは後回しにした方がよい.仮修正の中にはテスト用に設置してそのまま放置というのもあり得る.暫定修正は一応論理的には意味のある修正と考えられるから,それが安定動作しているという意味で外せるかもしれない.

暫定修正の場合は「暫定」を取って「修正」とし,日付だけ残すことにしよう.削除されている場合は「x行削除」とする.暫定修正で一時的に設置しているものはTEMPORARY@yyyymmdd のように表記することにしよう.⇒暫定の文字列はソリューション全体から一掃された.一時的な動作に関してはすべてTEMPORARYの語を含むようにした.暫定公開,暫定リリースなどは非公式版公開,非公式リリース,応急対処版などとした.現在「TEMPORARY」の出現は28箇所ある.

▲LoadWndPostの修正にあいまいな点があるので確認を要する.

仮修正@20190202が8箇所もある.これは調べる必要がある.修正が閉じていない可能性があるものはINCOMPLETEを付することにする.失敗した.手順を誤って仮修正@20190202をすべて仮修正に変えてしまった.⇒バックアップから復元した.仮修正@20190131も12箇所ある.これもINCOMPLETEに付け替えておく.⇒仮修正はほとんど同じ日付で複数存在する.@20190204が4個,@20190128が3個,@20190130が3個,@20190129が2個.あとはFIXできそうだ.INCOMPLETEは32箇所になった.

  • TEMPORARY 28
  • INCOMPLETE 32

TEMPORARYはあくまで一時的なものなのでそれほど問題性はないが,INCOMPLETE はFIXする必要がある.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA