yendo weblog


PictureGear Pocket で天気予報を表示

ネットワークを使えない Clie (OS 4.0) + jpilot で 天気予報を表示できるようにしてみた。 効率など無視したアナクロな方法だが、 天気予報の画像を引っ張ってきて、Clie で表示するようにした。

画像表示には PictureGear Pocket (あるいは Polar) を使い、画像の変換に は以前作成したシェルスクリプトを pgpf2palm として使う。 以下のスクリプト を仕込んでおけば、自動的に画像データの取得、変換、転 送ができる。 変数は適宜する必要があるが、TBS WEATHER GUIDE あたりがいいかも。 $url にはベースとなる URL を、$file には取得する画像のファイル名を指定する。

#!/usr/bin/perl 

use strict;
use LWP::Simple;

my @file = ("xxx.jpg", "yyy.jpg");
my $url = "http://";
my $tmp = "$ENV{HOME}/tmp/pgpf/";

foreach (@file) {
    my $rc = mirror($url.$_, $tmp.$_);

    if ($rc == 200) {
	system "pgpf2palm $tmp$_";
    }
}

Clie 付属の PhotoStand を使えば、ホーム画面から直ぐに画像を閲 覧することもできる。

……が、さすがにそろそろネットワークの使える PDA が欲しいところ。

2006/11/21 (Tue) 16:38 | タグ: computer | 固定リンク


Palm でテレビ番組表 ―TVscape with J-Pilot

TVscape は CLIE 上でテレビ番組表を閲覧するソフトウェアである。 専用の番組表データが So-net のテレビ王国というサイトで 配信されている。 TVscape はこの番組表データを直接ネットワークを介して、 あるいは Windows 専用のコンジットを介して取得するが、 Windows 以外を介してこの番組表データの取得するプログラムも いくつか公開されてる。

最初に見付けたのは Mac OS X 用の AYAX TV。 そのネタ元は「TVscape」を Windows 以外でも使う Tips で紹介されている ruby スクリプトのようだ。 このページからのリンクが切れているがスクリプト本体もあった。 この ruby スクリプトを使えば、プラットフォームを問わず ruby さえ動けば番組表データを取り寄せることができる。たまに使うならこれで十分。 ちなみに、さらに大元を探すと ZOB Network BBS: Palm OS 関係 その2。 2002 年かぁ。もう 4 年も前の話だ。

ただ、ついでに GNU/Linux 上の J-Pilot で自動的にデータを取り込むようにしたいなと思ったので、 ruby で書けない私は perl で書いてみた。 私の書いたスクリプト tvscape.pl だと、 Hotsync 前に実行するだけで バナーデータの取得や J-Pilot によるインストールまで面倒見てくれる。 まぁ、ずっと前に Web クリッピングがこけたように 相当時代遅れな話だが、何かの役に立つかもしれない、結局楽しんでいるんだし、 そう思っておこう。

追記: 2006 年 11 月 30 日に TVscape の CLIE 向けデータ配信が終了するとのこと。 詳しくは 「TVscape」用テレビ番組情報提供終了のお知らせ をどうぞ。

こんな記事を書いておいてなんだが、 私は結局この TVscape はほとんど使っていなかったりする。 せめて番組の検索ができればなぁとは思うけど、 そもそも私はテレビをウェブ上の番組表が利用できる PC で見るし、 なおかつソフトウェアとして 画面上に番組情報が表示される tvtime + xmltv を使っているせいもある。 携帯でテレビならびに番組表を見る時代だ。 TVscape の Palm 用クライアントは確かに時代遅れである。

ただ、テレビ番組表の xml データなどオープンげに利用できるデータがあっても、 Palm のクライアントではそういうのを利用できずじまいなのは少し残念。 ネットワークに弱いところが結局ネックになり、 オープンな規格にマッチした流れにも乗りきれなかったというところだろうか。 (2006/5/10 16:09)

2006/03/07 (Tue) 19:01 | タグ: computer | 固定リンク


Palm データベースの iCalendar 形式への変換

Palm 上のデータを GNU/Linux 上で閲覧・編集するなら J-Pilot が定番である。 ただ、私の好みからすると使い勝手はちょっと……というところがある。 他の選択肢としては Evolution + gnome-pilot-conduits とか、 jppyKOrganizer といったものもあるが、 J-Pilot からの乗り換えを考えるとなると結構微妙だったりする。 まぁ同期や編集は J-Pilot で行なうとしても、閲覧ぐらいはもうちょっとさくっとしたい。 ということで、Palm の予定表と ToDo のデータの閲覧だけは、 GNOME デスクトップの GNOME 時計アプレット (カレンダー)でも行なえるようにしてみた。

GNOME 時計アプレットは、Evolution で扱う iCalendar 形式のデータを evolution-data-server 経由で読込み、表示を行なってもくれる。 DatebookDB.pdb と ToDoDB.pdb を iCalendar 形式に変換さえすれば、 時計アプレットで (もちろん iCalendar 形式のデータを扱う Evolution や iPod などでも) 予定と ToDo が表示できる。 J-Pilot には iCalendar 形式へのエクスポート機能があるが、 コマンドラインで直接実行したり同期時に自動変換することは 今のところ基本的にはできない。 また文字コードの扱いが一部おかしいようにも思える。

やむなく、あれこれ探してみると jpilot-python を利用した変換スクリプトなどもあった。 しかし細かな制御もしたかったので、車輪の再発明かなと思いつつも p5-Palm を利用した変換スクリプトを perl で書いた。 私が必要だと思う範囲での変換スクリプトなので、汎用的なものではない。 タイムゾーンをちゃんと扱えていないので、 Gnome 上でこのデータの時刻を正しく表示するには Evolution 上でタイムゾーンを設定する必要もある。 またアラームのデータも変換していない。

pdatebook2ical.pl DatebookDB.pdb → iCalendar
ptodo2ical.pl ToDoDB.pdb → iCalendar

HotSync 後にこれらのスクリプトを実行し evolution-data-sever に kill -HUP すれば、 GNOME 時計アプレット (と Evolution) で Palm の予定表と ToDo が閲覧できる。 実際のところは、udev の Hotplug 機構で呼び出されるスクリプトから、 上記の二つのスクリプトを呼び出すようにすればよい。 J-Pilot の pc3 ファイルに何とか書き込めば ToDo の同期もできそうだけど、まぁちょっと予定を確認するぐらいならこれで十分便利かな。

なお、変換したファイルを iPod の所定のフォルダにコピーすれば、 カレンダーおよび Todo を iPod 上でも閲覧できる。ただ第三世代 iPod では、 Location フィールドは無視され、Todo は文字コード順に並べられる。 最新の iPod ではどうか分からないが、変換時には注意が必要だろう。

追記: 日指定の月ごとの繰り返しが、 適切に変換されていなかった問題を修正した。(2006/11/8 02:26)

2006/02/25 (Sat) 01:46 | タグ: computer | 固定リンク


Palm 向け画像形式への GNU/Linux 上での変換

PictureGear Pocket + pgpf-tools

CLIE で画像を持ち運ぼうと思い立つ。 160x160、グレースケール 4 階調 (実質 2.5 階調みたいなもの) の Visor では、 画像の閲覧はかなり厳しいものがあったが、 ハイレゾ 320x320、16 bit ハイカラーの CLIE なら画像の閲覧も十分実用になる。 ただ OS 4.1 のこの機種では jpeg を直接扱うことは実質できないので、 Palm 向けの画像形式への変換が必要になる。

Palm 向けの画像閲覧ソフトや変換ソフトはいろいろあるけど、 GNU/Linux 上で画像変換を行なえ、 かつ閲覧ソフトが無料 (フリーとは言わないにしろ) のものは多くはない。 Visor では netpbm 収録の pgmtoimgv で Image Viewer 形式に変換した画像を TinyViewer で閲覧していたが、同様のことをハイレゾ、ハイカラー対応の CLIE でも行ないたいわけだ。

いろいろ探したり、検討してみたが、閲覧ソフトとしては CLIE に内蔵されて いる PictureGear Pocket を使うことにした。 というのも PictureGear Pocket で扱う画像形式 への UNIX 用変換ソフトを見付けたからだ。 PictureGear Pocket は、PictureGear Pocket Format (pgpf) という 専用の画像形式を扱うが、Patrick Reynolds 氏作の pgpf-tools なら ppm 形式とこの pgpf 形式との相互変換ができる。 例えば jpeg から pgpf 形式への変換は、コマンドラインから以下のように行なう。

% djpeg foo.jpg | ppm2pgpf 'Image description' > foo.prc

素晴らしい。変換した prc ファイルを CLIE に転送すれば、 PictureGear Pocket でちゃんと閲覧できる。 なお、Palm 上で利用できる pgpf 形式の無料閲覧ソフトとしては Polar もある。

pgpf-tools の改変

ただ、この ppm2pgpf での変換ではちょっと気になることがあった。 ppm2pgpf は PictureGear Pocket 用のサムネイルを生成してくれるが、 元画像が正方形でない場合サムネイルの背景色が黒く、 またその位置がセンタリングされていない。 Windows 上の無料変換ソフト PGPmaker は、サムネイルの背景色は指定できるし、 サムネイルのセンタリングもしてくれる。 ということで、ソースを弄ってみた。

まず背景色については簡単。関数 ppmcrop の最後の三つの引数に RGB をそれぞれ 指定すれば良い。私は白にした。

--- ppm2pgpf.c.org      2006-01-07 18:03:29.000000000 +0900
+++ ppm2pgpf.c  2006-01-06 12:49:51.000000000 +0900
@@ -89,7 +89,7 @@
                ppmscale(&thumb_ppm, 44, 44*ppm.height/ppm.width);
        else
                ppmscale(&thumb_ppm, 44*ppm.width/ppm.height, 44);
-       ppmcrop(&thumb_ppm, 44, 44, 0, 0, 0);
+       ppmcrop(&thumb_ppm, 44, 44, 255, 255, 255);

        if (indexed) ppmdither(&ppm);
        ppmdither(&thumb_ppm);

一方、サムネイルのセンタリングについてはちょっと面倒くさいが、 適当にソースを改変した。 ちゃんと検証したわけではないので問題があるかもしれないが、 とりあえずは意図したように動いているようだ。

--- libppm.c.org	2006-01-07 18:03:09.000000000 +0900
+++ libppm.c	2006-01-07 01:01:21.000000000 +0900
@@ -172,6 +172,7 @@
   PEL *nimg, *exp;
   int x, y;
   int uh, uw;
+  int offset_x, offset_y;
 
   if (p->greyscale) {
     fprintf(stderr, "Cropping of greyscale images not supported.\n");
@@ -185,22 +186,19 @@
   uh = (nh < p->height) ? nh : p->height;
   uw = (nw < p->width) ?  nw : p->width;
 
-  for (y=0; y<uh; y++) {
-    memcpy(&nimg[y*nw*3], &p->data[y*p->width*3], uw*3);
-    exp = &nimg[y*nw*3+uw*3];
-    for (x=0; x<nw-uw; x++) {
-      *exp++ = bg_r;
-      *exp++ = bg_g;
-      *exp++ = bg_b;
-    }
-  }
-  exp = &nimg[uh*nw*3];
-  for (x=0; x<(nh-uh)*nw; x++) {
+  exp = &nimg[0];
+  for (x=0; x<nh*nw; x++) {
     *exp++ = bg_r;
     *exp++ = bg_g;
     *exp++ = bg_b;
   }
 
+  offset_x = (nw-uw)/2*3;
+  offset_y = (nh-uh)/2*3*nw;
+  for (y=0; y<uh; y++) {
+    memcpy(&nimg[y*nw*3+offset_x+offset_y], &p->data[y*p->width*3], uw*3);
+  }
+
   ppmdestroy(p);
   p->width = nw;
   p->height = nh;

私は Debian を使っているので、上記パッチを当てたパッケージをでっち上げた。 よろしければどうぞ。

変換スクリプト

ついでに、毎回コマンドを叩くのは面倒なので 簡単なスクリプトも書いてみた。実行には ImageMagick が必要だが、ImageMagick で扱える画像なら何でも変換し、 jpilot によるインストールの予約まで行なう。

#!/bin/sh

tmp_dir="/tmp"

while [ $# -gt 0 ]; do

    file=${1##*/}
    name=${file%.*}
    title=`echo $name | nkf -s`
    tmp="$tmp_dir/$name.prc"
    size=`identify -format "%w %h" $1`

    if [ ${size% *} -gt ${size#* } ]
    then 
	resize="320x"
    else 
	resize="x320"
    fi

    convert $1 -resize $resize ppm:- | ppm2pgpf "$title" > $tmp

    echo $tmp >> ~/.jpilot/jpilot_to_install

    shift

done

このスクリプトを ~/.gnome2/nautilus-scripts/ におけば、 Nautilus 上で選択した画像ファイルの変換およびインストール予約もできる。 画像についてもこれでようやく Windows 並みかな。

2006/01/18 (Wed) 01:50 | タグ: computer | 固定リンク


HotSync ボタン一つで jpilot-sync

Clie を買い、久しぶりに HotSync が出来るようになったので、 Debian/GNU Linux 上で HotSync ボタン一つで HotSync 出来るように設定をしてみた。 HotSync そのものには J-Pilot 付属の jpilot-sync を使う。 かつてこの設定を行なったことはあったのだが、 半年も HotSync 出来ない間に udev やらの変更があったようで若干手直しが必要だった。 例えば、以前は hotplug というパッケージがあったがいつの間にか消えていた。 今は udev で一括して管理するようになっているようだ。

あらかじめ /etc/udev/udev.rules の KERNEL の指定を直しておく。 Debian の udev 0.076-3 だと KERNEL=="ttyUSB*" となっているが、 これだと ttyUSB0 に pilot への symlink が張られてしまうことがある。

BUS=="usb", KERNEL=="ttyUSB[13579]", SYSFS{product}=="Palm Handheld*", \
                                        SYMLINK+="pilot"

そして、/etc/udev/rules.d/custom.rules というファイルをでっち上げ、以下を記述する。 SUBSYSTEM の指定がないと、二つの tty 向けを含めて三重にスクリプトが呼ばれてしまうようだ。 それゆえ、/etc/udev/udev.rules の記述とは別に用意してみた。

SUBSYSTEM="usb_device", SYSFS{product}=="Palm Handheld*", RUN+="/etc/hotplug/usb/clie"

実際に呼ばれるスクリプトは、以前 「USB をシリアルコンソールに」を参考にして良く調べもせず適当に用意したものを、 /etc/hotplug/usb/clie として使い回した。 PAM がらみの問題があるとかないとかいう話もあったようだが、 私の環境では問題ないようだ。

#!/bin/sh

if [ "${ACTION}" = "add" ] 
then

    su yendo -c jpilot-sync
    
    if [ "X$REMOVER" != "X" ]
    then
        echo '' > $REMOVER
        echo '#!/bin/sh' >> $REMOVER
	echo 'killall jpilot-sync' >> $REMOVER
	chmod +x $REMOVER
    fi
fi

exit 0

ただ、もうこんな記述はいらないかもしれない。 もう面倒なので確認していないが、udev の rules に、 RUN+="su yendo -c jpilot-sync" とだけ書いても 大丈夫なのかも。

結局 udev については面倒くさすぎてまともにマニュアルを読んでいないけど、 「udevルールの書き方」 は参考になるかも。 ようやく HotSync は Windows 並にまでなった。はぁ、しかし面倒くさい。 gnome-volume-manager あたりが面倒を見てくれないかな。 HotSync という概念そのものが obsolete になってくれてもいいけど。

2006/01/16 (Mon) 23:16 | タグ: computer | 固定リンク