やばいプログラム設計 その値は全員で共有しちゃダメでしょ!

Pocket

ここのところ、イライラマックスなmasaoです。何故イライラしているかというと、お酒を我慢しているからなのですが、ここでは、そんなイライラなところに舞い込んできた今回の不具合解析の依頼のお話を掲載しています。

スポンサーリンク

 

子画面で〇〇を一覧表示する簡単なアプリケーション

不具合の内容は、ボタンをクリックしたら何かの一覧がダイアログが子画面として出力されるはずなのだが、出力でないというものです。そして、アプリケーションも固まったままになるとのことです。

「なんで、急にでなくなるんだよ?」

どうせ、いつものように、「何もしてないけど急にこうなった」とか言いながら、「あー、これのパラメータは修正した」とか言い出すのかとも思いましたが、出ないものは出ないようです。

そう、それは、ここのイライラyukikoライターが便秘で苦しんでいるかのようです。

yukikoのしつこい便秘に効くかはわかりませんが、便秘なら、コレ!

 

調査開始

さて、それでは調査開始です。ボタンを押して、動かなくなるのですから、当たり前ですがボタン押したときのコードを追っかけます。

途中、何してるんだかわからない部分はすっ飛ばして大体の動きを抑えます。あっさり、コードは読み終わりましたが(当然すっ飛ばすので早いです)、わかりません。WHY?
仕方がないので、すっ飛ばした部分も追いかけるのですが、原因は思いのほか早く判明しました。

 

その値は全員で共有しちゃダメ!

原因は、その子画面の最終表示位置を設定ファイルに保存して、アプリケーションはボタンがクリックされたら子画面を設定ファイルに保存された最終位置に出力するという仕様のせいでした。

しかも、最終表示位置は全員で共有する仕様です。誰かが後から終了位置を変えると、上書きされます。

「まあ、よくわからん仕様だな。なぜ全員で使いまわすのかね?その値を?」

しかし、それだけのことで、なぜ画面が出力されなくなるのでしょう。これもほどなく判明します。

マルチディスプレイ環境のユーザーの場合、メインスクリーンからはみ出た位置に子画面を表示することも出来てしまい、最終位置がマイナス値にもなったりするのです。

マイナス値で保存された表示位置で、シングルスクリーンの環境のユーザーがダイアログを表示された場合、画面からはみ出してしまっていました。

そう、ダイアログは出力されているが、操作できないがスクリーンの外に出力されていたのでした。

 

暫定対応が、まさかの恒久対応?

仕方がないので、設定ファイルに保存されたマイナスの出力位置を書き換えます。それで、暫定対応完了です。シングルスクリーンの人もが画面の中に子画面のダイアログが出力されるようになりました。パチパチ!

が、この仕様は明らかにマズイのですが、今日は飲み会なので対応したということだけにして連絡して完了です。原因はよくわからんと濁しておくことにしましょう(もちろん、聞かれたらですけどね)。

恒久対応としてサラ~っと逃げとおせないか一瞬だけ思案しましたが、次の瞬間それは意味ないことに気付いちゃいます。本日は飲みに行きますので明日になったら忘れていることでしょう。依頼した人も依頼された人も~~~~~。

 

アディオス!ダイアログ!ウェルカム!ハイボール!

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *