PDAする生活(ports/palm編)

現在、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はPalm社の開発したPalmOSを利用したPDAの名称で、 OS自体は各社にライセンスされています。 現在日本で手に入る製品としては以下のようなものがあります。

Figure 1. Palmと仲間(?)たち

日本語の文章の入力も Sony CSLの増井俊之さんの開発された POBoxを 利用することで、そこそこ実用的なレベルで入力可能です。 その他、さまざまなPalmのアプリケーションの紹介は muchy.comを参照して下さい。

Palmでなにができるの?

ここではPalmを使ってできることをざっと眺めておきましょう。 具体的な設定についてはあとで説明します。

スケジュール管理

もっとも良く利用される機能がToDoの管理を含めたスケジュール管理でしょう。 UNIXにもいくつかスケジュール管理用のアプリケーションがありますが、これらと連係をすることも可能です。

住所録

次に良く使う機能は住所録でしょうか? ついつい更新を忘れがちな住所録も、常に手元に入力環境があれば最新の状態を維持できます。 カスタム項目を利用すれば、去年年賀状が来たかなども記録できます。

本を読む

Palmには標準でメモ帳と呼ばれるアプリケーションが付属しています。 しかし、このメモ帳ではファイルの大きさに制限があるため、少し大きなテキストファイルを扱うためにはDoc形式やその拡張のMeDoc形式が利用されます。 MeDoc形式はDoc形式にインデックスを付加したもので、ハイパーリンクのような利用が可能です。 著作権の切れたDoc形式のデータは 青空文庫で提供されていますので、名作を手軽に楽しむことが可能です。 また、portsにもいくつかのDoc形式への変換ソフトウエアが入っていますので、自分で文章を変換することが可能です。

メールのやりとりを行う

Palmはモデムや携帯電話を利用することで、インターネットに接続することが可能です [3] 。 標準のアプリケーションではありませんが、POPやIMAP4を利用できるMUAもありますので、自由にメールのやりとりが可能です。

また、特別な機材が無くても、クレイドル経由でメールのやりとりが可能なので、ちょっとした時間にメールを読んだり書いたりすることもできます。 もちろん、Doc形式などに変換して読むことも可能です。

Webを閲覧する

Palm用のブラウザがいくつか提供されています。 自動巡回機能などもあるので、インターネットにつなげた時に取り込んでおいて、移動しながら読むと言う使い方も可能です。

また、iSilo形式とよばれる文章形式は、画像やハイパーリンクを扱えるようになっているため、この形式への変換ソフトウエアを利用することで閲覧を実現することも可能です [4] 。 このためにはwget(ftp/wget)を利用すると良いでしょう。 また画像はそのままの大きさで取り込みますので、netpbm(graphics/netpbm)などを利用して縮小しておく方がいいかもしれません。

また、MeDoc形式をうまく利用することで、Webを閲覧することも可能です。 例えば、[palm-unix-j:00125]を参考にして下さい。

データベースの利用

おいしい店のリストなど、個人的なデータベースを持ち歩きたい機会は良くあると思います。 いくつかのデータベースの変換用ソフトウエアがportsには用意されていますが、日本でポピュラーな形式はJFile形式のようです。 JFile形式のさまざまなデータベースもmuchy.comなどで提供されています。

その他

VNCやsshも動きます。 が、必要なんでしょうか…

FreeBSDでPalmとHotSync

これからFreeBSDとPalmのいい関係を築いて行こうと思います。 UNIXで使えるツールについての情報は Linux Applications for the Palm and Visor PDAが少し古いですがまとまっています。 日本語の情報源としては、 palm-unix-j mailing listがいいでしょう。

さてやはり、一度入力したデータは骨までしゃぶるのが基本でしょう。 というわけで、Palmで入力されたデータはFreeBSDのデスクトップでも参照したいものです。 PalmのデータとPCのデータとの同期をとることをHotSyncする(以下、sync)といいます。

コマンドラインツール

pilot-link

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自体は、POPのポートを110に決めうちしていますので、pilot-mail.cFigure 2のように変更します。 makeしてインストールするのを忘れないようにして下さい [8] 。 これで、ポート10110を利用して、漢字コード変換を利用して転送が可能です。

    pilot-mail -n 10110 -h localhost -u take60
  

他にもMH形式のフォルダの転送を行う-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

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
txt2pdbdocpalm/txt2pdbdoc文章変換 テキストとDoc形式を変換 txt2pdbdoc title textfile.txt prcfile.prc
bibelotpalm/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

とはいえ簡単GUIプログラム

ports/palmには住所録やTODO、スケジュールの変換をGUIを用いて行うアプリケーションがいくつか登録されています。 このなかにはJ-Pilotのように全て自前のインターフェースを用意しているものもありますし、既に存在するスケジューラを利用するsyncalなどもあります。 また、GnomeやKDEで利用することを考えたアプリケーションもあります。 ここではこれらのアプリケーションを紹介します。

J-Pilot

J-PilotはGtk+で書かれたアプリケーションです。 スケジュール、住所録、TODO、メモの表示する他、 バックアップやアプリケーションのインストールなどもGUIから可能です。 また、プラグイン機能としてExpence(小遣い帳)やメールも扱えます。 バージョン0.99からは標準で日本語などが利用可能になっていますので、palm/jpilotを構築すれば利用できます。

使用上の注意点ですが、起動後、ファイルからプロパティを開き、言語をデフォルトのEnglish から日本語に直します。 いちど終了させた後で、再度立ち上げることで日本語がでます。

Figure 4. J-Pilotの表示画面

Gnome/KDE環境での生活

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ヵ月の予定出力ができることが大きな特徴でしょう。

Figure 5. Icalの画面

Figure 6. Planの画面

Icalの連係用プログラムとしては、 pilot-linkにもread-icalが用意されているのですが、余り巨大な予定表だとうまく通信できないようです。 また漢字コード変換の問題も生じます。 palm/syncalをportsでインストールすると、Ical本体にパッチが当てられFileSync with Pilotという項目が追加されます。 したがって、コマンドラインでsyncalを実行する以外に、このメニューからのsyncも可能です。 synccal自体にはもともと日本語のサポートコードが含まれています。 palm/syncalmake DEFINES=-DJapaneseとして作成して下さい。

Planとの連係を行うsync-planPerlスクリプトです。 もちろん日本語の変換コードは含まれていませんので、足してあげる必要があります。 japanese/p5-Jcodeを用いた変換パッチをFigure 7に示します。 また、標準ではsync-planで使われているPDA::Pilotがインストールされていませんので、 palm/pilot-link/work/pilot-link..../Perl5/

    perl Makefile.PL;make;make install
  

してインストールする必要があります。 sync-planPlanに含まれるnetplanを利用してデータのsyncを行いますのでこのコマンドを立ち上げておく必要があります。 この時、データを記録するディレクトリのパーミッションの関係で立ち上がらない場合は、

    chmod 1777 /usr/local/share/netplan.dir/
  

として下さい。 Plan側の設定としては、 FileFile List...で開くウインドウでServerをチェックし、ServerHostにnetplanが動いているサーバを指定します。

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との連係

MHCは電子メールのMH形式でスケジュールを扱うためのツールです。 Rubyで書かれたGUIインターフェースも持っていますが、WanderlustMewなどの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との連係のためのコマンドはpalm2mhcmhc2palmです。 gemcalなどの標準的なスケジュールディレクトリは‾/Mail/scheduleですので、palm2mhcでは以下のようにディレクトリを指定します。

	    palm2mhc -r ‾/Mail/schedule
	  

Figure 8. gemcalの動作の様子

Palmでインターネット(貧乏編)

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を利用して接続することを考えましょう。 mgettycomms/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]を参照して下さい。

Figure 10. /usr/local/etc/mgetty+sendfax/mgetty.configの設定例

port cuaa0
speed 57600
direct YES
port-owner uucp
port-group uucp
port-mode 0660
modem-type auto

      

p5-Palmを使ったデータ変換

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の開発時にいちいちPalmに転送を行って動作をさせてというのは現実的ではありません。 そこで、エミュレータが提供されています。 portsにはPOSE(Figure 12)とxcopilotがありますが、後者は古いPalmのROMイメージでしか動作しませんので、普通はPOSEを使います。

POSEではROMイメージを取得するためにPalmに専用のアプリケーションをインストールする必要があります。 このアプリケーションは/usr/local/share/pose/ROM Transfer.prcにありますので、pilot-xferを使って転送しておきます。

Figure 12. POSEの表示画面

開発環境

Palmの開発環境には C言語での開発環境として商用のCodewarrior for Palm OSとGCCベースのGNU Palm Pilot SDKがあります。 その他にも、Javaの組み込み用バージョンのKVMNS Basic/Palmというビジュアルベーシックライクな環境もあります。

ここで開発について詳細に説明する余裕はありませんので興味のあるかたは「Palmプログラミング」 ,ISBN 4-87311-009-2, オーム社などを参照して下さい。 雑誌ではUNiX Magazineの増井俊之さんの連載記事「インターフェースの街角」で解説されています。 また以下のURLは参考になるでしょう。

GCCでの開発に必要なものはライブラリのPalmOS SDK(palm/palmos-sdk)と コンパイラなどを含んだpalm/palm-prctools、 リソースコンパイラのpalm/pilrcです。 また、portsにはなっていませんが、JavaベースでGUIをつかってリソースを変更できるPilrcEditというツールもあります。 場合によっては逆アセンブラのpalm/palmpowerも必要かもしれません。

おわりに

タイトルのわりにはPalmの説明に終止してしまいました(^-^;) 開発環境も内容があまいです、すいません(_O_) またリクエストがあれば続きを書きたいと思います [12]

[コラム]私のMobileな環境

スケジュールをPalmに任せてしまうと、これなしでは1時間後の予定すら頭からは消え去ります [13] 。 というわけで、Palmは常に持ち歩く必須アイテムになります。 が、メールからなにからこれでやるのはちょっとめんどくさいです。 ここでは、現在の私のモバイルな環境を御紹介します。

レベル0:基本的に手ぶら

Palmをワイシャツのポケットに入れておきます。 Visor用の無線LANモジュールが出れば、すごく幸せになれそうなのですが、もう少し先みたいです。 あと、TRGproで使えることが期待されるCompact Flashの無線LANカードもどっか出さないですかねぇ?

レベル1:文書書きやメンテナンス仕様

少し前に若者(?)にはやったウエストバッグを持ち歩きます。 私の使っているのはMountainsmithのTour Packです。 両サイドにドリンクホルダーがあるので便利です。 中は以下のようなものが入っています。

  • sigmarion + P-in Comp@ct: 文章書き用等に使用。 まだシリアルケーブル買ってないのでやってませんが、コンソールとして利用することもできるでしょう。 難点はキーボードです。 MobileGearII R330ぐらいの大きさなら困らないのですが、sigmarionの配列は独特なのでちょっとめんどくさいです。 英語キーボードのちゃんとした配列のものが欲しいです。

  • デジタルカメラ(maxell ws30): メモ用です。 ほんとはIXY Digitalが欲しかったのですが高いので諦めました。 フラッシュ付きの固定焦点で15000円でした。 入出力インターフェースはUSBのみです。 まだFreeBSDでは使えていません。

  • 折り畳み傘: 屋内作業ならいりませんが、まあ用心です。

  • 折り畳みのデイバック(モンベル): 荷物が増えた時用です。

  • 交換可能ピンバッチ;): これは大事です(^-^;)

あとは、ウエストバックのベルト部分にVictorynoxのサイバーツールをつけてあります。 買った後で安いのが出たのでショックでした(;-;) これがあればコンピュータばらすのに困りません。 ここまで持ち歩けば大抵のことは可能です。

Figure 13. 腰で持ち歩くもの

レベル2:本格的な作業

ノートパソコンが必要な作業の場合、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}などの魔窟について探訪し、記事を書きたいと思ったら編集長に相談してみて下さい。 私にはここいらをどうすれば良いのか絶望的な気分です(^-^;)

Notes

[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]

以下のような手順が良いでしょう。

  • palm/pilot-linkmake patch

  • palm/pilot-link/work/pilot-link...以下のpilot-mail.cに変更を行う。

  • palm/pilot-linkに戻って、make deinstall install

[9]

現時点ではCLIEのUSBクレイドルでは利用できないようですが、別売りのシリアルクレイドルの購入でsync可能です。

[10]

このファイルはShift-JISで保存しないと、メールの送信がうまくいきませんので注意して下さい。

[11]

ただし、携帯性は損なわれまくっていますが(^-^;)

[12]

KVMに関しては、後藤さんか杉村さんに期待(^-^;)

[13]

もともと約束をすっぽかす傾向はあったんですが(^-^;)

[14]

と思ったら2001年2月対応から2001年春になっとるやないか(;-;)