当事者は意外と問題の発見が出来ない&Linuxも手間がかかる
今日はあるプロジェクトで問題がなかなか改善できないということで、私も参加して検討することになり、出社しました。まずどういうパターンで問題が発生するかを会議室で確認するミーティングを行い、それから検証機を使って私が、現地だとおそらくこういうパターンで使うはず、ということをイメージしながら操作してみると・・・なんと1発で問題を発生することができ、発生パターンさえ確定できれば調べるのはあっという間で、すぐにシステムの内容を把握しているメンバーたちが原因を突き止めました。
意外とこういうことはよくあるもので、直接システム開発に関わっているメンバーは頭の中にソースやアルゴリズムがしっかり入っている分、操作パターンの想像にも固定観念が働いてしまい、想定外のパターンが試せなかったり(今回は想定外というほどのケースではないのですが)、そもそも対応に右往左往しているうちに頭の柔軟性が失われてしまうものなのでしょう。まあ、今回のシステムは長い歴史のあるソースを受け継いだメンバーたちが対応しているので、実際に簡単ではないのですが。
テストは当事者以外の人がやるのが良いということの再確認になった感じでした。特にユーザインターフェースものはユーザがどのような操作をするか、無限に近いほどのパターンが存在するものです。
さて、意外とあっさり問題の原因は見つかったので、私は他の仕事をしていました。先日Windowsは面倒くさい、という話題を書きましたが、実はLinuxだって面倒なことはあるのです。今回手間がかかっているのは、Linuxで無線LANを使うというあたりで、Windowsならデバイスドライバをインストールすればあっさり使える無線LANですが、Linuxはそもそもデバイスドライバをメーカーが提供してくれていないので大変なのです。
まずはWindowsやMacOSでデバイスを認識させ、チップに何を使っているかを確認し、チップメーカーから直接Linuxドライバが配布されていないか、あるいは誰かがノウハウを公開していないかなどを調べます。ドライバはソースで提供されていることがほとんどなので、コンパイルしないとならないのですが、アプリケーションと異なり、ドライバはカーネルのビルド環境が必要です。まずは対象のLinux環境でカーネルビルド環境を整え、実際にカーネルをビルドします。これが実に時間がかかります。コンパイルそのものに時間がかかるのと、古いカーネルだとそもそもピッタリ同じソースが見つからず、新しいカーネルを入れることになるのですが、そうするとカーネルオプションがたくさん追加になっていたりして、そこを適当にやるとブートできないカーネルになってしまったりします。そんな試行錯誤をしてカーネルをビルドできれば、次はドライバをビルドするのですが、これがまたなかなか一発でコンパイルが通らないことが結構多く、ソースを眺めながらあれこれ試行錯誤する感じになります。
そんなことをしながら、何とか目的の無線LANデバイスを認識させました。普通はこれでアクセスポイントに合わせた設定をして使うということになるのですが、今回の仕事は無線LANデバイスでちょっと違うことをしたいという目的なので、さらにあれこれいじくり、まあ、使い慣れた環境で何とか目処がついたので、今回のターゲットマシンで使えるように、となるのですが、これがまた、マニアックなマシンで、有線LANはアダプターがないと使えず、それが見あたらないので無理。仕方ないのでLinuxのインストールも全てDVDに焼いて実行。さらにカーネルビルド環境や追加のドライバなどを、USBメモリーでコピーして構築、など、実に手間がかかります。おまけにキーボードが小さすぎてノイローゼになりそうなので、USBキーボードをつなげて・・・。まあ、カーネルのビルドを実行したあたりでそのまま帰ることにしました。CPUが非力なのでコンパイルも非常に時間がかかります。
ということで、Windowsだけでなく、Linuxも面倒なことはあります。まあ、Windowsに比べればブラックボックスが少ない分、精神的に楽なことは良いのですけどね。
そろそろ平和に落ち着いた気分に戻りたいところですねぇ。まあ、懐事情がひどい状態なので、仕事が落ち着いても気分的にはまだまだ問題が残りそうですが・・・。
とりあえず、多少はそれぞれ進んだので、ほっときたく途中なのでした。。