2005-11-22
■ [B-CAL]愚行の尻拭い 
今回はちょっと難しい話です。
さて、本日、B-CAL 1.3.0を公開しました。
今回のバージョンアップの目的は、J-OSとJaPon環境でB-CALのデータを受け渡す事です。
最近は、英語版Palmを日本語化する人が増えたため、今までJ-OSを使っていた人が、新しいデバイスを購入した際にJaPonに乗り換えたり、逆にJaPonからJ-OSに乗り換えたりする機会が増えています。
そんな折、B-CALユーザから
「機種を乗り換えたらアイコン状態が保存できなくなった」
とか
「B-CALに登録してある情報を読み出せなくなった」
と言った報告を聞くようになって来ました。
原因を調査すると、たいていの場合上記のようにJaPonとJ-OSの乗り換えがきっかけだと言う事も分かりましたので、それぞれの環境で色々と調べてみると、興味深い事実が発覚。
JaPonとJ-OSではB-CALの保存データの並び順が違うのです。
B-CALは、表示に使ったアイコンの種類と最後に表示した人、そしてB-CALに登録している人の氏名と生年月日を1つのデータベースでまとめて管理しています。
データベースではこれらの情報をレコードごとに管理しています。
例えば太郎さん、花子さんという二人の情報を登録したデータベースがあったとして、J-OSではそれが以下のように作られます。
1.最後に表示した人の情報
4.太郎さんの情報
これは、僕がB-CALをリリースした頃に使っていたVisor Platinum(日本語版PalmOS3.5)と同じ並び順になります。
ところがJaPon環境ではこの並び順が以下のようになります。
2.太郎さんの情報
3.最後に表示した人の情報
実はこの並び順は、OSのデータベースのソート(並べ替え)機能の違いに由来しています。
B-CALは最初に設定情報を読み、その後データベースのソート順に従ってデータを順番に読む仕組みになっています。
ところが環境が変わってしまうと、今まで綺麗に整列していたデータがぐちゃぐちゃのデータになってしまうので、ソートされた順番でデータを読み出す事が出来なくなってしまっていたのです。
ここで皆さんは、
「これはJ-OSやPalmOS3.5と並び順が違うJaPonの不具合ではないのか?」
と思うかもしれません。
ところがどっこい。何と僕が調べた限り、クリエPEG-NX80V(日本語版PalmOS5.0)では、JaPonと同じ並び順になるのです。
もうこれでは訳がわかりません。
今年になって何度かJaPon対応と言って行った改修作業は、全てこの問題を解決しようと試みた結果です。
ただ、小手先で対応しようとしたのが間違いで、結局JaPon環境では動作するようになったけど、J-OSへの移行はダメという状態に持っていくのが精一杯でした。
今回のVer1.3.0で追加した「情報再構築」機能とは、まさにJ-OS配列のデータをJaPon配列に変換(またはその逆)するための機能です。
一番泥臭い手法ですが、保存データを先頭から全て読み込んでOSのデータベースのソート順にあわせて再度保存データを作り直しをしています。
これで何とか表示のつじつまを合わせる事が出来ました。
さて、では何故B-CALでだけこんな問題が発生しているのでしょうか?
その理由は、ソートの鍵となる文字列に含まれていた特殊文字にあります。
実際には、JaPonもJ-OSもデータの整列を行う際に、それほど大きな違いがあるわけではありません。一部の特殊な文字を除いては。
実はB-CALで使われていたキー文字列に、たまたまその特殊文字が含まれていたために、こんな現象が発生してしまったのです。
当時は良かれと思って組み込んだ特殊文字が仇となってしまった訳です。
とんだ愚行のおかげで、その尻拭いに長い時間を費やす結果となってしまいました。