いなあものPalmware開発日記 このページをアンテナに追加 RSSフィード

2005-11-22

[]愚行の尻拭い 愚行の尻拭い - いなあものPalmware開発日記 を含むブックマーク

今回はちょっと難しい話です。

さて、本日、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.最後に表示した人の情報

 2.最後に表示したアイコン情報

 3.花子さん情報

 4.太郎さんの情報


これは、僕がB-CALをリリースした頃に使っていたVisor Platinum(日本語版PalmOS3.5)と同じ並び順になります。

ところがJaPon環境ではこの並び順が以下のようになります。


 1.花子さん情報

 2.太郎さんの情報

 3.最後に表示した人の情報

 4.最後に表示したアイコン情報


そう、環境設定の情報が後ろに来るんですね。

実はこの並び順は、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で使われていたキー文字列に、たまたまその特殊文字が含まれていたために、こんな現象が発生してしまったのです。

当時は良かれと思って組み込んだ特殊文字が仇となってしまった訳です。

とんだ愚行のおかげで、その尻拭いに長い時間を費やす結果となってしまいました。

2005-11-08

[]デバイスの多様性とアプリ デバイスの多様性とアプリ - いなあものPalmware開発日記 を含むブックマーク

PalmOS搭載デバイスと言えば、一昔前なら4つのアプリケーションボタンと上下ボタンが当たり前でした。

でもクリエジョグダイアルを搭載した頃から多様化が始まり、本家Palmでも、Tungsten|Tに5Wayナビゲーションを搭載したかと思えばZireは思い切ったコストダウンアプリケーションボタンが2つに減ったりもしています。

これは、アプリを作る側にとっては頭の痛い問題です。

ユーザはありとあらゆるデバイスアプリを使おうとするのに対し、僕が持っているデバイスはその中の本の一握りでしかありません。

だから、「WristPDAのロッカースイッチに対応して下さい」なんて言われると、気持ちは対応してあげたいのですが、果たしてどのような作りこみをすればいいのかまるで分からないのが現状です。

一応、アプリ製作者の間でも情報をやり取りしていたりして、実機を持っていなくても作りこみの基本は分かっていることは多いのです。

でも検証環境が無い中でアプリの対応をするのは、長さ1mの箸で豆を摘む様に細心の注意を払いながら、冒険も出来ず一番確実に動作するであろう方法をおっかなびっくり採用することになります。

例えば、シューティングゲームを作ったとします。

あるデバイスでは、シュートボタンを押したときにミサイルが1発しか発射されないのに、他のデバイスではボタンを押している間ミサイルを連射するようでは、ゲームとして全く別の物になってしまいますよね。

だからミサイルの発射は、ボタンを押した直後の最初のイベントを見つけるとか、ボタンを離したときのイベントを拾って処理を行ったりしないといけない訳です。

一事が万事そんな感じになってしまうのです。

また、Zireなどボタンの数が少ないデバイスでも動作する事を前提とすると、使えるボタンが自ずと決まってきます。

さらに、クリエTJ/THシリーズだと上下ボタンが左右に配置されていたりもします。

このように、全ての機種で使いやすいよう、ボタンに機能を振り分けることがとても難しい事だとお分かりいただけると思います。

さて、一方で最近はボタンに割り振る機能をカスタマイズするようなアプリが増えています。やはり、アプリの作者としては多くの方に自分のアプリを使っていただきたいと思っているので、どうしてもそういう方向に向かわざるを得ないのでしょう。

僕も、そんなボタンキャリブレーション機能をひとつのモジュールとして作り、NS Basicアプリを作っている方向けに提供できたらと考えています。

既に現在、試行錯誤を繰り返しながら拙作LightCycleにこのモジュールを組み込む試作を行っています。

まだまだ正常に動作するまでには至っていないのですが、このモジュールを公開できたならば、アプリによっては非常に開発の助けになるのではないかと思っております。

2005-10-25

[]スランプに陥ったとき スランプに陥ったとき - いなあものPalmware開発日記 を含むブックマーク

仕事が忙しかったり家庭の行事が立て込んでいたりすると、アプリ開発が1週間単位ストップするのはよくある事です。

ただし、そうでない時でも開発がストップする事があります。

そう、俗に言う「スランプ」です。

今日は、そのスランプについてお話したいと思います。

スランプの原因と言うのは様々です。と言うより原因不明な場合が多いかもしれません。

それはある日突然訪れます。

もう、何て言うのか全くアプリアイデアが思い浮かばないのです。

たまの休日、せっかくまとまった貴重な時間が出来てもそれをアプリ開発のために費やせない。結果として、ネットを数時間うろついて終わり。

たまの休日、貴重な時間がフイです。

…いや、誤解の内容に言っておきますが、本当に作る気が無いときもあるんですよ。

でもそれはスランプとは言わない。

スランプのとき、例えば作りかけのアプリが目の前にあるのに手に付かない状態なんです。

こんな時でも、色々アプリアイデアを考えているんですが、どうも思考がマイナス方向に向かっていて、それがいいアイデアだと思えない。

何かそういう時って、目の前のプログラムコードしか見えなくなっているんですね。

上手くまわっているときは、作ったアプリを通じてユーザの顔が見えたりして(自己陶酔?)想像力がどんどん膨らむのです。

この発想が出来ない。ダメなんです。

こういう時、僕は思い切って一切の開発をやめてしまいます。もういくらあがいてもダメ無駄なあがきは時間を浪費するだけです。

ところがです。こうやって「プログラミング断ち」をすると、そのうち禁断症状が出てくるんですね。僕は根っからのプログラマーのようです(笑)

ま、「プログラムジャンキー」とでも言うのでしょうか。次々と何か面白そうなプログラムアイデアが沸いてくるんです。

最初のうちは、ちょっとしたアイデアが…。

そのうち、もっと具体的なアプリの構想が…。

気が付くと別のアプリアイデアも…。(^^;)

何て言うのか、ダイエット禁煙したあとのリバウンドのように、こうなるともう誰も止められません。

気が付くと、目の前に形となりつつあるアプリがあるという寸法です。

…ホント、病気ですね。

2005-10-11

左右が逆だ

[]リアルタイムゲームの味方 リアルタイムゲームの味方 - いなあものPalmware開発日記 を含むブックマーク

NS Basic Ver5.0.2より、待望のにタイマーイベント機能が実装されました。

今までは、フォームのAfter Codeという画面表示後に実行されるコード内ででループを組んで、無理やりリアルタイムゲームを作っていたのですが、その必要が無くなったのです。

従来の方法ですと、デバイスごとに違う処理速度をプログラム内部で管理する必要があったり、複雑な処理分岐を行うと描画タイミングがずれてカクカクした動作になったりと、色々とプログラム側で考えなくてはいけない事が多かったのですが、タイマーイベントを使うことによって、一定間隔で画面描画処理を走らせる事をシステム側に任せることが出来るようになりました。

これは大きな収穫です。

実際、タイマーイベントを使うことで僕のLightCycleなどは処理をかなり軽く出来るでしょう。実際、どのように改造したらいいのかなどはこれから検討ですが、今のLightCycleで発生している問題のいくつかはこれで改善できると思います。

さて、そんな訳でタイマーイベントを色々と調査している訳ですが、簡単なスクロールゲームのようなものなら手間をかけずに作れることが分かりました。

ここにある画面のイメージは、実際に僕のPalmで動作しているものですが、PalmOSのあらゆるバージョンで、スクロール動作までは十分なパフォーマンスを得ながら動作することを確認しています。

ただPalmOS3.5では、キー操作イベントが入るとタイマーイベントがクリアされてしまうらしく、スクロールが停止するという不具合も見つかっています。

スクロール速度に関してはPalmOS4.1搭載のClie PEG-SJ33よりもスムーズなので、ちょっと残念なのですが、タイマーイベントを駆使したアプリは、PalmOS4.x以降対応となってしまいそうです。

しかしこのサンプル画面ですが…、通常の横スクロールゲームと比べて進行方向が逆ですね。何故なんでしょう(笑)

今のうちは「謎」と言うことにしておきたいと思います。

2005-10-06

[]開発者のためのアプリとは 開発者のためのアプリとは - いなあものPalmware開発日記 を含むブックマーク

アプリには必ず、それが誰のために作られたものなのかという目的があります。

そういう観点から見ると、CH CODEはアプリ開発者のためのアプリと言うことになります。

確かに、一般のPalmユーザには、Palmキャラクタコード表をフォントID毎に表示するだけのCH CODEは何の役にも立ちません。

しかしこれが開発者にはとても便利なアプリとなるんですね。

Palmが表示する事が出来る文字は7種類のフォントから構成されています。

この中には通常私たちが読むことの出来る英数字の他に、矢印やシンボル記号なども含まれていますが、それがどのフォントの何と言うキャラクタコードに相当するものなのかを暗記している人は少ないと思います。

少なくとも私は覚えていません。

一応、それらのコードの一覧表は開発者向けドキュメントそして提供されているので、例えばNS BasicプログラマならNS Basicマニュアルを見ればそれらを知ることが出来ます。

でも、いちいちマニュアルを開いてキャラクタコード表が記載されているページを開き、目的のキャラクタのコードを確認するのはとても手間がかかります。

手元にはPalmがあるのですから、これで確認する方が楽でしょう。

そんな動機でCH CODEは作られました。

僕が最初に手がけたアプリはShoppingListでしたが、その製作途中でキャラクタコード表アプリの必要性を感じた僕は、ShoppingListの製作を中断してまでCH CODEを作りました。

操作はいたって単純。起動すると画面いっぱいにキャラクタコード表が表示されるので、あとはフォントIDを切替ながら目的のキャラクタを見つければいいのです。

また、最近はJ-OSやJaPonといった英語デバイス日本語化するアプリを使う機会が増えたおかげで、これらの日本語アプリが持つキャラクタコードと、日本語PalmOSとのキャラクタコード表に若干の違いがある事も分かってきました。

こういう情報は開発ドキュメントには記載されていません。こういう重要かつ貴重な情報を得ることが出来て、CH CODEというアプリ重要性を再認識することが出来ました。

CH CODEはけしてダウンロード数が多いアプリではありませんが、シンプルな操作と見やすい画面のおかげで、開発者からは便利だというコメントを頂いております。

こういう万人向けではないアプリでも必要としてくれる人がいると言うのは嬉しいことですね。