ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

何もしていないのに動かなくなる

Gaucheコンパイルの話

Kyoto.lispに備えてGauche 9.3.0をbuildしようとした時の話。Mingw環境でコンパイルしてみたら、こんなエラーが。

checking for C compiler default output file name... a.exe
rm: cannot remove `a.exe': Permission denied
checking for suffix of executables... rm: cannot remove `conftest.exe': Permission denied

4月にbuildしたときは上手く行って、そこからコンパイル環境が変わるような事はしてないんだけどな。つまり「何もしていないのに」、Mingwの開発環境が動かなくなってしまった。エラーが起きる一番シンプルな状態を再現してみると、 gcc.exe -c hello.c はOKで、その後のldでエラーがでる。
どんぴしゃの質問を発見。
http://okwave.jp/qa/q6984897.html
いやいやコンパイルは成功しているんだよ。a.exeが作れないんだよ、と細かい突っ込みをしながら、状況を整理してみる。エクスプローラからでも、mingwのコマンドからでもa.exeというファイル自体は作れるし、削除もできる。ただ、gccを動かすとa.exeが作れない。

結局問題はアンチウィルスソフトがa.exeを作るのをブロックしていたという落ち。アンチウィルスソフトを切れば、Gaucheも最後までbuildできる。a.exeという名前のファイルの作成自体はOKなんだけど、アンチウィルスソフトからみて正体不明なld.exeが正体不明で実行可能なa.exeを作ろうとするとブロックされる。前回のビルドから、今回のビルドまでにアンチウィルスソフトのアップデートがあって挙動が変わった様子。アンチウィルスソフトのアップデートや、ウィンドウズアップデートなんかは、結構無意識に終わっているので、僕としては「何もしていないのに動かなくなったよ」としか言いようの無いトラブルになってしまった。

ネットワーク上のExcelの話

仕事でネットワーク上のExcelファイルを操作するプログラムを動かしていたのだけど、新しくインターンの学生が来てからExcelの操作で毎回警告が出るようになった。このソフトは毎日動かしていたから急に挙動が変わったので「インターンの人が来る→Excelの警告がでる」から因果関係を探すことが出来た。分かってしまえば答えは簡単で、今まではサーバーの共有フォルダーにアクセスするのに認証をしていたけど、インターンの人が来たときに一時的にそのフォルダーへのパスワードを不要にした。Windows環境だと、自動的にネットワークに繋がるから、パスワードが不要になっても全く気がつかない。アクセス制限の無いところから持ってきたExcelファイルは、外からいろいろ操作すると警告が出るようで、共有フォルダーのアクセスにパスワードが必要な状態に戻したら以前と同じ挙動に戻った。

これも「何にもしていないのに」、突然警告が出るようになったパターン。

教訓

ここから得られる教訓は、「何もしていないけど、動かなくなりました」っていう声に対して、何にもしてないわけ無いだろ正直に話せ、と詰め寄ってはいけないという事。特にエンドユーザの目線で、本人の知らないところで環境が変わっているというのはこれからもどんどん増えていくと思う。そして、エスパーに求められる能力はどんどん高くなっていくので、僕たちはもっともっとエスパー力を高めないといけない。