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

2005-09-28

[]史上最も危険な予定表アプリ 史上最も危険な予定表アプリ - いなあものPalmware開発日記 を含むブックマーク

「つぶやきぱ~む」は、Palmの予定表から無差別に予定を抜き出しては危険な香りのするつぶやきに変えてしまうジョークアプリです。

事の発端は、NS Basicの機能を使って予定表に予定を登録できないかとDBの解析をしたことから始まります。

結果はNS Basic仕様から書き込みは実用的ではないという判断になりました。

でも、読み込むことは出来そうです(年休君はこの機能に対応していますが、CSubLocalSendという外部サブルーチンを使うことで対応しています)。

さて、予定表DBの解析のために僕は検証用のプログラムを作っていましたので、少し改造をして予定をランダムに抽出するプログラムなんぞ作ってみることにしました。

ただつらつらと予定を羅列表示するだけのプログラムなのですが、実行してみると殆どの予定の場合、予定をあらわす文字列が名詞という面白い法則がある事が分かりました。

名詞は加工が簡単なので、このまま前後に適当な文章をくっつければ面白い日本語が完成しそうです。

気が付けば、テストプログラムは「つぶやきぱ~む」という妖しげな言葉をつぶやくプログラムに変身していました。

言葉をランダムにつなげて面白い日本語を表示すると言うプログラムは、過去にも色々なものがありましたが、これに予定表DBという標準PIMDBを使うことで、Palmの所有者ごとに全く異なる辞書を手に入れることに成功し、その結果として個人のプライベートをつぶやくという危険なアプリが誕生してしまったのです。

最初のベータ版が完成したとき、僕は腹を抱えて笑いながらも、このあまりにも危険なアプリの公開には躊躇しました。

でも、ジョークとして割り切ってしまえばこれほど面白いアプリは無いのです。

そして都合のいいことに、その時年に1度のジョークの祭典「エイプリル・フール」があと2ヶ月後に迫っていたのです。

ただ、一般公開のためには他人の予定表データでも「つぶやきぱ~む」のつぶやきが成立するのかを確認しないといけません。

ここでも運のいいことに、PUM2005という大規模オフ会東京で開催されたので、その会場に僕は「つぶやきぱ~む」を持ち込み配り歩きました。

反応は上々。

皆、この危険なアプリを起動しては奇声を発していました。

他人の予定表でも大丈夫なことが分かり、これで「つぶやきぱ~む」を公開する決意は固まりました。

こんな偶然から生まれたアプリですが、反応は上々。

ちょうど同種のアプリである「デス川柳」が残念ながら公開停止になった直後だったので、余計に嬉しかったです。

さて余談ですが、実は「つぶやきぱ~む」のバージョンナンバーにも、ちょっとしたジョーク(?)を仕込んでいて、v.2005.4.1というエイプリルフールの日付がバージョンに刻まれています。来年の4月1日にはv.2006.4.1というバージョンナンバーアプリが作れたらいいですね。

2005-09-26

[]積極的な小遣い管理 積極的な小遣い管理 - いなあものPalmware開発日記 を含むブックマーク

小遣いを貰うと勝手に予算を決められ、月末の残金は強制的に貯金させられてしまう。こんな乱暴な小遣い管理アプリなんて誰が使うんだろう?

実際、このアプリを作ったときはそう感じたものです。

PDAは常時携帯するデバイスですから、これで小遣い管理をしたいと思った人は多いと思います。僕もその一人。

標準の支払いメモから始まって、PEM、EiCashと渡り歩きましたが、どれも僕を満足させてくれるものはありませんでした。

いや、PEMもEiCashも優れたアプリなのは間違いありません。

ただこれらは支払いと残金の管理がベースであり、予算を費目ごとに振り分ける指標は人間が管理しないといけないのです。

例えば

貴方は、1ヶ月のうち食費にいくら費やしていますか?

そしてそれは適当な金額ですか?

そう聞かれて即座に答えられない人は多いと思います。少なくとも僕はそう。

1ヵ月の小遣いのうち、食費やタバコ代など、毎月およそ一定の額の支出があるものは固定費として認識し、それ以外が自由に使える金額だと認識するだけで、小遣いを効率的に使うことが出来るのですが、ナカナカそれを実践するのは難しいのです。

ならばアプリで計算させてしまいましょう。これが、C-MATEの考え方の原点になります。

毎月の小遣いはほぼ一定ですから、固定費が一定なら自由に使える金額も一定になります。

ほら、こうやって見てみるとC-MATEが勝手に予算を確定するのって、そんなに理不尽じゃないでしょう?

そして、費目ごとに使っていい金額が明示されていると、人間はその範囲内で上手にやりくり出来るものなんです。

「ああ、今月財布の中には5千円あるけど、このうち3千円は食費に残さないといけないんだな」

認識できれば、今ここで3千円のCDを購入しちゃいけないんだって言うのは誰でもわかることでしょ?

こうやって運用をすると、たいていの場合次回の入金日に僅かながら残金が残ります。

C-MATEのもうひとつの大きな特徴が、これを翌月に繰り越さずに強制的に貯金することで、貯金が増えると言う寸法。

僅かな残金を翌月に繰り越しても、それで翌月の小遣いが潤うことは殆どありません。

逆に塵も積もれば山となるじゃないですが、残金を貯金することで数ヶ月後には大きな買い物が出来るかもしれません。

頑張って貯金したご褒美だと思えば、それもまた嬉しいでしょう。

お分かりいただけたでしょうか?C-MATEは積極的に小遣いを管理するアプリなのです。

他の小遣い管理アプリでも、同じように毎月入金日に予算を計算しながら割り振れば同様の運用は可能ですが、固定費とは言え傾向は毎月徐々に変化しますし、収入だって増減があります。

ならば、それらの面倒な計算はアプリに任せてしまってもいいのではないでしょうか?

さて、そんな訳でC-MATEは僕の小遣い管理には欠かせないアプリなのですが、実は最近ちょっとした限界を感じています。

仕事での出張旅費、カードの支払いやそれに伴う銀行口座の入出金管理など、個人で扱わなければいけないお金が小遣い以外にもあるのですが、今のC-MATEではそれらを管理するのは大変難しくなっています。

今は、出張旅費を含む銀行への入出金やカードの支払いなどはEiCashを使って管理をしていますが、小遣いから一時的に持ち出しが発生したりするので、C-MATEとの連携をしたいところです。

現在は電卓を片手に手動で連携しているのですが、いい管理方法が無いか色々と探っているところです。

もしかしたら、新作アプリネタなのかもしれませんね。

2005-09-22

[]プログラムガラクタの集合体 プログラムはガラクタの集合体 - いなあものPalmware開発日記 を含むブックマーク

僕は昔から気になる情報を知識として収集する癖がありましたので、ちょっとした雑学オタク的なところはあったのかもしれません。

何の話かというと、この知識パソコンプログラムを書くようになって、それらの知識が知らぬ間にプログラムアイデアとして活躍しているというお話。

プログラムにならなくても面白そうなアイデアというのは結構あって、今でも頭の中にしまってあるんですね。

例えばそれはプログラムとして完成した仕様ではなくても「こうすれば面白いんじゃないか?」とか「これは使えないだろうか?」と言った具合に、まるで電子工作のための部品庫のような感じで、頭の中にプログラムジャンク部品があるんです。

その部品をうまく使い、プログラムとして具現化するのが昔から僕のプログラム作りになっています。

例えばMemoCar Racingのデータ対戦ゲームを作りたいと言う発想には別のゲームが原点にあったわけです(対戦アプリの楽しみ参照)。こういう情報プログラムを作りたいという欲求が絡み合い、それがアイデアとして具現化すると、アプリが1本出来上がるわけです。

もちろん、仕様はできたけど複雑すぎて具現化する時間が無かったりしてお蔵入りになるものもかなりあるのですが…(実はそっちのほうが多い)。

さて、こういうガラクタ部品庫知識データベースは、若い頃から蓄積すればするほど豊富ネタがそろう訳です。

僕は昔から学業そっちのけでパソコンゲームを書いていた所為か、今でもアイデアの元はいっぱいあるのですが、最近は新しい情報を仕入れる機会が少なくなってきたように思います。

歳とともに脳の思考も偏りがあるのかもしれませんし、何より時間的な余裕もなくなってきているのが辛いところです。

別にプログラムに限らず、若い頃に色んなことを経験すると後々役に立つとはよく言われることですね。

これを読まれている方で10代や20代前半の方がどれだけいらっしゃるかは不明ですが、そんな方は今のうちに雑学的知識をいっぱい吸収しておいたほうが、いろんな意味で面白いと思います(あえて役に立つとはいわない^^;)。

さて、不本意ながら説教臭い文章になってしまいましたが、それは本意ではありません。

そこで、僕の頭の中に20年以上寝かせているネタを一発だけ披露しますね。

それは東京地下鉄路線図をパソコンゲームに応用できないかという物です。

迷路状の東京地下鉄マップは、身近でありながらその気になれば色々と応用が出来そうです。

最初は中学生の頃に、当時流行っていたアドベンチャーゲームに使えないかと色々試行錯誤したものです。当時は「丸の内ADVENTURE」というタイトルまで考えましたが、肝心の中身についてはいいシナリオを思い浮かべることが出来ずにお蔵入り。完璧企画倒れでした。

最近は、この地下鉄マップを戦略シミュレーション地図に応用できないかと考えたりしてます。

コンピュータと対戦しながら地下鉄の駅をひとつづつ占領していくというものです。

複雑怪奇な迷路だからこそ、補給路の確保や兵を進めるための駆け引きに面白みが出てくると思っています。

例えば大手町駅は東京地下鉄の巨大ターミナルですが、そのために戦略上の重要拠点となります。四方八方に進軍できる拠点ともなりますが、逆に攻められやすく守りにくい。時には戦略上一旦放棄しなければならないなんて事もあるでしょう。

身近なマップだからこそ思い入れのある駅とかもあるでしょうし、そんな駅ひとつひとつを攻略する方法を考えるのは楽しいのではないかと思っています。

アキバは絶対に死守しろ」とかね(笑)

う~ん、でも作る時間がないなぁ。

誰か作ってみませんか?

テストプレイヤーはいくらでも引き受けますよ。(^^;)

2005-09-15

[]ライブラリを検証する ライブラリを検証する - いなあものPalmware開発日記 を含むブックマーク

NS BasicPalmOSAPIを全く知らなくてもPalmwareを構築できる優れた開発ツールです。

恐らくプログラム開発経験のある人なら、NS Basicインストールしてからものの10分でPalm上にHello Worldメッセージを画面に表示することが出来るでしょう。

本来ならPalmOSAPIについてSDKのドキュメントを読んだりとか色々とAPIの手続きを覚える必要があるのですが、NS Basicはその複雑な手順を全てランタイムライブラリが吸収していますので、プログラマはそれらの面倒な手続きを学習する事無く簡単にプログラムを作成できる訳です。

その代わり、実行するためには必ずランタイムライブラリインストールする必要があります。

PalmデバイスはPalmOS5.0以降、従来のMC68000系DragonBallCPUからARM系のCPUに切り替わっています。

それに伴い、NS Basicバージョン4からARMプロセッサ用のランタイムライブラリが用意されました。

このARMプロセッサ用ランタイムは、ランタイム自身がARMプロセッサのネイティブコードで動作するため、従来のランタイムライブラリよりもアプリを高速に動作させることが出来ます。

元々処理速度に不満のあったNS BasicにこのARMネイティブランタイムの登場で、我々開発者は期待に胸を膨らませました。

ところが、その期待はすぐに裏切られました。

従来のMC68000系ランタイムで動作していたアプリの殆どが、ランタイムを切替えることで動作に不具合が発生することが判明したからです。

表示の乱れやイベント処理など不具合は多岐にわたり、当初は惨憺たる結果となりました。僕も一旦はC-MATEにARMネイティブランタイムを同梱していたのですが、どうしても使用に耐えなかったので、使うのを止めてしまったほどです。

とは言っても時代は確実にARMプロセッサが主流となっています。

NS BasicARMネイティブランタイムも、バージョンがあがるにつれて動作も安定してきましたので、ランタイムの検証を行わないといけません。

しかし、MC68000系ランタイムARM系のランタイムをとっかえひっかえアプリの動作検証をするのは、ランタイムを入れ替えるたびにHotSync経由でインストールするのでとても面倒です。

ChoRunはそんな面倒な作業を解決するために作りました。

外部メモリカードに、予め2つのランタイムコピーしておき、ボタンひとつでランタイムの切替を行います。

一般の人には役に立つものではありませんが、NS Basicdでアプリを開発している人には便利なアプリです。

ちなみに、僕のアプリは殆どがARMネイティブランタイムで動作するのですが、つぶやきぱ~むのようにまだ不具合があるものもあります。

原因が特定できたら、今後のアプリ開発のためにもNS Basic社のサポートに連絡差し上げないといけませんね。

こういうユーザからの情報の積み重ねが、確実に自分に返って来るのですから。

2005-09-14

[]道に迷わないメモ 道に迷わないメモ - いなあものPalmware開発日記 を含むブックマーク

僕は地図を見るのがとても好きです。

そんな訳で、行った事のの無い土地へ出かけるときは、毎回予め地図を見てルートを検討します。

そういった過程で作成されるのが、僕のオリジナルのルートメモ

紙に主要な交差点名を書いて、その交差点を直進するのか、それとも右折、左折なのかをメモしただけの単純なものです。

例えば、浜松町の駅から東京タワーまで車で移動する際のメモはこんな感じになります。


浜松町駅前(直進)

 ↓

大門(直進)

 ↓

増上寺前(右折)

 ↓

(日比谷通り)

 ↓

図書館入口(左折)

 ↓

芝公園3(直進)

 ↓

東京タワー


起点は高速のインターの出口だったり、主要駅だったりしますが、目的地の近辺を重点的に書き、そこまでのルートは大体頭の中に叩き込んでおくのですが実際に遠くに出かける場合などは、高速の出口あたりまでは地図など見る必要も無く辿り着けるので不要です。

このようにすると、A5版やA6版サイズのメモ紙1枚~2枚程度で綺麗に収まるので、携帯性も良く非常に使い勝手が良くなります。

実際に使う場合は、助手席のナビゲーターにこのメモを読み上げてもらうことになります。

「もうすぐ大門交差点ね。ここは直進。このあと増上寺前の交差点を右折して日比谷通りに入ってね」

てな具合です。

このメモ活用するようになってから、目的地付近で迷うことは殆どなくなりました。実に単純なメモなのですが、ドライブする際に必要な情報はこれで十分なのですね。

PaceNoteはこのメモPalmに置き換えたらどうなるだろうという、半ば実験的に作ったアプリです。

データをメモ帳に作成し、その内容を1行づつ表示するだけという単純なアプリですが、用途をナビゲーションに絞ることで普通のメモ帳置き換えアプリとは全く違った作りになりました。

車での移動に限らず徒歩や電車で目的地に向かう場合も有効に使えるので、気に入ったお店への行き方を友人に教える場合など、有効な使い道が色々あるアプリではないかと思っています。

さて、PaceNoteという名前ですが、これは自動車ラリー競技でコ・ドライバー(いわゆるナビゲーター)が、ドライバーにコースの情報を教えるために書き留めたメモから頂いています。

ラリーのペースノートは、カーブの半径や路面状況など細かい情報がびっしりと書かれているので、実際にはこのアプリメモとは異なるのですが、システマチックにコースの情報を伝えるメモという意味では似たようなものなので、半ば強引に命名しました。

ま、僕がラリーファンだと言うのも大きな要素なのですが…。

さて、このPaceNoteにはラリー好きな僕が仕込んだ裏技があります。

PaceNoteでルート情報を表示している際に、画面の下には青い車の絵が表示されています。この車は目的地に近づくにつれ、画面の左から右に進んでいくのですが、シルクスクリーン上の検索ボタンタップすると、この車の絵が変わります。

小さなドット絵ですので、あまり綺麗ではないのですが、検索ボタンタップするたびにスバルインプレッサWRCと、シトロエン・クサラWRCという2種類のラリーカーをモチーフした絵が切り替わりながら表示されます。

PaceNoteを愛用されている方は、是非お試しください。

2005-09-13

[]Uターン禁止の美しきバトル Uターン禁止の美しきバトル - いなあものPalmware開発日記 を含むブックマーク

陣取りゲームは、プレイヤーフィールド内に互いに線を引き、壁やプレイヤーが引いた線にぶつかった方が負けというシンプルかつ明快なルールゲームです。

僕がコンピュータを始めて触った20年以上前には既に存在していたゲームですから、僕はコンピュータゲーム古典に分類されるゲームだと思っています。

この陣取りゲームプレイヤーコンピュータにやらせるにはどうしたらいいだろうかと考えたことがあります。試しに障害物を全て除けるようなアルゴリズムを組んでみました。これならコンピュータは強いに違いありません。

何しろ進行方向に障害物を見つけたら自動的に除けていくのですから。

ただ、障害物の直前まで直進するようでは見た目が不自然なので、時折気まぐれで進路を変えるアルゴリズムを組み込みました。方向転換のタイミングや進路は乱数によって決定。

うん、何か自然な動きが期待できそうです。

ところが、このアルゴリズムは予想以上に弱くて人間の圧勝コンピュータは自ら引いた線に囲まれて進路を失ってしまったのでした。もう、開始直後に渦巻きを作って自滅する事が多すぎ。これではゲームになりません。

ではどうすればいいのでしょうか?

先ほどのアルゴリズムに、もう一工夫しましょう。渦巻きを作らないようにするのです。

難しいようですが、渦巻きはUターンの繰り返しで発生しますから原則Uターン禁止のアルゴリズムを組み込めばいいわけです。

具体的には、左→下→左→下のように階段状に進むアルゴリズムですね。

実際に試してみると、進行方向に障害物があったりしてUターンせざるを得ない場合もありますから、結構自然な動きになる事が分かりました。

このアルゴリズムを考えたのは、実は僕がまだ大学生だった頃です。

早速当時の8ビットパソコンプログラムを組んでみました。Basicで数10行程度の短いプログラムでしたが、カラーグラフィックを駆使して作ったプログラムはとても美しい幾何学模様をスクリーンに映し出してくれました。

暫くコンピュータ同士の対戦を「ぼーっ」と眺めていたのですが、毎回違う模様が描かれるスクリーンは、何十分見ていても飽きがきません。

予想以上に気に入ったので、当時ライターをしていた某パソコン雑誌編集室に持ち込みデモを見てもらったのですが、皆の反応も僕と同じで暫くスクリーンを「ぼーっ」っと見ては「赤が強いだの」「緑頑張れ」とか何気ない幾何学模様に見とれては盛り上がったものです。

結局「戦略的ライトサイクルゲーム」という立派な名前を編集長から頂き、このゲーム雑誌に掲載されることになりました。

「ライトサイクル」という名前は当時話題になった映画トロン」から拝借したもののようです。

さてそれから10年以上が過ぎている訳ですが、Clie PEG-SJ33というカラースクリーンを搭載したデバイスを手にした僕は、是非ともこのゲームPalmで再現してみたくなった訳です。

アルゴリズムは「Uターン禁止」のみ。確か第4回NS Basicプログラムコンテストの締め切り3日くらい前に作り始めて、締め切り直前に応募した記憶があります。それくらい単純なプログラムなんですね。

ただ、残念なことに僕のTungsten|Cではボタンイベントをうまく拾うことが出来ず、現在僕はLightCycleで遊ぶことが出来ません。

プログラムの修正をしなければいけないなぁと思っているのですが、Tungsten|Cのイベント関係の処理は、他のデバイスと違って少々特殊なようで、どうしようか検討中

それでも時々、LightCycleのデモを立ち上げて、美しき幾何学模様を見てはほくそえんでいたりします。

2005-09-05

[]有給休暇を管理する 有給休暇を管理する - いなあものPalmware開発日記 を含むブックマーク

有給休暇の残日数管理は、気になる人にはとても気になる問題です。

僕も昔、システム理系仕事をやっていた時期は、気軽に休暇を消化できていたので毎年年度末には休暇の残日数が気になっていました。

その時に活躍していたのが、職場の先輩が作っていた「年休君」というWindowsアプリでした。

そう、僕の「年休君」はこのアプリの名前をパクったものです。

実際、Palmwareを作る身になって、同様の機能を実現できるアプリを書いてみようと思ったのは結構昔の話。

作っては見たものの、元々自分用のアプリだったので公開するつもりも無く、僕自身も忙しくなってしまい休暇を消化しきれなくなってきたので、このアプリは殆ど使われることがなくなってしまいました。

そんな訳で「お蔵入り」していたんですね。

そんなある日、たつやさんが、「有給休暇Palmで管理できないか」と、ご自身の日記に書かれているのを見て、軽い気持ちで「こんなのあるけど、どぉ」と年休君をお渡ししたのがこのアプリの転機となりました。

自分向けに作ったアプリだったのでなんの装飾も無く単機能だったのが、かえってたつやさんにも気に入ってもらえたらしく「これに予定表への出力機能があれば満点」と、非常に高い評価を頂きました。

公開後にも反響が色々とあり、最初は1日休暇と午前と午後の半休のみの対応だったのが、時間単位の休暇も欲しいと言う要望にもお答えする形で休暇のカスタマイズ機能を付けて現在に至っています。

シンプル機能&シンプル操作という、Palmwareのお手本のようなアプリですが、これがウケたのか、それとも休暇管理のニーズが高かったのか、とにかく色々な方に使っていただいているようで、僕のサイトアクセス解析を見ると、検索サイトから「休暇」とか「年休」なんてキーワードで訪れる方がかなりいらっしゃいます。

半年ほど前までは自分でも公開するつもりもさらさら無かったアプリが、こうして使われているのを肌で実感すると、Palmware開発者としても嬉しく感じますね。

2005-09-01

[]HotSync出来ない環境で… HotSync出来ない環境で… - いなあものPalmware開発日記 を含むブックマーク

職場PCHotSyncできないんだけど、TrainTimeのデータを放り込む方法って無い?」

そんな無理難題をいきなり吹っかけられて、困ったワタシ。

そう、無理なんですよ。Palmの場合。

素直にPalmDesktopインストールしなさいと言いたいところですが、メモリカードテキストメモ帳に追加するアプリがあったらいいなぁと思ったのも事実

NS BasicにはVFSライブラリがあるので比較的簡単に作れるだろうと、片手間に作ったのがTextToolです。

機能は至ってシンプル

最初は1時間くらいで作れるなと思っていたのですが、VFSライブラリにどうしようもない不具合(機能制限?)があり、一晩費やしてしまいました。

実はこの問題を回避するために、内部の処理は無茶苦茶汚くなっています(ま、この話は別の機会にでも)。

さてPalmメモ帳制限事項として、1つのメモは4KB以内というのがあります。

そのため、TextToolはテキストメモ帳変換の際、4000バイトまでしかメモ帳インポートせず、それ以降を切り捨てています。

「あれ、4KBって4096バイトじゃなかったっけ?」と思う方。貴方は正しい。

この差分の96バイトは、将来の拡張のためにリザーブしています。

その将来の拡張とは、4KBを遥かに越えるテキストデータをインポートするための機能で、大容量のテキストを4000バイト単位で区切って、分割でインポートする機能を考えています。

その際のメモ帳タイトル用に、96バイトを予めリザーブしているのですね。

と言う訳で、実現時期は未定ですがいつかこんな機能が追加されると思いますのでお楽しみに。

…しかし、僕のアプリって積み残しが多いなぁ(^^;)