もう忘れ物はしない!その日の献立を決めると、今日のお買い物項目が一覧表示される。それをポケギにダウンロードしてスーパーへ持っていこう。そんなWebアプリをPerlで作りました。
これはWebPIMMの日記や家計簿Webアプリと密接にからまっており、さすがに生コードを出してもちょっと説明がくどくなってしまうので、ほとんどは概念だけを書くにとどめさせていただきます。興味を持たれた方はお手数ですが詳細はメールにて御質問ください。
たぶんぜってえ修正・改訂とかすると思いますので、積み上げ形式で書かせていただきます。
/実はなんてことなかった/最後はJavaに救われる/CGI..pm、そういうことか!/足りないものチェック/もっとも基礎的な作業/ツール/コンセプト/背景/
PocketIEでブラウズしたファイルを保存できない?!どーにも納得いかなかったわたしはJavaのダウンロードプログラムを導入したあとも、ワールドカップ日本・ベルギー戦などを見ながらインターネットでその辺の情報を探した。だがどこにもそんな問題は書いていない。
近頃謙虚なのに子は、そこで考えた。どこにもそんな問題は書いていないということは、それは全く問題ではないということなのでは?
そこで再びPocketGearをいじってみる。するとTemporary Internet Folderというのがある。そりゃあるわな。とすると・・・
もう一度PocketPCのヘルプでPocketIEのくだりをよく読んでみた。そしてわかった。
わたしがやりたいようなこと、つまりサーバにあるhtmlファイルをPocketGearに持ってきて、サーバに接続しない状態でそれをPocketGear上でもう一度以上見る、という方法は・・・何もしなくてもいいのだった。
サーバに接続しない状態でサーバのサイトを指定すれば、Temporaryフォルダに保存されているファイルがブラウズ画面に現れるのだから。
いつもデスクトップでもやっている当然のことだが、「メニューでファイルで保存」というのがなかったばかりに、自分が本当にやりたいことは何なのかを見失いなくてもいい機能をひたすら求めてしまった。人間思いこみとは恐ろしいものである。
2002年06月10日
もちろんPDA用に書き出したhtmlファイルを/htdocs/以下に置いたのは、PocketIE からアクセスしてそれを保存できると甘く見ていたからであった。だがどーもそれができなさそうなので、殿下の放蕩Javaアプリケーションに頼った!
俺バイブル「UNIX USER」の1998年8月号「Practical Java Lesson」で著者 結城 浩 様のおつくりになりなられたサンプルコードGetUrlGui。ポケギ用にちょこっとサイズ変更するだけで、ポケギ上でズバーッと動いた!これでくだんのhtmlファイルをサーバからダウンロード。いつも同じファイルを内容を更新するようにすれば毎日urlを入力し直す必要もないというわけなのサ〜。
これで毎日のお買い物メモも楽々。あなたも忘れ物知らずの奥様に!・・・で初出発したきのうだが、戸締まりを忘れたような気がしてかなりあわててメモもロクに見ずに買い物終わらせて急いで帰ったヨ!なんつーかなぜそういうオチが天然でつくんだろう。でも結局戸締まりはしてたから致命的なボケじゃないんだな・・・
2002年06月04日
アプリケーションは原則的にデスクトップから広い画面で、家の中でサーバに接続しながら動作させる。ページはすべてcgiだ。だがサーバから離れればこのデータは消える。
それではモバイルできませ〜ん。そのためには、最終的に出たお買い物リストを、html形式で書き出してやらなければならない。
これについては、最近、わかってる人には「たりまえやないけ!」と言われそうなことにようやく気がついた。浪花節はやめて結論を一気に書いてしまいませう。最後のお買い物リストを表示させるCGIプログラムの中で、
・・・・
my $file="../../../htdocs/pimm/shoppda.html";
open (FILE, ">$file");
print FILE header, start_html($title);
print FILE h2("$title $ye年$mo月$da日");
print FILE hr;
print FILE start_form;
print FILE h4("晩ごはんのお買い物");
print FILE checkbox_group (
-name => 'materials',
-values => \@materials,
-override =>1,
);
print FILE h4("足りないもの");
print FILE checkbox_group (
-name => 'whattobuy',
-values => \@whatstobuy,
-override =>1,
);
print FILE end_form;
print FILE end_html;
close (FILE);
chmod (0666, "$file");
・・・・
とやってしまえばいいのである。最初と最後の太字にしたヤツは、CGIページそのものを表示させるためのものだ。出力先がブラウザって考えればいいのかな。それに対してprint
FILE...というヤツは出力先がすべてファイルなわけ。
こうしてできたshoppda.htmlは/cgi-bin/フォルダではなく/htdocs/フォルダに置いてやる。
2002年06月04日
それとは別に、毎日でも定期的でもなく足りなくなったら買うというものについては、気がついたらいつでもチェックして送信できる「足りないものチェックシート」 CGIを作った。 送信すると品目と登録日が「足りないものリスト」に登録される。以前説明したように最後に「お買い物リスト」に読み込むかどうかは、その品目の登録日と、家計簿に登録された最後の購入日の新旧を比較して決定される。ゆえに両者に登録する品目は厳密に同じであることが望ましく、同じ品目リストを参照するようにした。
リストにない項目は全く別の入力フォームから「お買い物リスト」に直接登録する。ほとんどないけどネ(単調な生活だ・・・)。
2002年06月04日
このアプリの作成のために避けて通れないもっとも基礎的な作業をまずやることにした。それは、各料理名について、それが必要とする材料をデータベース化することである。
その作業を行う。基本的にはレシピを見ながらひとつひとつチェックしていくという手作業だ。だがただじゃあやられねえ。材料は何度も同じものが出てくるんだから、チェックボックスから送信するCGIプログラムを作ってしまった。このリストは家計簿Webアプリのスクローリングリストからガバッとパクってきたものである。ゆえによけいなものも入っているが気にしない。
一方料理名のほうはスレッド式掲示板で使っているファイル名のリストから引っ張ってきたものだ。このように最低限の利便性は確保したつもりである。これから新しいレシピをゲットした場合にもこのシートで必要材料を登録することができる。
各料理について材料は複数、それも不特定数が登録されることになる。だからデータベース構造は、
$menu="まーぼなす"
に対し
@materials=qw[なす ひきにく えだまめ まーぼなすのもと]
となるのだが、要素4つか5つのテーブルをいちいち作っていてはやってられないので、ひとつの大きなテーブルmaterialsに
| menu | material |
| まーぼなす | なす |
| まーぼなす | ひきにく |
| まーぼなす | えだまめ |
| まーぼなす | まーぼなすのもと |
| まーぼどーふ | とーふ |
| まーぼどーふ | まーぼどーふのもと |
・・・というふうに、menu 対materialの簡単な構造、ただしmenuは重複可、というふうに入れておく。
必要に応じて
select material from materials where menu=`まーぼなす`;
で選択されたmaterialフィールドのデータを@materilasに入れることによって、上記の関係は復活する。
2002年06月04日
WebPIMM同様、とにかくかなり使い慣れてきたApache-Perl-PostgreSQLで作ってみることにした。
最後のお買い物一覧はhtml形式で家庭内Webサイトに書き出せば、PocketGearのPocket Internet Explorerからアクセスしてそのままページを保・・・
ページを保存ってできないの?!
PocketPCのヘルプを探す・・・なーるほど。母艦のWinマシンのIEでダウンロードしたヤツをActiveSyncでPDAに切り出せってのかい!こっちはその母艦とか同期ソフトとかいう考えをやめようってんでいろいろ工夫してんだヨ!・・・
ノー・プロブレム。Javaでウェブサイトからページをダウンロードするプログラムのサンプルをいくつか勉強してあるんだヨ〜ン。と威張れるにはちょっと泥縄式ダサシステムになるかも知れないけど、なんとかやっていけそうだ。
ムム。これはあとでとんだ杞憂であることがわかった。詳しくはこちら。
2002年06月03日
「お買い物支援アプリ」それは特にお安くお買い物ができるための情報をゲットするなどというものではなく、忘れ物をしないようにメモ書きを自動化してくれるアプリをめざしている。
流れ的には(なにのどういう流れだヨ)こうだ。うちでコンピュータに向かっているわたしは、そろそろ買い物に行こうと思い立つ・・・
ああなんか未来的っていうかいい感じ〜(自画自賛)。
実際このようなインターフェイスになる。これは実際に今日の献立を決めたものなので上の説明と具体例が若干違いますがご了承ください。
既存のデータベースとの関係はこのようになる。品目名はデータベース間で統一するのが絶対望ましいので、家計簿アプリで作った「よく買う品物リスト」がそこここで使い回される。
2002年06月03日
PDAとしてWorkPadを使っていたわたしは、お買い物リストをToDoチェックボックスに作っていた。
牛乳とかパンとか、毎日ではないが2日か3日置きで頻繁に買うものを一覧に作っておいて、標準では「完了したら入れる」ことになってるチェックを、逆にその日買うべきものに入れるのだ。リスト外のものは「その他」欄の「コメント」に書く。
これで結構忘れ物が少なくなったことは確かだ。だが完全ではない。特に今日の献立を決めたときにいちいち何を買うか、すべて「その他」欄のコメントに入力するのがめんどくさい。詳しいレシピは同機の「メモ帳」に書いてあるので、いちいちメモ帳をみて材料を確認してそれをTodoの「その他」欄のコメントに・・・めんどくさい。デスクトップの同期ソフト上でやるのすらめんどくさい。
おまけにアレだ。「まーぼなす(大好き)」のように、まーぼなすソース買ってきて炒めて混ぜるだけ〜というようなものはさすがにレシピには書いていなかった。これを予定した日スーパーへ行き危うくなすを買い忘れるとかまーぼなすソースを買い忘れるとかいういうことが決して少なくなかった。そこで一念発起する。WebでPIMMプロジェクトに合わせて、その日のお買い物を支援するWebアプリを作ろう。
2002年06月03日