2007-06-21

ZaurusにPerl 5.8.8をインストール


ZaurusにPerlといったらLinuxザウルス/Perl- Walrus, Visit.のが有名だが、ここのはバージョンが少し古く、スレッドやが使えなかったりするので新しいバージョンをいれてみた。

まず、以下のdebianパッケージをダウンロード
/pool/main/p/perl/perl-base_5.8.8-7_arm.deb
/pool/main/p/perl/perl-modules_5.8.8-7_all.deb
/pool/main/g/glibc/libc6_2.3.2.ds1-22sarge6_arm.deb
リンクはhttp://ftp.jp.debian.org/のものにしてますが、ミラーサイトもあります。
libcの取扱いには注意。うっかりZaurusのもとのものと置き換えると何も起動できなくなります。


cd /mnt/card/tmp/perl
dpkg-deb -x perl-base_5.8.8-7_arm.deb .
dpkg-deb -x perl-modules_5.8.8-7_all.deb .
dpkg-deb -x libc6_2.3.2.ds1-22sarge6_arm.deb .
mv ./usr/lib/perl/* /mnt/card/QtPalmtop/perl/lib/perl/
mv ./usr/share/perl/* /mnt/card/QtPalmtop/perl/share/perl/

適当にディレクトリを作ってそこに展開。
そのままだとPerlモジュールのパスが通らないので昔のPerlをインストールしていた時に作られていたディレクトリに移動。
昔のPerlをインストールしていなければ

ln -s /mnt/card/QtPalmtop/perl/lib/perl /usr/lib/
ln -s /mnt/card/QtPalmtop/perl/share/perl /usr/share/

とでもすればOKなはず。

このPerlは必要とするglibcのバージョンが違うので普通には起動できない。

LD_LIBRARY_PATH=/mnt/card/tmp/perl/lib /mnt/card/tmp/perl/lib/ld-linux.so.2 /mnt/card/tmp/perl/usr/bin/perl

こうやって起動するけど面倒なので

alias perl='LD_LIBRARY_PATH=/mnt/card/tmp/perl/lib /mnt/card/tmp/perl/lib/ld-linux.so.2 /mnt/card/tmp/perl/usr/bin/perl'

と.bashrcに書いておくと吉。
./hoge.plみたいに#!/usr/bin/perlでの起動はできなので、perl ./hoge.plみたいに呼び出さきゃいけない。

また、Perlの中で他のコマンドを呼ぶ時は

undef $ENV{LD_LIBRARY_PATH};

としておかないとうまくいかない。

threadsモジュールとかConfig_heavy.plとかは
/pool/main/p/perl/perl_5.8.8-7_arm.debに入ってるので個別に追加するといい。

おまけ
#!/usr/bin/perlを無理矢理動作するようにもしてみた。

#include <stdlib.h>

extern char **environ;

int main(int argc,char* argv[])
{
char** newargv=malloc(argc+2);
char** newenv;
int i;

newargv[0]="/mnt/card/tmp/perl/lib/ld-linux.so.2";
newargv[1]="/mnt/card/tmp/perl/usr/bin/perl";
for(i=1;i<argc;i++) newargv[i+1]=argv[i];
newargv[argc+1]=NULL;

for(i=0;;i++)
if(!environ[i]) break;
newenv=malloc(i+2);
for(i=0;;i++){
if(!environ[i]) break;
newenv[i]=environ[i];
}
newenv[i]="LD_LIBRARY_PATH=/mnt/card/tmp/perl/lib";
newenv[i+1]=NULL;

execve("/mnt/card/tmp/perl/lib/ld-linux.so.2",newargv,newenv);
}

これをコンパイルして/usr/bin/perlにおけばOK。

ちなみに

#!/bin/sh
LD_LIBRARY_PATH=/mnt/card/tmp/perl/lib
/mnt/card/tmp/perl/lib/ld-linux.so.2 /mnt/card/tmp/perl/usr/bin/perl $*

を/usr/bin/perlとしておく方法では、shがPerlスクリプトを解釈してしまってだめだった。

2007-06-18

mew-search-gmail.el,gmail-search.pl


GMail clientは作っているうちにどんどん劣化Mewに見えてきたり、単体で実用的に使えるようになるまでに相当のコードが必要そうな気がしてきたので中止。
そのかわり作りかけで放置していたMewでGmail検索するELispを久しぶりに書きすすめた。
ZaurusにCrypt::SSLeayをビルドしてつっこんでみたけれどLWPがあいかわらず、httpsはSSLeayがいるよ、なメッセージを出し続けるし、stunnelでGoogleの認証にアクセスするとhttp://www.google.com:8080/にとばされるで困った。
stunnelがリクエストを書きかえてくれるといいのに。

で、とりあえずZaurus用にはwgetを呼び出してやることにした。
あとはGMailのソース見てマッチさせてうんにゃらかんにゃらで、とりあえず1ページ目に表示されるスレッドは検索でひっかかるようになった。
Zaurusではすごく遅いけど…。Mewの制限でasyncにはできなさそうだしなぁ…。
なんとかならんものだろうか。
さすがにそろそろ寝なくてはいかんので、2ページ目以降の判定はまた明日にでも。

2007-06-15

GMail client for Emacs


現状でもMewを使えばGMailを読み書きできはするけれど、MewだとGMailの特性たる検索が上手く機能しきれていないような気がして初めてのメジャーモード作りに挑戦。
SSLの接続でstunnelがうまく使えない(redirectされるみたい…)ので通信にはとりあえずshimbun APIを流用。
検索してスレッド一覧を表示できるところまでいった。

でも、この先はどんどんMewでできる領域にふみこんでいくんだよなぁ…
車輪の再発明してる感がする…
やっぱり(ZaurusのPerlでSSL通信できないから)放置してるmew-search-gmailのほうを進めたほうがいいかな?

# しかし、GMailでPOP使うのはあの容量の意義がなくすようなものだ、とも思うからとりあえずもう少し続けよう

2007-06-11

analytics


Google Analyticsを久しぶりに見てみると、レポートの表示がずいぶんわかりやすくなってた。
昔からあったのかもしれないけれど、メールのスケジュールが便利。
一日一回メール報告を設定してみた。