現在、PDA(Personal Data Assitant)は花盛りです。 特にSonyがCLIEを出したことから、いわゆるPalmを一般の人が使いはじめています。 更に、NTT DoCoMoのsigmarionもぐっとくるアイテムでしょう [1] 。
Take60のPDA初体験は、Zaurus PI-6000でした。 大学時代の先輩にそそのかされて買ったら、すぐにモデム付きのが出て悲しかったです。 Zaurusといえば手書き認識ですが、私の漢字の書き順はどうも正しくないらしく、 文字の認識率が低くてデータ入力する元気が無いままあまり使いませんでした。 たしか、赤外線を利用した通信ユニットも買って、 FreeBSDで動くようにしたのですが、 多少大きいこともあって持ち運ぶのがおっくうで使わなかったような気がします。
Palmは職場の同僚が無償レンタルしてくれたので、 しばらく使って惚れ込みました。 やっぱり、シャツの胸ポケットに入るぐらいじゃないと普段の持ち運びはしんどいです。 その後、経費で Palm Vx を購入し、遊び倒しています。
いわゆるWindowsCE機と呼ばれているものですが、 これではNetBSD/hpcmipsというBSD系OSが動きます。 Xも動くので結構素敵ですが、MGL2というコンパクトなグラフィックライブラリ用の スケジューラなども提供されているので、 96Mのコンパクトフラッシュでも十分実用的に利用可能です。 やはり大量に文章を入力するなどの場合、 キーボードが欲しいのでこちらと住み分けている状態です [2] 。
今回はPalmを中心に、PDAとFreeBSDで素敵な生活をおくるためのportsを御紹介します。
PalmはPalm社の開発したPalmOSを利用したPDAの名称で、 OS自体は各社にライセンスされています。 現在日本で手に入る製品としては以下のようなものがあります。
Palmコンピューティング社 Palm Vx,IIIc,m100,m105: 元祖Palm。 m100は定価19800円で買えるので入門機としては適当。
IBM WorkPad 30J,31J,c3: 30Jははじめて日本語版として登場した。 企業向けモデルの31JはなんとPHS拡張モジュール付属。
Sony CLIE PEG-S500C,S300: ちょっと縦長。 お得意のジョグダイアルがついている。 メモリースティック(?)によって拡張可能。 携帯電話接続ケーブルなどの付属品が充実しているので、 お値段の割にはお買い得。
ハンドスプリング社 VISOR DELUX, Prism, Platinum: 独自仕様のモジュールで拡張可能。 スケルトンな軽い色が素敵;p 最近、65556色カラーモデルPrismと高クロック版Platinumも発売された。 DELUXも値下げしたので一つ欲しい…
TRG Product TRGPro: コンパクトフラッシュスロットを採用。 P-in Comp@ctも利用可能。
日本語の文章の入力も Sony CSLの増井俊之さんの開発された POBoxを 利用することで、そこそこ実用的なレベルで入力可能です。 その他、さまざまなPalmのアプリケーションの紹介は muchy.comを参照して下さい。
ここではPalmを使ってできることをざっと眺めておきましょう。 具体的な設定についてはあとで説明します。
もっとも良く利用される機能がToDoの管理を含めたスケジュール管理でしょう。 UNIXにもいくつかスケジュール管理用のアプリケーションがありますが、これらと連係をすることも可能です。
次に良く使う機能は住所録でしょうか? ついつい更新を忘れがちな住所録も、常に手元に入力環境があれば最新の状態を維持できます。 カスタム項目を利用すれば、去年年賀状が来たかなども記録できます。
Palmには標準でメモ帳と呼ばれるアプリケーションが付属しています。 しかし、このメモ帳ではファイルの大きさに制限があるため、少し大きなテキストファイルを扱うためにはDoc形式やその拡張のMeDoc形式が利用されます。 MeDoc形式はDoc形式にインデックスを付加したもので、ハイパーリンクのような利用が可能です。 著作権の切れたDoc形式のデータは 青空文庫で提供されていますので、名作を手軽に楽しむことが可能です。 また、portsにもいくつかのDoc形式への変換ソフトウエアが入っていますので、自分で文章を変換することが可能です。
Palmはモデムや携帯電話を利用することで、インターネットに接続することが可能です [3] 。 標準のアプリケーションではありませんが、POPやIMAP4を利用できるMUAもありますので、自由にメールのやりとりが可能です。
また、特別な機材が無くても、クレイドル経由でメールのやりとりが可能なので、ちょっとした時間にメールを読んだり書いたりすることもできます。 もちろん、Doc形式などに変換して読むことも可能です。
Palm用のブラウザがいくつか提供されています。 自動巡回機能などもあるので、インターネットにつなげた時に取り込んでおいて、移動しながら読むと言う使い方も可能です。
また、iSilo形式とよばれる文章形式は、画像やハイパーリンクを扱えるようになっているため、この形式への変換ソフトウエアを利用することで閲覧を実現することも可能です [4] 。 このためにはwget(ftp/wget)を利用すると良いでしょう。 また画像はそのままの大きさで取り込みますので、netpbm(graphics/netpbm)などを利用して縮小しておく方がいいかもしれません。
また、MeDoc形式をうまく利用することで、Webを閲覧することも可能です。 例えば、[palm-unix-j:00125]を参考にして下さい。
おいしい店のリストなど、個人的なデータベースを持ち歩きたい機会は良くあると思います。 いくつかのデータベースの変換用ソフトウエアがportsには用意されていますが、日本でポピュラーな形式はJFile形式のようです。 JFile形式のさまざまなデータベースもmuchy.comなどで提供されています。
VNCやsshも動きます。 が、必要なんでしょうか…
これからFreeBSDとPalmのいい関係を築いて行こうと思います。 UNIXで使えるツールについての情報は Linux Applications for the Palm and Visor PDAが少し古いですがまとまっています。 日本語の情報源としては、 palm-unix-j mailing listがいいでしょう。
さてやはり、一度入力したデータは骨までしゃぶるのが基本でしょう。 というわけで、Palmで入力されたデータはFreeBSDのデスクトップでも参照したいものです。 PalmのデータとPCのデータとの同期をとることをHotSyncする(以下、sync)といいます。
Palmとのデータをやりとりしたり変換したりするためのアプリケーションとして、コマンドラインツール群のpalm/pilot-linkがあります。
UNIXユーザとしてはこれを使うのが基本でしょう;-)
アプリケーション毎に分かれたいろいろなコマンドが入っていますが、
詳細はman pilot-linkを参照して下さい。
また、各コマンド毎のマニュアルはあまり充実していませんが、コマンドを引数--
などの存在しない引数をあたえて実行すると簡単な解説が表示されますので、これを参照して下さい。
シリアルポートなどの情報は環境変数で定義可能です。
PILOTPORT
ではクレイドルが接続されているシリアルポートを指定します。
各コマンドのデフォルトでは/dev/pilotを見に行くようになっています。
この環境変数を/dev/cuaa0などのように設定するか、
ln -s /dev/cuaa0 /dev/pilotなどとして
コマンドがクレイドルのつながったシリアルポートを参照できるようにしておきます。
更に、自分をdialerグループに追加しておきます
[5]
。
こうすることで標準の/dev/cuaa0のパーミッション
[6]
で利用可能になります。
更に、PILOTRATE
でシリアルポートの速度を設定できます。
デフォルトでは9600bpsと遅くなっていますので、
setenv PILOTRATE 57600などと設定しておけば良いでしょう。
dlpshは、Palmにつないでファイルの削除などを行うためのシェルです。 シェルとはいえたいした機能は有りませんが、ファイルの削除を確認しながら行うには便利です。
pilot-xferはデータのバックアップや転送に用いるプログラムです。 基本的にデータのやりとりはこのコマンド一つで可能です。 コマンドラインオプションの抜粋と機能をTable 1に示します。
Palmのアプリケーションのインストールには-i
を使います。
Palmのアプリケーションはzipで圧縮された形式で配布されることが多いので、archivers/unzipを入れておきましょう。
Palmのデータベースの拡張子は普通.pdbであり、
アプリケーションの拡張子は.prcです。
unzipを利用して伸長したファイル群から上記のものをインストールすればPalmで利用可能になります。
アプリケーションhoge.prcをインストールするためには以下のようにします。
pilot-xfer -i
hoge.prc
Table 1. pilot-xferのコマンドラインオプション
コマンドラインオプション | 引数 | 説明 |
---|---|---|
-h ,--help | ヘルプを表示 | |
-b ,--backup | ディレクトリ名 | ディレクトリ名以下にバックアップを作成 |
-s ,--sync | ディレクトリ名 | ディレクトリ名以下とsyncする。
この時、backup(-b )とは違い更新されたものだけが対象となる。
|
-r ,--restore | ディレクトリ名 | ディレクトリ名中の全てのファイルをPalmへインストールする。 バックアップを戻すのに便利。 |
-i ,--install | ファイル名 | ファイルをPalmへインストール |
-d ,--delete | ファイル名 | ファイルをPalmから削除 |
-l ,--list | Palm内のファイル一覧を表示 | |
-e ,--exclue | ファイル名 | 引数で与えたファイル中に記述されたデータベースなどを
backup(-b ),sync(-s ),update(-u )の対象から外す。
各オプションの前に指定することが必要。
|
-m ,--merge | ファイル名 | ファイルのレコードを対応するデータベースにマージする。 |
-p ,--purge | sync時に削除されなかったデータを削除する。 | |
-u ,--update | ディレクトリ名 | sync(-s )とほとんど同じ。
Palm上で削除されたデータがPC上で削除されないことが異なる。
|
-f ,--fetch | データベース名 | データベースをPalmからコピーする。 |
pilot-mailはPOPやMHフォルダとPalmの間でメールのやりとりを行うためのプログラムです。 漢字コード変換などは含まれていませんので、適宜変換を行うことが必要です。 POPでメールを受信する場合にはDeleGate(net/delegate) [7] などのプロキシを利用し、漢字コード変換を行います。 portsなどでインストールした後、以下のように起動します。
/usr/local/sbin/delegated -P10110 ADMIN=take60@i.am CHARCODE=SJIS SERVER=pop://pop.take60.org
pilot-mail -n 10110
-h localhost
-u take60
-m
オプションもありますが、この場合でもファイルはあらかじめShift-JISに変換しておく必要があります。
メールを送るためには環境変数SENDMAIL
に漢字コード変換を行うような設定にします。
例えば、nkfを使う場合には以下のようになるでしょう。
setenv SENDMAIL "nkf -j | /usr/sbin/sendmail -t -i"
Figure 2. pilot-mail.cでポート番号を変更可能にするパッチ
--- pilot-mail.c.org Wed Jan 31 13:26:07 2001 +++ pilot-mail.c Wed Jan 31 14:59:35 2001 @@ -14,6 +14,7 @@ #define POPHOST "" #define POPUSER "" #define POPPASS "" +#define POPPORT 110 #define PILOTFROM "" #define SENDMAIL "/usr/sbin/sendmail -t -i" #define POPKEEP "keep" @@ -157,6 +158,8 @@ fprintf(stderr,"¥n (defaults to '%s')", POPUSER); fprintf(stderr,"¥n <-P pass> POP3 password [POPPASS]"); fprintf(stderr,"¥n (default value set)"); + fprintf(stderr,"¥n <-n port_number> POP3 port number [POPPORT]"); + fprintf(stderr,"¥n (defaults to '%d')", POPPORT); fprintf(stderr,"¥n <-f address> Outgoing 'From:' line [PILOTFROM]"); fprintf(stderr,"¥n (defaults to '%s')", PILOTFROM); fprintf(stderr,"¥n <-s command> Sendmail command (if empty, mail won't be sent) [SENDMAIL]"); @@ -249,6 +252,12 @@ #else ""; #endif + int pop_port = +#ifdef POPPORT + POPPORT; +#else + 110; +#endif extern char* optarg; extern int optind; @@ -268,6 +277,8 @@ pop_user = getenv("POPUSER"); if (getenv("POPPASS")) pop_pass = getenv("POPPASS"); + if (getenv("POPPORT")) + pop_port = atoi(getenv("POPPORT")); if (getenv("PILOTPORT")) port = getenv("PILOTPORT"); if (getenv("TOPILOT_MHDIR")) @@ -275,7 +286,7 @@ signal(SIGINT, sigint); - while ((c = getopt(argc, argv, "s:p:d:f:h:u:p:h:P:k:m:")) != EOF) { + while ((c = getopt(argc, argv, "s:p:d:f:h:u:p:h:P:k:m:n:")) != EOF) { switch (c) { case 's': sendmail = optarg; @@ -292,6 +303,9 @@ case 'P': pop_pass = optarg; break; + case 'n': + pop_port = atoi(optarg); + break; case 'f': from_address = optarg; break; @@ -563,7 +577,7 @@ memcpy((char*)&pop_addr.sin_addr.s_addr, hostent->h_addr,hostent->h_length); } pop_addr.sin_family = AF_INET; - pop_addr.sin_port = htons(110); + pop_addr.sin_port = htons(pop_port); if ((popfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("Unable to obtain socket");
その他にも住所データベースをテキスト形式で表示するaddressesやTODOを変換するread-todosなどがあります。 これらのツールを使ってデータベースをFreeBSD上で利用することは可能なのですが、場合によっては逆変換が用意されていなかったりと面倒です。 やはり普段まめにデータ更新を続けようと思うと、後述のGUIツールを使った方が便利です。
ColdSyncはUSB経由のsyncが行える転送ツールです。 Visorではこれを使うことになるでしょう [9] 。 特徴はPerlで比較的簡単にコンジットが書けることでしょう。
設定は‾/.coldsyncrcに行います [10] 。 設定の例はFigure 3のようになります。
Figure 3. .coldsyncrcの設定例
listen serial { device: /dev/pilot; } conduit dump { type: mail/DATA; path: "/usr/local/libexec/coldsync/send-mail"; arguments: Sendmail: "nkf -j |/usr/sbin/sendmail"; My-Address: take60@i.am; Outbox-name: 送信; } #conduit fetch, dump { # type: todo/DATA; # path: "/usr/local/libexec/coldsync/todo-text"; # arguments: # Where: /usr/home/take60/todo; # Delete: yes; #}
portsに用意されているその他のデータ変換ツールをTable 2に示します。
Palm内部では日本語はShift-JISで扱われますので、テキストファイルなどはあらかじめnkf(japanese/nkf)やqkc(japanese/qkc)などを使って変換しておく必要があります。
文章変換はmakedocがよく用いられています。
MeDoc変換のためのラッパもありますので、これを利用することでインデックスのついた文章の作成も可能です。
Webデータを変換するためにはw3m(japanese/w3m)を-dump
と-cols 34
、-s
などのオプションを使って利用すれば良いでしょう。
データベースは日本ではJFileが良く用いられています。 CVSとの変換ツールが用意されていますので、これを利用すればいいでしょう。 他のデータベースとの相互変換もCSVを経由することで可能です。
画像ですが、かつてはImage Viewer形式と呼ばれていたものが、FireViewer形式として利用されているようです。 この形式へのコンバータは存在しますがその他は独自形式のためFreeBSDからの変換はあきらめた方がよいようです。
Table 2. データ変換ツール
名称 | portsの場所 | 機能 | 説明 | 利用例 |
---|---|---|---|---|
makedoc | palm/pilot_makedoc | 文章変換 | テキストとDoc形式を変換 | pilot_makedoc textfile.txt prcfile.prc title |
txt2pdbdoc | palm/txt2pdbdoc | 文章変換 | テキストとDoc形式を変換 | txt2pdbdoc title textfile.txt prcfile.prc |
bibelot | palm/bibelot | 文章変換 | テキストとDoc形式を変換 | |
makemedoc | なし | 文章変換 | MeDocのインデックスがついた文章を作成、 あとでmakedocをもちいて変換を行う | |
iSilo | palm/isilo | 文章変換 | テキストやHTMLやDocをiSilo形式に変換 | iSiloBSD textfile.txt |
hdconv | palm/hdconv | データベース | HanDBase($24.99)とCSVの変換 | |
jconv | palm/jfconv | データベース | JFile($24.95)データベースとCSVの変換 | jfconv -e source.csv jfile.pdb |
MobileDB converter | palm/mdbconv | データベース | CSVをMobileDB($14.95)に変換。 | mdbconv -i source.csv -o mobiledb.pdb -n title |
Palm Pilot Image Viewer to PGM Converter | palm/imgtopgm | 画像変換 | Palm Pilot Image ViewerとPGMを変換 | ppmimgvquant luna.ppm | ppmtopgm | pgmtoimgv > image.prc |
ports/palmには住所録やTODO、スケジュールの変換をGUIを用いて行うアプリケーションがいくつか登録されています。 このなかにはJ-Pilotのように全て自前のインターフェースを用意しているものもありますし、既に存在するスケジューラを利用するsyncalなどもあります。 また、GnomeやKDEで利用することを考えたアプリケーションもあります。 ここではこれらのアプリケーションを紹介します。
J-PilotはGtk+で書かれたアプリケーションです。 スケジュール、住所録、TODO、メモの表示する他、 バックアップやアプリケーションのインストールなどもGUIから可能です。 また、プラグイン機能としてExpence(小遣い帳)やメールも扱えます。 バージョン0.99からは標準で日本語などが利用可能になっていますので、palm/jpilotを構築すれば利用できます。
使用上の注意点ですが、起動後、ファイルからプロパティを開き、言語をデフォルトのEnglish から日本語に直します。 いちど終了させた後で、再度立ち上げることで日本語がでます。
Gnome環境ですが、Gnome-pilot(palm/gnomepilot)が用意されています。 MALを使う必要がある場合にはGnome-pilot-conduits(palm/gnomepilot-conduits)も利用可能です。 スケジューラとしてはGnome pim(deskutils/gnomepim)を利用しますが、漢字コード変換がGnome-pilotに実装されていませんので表示できません。 スケジュールの同期用コンジットを作成するためにはGnome pimをmake -DWITH_GNOMEPILOTの用に作成します。 基本的にHotSyncボタンを押すだけで利用可能なので非常に便利です。
KDE環境用にはKPilotが用意されています。 これも日本語変換が実装されていないので利用できません。
既存のスケジュールアプリケーションの連係としては、Figure 5のIcal(japanese/ical)との連係を行うpalm/syncalと、 Figure 6との Plan(japanese/plan)との連係を行う(pilot-linkに含まれる)sync-planがあります。 両者ともに見やすい1ヵ月の予定出力ができることが大きな特徴でしょう。
Icalの連係用プログラムとしては、 pilot-linkにもread-icalが用意されているのですが、余り巨大な予定表だとうまく通信できないようです。 また漢字コード変換の問題も生じます。 palm/syncalをportsでインストールすると、Ical本体にパッチが当てられFileのSync with Pilotという項目が追加されます。 したがって、コマンドラインでsyncalを実行する以外に、このメニューからのsyncも可能です。 synccal自体にはもともと日本語のサポートコードが含まれています。 palm/syncalでmake DEFINES=-DJapaneseとして作成して下さい。
Planとの連係を行うsync-planはPerlスクリプトです。 もちろん日本語の変換コードは含まれていませんので、足してあげる必要があります。 japanese/p5-Jcodeを用いた変換パッチをFigure 7に示します。 また、標準ではsync-planで使われているPDA::Pilotがインストールされていませんので、 palm/pilot-link/work/pilot-link..../Perl5/で
perl Makefile.PL;make;make install
chmod 1777 /usr/local/share/netplan.dir/
Figure 7. sync-planへのパッチ
--- sync-plan.PL.org Thu Feb 1 11:46:55 2001 +++ sync-plan.PL Thu Feb 1 11:48:04 2001 @@ -8,6 +8,7 @@ use Time::Local; use MD5; use PDA::Pilot; +use Jcode; sub DatePlanToPerl { my($PlanDate) = @_; @@ -78,8 +79,8 @@ } $pilot->{id} = $plan->{pilotid}; - $pilot->{description} = join("¥xA", @{$plan->{note}}) if defined $plan->{note}; - $pilot->{note} = join("¥xA", @{$plan->{message}}) if defined $plan->{message}; + $pilot->{description} = Jcode->new(join("¥xA", @{$plan->{note}}))->sjis if defined $plan->{note}; + $pilot->{note} = Jcode->new(join("¥xA", @{$plan->{message}}))->sjis if defined $plan->{message}; $pilot->{description} ||= ""; if (defined $plan->{time}) { @@ -181,8 +182,8 @@ $plan->{pilotid} = $pilot->{id}; $plan->{id} ||= 0; - $plan->{message} = [split("¥xA", $pilot->{note})] if defined $pilot->{note}; - $plan->{note} = [split("¥xA", $pilot->{description})] if defined $pilot->{description}; + $plan->{message} = [split("¥xA", Jcode->new($pilot->{note}))->euc] if defined $pilot->{note}; + $plan->{note} = [split("¥xA", Jcode->new($pilot->{description}))->euc] if defined $pilot->{description}; my($date) = timelocal(@{$pilot->{begin}}); my($time) = $pilot->{begin}[0]+$pilot->{begin}[1]*60+$pilot->{begin}[2]*60*60;
MHCは電子メールのMH形式でスケジュールを扱うためのツールです。 Rubyで書かれたGUIインターフェースも持っていますが、WanderlustやMewなどのMUAなどからのインターフェースも持っています。 Palmとの変換ツールもありますので、これについても簡単に説明します。
インストールですが、今回はバージョン0.25を例に取ります。
必要なアプリケーションをportsからインストールします。 具体的にはruby(lang/ruby)とruby-gtk(x11-toolkits/ruby-gtk)、pilot-link(palm/pilot-link)をインストールしておきます。
まず、取得したアーカイブを展開し、作成されたmhc-0.25ディレクトリに移動します。
rubyのライブラリを作成するためにruby-extに移動して、ruby extconf.rb;make;make installします。
一つ上に戻って、実行ファイルを適当なディレクトリ(/usr/local/binなど)にインストールします。
Palmとの連係のためのコマンドはpalm2mhcとmhc2palmです。 gemcalなどの標準的なスケジュールディレクトリは‾/Mail/scheduleですので、palm2mhcでは以下のようにディレクトリを指定します。
palm2mhc -r ‾/Mail/schedule
Palmでインターネットを利用しようと思うと、モデムを購入するか、携帯などとの接続を考えるのが普通です。 しかし、これらの機器はちょっとお高いので躊躇してしまいます。 もともとPalmにはシリアルがあるのだからPPPできないだろうかといろいろ調べました。 Palm OS 3.5にはPPP接続するための項目が用意されています。 Connecting a Palm Pilot to FreeBSDを参考にするとあっさりとつながります [11] 。
手順ですが、まず始めにPalmの設定を行います。 環境設定からネットワークを選択し、接続をシリアルにします。 続けて、詳細…の接続タイプをPPPとします。 スクリプトを選び、最初の項目を終了とすることでログインスクリプトを消去します。 更に環境設定の接続でシリアルを選択し、編集…でシリアルとパソコンを選択します。 続けて詳細…から速度を選択します。 ここでは57,600bpsをえらぶものとして設定を行います。
母艦側の設定は以下の手順になります。 Figure 9のような/etc/ppp/optionsを作成します。 その後、次のようにしてroot権限でpppdを実行します。
pppd
Figure 9. /etc/ppp/optionsの設定例
57600 # クレイドルをつないだシリアルデバイス /dev/cuaa0 # 母艦のIPアドレス:PalmのIPアドレス 192.168.122.1:192.168.122.10 # DNSのアドレス ms-dns 192.168.122.1 debug lock nodetach crtscts local passive proxyarp
これではPPPを利用する度にroot権限を必要としますので、mgettyを利用して接続することを考えましょう。 mgettyはcomms/mgetty+sendfaxからインストールして下さい。 インストール時に設定を聞いてきますが適当に答えて構いません。 最低限必要な設定はmgetty.config(Figure 10)とlogin.configです。 後者には単に
/AutoPPP/ - - /usr/sbin/pppdとします。 /etc/ttysにも
cuaa0 "/usr/local/sbin/mgetty -r" unknown on insecureを追加して、kill -HUP 1しておきます。 これでPalmからPPPで接続するようにすれば自動的に接続されるようになります。 なお、ここでは認証を行っていませんので、必要な場合は設定して下さい。 また、HotSyncするためにはpilot-linkをロックを利用するように改造する必要があります。 具体的には[palm-unix-j:00222]を参照して下さい。
p5-PalmはPalmのデータベースPDBを扱うためのPerlモジュールです。 例えば年賀状用に住所録のデータをCSVなどの形式に変換する必要がある場合に便利です。 まさにこの用途に利用したスクリプトをFigure 11に示します。 詳細はperldoc Palm::PDBを参照して下さい。
Figure 11. 住所データをCSVに変換するPerlスクリプト
#!/usr/bin/perl # # Address data converter # Usage address2csv AddressDB.pdb use strict; use Palm::PDB; use Palm::Address; use Jcode; my($fname)=shift; my($pdb)=new Palm::Address; $pdb->Load($fname); # Print header print "num,name,zip,address,address2¥n"; for(my($i)=0;$i<=$#{$pdb->{"records"}};$i++) { my($record)=$pdb->{records}[$i]; # Name handling my($name)=$record->{fields}{name}; my($firstName)=$record->{fields}{firstName}; $name=‾s/¥x01(.*)//g; $firstName=‾s/¥x01(.*)//g; $name.=" ".$firstName; # Address handling my($zip)=$record->{fields}{zipCode}; my($address)=$record->{fields}{state}." ".$record->{fields}{city}; my($address2)=$record->{fields}{address}; # Kanji code conversion Jcode->new(¥$name)->euc; Jcode->new(¥$address)->euc; Jcode->new(¥$address2)->euc; print $i.","."¥"$name¥",$zip,¥"$address¥",¥"$address2¥"¥n"; }
Palmの開発時にいちいちPalmに転送を行って動作をさせてというのは現実的ではありません。 そこで、エミュレータが提供されています。 portsにはPOSE(Figure 12)とxcopilotがありますが、後者は古いPalmのROMイメージでしか動作しませんので、普通はPOSEを使います。
POSEではROMイメージを取得するためにPalmに専用のアプリケーションをインストールする必要があります。 このアプリケーションは/usr/local/share/pose/ROM Transfer.prcにありますので、pilot-xferを使って転送しておきます。
Palmの開発環境には C言語での開発環境として商用のCodewarrior for Palm OSとGCCベースのGNU Palm Pilot SDKがあります。 その他にも、Javaの組み込み用バージョンのKVMやNS Basic/Palmというビジュアルベーシックライクな環境もあります。
ここで開発について詳細に説明する余裕はありませんので興味のあるかたは「Palmプログラミング」 ,ISBN 4-87311-009-2, オーム社などを参照して下さい。 雑誌ではUNiX Magazineの増井俊之さんの連載記事「インターフェースの街角」で解説されています。 また以下のURLは参考になるでしょう。
Palm Computing Platfome デベロッパーゾーン: 本家のサポートサイトです。
WorkPad 用プログラムの組み方(1): 濃ゆいです。 それでもあなたはPalmでプログラミングしますか:-)
FreeBSD+PalmIII: 少し情報が古いですが、まとまっています。
GCCでの開発に必要なものはライブラリのPalmOS SDK(palm/palmos-sdk)と コンパイラなどを含んだpalm/palm-prctools、 リソースコンパイラのpalm/pilrcです。 また、portsにはなっていませんが、JavaベースでGUIをつかってリソースを変更できるPilrcEditというツールもあります。 場合によっては逆アセンブラのpalm/palmpowerも必要かもしれません。
スケジュールをPalmに任せてしまうと、これなしでは1時間後の予定すら頭からは消え去ります [13] 。 というわけで、Palmは常に持ち歩く必須アイテムになります。 が、メールからなにからこれでやるのはちょっとめんどくさいです。 ここでは、現在の私のモバイルな環境を御紹介します。
Palmをワイシャツのポケットに入れておきます。 Visor用の無線LANモジュールが出れば、すごく幸せになれそうなのですが、もう少し先みたいです。 あと、TRGproで使えることが期待されるCompact Flashの無線LANカードもどっか出さないですかねぇ?
少し前に若者(?)にはやったウエストバッグを持ち歩きます。 私の使っているのはMountainsmithのTour Packです。 両サイドにドリンクホルダーがあるので便利です。 中は以下のようなものが入っています。
sigmarion + P-in Comp@ct: 文章書き用等に使用。 まだシリアルケーブル買ってないのでやってませんが、コンソールとして利用することもできるでしょう。 難点はキーボードです。 MobileGearII R330ぐらいの大きさなら困らないのですが、sigmarionの配列は独特なのでちょっとめんどくさいです。 英語キーボードのちゃんとした配列のものが欲しいです。
デジタルカメラ(maxell ws30): メモ用です。 ほんとはIXY Digitalが欲しかったのですが高いので諦めました。 フラッシュ付きの固定焦点で15000円でした。 入出力インターフェースはUSBのみです。 まだFreeBSDでは使えていません。
折り畳み傘: 屋内作業ならいりませんが、まあ用心です。
折り畳みのデイバック(モンベル): 荷物が増えた時用です。
交換可能ピンバッチ;): これは大事です(^-^;)
ノートパソコンが必要な作業の場合、Digital HiNote UltraIIを持ち歩いています。 今はDVDを見たいのとDigital Videoで遊びたいのでFujitsu LOOXが欲しいなぁと思ってます。 あ、NetBSD/hpcmipsが動くCE機でXが動いてプレゼンテーションができる少し高めのやつも候補のうちです。
私は普段職場で湯水のようにInternetを使える環境にあるため家ではテレホーダイさえ申し込んでいませんでした。 この連載をお引き受けして、出来るかぎり職場で作業をしないと決めたので、おうちの環境を整えました。 といっても、テレホーダイ1800を申し込んだだけなんですが(^-^;) 更に、モデムも28.8kのものを使っているので本当に貧弱な環境です。 私の使っているプロバイダがフレッツISDNに対応することになったので、もうすぐ湯水環境がやってきます [14] 。 この機会にこの記事がいかに貧乏臭い環境で書かれていたか書いておこうと思います。
テレホーダイはご存知のように「人間をやめるか?」という選択を迫られるサービスです。 大体、23:00から朝の8:00まで湯水のように使っていたら次の日仕事になりません。 そこで、いかに普段の作業を自動化して、夜に情報を集めておいてもらうかが重要になります。 基本的に定期で必要な作業はcron君に任せてしまいます。 普通は(?)ports-currentのcvsupは毎日やるもん(?)でしょうが、記事を書いている途中で破綻したくないので(^-^;)書きはじめるとある時点から自動で更新はしないようにしています。 必要なdistfilesのfetchには以下のようなスクリプトを利用しています。 この時、/usr/ports/distfilesのオーナーを自分にしてあるので、このcronのエントリ自体はユーザで入れてあります。 次の日に確実に作りたければmake fetchではなくmake fetch-recursiveにしておくべきなのですが、現在ディスクが6Gしかないのでやっていません。 これで次の日にportsを作ることはできるようになるはずです。 が、実際は依存しているライブラリのバージョンが低すぎたりするので、また次の日に取ってきてを繰り返すことになります(^-^;)
#!/bin/sh PORTDIR=/usr/ports SUDO=/usr/local/bin/sudo #${SUDO} /usr/local/bin/cvsup -g /usr/share/examples/cvsup/ports-supfile|mail take60@i.am & for i in japanese/gnome palm do cd ${PORTDIR}/${i} make fetch # make fetch-recursive done
あとは情報収集の問題です。 これはhttpのプロキシサーバにwwwoffle(www/wwwoffle)を利用することで、接続する時間を最小限にすることができます。 このプロキシサーバについては改めて説明したいと思いますが、UNiX Magazine2000年2月号の島慶一さんの記事「wwwoffle」が良くまとまっていると思います。 これで、/etc/ppp/ppp.linkupする時にonlineにし、/etc/ppp/ppp.linkdownするときにofflineにすることで、つながっている時は直接見に行きますし、つながっていなければキャッシュの内容を表示してくれます。 また、キャッシュに入っていない場合は次回接続時にfetchするということが可能なので、一気にもってきます。 他にもあるページから再帰的にページを取得することができるので、日記更新情報ページから全ての日記をとってきておくという利用も可能です;)
さあ、これで準備が整いました。 もしあなたがports/{devel,games,net}などの魔窟について探訪し、記事を書きたいと思ったら編集長に相談してみて下さい。 私にはここいらをどうすれば良いのか絶望的な気分です(^-^;)
[1] | わたし、これももってます(^-^;) |
[2] | もちろん、Palm用のキーボードも売られていますが、 どうも敗北感が… |
[3] | 私のような貧乏な向きにはクレイドル経由でのPPPも可能です。 設定は後で説明します。 |
[4] | ただし、ハイパーリンクを扱えるiSiloはシェアウエアです。 |
[5] | /etc/groupの設定は新たにloginしないと有効にならないので注意して下さい。 |
[6] | crw-rw---- 1 uucp dialer 28, 128 2/ 2 15:35 /dev/cuaa0 |
[7] | しかし、SAかかったままですね… |
[8] | 以下のような手順が良いでしょう。
|
[9] | 現時点ではCLIEのUSBクレイドルでは利用できないようですが、別売りのシリアルクレイドルの購入でsync可能です。 |
[10] | このファイルはShift-JISで保存しないと、メールの送信がうまくいきませんので注意して下さい。 |
[11] | ただし、携帯性は損なわれまくっていますが(^-^;) |
[12] | KVMに関しては、後藤さんか杉村さんに期待(^-^;) |
[13] | もともと約束をすっぽかす傾向はあったんですが(^-^;) |
[14] | と思ったら2001年2月対応から2001年春になっとるやないか(;-;) |