Obj.C

obj.C:ログ依存症

ログの取り方をコメント見出しと合わせ、デザイン的に見栄えを統一しました。

しかし、そんな作業は不要な作業に過ぎません。統一的にログを入れるという発想からして、「デバッグするのに何も考えようとしていない、ログに頼ってそのあとから何か考えようとしている」ということに尽きます。

考えていないから現象面を追いかけることになります。考えのベースがないから現象が変われば、ふらつくことになります。やれやれ。

言い換えると、問題がわかっていない。問題が何かを捜しあぐねているということになります。問題が定義できないから問題解決されたときの状態が頭に浮かばず、目標を定義できず、原因追及に入れません。つまり、そこで停滞。混乱の極み。そもそもこんな事態になるのは、イベントが起きたときに何をするかという方式上のことも関係しているのかもしれません。どういうイベントが起きるかは、実際にそれが起きてみないとどんな性質のイベントなのか、本当に理解するのはずっとあとのことになりますからね。

それでも、ロジックを単純化するためにコードを書き直したので、わかりやすくなりました。また、そんなつまらない作業をしながら、はじめのころ書いたコードについての理解に誤りがあったことを発見しました。

手が滑ったとしか思えません。参照したwebページの説明をコピーしたのがまずかったようです。でも、まちがいはまちがいです。substringFromIndexを末尾文字からn文字分抽出と記述していました。indexのn文字目以降を抽出が正しいでした。

NSString        *fixCH0;

fixCH0 = @”01234567890″; 
fixCH0 = [fixCH1 substringFromIndex:[fixCH0 length]-4]; 
NSLog(@”10.末尾文字列抽出=%@”,fixCH0); // 10.末尾文字列抽出=7890

前後しますが、これはコメント見出しにログ表示を合わせるようにした成果です。いろんなところでおめでたい勘違いをしていそうで、先々のことが思いやられます。

スクリーンショット 2014-02-08 14.34.16

集中しないといけない問題は、次の2点です。

  • .rtfの読み込みがうまく行っていない。
  • rtfdの表示結果は正しいか。

p.s. そう言えば、生まれて初めて作ったプログラムはタスク管理のプログラムで、タスク管理のためのバッファを動的に確保し、待ち行列をタスク別に作り、タスクに引き渡すというものでした。たいへん重要なプログラムだったのですが、どうしても、なぜこのプログラムが動くのか、わかりませんでした。タスクの発生条件としては、ハードウェアからキックがかかる、いわゆるイベントが発生するしくみでしたが、なぜ、一番先にこのプログラムがOSからキックされるのか、なかなか理解できませんでした。OSのコードを見て、論理的な筋道はわかっていたのですが、それでも、OSはイベントをなぜ受け取るのかがわからなかったのです。

このときもログに頼り切っていました。作成したプログラムが新たにタスクを発生させるということメモリを動的に管理する役割だったため、タスクの異常処理とメモリリークはあり得るトラブルでした。しかし、一番思いもよらなかったのは、本来ありえない仕様になっていたハードウェアからの二重アテンションがケースによっては起こってしまうということでした。

当然、そんなことは思いのほかのことですから、イベントのないタスクがとんでもないところのタスクを異常終了させ、システムダウンにつながるトラブルを何回も発生させるとは、想像さえできませんでした。

コンピュータメーカーは仕様にまちがいはないと言い張るし、fixするのに1年以上もかかりました。お客様からはその度に大目玉で、夜中に何回もホテルに電話があり、呼び出されました。そのときも、今思えば、ログを書き出して、それを解析するというやり方でした。当然、問題がない箇所のタスクを調べ尽くすのですから、問題がわかるはずがありません。

プログラムをリエントラントな構造で動かせないといけなかったため、大量のログをリンクを追いかけながら調べるのですが、調べるためのテストプログラムをなぜ書かなかったか、不思議なくらいです。イベントで何かするという構造は、多分、これに近いのではないかと思いました。

最終的には、workaroundとして、タイマーによる二重アテンション対策を入れました。原因は、ケーブルがノイズを拾うためで、メーカはアースを取ったりなんだりしました。しかし、二重アテンションが起きなくなることはありませんでした。

それでもいいことはありました。2年近く中洲の夜を満喫できましたし、志賀島や能古島まで遠出して健康的な一日を過ごすこともできました。何事も悪いことばかりではありません。