今日は、唯一の空き時間「図書」の時間に、M田のしんちゃんに、ブログシステムをデモンストレーションした。

完成してから、説明すればよいだろう。という命題は、真でもあり、偽でもある。いや、そんな命題なんてないんですが。

人に説明することは、自分への確認につながるからである。これは非常に重要。

はっきりいって、人にデモンストレーションして、相手が理解できなければ、
相手が余程のその分野に関しては馬鹿であるのか、デモンストレーションの内容そのものに、
問題があるかのどちらかである。

今回の場合、ある程度の漠然とした要求はM田先生からであるので、
「何がしたいか」ということは、100%相手の頭の中にある。
従って、デモンストレーションして、理解できなかった場合。

インタフェースの設計を抜本的に見直す必要に迫られる。
つまり、取扱説明書を読めば分かることであっても、そのページを見れば、
説明書を見なくても、大体予測がつき、ちょっとしたヘルプを付けるだけで、
充分に理解できるようなインタフェースの設計が望ましい。

で、今日はそれをして、大体理解してもらえたので、合格か。
ところが、なんとM田先生が少し目を離したすきに、日本語が化けた。
かなり、これは見られるとやばいので、平然と、別のページに飛んで、
デモンストレーションを続けた。
デモンストレーション中、頭の半分は、
「なぜ、日本語が化けたのか?途中までは普通に日本語も入力できてたよね。どのような手順で化けたんだろう?」
で高速回転だった。

で、家に帰って再現性の調査をする。30分以上、いろんなパターンで、入力する。
で、やっと発見。この時、日本語が化ける。

「一日目の記事を半角アルファベットのみで入力し、一回登録して、再度その一日目のページに行き、
その日の中の2番目の記事に飛んで、全角文字を入力した場合、一日目の1番目の記事の日本語が化けて、
2番目の記事の表示が空白になる」
という不具合が判明。再現性もある。

原因究明から解決までに2時間程度かかった。だるかった。
多分、仕事だったら、以下のような障害報告するんだろうな。

  • 障害原因

サーバは、Windows及び、Linuxのどちらでも対応できるように、強制的に日本語をsjis-winエンコードで統一させる仕様。
sjis-winに変換するために、強制的にmb_convert_encodingを使っている。
しかし、データベースにする際に、xmlをパースする必要があるが、そのパース関数は、UTF-8エンコードでなければ、
処理に失敗することが判明していた。
そこで、sjis-winエンコードUTF-8エンコードに変換する必要があったので、
mb_convert_encoding($str,"UTF-8","auto");
としていたが、autoでは、自動的に前のエンコードsjis-winであることが判明できず、OS独自のエンコードで変換していた。

ところで、いつも開発の環境は、Windowsなので、sjis-winエンコードで同じなので、autoにしようがしまいが、
この現象は発生しなかったが、UNIX環境では、EUCエンコードなので、autoで判明できなかったエンコードが、
作用してしまった。

  • 対応

mb_convert_encodingで、autoではなく、強制的にsjis-winとして、変換する。

  • 結果

オールグリーン!

しかし、まだたまに、XMLデータが配列化されて、<2>なんてタグが出てきてしまう不具合あり。
これは解決できるんだろうか・・・。