目次へ

WebアプリでPIMM

PDAと専用母艦、という個人情報管理をやめて、SQLとWebアプリでどのマシンからでもPDAからでも情報をやりとりできるシステムをつくりたいと考えました。道は険しく長そうなので新しい記事ほど上にくる積み上げ方式です。
かなり単純なチカラワザコードが多いですが、それだけにもし試してみようかでも打つのがめんどくせえなと思われる方は、えいっとコピペすればいいように表示しました。でもなにせ個人用だしヘボなコードですから、このコードを使って何か問題が生じた場合の責任は負えませんので御理解と御了承の上お使いください。あと修正、転載御自由ですが著作権は主張します。ってこんなヘボコードパクって何ができるわけでもありませんがハッハッハッ。

/2002年06月10日現在のWebPIMM/オフラインでブラウズ総括/なまずに直結/アドレス帳まず完成/日記の検索表示/その日の日記も表示させる/予定の入力・表示試験/カレンダーからその日の予定にリンク/いよいよカレンダーを表示させる/データベースの名前変更って/カレンダーテーブルと入力スクリプト/カレンダー(SQL馬鹿一代の誕生)/Perlでcsvデータを整理する/まずWorkPadデータの書き出しだ/ツール/コンセプト/背景/


2002年06月10日現在のWebPIMM

現在、こんな感じになっている。 トップページからは

などにリンクできるようになった。前まとめたときよりだいぶリンクが増えてちょっとうれしい。

2002年06月10日

ページ先頭へ戻る


オフラインでブラウズ総括

その後、「お買い物支援Webアプリ」を作り、献立を選びながら最終的にその日のお買い物をリストアップできるようにこぎつけた。
そして、サーバの任意のhtmlファイルをPocket IEでブラウズすれば、あとはサーバに接続しない状態(つまり外出時)でもオフラインでブラウズができるということも、よーく頭を冷やせばわかることであった (リンク張って詳細を見ていただくまでもなく、サーバのhtmlファイルをどうやってポケギに保存するかで一時すげえ悩んだんです)。

そこで、PDAでオフラインでブラウズできるようにする必要があるものについてまとめてみる。

  1. スレッド式掲示板の記載内容はすべてhtmlファイルなので、一度サーバに接続してブラウズしとけば自動的にオフラインで見られるようになる。
  2. cgiプログラムの動作結果をhtmlに書き出さなければならないもののうち、その日の予定関係はいらない。主婦なんで外出したり人に会ったりすることが少なく、予定はほとんど家にいるときに確認を必要とするものだ(ゴミ出しとか)。
  3. アドレス帳はWebアプリ上では一覧表示とか詳細表示とかいろいろあるが、外に持ち出すのはたとえば宅急便を出しに行くのにその人の住所をレジカウンタで記入するみたいな場合だけだ。つまり特定の人もしくは会社の詳細表示だけがhtml形式に書き出せるようにしておけばよい。そこでアドレスの詳細表示に簡単な入力フォームを追加して、必要に応じてhtmlに書き出せるようにした
  4. そしてお買い物メモ。

2002年06月10日

ページ先頭へ戻る


レシピを手早く見る

お料理レシピはスレッド式掲示板に全部移すことにしたが、Namazuの日本語検索はどーも心許ないようだ。そこでひと工夫。
まず、レシピはすべて同じスレッドに入れることにした。こうすれば、Namazu検索ではなく掲示板上で、任意のレシピページについて「関連記事を見る」cgiを動かすことで、すべてのレシピが確実に表示される。
だが、問題がひとつ。わたしが作った掲示板はもともとコンピュータ関係の覚え書きを想定したものだったので、みんな同じ階層のスレッドだと(親玉としてダミーの記事がひとついるが)100しか入らないことにしている。なんつーかひとつの話題に関連して100も話題を、書き終わったころにはそのトップの話題はすでに時代遅れになってるはず、とふんだからだ。
だがレシピは時代を超えて残るものであり、確実に100以上ある。一方階層そのものはいくらでも深くできる。そこでまあ非常に適当に、一応おにくとか卵とかカテゴリ分けして入れることにした。さすがに卵料理を100も入れなければいれないことはないだろうっていうかそのくらいレパートリーが広がりゃ御の字だヨべらぼうめである。
カテゴリの構造ははあまり詳細に作るとめんどくさくなる。つまり親子丼ならお肉料理でもあれば卵料理でもあったりするからだ。目的はあくまで負荷分散のためだからそこはテキトーに。
そして、PIMMのトップページから、すべてのレシピファイルをたばねるダミー記事、の関連記事一覧リンクへ飛ぶことにした。これですぐにレシピ一覧が見れることになる。

だが、100件以上の一覧をタラタラみてらんねえというときがある。それはあと5分でダンナ様がお帰りなんだけど鯖のみそ煮のおみその量は大さじ1だったからしら2だったかしらッというようなときだ。
それはすなわち今日のメニューの問題だ。だから「お買い物支援Webアプリ」で最後に示される今日のお買い物一覧のページに、選んだメニューを「今日は鯖のみそ煮です」と書かせそれを該当のレシピファイルにリンクさせることにした。これでまずはとっさに不便、ということはないだろう。他の場合は一覧をゆっくり見れ。

2002年06月10日

ページ先頭へ戻る


なまずに直結

あとはいよいよメモ帳だ。JPilotからメモ帳データの全てを選択して書き出す。一応CSVテキストで出てくるようだが、さすがに手動で処理することにした。もう昔のことで使わないようなメモもあるし。
だがどう処理する。このメモの内容は大きく分類して、

(1)お料理レシピ。
(2)燃えるゴミ、不燃ゴミ、資源ゴミなどの出し方。
(3)コンピュータ関連のメモ。
(4)「乗換案内」からテキスト形式で書き出した時刻表。

かなり悩んだが、やはり家庭内スレッド式掲示板に入れてしまうことにした。情報コンテナが多すぎるのはよろしくない。ただでさえSQLの併用という反則かつイケてないワザを使っているのに。

だがどうやって検索するか。最近の改良によりこれらの掲示板データはhtml形式で保存し、namazuにより検索することになった。
けど、ゴミの出し方を考えてみよう。「ああ今日は不燃ゴミを出さなきゃ、でもこれ不燃ゴミだっけ燃えるゴミだっけ」というとき。いちいちnamazu.cgiにアクセスし「ゴミ」と入力して検索ボタンを押すなんて、そんなにあわててなかったとしても、イケてな〜い。

そこで考えた。PIMMのトップページに決めたshowcalendar.cgiには、その月の曜日別ゴミ収集日が表示されるようになっている。そこにこんなリンクを貼ってみた。

my $gav="garvage";
my $gavsearch="../namazu.cgi?query=$gav&submit=Search%21&whence=0";
$gavsearch.="&max=20&result=normal&sort=score&idxname=memoranda";

print "<a href=$gavsearch>情報</a><br>";

そう。上の$gavsearchに書いてある、namazu.cgi?のあとの長々としたパラメータは、実際に検索キーワードを入力して検索ボタンを押したときにURL欄に表示されるURLをそのままパクったのである。query=$gavというのが、キーワードの部分だ。このリンクをクリックすると、ダイレクトにゴミ関連のファイルの検索結果が表示されるというわけ。
この検索キーワード、最初「ゴミ」と日本語にしてみたが、4つあるはずのファイルのうち2つしか上がってこなかった。やはり日本語の扱いは少し、正確さにかけるのか。実際ファイル内に英数字のキーワードgarvageをあえて追加してこれで検索したら全部ヒットした。
今回はファイル4つだけだからそれでよかったが、お料理レシピのようにファイルがたーくさんあったり、あるときはタマネギ、あるときは豚肉で検索したいようなファイルはどーするか・・・それには少し考えがある。まだ実行してないけど。

とにかく、これで、メモに相当するものは掲示板に入れてナマズ検索することにした。

2002年05月29日

ページ先頭へ戻る


アドレス帳まず完成

さてアドレス帳だ。すべてを一覧表示するとまことに見にくい。一覧表示は名前と電話番号くらい、詳細はそれぞれの名前にリンクを貼って置いて別のページに飛ぶことにした。
コードはこちら一応完成したフォームはこちら。同様のシステムをパーソナル(つまり親戚とか)、及び全く別の表になったソフトウェアのシリアル番号表示・入力システムにも適用した。

2002年05月29日

ページ先頭へ戻る


日記の検索表示

だが、ここ一週間の日記とか、最近晩ご飯がアレだったのはいつだったかしらというときにまとめて検索表示というのもさせたい。そこで検索フォームを作ってみた。
フォームに検索条件を入力して検索ボタンを押すと、自身に検索された日記の日付だけが返ってくる。それをクリックすれば詳細表示が見られるという具合だ。

検索条件だが、まず、何日から何日までという、期間の指定。
今月水曜日ごとにやったことを見たいというのがあるだろうから、曜日。
今月晴れだったのはいつとかいうのがあるから天気。
それからとにかくこういう言葉が午前だろうが午後だろうがその他だろうがに入っているかというキーワード。
と4つ考えた。

検索条件が複数になった場合はさぞ複雑なことになりそうだが・・・ものは考え様だ。
まず、期間とその他の項目を一緒に指定したいという場合は、かなり多いだろう。ていうか何年間もの曜日だけ、天気だけをひたすら検索ってことはまずないだろう。期間を指定しない場合があるのはキーワードだけと考えた。

また、期間以外の検索条件同士を複合する必要はまずないはずだ。つまり晴れていてかつ日曜日だったとか、日曜日で晩ご飯がナス料理だったとか、複数のキーワードが同時に入ってるとか、そこまで詳しく検索することもなかろう。

ということでコードはあまり複雑にしなかったフォームはこんな感じ

2002年05月29日

ページ先頭へ戻る


その日の日記も表示させる

カレンダーから「その日のページ」にリンクした場合、それが過去の日のページである場合は日記も表示させることにした。この日記はきわめて事務的に、日時、天気、午前にしたこと、午後にしたこと、その日の晩ごはん(朝は決まってるし昼は超いい加減)、あとその日のコメントを、それぞれ30字以内くらいの短い文で書いたものである。だから読み返してしみじみと思い出すようなことはないが、それでも2,3年たまると、たとえば去年ダンナさまが花粉症対策に通院を始めたのはいつ頃だったか、などの情報が役に立ったりする。一番大事なのはここ最近何を晩に食べたかだ。中華ばっかり続いてるとか、賞味期限なども見当がつく・・・
だからとにかく表示させたいのだ。そしてきのうとかサボれば2,3日前のページで日記が入力されていなければそこから入力ページに飛ぶ(入力ページのコードはこちら)。

これが今のところの「その日のページ」である。コードはこちら。

2002年05月29日

ページ先頭へ戻る


予定の入力・表示試験

新しい予定を入れるコードを作った。なんの変哲もないフォームであるが、御参考までに
これを作って初めて、予定のテスト入力が可能になった。そこでテストしてみる。
ああ。この前2002年5月21日時点のコードでは、「近日の予定」の表示がおかしいことがわかった。単純ミスであるが訂正した。

テーブルschedulezero中で、
notice は事前通知の開始日。
serial は実際の予定日。
$serial は今日の日付。
たとえば、notice=20020515, serial=20020530, $serial=20020520とする。
予定日は2002年5月30日だが、2002年5月15日から毎日「近日の予定」として通知するように指定する。今日は2002年5月20日なので、今日のページを開くと通知されているはずである。という感じ。
それを可能にするSQL文はこうなるべきであった。

select * from schedulezero where
notice >0 and .....(1)
notice = $serial or notice < $serial) ........(2)
and serial > $serial".........(3)

(1)まず、事前通知は必ずしも指定するとは限らない。指定しないときには「0」が入力されるので、まずそれが指定されているという条件。
(2)本日の日付が、事前通知開始日と同じかそれより後。
(3)本日の日付が、予定日より前(予定日と同じなら本日の予定になるから)

・・・・という、言われて見りゃあ簡単な条件文なんだけど、すごいゴチャゴチャしてしまった。けどようやく意図した通りその日の予定と近日の予定が、表示されるようになった。

2002年05月29日

ページ先頭へ戻る


html表示のさせ方

PerlのCGIで、html形式の表示をさせる場合二つの方法があるようだ。うまく言えないけどひとつはprint"<....>"でhtmlタグを直接書き込む方法、もうひとつはCGI.pmに用意された関数を使う方法だ。たとえばフォームでテキストフィールドを表示させる場合、

print "<input type\"text\" name=\"content\" size=\"30\">";という書き方と、

print textfield(
-name => "content",
-size => 30,
);

という書き方だ。
わたしとしては後者のほうがスマートっていうか。タグのチクチクした不等号を書かなくていいのが楽に思えて、なるべくならこっちを使いたい。だが、あくまで関数を作ってくれた人が用意してくれている機能を利用させていただくだけなので、さすがにこっちの自分勝手な要求を全ては表現しきれないっていうか。この関数表記については
/usr/perl5/man/man3/CGI.3に使い方が書いてあるが、やはり限界を感じることが多い。
一番わかんないのはテーブル表示で、「このセルだけ文字の色を変えたい」とか「この列は右寄せ」などという場合。そういう指定はわたしの力(manの読解力と応用力)では行ごとにしかできなかった・・・
あと、わかんないのが、「送信」ボタンを押したときに他のページにパラメータを渡す場合。タグで直接書けば

というわけで、今回カレンダーテーブルで細かい書式の指定などする必要のあったところではタグを直接書き込む方法を採用することにしました。よってそこから派生したプログラムもホントはスッキリ関数を使って書けるのかも知れないがタグが使われているという場合もあります。そして同じPIMMアプリケーションでありながら両者はきわめて入り乱れています。どうかご了承ください。

2002年05月29日

ページ先頭へ戻る


カレンダーからその日の予定にリンク

休日の色別表示はいまのところあきらめて、とにかくカレンダーからその日の予定にリンクするようにした。
その日の予定は、schedulezeroという別のテーブルに作ることにした。これは以下のようなフィールドを持つ。

シリアル番号風日付データ「serial」
内容「content」
開始時刻「time」(終了時刻まではいーっしょ!!)
コメント「others」
少し前から表示させたい場合、いつからさせるかの日付データ「notice」

その日の予定theday.cgiは、showcalendar.cgiで渡す日付と曜日のパラメータを受け取って、その日の予定を表示する。また、「notice」の指定があるかどうかを探し、あれば「近日の予定」として表示する。

2002年05月21日

ページ先頭へ戻る


いよいよカレンダーを表示させる

では、Webブラウザ上にカレンダーを表示させることにしよう。その方法はもう既に多くの方が知恵を授けてくださっているのとほとんど同様です。
showcalendar.cgiというのを作りました
違うのは、SQLを使っているので、各月のついたちの曜日だけをSQLで探して来る。でもそのあとはいちいち曜日の問い合わせなんぞ使わず7並べで行きます。でも都合が悪くなったらいつでもSQLへの問い合わせで逃げられるので安心ヨ。
パラメータなしで開いたときには、dateコマンドで得た本日の日付をもとにその月が表示される。翌月や、前の月への移動は、矢印=>のつもりのリンクをつつけば、同じcgiページで、でも年と月がパラメータとして指定されて再読み込みされる。
まずは、日付を表示させるだけのものを作ってみる。holiday情報をもとに休日は赤、土曜は青、本日は太字で表示するなどの工夫もした。うーん。我ながら本格的。
では、もう一工夫。各日の表示に全部リンクを貼る。そう、テーブル内の10の文字をつつけば年、月、日をパラメータにした、その日の予定を見たり入力したりするcgiページへリンクするようにするのヨ〜。
やってみた。すると・・・とても悲しいことが起こった。すべての日付がリンクを貼られたため、下線付きの青文字になってしまった。つまり、せっかく休日は赤とか本日は太字とか指定したフォント情報がチャラになってしまったのだ!全部、土曜日かッ!!
強制的に色とか指定する方法確かあって、アクセスしたユーザには重宝がられたり迷惑がられたりしてたと思ったけど・・・ま、いっか。それはあとで考えよう。

とにかく、カレンダーと。あと、その月の休日、及びこの前WorkPadから苦労して書き出してSQLテーブルに入れて置いたゴミの日(毎週ってのはいいから、隔週だったり第何何曜日とかいうのだけ)も表示するようにした。ちょっとそれっぽくなったぞ。

2002年05月21日

ページ先頭へ戻る


データベースの名前変更って

フンフン。なんとかやっていけそうな感じになってきたぞ。ではこれまでテストプロジェクトと思ってやってきたpdaprojectというデータベース名を、pimmという名前に変更することにしよう。データベース名の変更は・・・
どーすりゃいーんだ?
PostgreSQLのガイドやFAQを調べる。データベース名の変更方法って見つからない!カンタンに変えてはいけないものなのか?データベース名は将来どんなデータベースに育ってほしいか願いをこめてつけるものであり一生ついていくものであるからよほど慎重に・・・なわけねーだろ。
ふと気がついて(早く気づけよ)その辺の家計簿とかのダンプファイルを開けてみる。ざっと調べるがデータベース名の記載はない。
ということは?適当な名前のデータベースを作り、適当なダンプファイルを指定してリストアしてみた。

$createdb tekitounadatabase
CREATE
$psql tekitounadatabase < tekitounadumpfile.txt

・・・・

できた。
にゃるほど。コピーでも名前変更でもこうやりゃいいわけか。あんまりカンタンなことだったのでどこにも書いてなかったのねッ。

2002年05月21日

ページ先頭へ戻る


カレンダーテーブルと入力スクリプト

宵越しの金は持たない主婦、のに子の場合、日時や曜日まで正確に把握しなければならないような予定はせいぜい1,2年だ。ちまたのカレンダーやシステム手帳だって毎年秋ぐらいにならないと出ないし、またいつ法律が改正されて休日とか変わらないかも限らない。ということで(言い訳だ)。カレンダーのテーブルには1,2年ごとにデータを追加していけばよいと考えた。
必要なフィールドは、まず日付。これは家計簿システムでもよくつかうシリアル風番号形式にする(シリアル馬鹿一代というのも誕生しているような・・・)つまり20020520みたいな。フィールド名を「serial」にした。
曜日は、思い切って日本語テキスト、日月火・・・にした。フィールド名は「dweek」。day of the weekの略だが、どうして英語には「曜日」を一言でズバーッといい表す単語がないんだろう。youbiとかすればいいんだけどなんか・・・
それから休日情報フィールド「holiday」。日曜日と、祝日にはholiday=1,土曜日にはholiday=2という情報を与える。Webのカレンダー表示で色を変えたりなんだりするのに使えるだろう。
あと、主に祝日について何の日かを登録しておく「general」フィールド。
それからあまり使わないかも知れないが、個人的に必ず何かの日として登録することもあるかも知れない「personal」フィールドも作って置いた。うちは誕生日も結婚記念日も(いつだっけ?)特に何もしないんだけど・・・

で、祝日だ。御多聞に漏れずうちも、いつが何の日か全然わからんと休んでる。内閣府(なんてあったんだね)だかなんだかのお役所のサイト(ワームとかたからせてないだろーな)に一覧が出てたのでもらってくる。そして愕然とした。

春分・秋分って毎年違うのー?!
ハッピーマンデーって、成人の日と体育の日だけなのー?!

非常識奥様である。うーん。じゃあこういうスクリプトを作ろう。

(1)西暦何年のデータを入れるかを受け付ける。
(2)その年が閏年かどうか入力する(ダサいですかッ?!でももしかして計算間違ったらやだし!ある年突然世界的都合により閏年が追加されたりとりやめなったりするかしれないし!)
(3)その年の前年までは入力されているはずなので、前年のおーみそかの曜日から、その年の01月01日の曜日を割り出し、一応画面上で確認する。
(4)日付serialと曜日dweekを7個ループで一年分入れる。
(5)日曜、土曜にholiday=1, holiday=2を入れる。
(6)日付の決まっている祝日について、holiday=1,generalに何の日かを入れる。
(7)ハッピーマンデーについて、その年の1月と10月の第2月曜日(実は両者は同じ曜日になるんだねうるー年以外は)を算出してholiday=1general(成人の日か体育の日)を入れる。
(8)春分・秋分については(天文学的に計算するんだろーけどもーめんどくさいッ)手で入れる。ここで入れることもできるしわかんなきゃスキップしてあとで入れることもできるようにする。
(9)もう一、二年入れたいときのために、ここまでの作業は繰り返しできるようにする。

こうして作ったのが日付入力スクリプトcalendarmaking.plである。初めて対話的入力にもまともに取り組んだ。走らせてみたらホントに「よろしいですか(y/n)」とか「続けるには何かキーを押して下さい」とか「入力しています・・・」とか出てくる。なんかよくもらってくるフリーソフトのインストーラみたいで、自分のじゃないみたく思えた〜。

ところで今思い出したんだけど、5月4日って祝日だっけ?
あと、なんで建国記念日出てないの?・・・あ、なんか後のほうにゴチャゴチャ書いてる・・・
・・・・
・・・・
ま、いっか。

2002年05月21日

ページ先頭へ戻る


カレンダー(SQL馬鹿一代の誕生)

予定表とアドレス帳だけはSQLに格納した。じゃあまず、予定閲覧・入力のためのWebアプリを作ろう。
とすると、カレンダーをどうするか。
最初、Javaで作ってみようかと思った。Javaにはその月の日数とか、その日が週の何回目の何曜日であるかとか、元日から数えて何日目にあたるかとかまあ便利な情報取得メソッドがたーくさん用意されているからだ。ところが曜日でハマった。日曜日のはずのある日について曜日を表す数字を取得しようとするとなーんか「1」にならないのだ。他の人が作っているJavaのカレンダーアプリは、ソースから打ち直してコンパイルしなおしてもちゃーんと動くから、もちろんだがたぶんわたしのやり方が何か間違っているんだろうが・・・これについては後日もっとよく研究してから詳細を報告する。
とりあえず他の方法は?いろんな関連サイトに行ってみる。JavaScript, PerlのカレンダーWebアプリの例はたくさんあって、ずいぶん勉強させていただいたが、これらの場合、
「結局はチカラワザなんだ」
ということで納得した。一週間は7日でうるう年は4年ごとという鉄則に基づいて、チュラチュチュチュラチュララ〜とループや除算をかますのだ。そーよネ。とにかくそれが一番確実確実。
励まされてわたしが出した結論はこうだった。
日付と曜日とあと祝日の情報をSQLのテーブルに入れてしまおう。
それだったら、そのあとPerlだろうがJavaだろうが、接続してしまえばよい。予定とかなんとかはそのテーブルから派生させて別のテーブルを用意すればいいじゃないか。
無論ダンナさまは多少あきれ顔である。「それは・・・かなりイケてないやり方だな。計算すれば出るのに・・・」
なんだけど〜。どーせサーバ立ち上げればSQLも自動起動するんだから使えるものは使おうというのがわたしの考えだった。ここに「root馬鹿一代」「GUI馬鹿一代」「バッファ馬鹿一代」に続いて、「SQL馬鹿一代」も誕生したわけである。

そのカレンダーのテーブル名は「calendarzero」とした。これがすべての予定表の基本になるのヨという気合いをこめてである。

2002年05月20日

ページ先頭へ戻る


Perlでcsvデータを整理する

まず書き出されたデータがSJISなのでEUCに変換する。もーXEmacsで処理してしまった。
次に、このたくさんのフィールドから、必要なものだけピックアップする。たくさんってフィールドはいくつあるんだ?どのフィールドがどのデータよ?・・・整理するためにいくつかのPerlスクリプトを作って順次処理していく。 けど、ルビには参った。WorkPadの住所録によみを入力するとそれがルビとして扱われるらしいのだ。これがなんか名前の漢字の直後ヘンな記号のあとに来る。カンマで区切られてないので名前と同じフィールドに入っちゃうのだ。手作業で取るしかなかった。もー、独自形式はヤだ。
PostgreSQLでpdaprojectというデータベースを作り、ここに処理のためのテーブルを作っていく。書き出したり読み込んだりして、不要なフィールドを除去していく。
うんざりするような単純処理の連続だ。もっと洗練されたやり方がたくさんあるんだろうけど・・・でも一応詳細をこっちに。

こうしてようやくcsvデータをテーブルに収めることができた。あとはテーブルの列をいろいろselectして、空白データの列・不要データの列を探して削除した。この辺は本当にチカラワザである。こうして住所録も予定表も本当に必要なデータだけが集まった。

2002年05月20日

ページ先頭へ戻る


まずWorkPadデータの書き出しだ

ではまずやることはWorkPadのデータを書き出してSQLに入力することだ。さてJPilotからのデータ書き出しは・・・
Exportというオプションがある。住所録と予定表はcsv形式で書き出せるようだ。
書き出してみたがちょっとうんざりする。""ばっかり・・・
しょうがない。WorkPadも他のデバイスやソフトで提供されている予定表もアドレス帳も全部そうだ。独自の入力形式がたくさん用意されすぎているが、わたしのような主婦にはほとんど必要ないようなものが多い。 自宅・自宅FAX,会社・会社FAX、部局、肩書きとか・・・
Windowsで動くPalm Desktopでは、アドレス帳については必要なフィールドを選んで書き出せる。だが今更Windowsにそいつを入れ直して同期し直して書き出し直す意味はあんまりない。
なぜなら、PDA編で書いたとおり、わたしはWorkPadにかなり変則的な入力をしていた。ソフトウェアのシリアル番号、ライセンスキーなどを、住所録に入れて置いたのだ。メモ帳に全部入れるより検索やソートもしやすいし、そのときはグッドアイディアと威張っていたのだが・・・この「ソフト名」と「シリアル番号」の二つしかないレコードを、住所録膨大なフィールドのどこに入れるか。それが結構バラバラだったのだ。あるときは「住所」に入れたり、「電話番号」に入れたり。WorkPadのアドレス帳はデータをどのフィールドに入れても、ブラウズするとデータの入っているフィールドだけが表示されているので不便を感じない、その気楽さが今になって響いてきた。書き出すフィールドを選択しようとしても、ポツ、ポツ、とデータの入っているフィールドをたくさん、選択しなければならない。スキップしたのが本当に全くデータの入ってないフィールドだったかどうか不安が残る・・・
予定表もそうだ。登録した予定について、日時、開始時間、終了時間、定期的かどうか、通知はいつするか、コメントを付け加えるなどいろいろな情報を付加できるのはとても便利だった。毎日の中で忘れてはならないちょっとしたことを、特に時間指定することもなく毎日表示できたり・・・
それを今書き出してみると、未指定の項目をわんさか抱えたレコードの羅列となって現れる。どうやらするかしないかのブーリアンらしいが何の選択か全くわからない"0"データやら山のような""データ。

見てるうちにムズがゆくなってきた。このゲジゲジしたcsvファイルをPerlで処理できるのか?!

2002年05月20日

ページ先頭へ戻る


ツール

そのためには、データベースの形式と、それを操作するプログラミング言語を決めなければならない。
今わたしが使えるのはまずはPerl、次にJava。最終的にポケギとサーバの接続にはJavaは不可欠だろう。だが、イチから全部Javaで書くのはまーだまだわたしには敷居が高い。
まず、家計簿と同じく、Perlを使って、ブラウザでサーバに接続するWebアプリを作ることにした。これならPocketGearでもIEを使えば接続できる。そのあとJavaでも作れるかとか、ポケギへのデータの切り出しやポケギでの一時保存、サーバへの送信などを考えることにした。
データベースはPostgreSQL、MySQLの他に、Javaだと直列化だのVectorだのでデータを保持できるみたいだ。ポケギでデータベースに直接接続するとなるとJDBCがカンタンに作れるMySQLのほうがいいが、なにせPerlでPostgreSQLをブイブイ使い回したり使い回されたりしたのでまずPgで、とにかく作ってみることにした。
なにせ主婦なんで、あまり頻繁にPIMMデータの更新は行わない。この前一年のゴミ収集日をWorkPad-JPilotに入れたばっかだし、ゆっくりしかし着実に、やりまショー。

2002年05月20日

ページ先頭へ戻る


コンセプト

さてどんなものを作るのか。今のところ思いつくことをざっと考えてみた。
基本的には多くのPDAと同じような動作をすればよかろう。トップページを立ち上げると今月のカレンダーと今日の予定が現れ、そこからいろいろリンクして他の日を見たり予定を入力したりする。またアドレスも一覧したり検索したり入力や編集を行うページを作る。さらにチェックボックス表示でtodoなども・・・
ひとつ問題がある。このシステムでは家の中にいるときはPocketGearからPocketInternetExplorerで家庭内Webサーバにアクセスすればよい。だが外に出るときはどうする。買い物先のスーパーから家に電話をかけてVPNか?!アホだ・・・
モバイルシステムを考えることにした。そうそうWindows2000であったみたく。出かける前に必要な情報だけをサーバからダウンロードして持っていく。出かけ先で入力することがあったらそれを(もちろん見やすい形で)一時保存しておいて、帰ってからサーバに送る。PocketGearはUltraのMySQLとJavaで接続できることがわかったのでなんとかなりそうだ。

2002年05月20日

ページ先頭へ戻る


背景

ただJavaを使ってみたいという理由でPocketGearを買ってしまったが、今更バックアップをWindowsマシンには頼りたくない。わたしにはWorkPad-JPilotという最強のシンクロコンビがある。だからPIMM(個人情報管理のことらしくて昔華々しかった言葉だネ。今あんまり使われないけど)はこのままで、ポケギはJava開発マシンとして・・・などと思っていたらのんのんに言われた。「予定表もアドレスもJavaで作ってサーバのSQLとでも同期できるようにすりゃいいだろ」
これで火がついた。それは面白い。WindowsCEで、なるべくWindowsに頼らない環境を作る。ついでに、思いついたらどのマシンからでも予定やアドレス、レシピや時刻表などを入力できるように、今の家計簿みたくサーバで一括管理するWebアプリを作ってみようと考えたのであった。

2002年05月20日

ページ先頭へ戻る