2007-12-26

spamフィルタを変えてみた

wanderlustに移行して少したったけど、やっぱりspamassassinのspam判定の遅さには耐えられない。ということで、spamassassinを捨ててbogofilterに乗り換えてみた。幸い、MacPortsにはbogofilterのパッケージがあるので苦労せずにインストールまではできた。

で、困ったのはbogofilterの学習時にkakasiとnkfを使うべきかどうかということ。ググってみたら、使う人と使わない人が半々くらい。むぅぅぅ。wlのコードを読んでみると、kakasiとnkfはbogofilterを起動しているときに使っていないぽい。というわけで、kakasiとnkfは使わずに学習させてみた。学習はこんな感じ。


spamメールの学習(spamメールを保存しているディレクトリで)
for i in *; do
bogofilter -s $i
done



non-spamメールの学習(どこか適当なディレクトリ)
for i in *; do
bogofilter -n $i
done


bogofilterに-vオプションを付けると処理中のメッセージを出力するけど、今回はなし。

一応、spamとhamの学習後に試験してみたけど、ちゃんと判別している。

wanderlustでbogofilterを使うためにはspamassassinで使っていた設定をコメントアウトして、以下の設定を付け加えればいい。


(setq elmo-spam-scheme 'bogofilter)
(setq wl-spam-auto-check-folder-regexp-list '("\\+inbox")
(setq elmo-spam-bogofilter-debug 't)


elmo-spam-bogofilter-debugをnon-nilにしているのは、しばらくデバッグメッセージで様子を見たいから。本格的に使うときは当然、nilにする。

年末年始休暇明けのメールチェックでどれだけ早く処理できるかちょっと楽しみ。

2007-12-14

記憶にないけど、ある

久しぶりにMacPortsのメンテナンスで、必要なパッケージをアップグレードしようとしたら、gtk2のアップグレードでこけた。ていうか、gtk2の依存関係に新しくgtk-docが追加されて、このgtk-docのconfigureスクリプトが走っている箇所でエラーを吐いているみたい。以下がエラー内容の抜粋。


checking for xsltproc... /opt/local/bin/xsltproc
checking for XML catalog (/opt/local/etc/xml/catalog)... found
checking for xmlcatalog... /opt/local/bin/xmlcatalog
checking for DocBook XML DTD V4.1.2 in XML catalog... found
checking for DocBook XSL Stylesheets in XML catalog... not found
configure: error: could not find DocBook XSL Stylesheets in XML catalog


どうやら、docbook-xslで提供しているカタログファイルを見つけられていないみたい。docbook-xslはいろんなパッケージの依存関係に入っているので確実にインストールしているはず。だけど、/opt/local/etc/xml/catalogにdocbook-xslのカタログファイルが記述されていないみたい。しかたないので、以下のようにdocbook-xslのカタログファイルの記述を追加した。


--- catalog.back.20071214 2007-10-25 19:04:11.000000000 +0900
+++ catalog 2007-12-14 20:34:35.000000000 +0900
@@ -10,4 +10,5 @@
<nextCatalog catalog="/opt/local/share/xml/docbook/4.3/catalog.xml" />
<nextCatalog catalog="/opt/local/share/xml/docbook/4.4/catalog.xml" />
<nextCatalog catalog="/opt/local/share/xml/docbook/4.5/catalog.xml" />
+<nextCatalog catalog="/opt/local/share/xsl/docbook-xsl/catalog.xml" />
</catalog>

ここまでだったら、docbook-xslのパッケージが腐ってるんじゃねーのという話なんだけど、実は心当たりがあったりする。少し前にアップデートの時にdocbook関係でハマったので、片っ端からxmlcatmgrでremoveした記憶がある。試しにコマンドのヒストリーファイルを検索したら、2007年10月25日 19時04分11秒に該当箇所を消しちゃっている。

ということで、きちんと調べてからファイルの操作をしないと痛いメにあうという話でした。

2007-11-08

続:その黒い小鳥は美しい歌を奏でるか??

というわけで、自宅のLinux BoxでSongbirdを試してみた。結果はうまくmp3ファイルを読み込んでくれなくて、残念な結果に終わりました。ちなみに自宅のLinux Boxはfedora core 7で基本的にfedora project由来のrpmしか使っていないです。 ちなみに、前回の追記にあった起動時のエラーはどうやらリモートからXを飛ばしてきた時に発生するもよう。自宅のLinux Boxで試したときは特にエラーは出ずに起動しました。

2007-11-02

びっくり

どうやらmixiがOpenSocialに参加するらしい。 今までのmixiの対応からクローズなSNSを目指すものかと思ったら、方針転換をしたのかな。これでAPI関係が公開されたら、サードパーティによるマッシュアップやアプリが出てきて楽しいことになるんだけどなぁ……。しばらく注意してみておこう。

2007-11-01

gmailのimap機能をwanderlustから使ってみる

とうとう、GmailのIMAP機能が僕のアカウントでも有効になった。多分、アカウントを管理しているサーバが複数あって、順次、サーバをIMAP機能の対応に切り替えているんじゃないかな。 ということで、wanderlustからimap機能を使ってみる。とりあえず、wlでgmailの状況を確認できれば幸せなので、以下の設定をしてみた。 (setq elmo-imap4-default-server "imap.gmail.com" elmo-imap4-default-authenticate-type 'clear elmo-imap4-default-stream-type 'ssl elmo-imap4-default-port 993 elmo-imap4-default-use-cache t elmo-imap4-default-user "gmailのアドレス") これだけ、ミソはelmo-imap4-default-authenticate-typeclearにすること。 あとは、wlのFolderモードでg %inboxとしてやるとgmailの受信トレイにアクセスできる。 ただ、困ったことにgmailの場合、受信トレイにあるメールはアーカイブしていないメールと同義だ。基本的に重要なメールはアーカイブして、適宜ラベルをつけているのでこのままではちょっとキツい。どうやら、gmailのimap機能はラベルをそのままimapのディレクトリとして扱っているようなので、g %ラベルとしてやると目的のラベルをつけているメールーにアクセスできた。 うーーーん、すばらしい……のか?複数のラベルをつけているメールはどうなるのか試してみたら、二つのディレクトリに同じメールが入っている扱いになっている。ということは例えばfooとbarというラベルをつけている未読のメールがあったとすると、imap@wl的にはfooとbarというディレクトリにそれぞれ未読メールがあるということになる。この場合、fooのメールを読んだとするとbarにあるメールのステータスはどうなるのか?答えは、ちゃんと変更しているけど、変更していない、だった。要するにbarのディレクトリにアクセスすると、既読としてマークされているけど、barのディレクトリにアクセスするまでは未読扱いになっているらしい。SummaryモードからFolderモードに抜けた時にbarでsすると反映はされるんだけどね、なんか残念。 あと、当然だけど、スペースが入っているラベルにはアクセスできない。wlのFolderモードからgするとスペースの類いは入力できないっぽいんだよね。"とかでエスケープしてもダメだった。なんか方法ないのかな。どうしても必要なラベルはgmail側でラベル名を少し変更しました。うーーーん、ダサダサで負け負けですね。 あ、あと、Gmailのゴミ箱とかは%[Gmail]/Trashでアクセスできるよ、という記述が見られたけど、半分ウソです。これは使用している言語に依存するぽい。使用言語をEnglishにしているときはゴミ箱にアクセスできたけど、日本語に戻したらwlでそんなフォルダねーよ、と怒られました。試しに作成してみたら、gmail側に%[Gmil]/Trashというラベルが出来てた(笑 というわけで、何となく快適なGmail環境は手に入ったポイ。 追記(2009年6月5日) smtpサーバに接続するためにはSSLではなく、STARTTLSが正しい。この修正記事を書いた

その黒い小鳥は美しい歌を奏でるか??

どうやらSongbirdのバージョンがあがったもよう。一度、試そうとしてwebでリサーチしてみたら、あんまりいい評判ではなかったので、今回のアップデートを期に使い倒してみた。やはり、firefoxなどと同じ系統なので、チェックしとかないとまずいでしょう、ヒトとして。

今のところ、iPodと一番仲がいいのはYamiPodだったりする。こいつはiPodにあるmp3ファイルをエクスポートすることができるのでちょっと重宝している。だけど、iTunesが立ち上がっていると、iPodの検出にエラーを出して文句を言ってくる。あと、GUIがgtkを使っているので、MacOS Xにはあわない。

ただ単にiPodに音楽ファイルを追加するときはgnupodで十分だし。gnupodもとても気に入っている。コマンドラインからアクセスできるのは何にも代え難い。だけど、CUIゆえに万人にお勧めできるとはとてもお世辞でも言えない。ウチのカミサンには絶対無理だね。

といわけで、Songbirdがどれだけ使えるか試してみた。とりあえず、最初に立ち上げた時にお薦めのadd-onをインストールするか、て聞かれたので何も考えずに全てチェックした。だって、firefoxにしろ、thunderbirdにしろ、add-onを入れてナンボでしょ。少なくとも僕はそう思っている。たとえ、add-onのせいでアプリケーションの動きが緩慢になってもしょうがないと思っている。(ただしfirefoxのメモリ大食い状態は勘弁してほしいけどね。)

で、立ち上げて使ってみると、ちゃんとiPodを検出するし、iTunesのライブラリもiTunes Music Library.xmlを指定するときっちりインポートする。うーーん、賢い。しかもiPodへの音楽ファイルの追加もできちゃう。あと、メニューの多国語化ができているのもすばらしいかな。別にメニューが英語でも困らないけど、初心者にお薦めする時には重要なポイントです。UIもiTunesを意識した作りになっているので、これも初心者にお薦めする時にはプラスポイントかな。

ただし、今回試したSongbirdはDeveloper Previewリリースだといっているので、安心して使うには少し待ったほうがいいかも。この手のアプリケーションは少なくともStableじゃないと、安心して薦められない。あとは、今回はMacOSで試してみたので、Linuxでも試してみないとホントのところは分からないかも。自分の場合、家で使っているマシンは全てLinuxだから。Linuxで安定して稼働するようだったら、xmmsを捨ててデフォルトの音楽プレイヤーになるんだけどなぁ……。

-=-=-=- 追記 -=-=-=-
手近なLinux Boxで試してみた。結果はちょっとびみょー。初回の起動時に4回クラッシュした。とりあえず、send bug reportはしたけど……。で、クラッシュ後の再試行をくり返すと、使える状態になったぽい。これは家のマシンで再度検証する必要がありますなぁ。

あと、Songbirdのプロファイルは~/.songbird1に保存されるポイ。なんだかなーーなディレクトリ名。他のMozillaプロジェクト由来のアプリケーションはそんな無作法なディレクトリは作らんぞ。

2007-10-24

ThunderbirdからWanderlustに移行する その後

なんとか、Wanderlustへの移行が完了しました。完了したとは言え、色々とトラブルを内包しています。例えば、自分のメールアドレスのリストを登録しようとして
(setq wl-user-mail-address-list (list (wl-address-header-extract-address wl-from) "メールアドレス その1" "メールアドレス その2" ))
とかしても"wl-address-header-extract-address"なんてねーよ、と怒られたり、
(setq mail-self-blind t)
を書いていたら、smtpエラーでメールが送れなかったりしてる。 でも、一番の不満なところはspam判定にえらい時間がかかること。thunderbirdで使っていたspamassassinをwlでも使おうと思って、設定してみたんだけど、spam判定処理が遅すぎる。例えば、出社してきて一番にメールをチェックするとしよう。だいたい、inboxには30通前後のメールがたまっていて、ほぼ全てがspam。このチェックだけに10分ほどかかる。spam判定処理中はemacsが使えないので、何もすることができない。朝からこのストレスはちょっと遠慮したい。 あとはwlにメール環境を乗り換えてメールを読むスタイルが変るかもしれない。今まではメールをサーバから取ってきたら、すぐにメールの振り分けがあって、spamはspamフォルダにはじかれていた。wlに乗り換えてspam判定に時間がかかるので、一度inboxに全てのメールを溜めて、手動でspam判定処理を起動 -> non-spamのメールに目を通す -> メールの振り分けという流れになった。これで万が一、non-spamをspam判定されてspamフォルダに振り分けられて、そのままという事態がなくなるような気がする。 それにemacsにメール環境を組み込んだことで、メールを書く作業のストレスも減った。emacs指になっているので、さくさくメールが書ける。問題なのはタイピングの速度とtypoの発生率だけ。 というわけで、thunderbirdを捨ててWanderlustに乗り換えるというのはおおむね成功。しばらくはこのままで生活をしてみよう。

2007-10-10

ThunderbirdからWanderlustに移行する その2

なんとか、thunderbirdのメールをmh形式に直せたので、次は変換したmhファイルをwlに読み込ませてみようと思う。とはいえ、~/.foldersに記載されているフォルダにmhファイルを突っ込めばいいので結構簡単。昨日のエントリで書いていたshell scriptではdirList.txtというthunderbirdのフォルダ構造をダンプしたテキストファイルがあるので、こいつをいじればいい。今回の場合は↓みたいな感じで列挙されていた。
././thunderbird/inbox
././thunderbird/inbox/hoge
././thunderbird/inbox/foo
././thunderbird/inbox/bar
これを.foldersの形式に合わせればいいのでこんな感じか。
% sed s/\.\\/\.\\/thunderbird\\//\\+/g dirList.txt > folders-sample.txt
それと、wlのinboxでメールを受信しても、サーバにメールは残したい(まだ、試験段階だから)。なので.foldersのinboxは以下のように書いておく。
|&ユーザ名/認証方式@pop3サーバ名|:+inbox
+inboxの前にある:がミソ。こいつがあればメールを受信してもサーバにメッセージは残ったままになる。あとは、見栄えとかを気にしつつ.foldersを編集すればok。

ついでにwlの設定もしちゃう。必要な設定はこんな感じ。
  • elmo-maildir-folder-path
    Mailへのパス。自分の場合は~/Mailとした
  • wl-default-spec
    なんかしらんが、+を設定
  • wl-default-folder
    多分、いわゆる、受信箱のこと。+inboxとしておいた
  • SMTP関係
    • wl-smtp-posting-user
      smtpアカウント名
    • wl-smtp-posting-server
      smtpサーバ
    • wl-smtp-authenticate-type
      認証方式
    • wl-smtp-posting-port
      smtpサーバのポート番号
    • wl-smtp-connection-type
      ウチの場合はsslを使っている
    • ssl-certificate-verification-policy
      ど忘れした、とりあえず2と叫んでいればいいかな
  • POP関係
    • elmo-pop3-default-user
      pop3のユーザ名
    • elmo-pop3-default-server
      pop3のサーバ
    • elmo-pop3-default-authenticate-type
      pop3の認証形式
    • elmo-pop3-default-port
      pop3サーバのポート番号
    • elmo-pop3-default-stream-type
      sslとか
wanderlustの場合は.emacsではなくて、~/.wlに設定を書かないといけないらしいけど、自分の場合は~/.emacs.d/以下にemacs関係の設定をおいている。理由はバックアップを取る時に何も考えずにできるから。とりあえず、~/.emacs.d/emacs-wl.elというファイルを作って、.emacs.elから読み込ませてみる。なんとか、メールの受信は出来ているぽい。
次はspamフィルタを付けてみる。thunderbirdで使っていたspamフィルターのSpamAssassinがwlでも使えるみたいなので、とりあえず、登録してみる。SpamAssassin自体はmac portsに登録されているので、コマンド一発で入った。
% port install p5-mail-spamassasin +ssl
あとは、wlの設定に以下を追加したら、wlからspamassassinが使えるようになる。
(setq elmo-spam-scheme 'sa)
(require 'wl-spam)
(setq wl-spam-auto-check-folder-regexp-list '("\\+inbox"))
(setq wl-spam-folder "+spam")
spamassassinは学習させないと、メールがspamかどうか判定できないから今までthunderbirdで溜め込んだspamメールと正常なメールで学習させる。

まずは、spamメールの学習から。例によってthunderbirdのJunkからincmでmh形式に直して、以下のコマンドを実行。--progressオプションを付けて作業の進捗具合をみておく(小心者なのでプロンプトが帰ってくるまで何も表示されないのは精神衛生上悪い)。
% sa-learn --progress --spam ./spam
次に非spamメールを学習させる。こっちは既にmh形式のメールファイルを~/Mail以下に持ってきているから、こんな感じでやってみる。
% for i in `find ~/Mail/inbox -type f`; do
sa-learn --progress --ham "$i"
done
今までの受信メールを全部喰わせたので、アホみたいに時間がかかった。

というわけで、今日はこのぐらいで勘弁しておいてやる。あとはカスタマイズくらいかなぁ。

2007-10-09

ThunderbirdからWalnderlustに移行する その1

なんだか、thunderbirdの開発が続くか怪しくなってきた。というわけで、thunderbirdからメール環境を移行することを最近考えています。自分のメール環境として必要な要件は以下のとおり
  • オープンソースであること
  • プラットホームを選ばない
とりあえず思いつくのは上記のとおり。なので、Mac OS XについているMail.appや(少なくとも日本では)デファクトスタンダードになっているOEは選択肢にあがらないわけです。あと、プラットホームを選ばないという点ではgmailも候補にあがりそうですが、要件その1にあっていないので却下です。gmailはあくまでもメール環境のバックアップです。 というわけで移行先のメール環境としては以下がリストアップされてきました。
  • sylpheed
  • mew
  • wanderlust
sylpheedは遥か昔に使っていたメーラなので何となく親しみはあります。その他のmewとwanderlustは使おうとして挫折したことはあるけど、使ったことはないです。sylpheedはまだ開発が続いているようですが、Mac OS Xで動かすのがめんどくさそうなので却下。で、mewかwanderlustが残ったわけですが、なんとなくwanderlustに引越してみます。 というわけで、今までthunderbirdに溜め込んできたメールをwanderlustが読める形に変換する必要が出てきました。thunderbirdはmbox形式、wanderlustはmh形式でメールを保存するのでmbox -> mhな変換が必要になります。てきとーにググってみてもwanderlustからthunderbirdへ移行した人は結構いるっぽいけど、逆はなかなかいなかったです。 しかたないので、mewに付属しているincmというプログラムに1回喰わせて、mh形式に直してみます。incmを使う時点でmewに移行しろよ、という気がしなくもないですが、初志貫徹ということでもう少しwanderlustにこだわってみます。 以下は大まかな手順です。
  1. thunderbirdで溜めたメールを適当なディレクトリにコピー Mac OS Xでは~/Library/Thunderbird/Profiles/文字列/Mail/Local Folders にメールが溜め込まれているので、このディレクトリをコピーします。
  2. mboxファイル全てに対して以下のコマンドを実行します incm -b -d mboxファイル -i 変換先のディレクトリ 自分の場合はフォルダが80個くらいあったので適当にスクリプトを書きました。こんな感じ。
    #!/bin/sh mboxDir="$1" mhDir="$2" if [ -d "$mhDir" ]; then mv "$mhDir" "$mhDir"-back fi logFile="$PWD/log.txt" if [ -f "$logFile" ]; then rm -f "$logFile" fi touch "$logFile" mailList="./mailLIst.txt" if [ -f "$mailList" ]; then rm -f "$mailList" fi find ./"$mboxDir" -type f > "$mailList" dirList="./dirList.txt" if [ -f "$dirList" ]; then rm -f "$dirList" fi sed s/.sbd//g "$mailList" > "$dirList" for i in `cat "$mailList"`; do echo "$i" >> "$logFile" exportDir="$mhDir"/"`echo $i | sed s/.sbd//g`" if [ ! -d "$exportDir" ]; then echo "create directory: $exportDir" >> "$logFile" mkdir -p "$exportDir" fi ./incm -b -d "$i" -i "$exportDir" | tail -n 10 >> "$logFile" ls "$exportDir" | wc -l >> "$logFile" echo >> "$logFile" done
一応、logファイルで出力された変換済みのファイルの数と実際にthunderbirdで保存しているメールの数を比較したほうがいいかもしれません。 とりあえず、今日はこれくらいで勘弁しておきます。

2007-10-01

iPod Touchを買うべきか

なんだか、世間の祭りに乗り遅れた感が無きにしも有らずな、タイトルですが、昨日の夜から激しい物欲と戦っています。 iPod Touchが発表された当初は様子見のつもりでした。なぜかというと、自分は個人でWindowsもMacも持たない、純粋なLinuxユーザだから。iPod Touchがどんなに優れたガジェットだとしても、ついでにMacまで買うほどお金持ちじゃありません。では、なぜ今になって物欲が出てきたかというと、iPod nanoのデータを管理しているgnupodの最新版(0.99.4)のCHANGESにこんな文面があったからです。
- Added support for 2007-iPods (iPod Classic, iPod Nano-2 and iPod Touch (?) )
「?」の部分が気になるところですが、これでiPod Touchを買うための防壁の1つはもろくも崩れ去りました。
Apple attempted to lockout non-iTunes software by implementing an obscure protection using a sha1-hash. This sucked very bad.. for about 36 hours. This GNUpod release is able to overcome the silly protection. Thanks a lot to 'wtbw' for discovering some random numbers and implementing hash58.cpp Feel free to express your feelings about this issue at http://www.apple.com/feedback/ipod.html
ついでにこんなことも書いてあるけど、バージョンがあがればどうにかなるでしょう。後は家の財布を握っている相方さん(実は先月末に結婚しました)を説き伏せて、クリックするだけですな。

2007-08-29

そのケーキて美味しいの?

最近、cakephpというphpのフレームワークと戯れている。元々、phpのフレームワークには興味があったのだが、フレームワークを使う理由というのが今ひとつなかった。使う理由はなかったが、自分の中で「フレームワークを使うべきでない理由」というのは存在していた。「フレームワークを使うべきでない理由」というのはフレームワークを使いだすと、フレームワークにべったりになってしまい、結果としてphpプログラミングの本質やフレームワークを使えない環境での仕事ができなくなるのではないかという危惧があった。とくにapache httpdのmod_rewriteを使うようなフレームワークでは、サーバ側でmod_rewriteに対応していなかったり、mod_rewriteを嫌う人間が管理しているサーバなどもあため、この手のフレームワークに手を出すことに躊躇していた。 今回、流行のAjaxで遊んでみる必要が出たため、極力javascriptを書かないですむフレームワークのcakephpを試してみた。cakephpもmod_rewriteを使ったり、独特なコーディングスタイルを取るため、あんまり気はすすまなかったが、ajaxへの対応やMVCモデルでのコーディングを勉強するためにもcakephpを選択してみた。他にはsymphonyやakelosなどのフレームワークがあったが、なんとなくcakephpを選んだというのが実情だ。 結果としては以下の点でcakephpを気に入ってしまった。
  • SQL文を書かなくてすむ
  • データベースのアソシエーションが強力
  • 内部のデータ管理が配列
とくに、配列でデータ管理をしているのが自分的にヒット。元々、自分のコーディングスタイルが配列を多用していたということもあり、cakephpのコーディングスタイルを比較的すんなりと受け入れることができた。あと、インチキオブジェクト指向なところも好き。いまいちオブジェクト指向プログラミングとラブラブになれないので、これを機にまともなオブジェクト指向を勉強しようと思いました。 対して、cakephpへの不満点は以下のとおり。
  • ドキュメントが少ない
  • 時々、意図しないSQL文が発行されている
日本語のドキュメントが少ない気がする。特にcakephpのドキュメント和訳が古い気がする。まぁ、英語のドキュメントやAPIリファレンスを読めばすんじゃうことなんだけどね。あと、データベースのアソシエーションの関係で意図していないSQL文が時々発行されている。とりあえず、unbindModelとかで気付いたところは修正しているけど、コード全体を常に頭に入れて、どのデータが欲しいのかを気にしながらコードを書く必要があるみたい。 とりあえず、今はcakephpには好印象。このケーキは美味しいです。cakephpを理解するためにwebアプリを書いているけど、フレームワークなしで作るよりも時間は短縮できている感じ。機会をみてTipsとかもこのblogに挙げていくようにしよう。

2007-08-13

libptp2のアップデート

以前のエントリでlibptp2がいい感じということだったんだけど、そのときの感想としては「いい感じなんだけど、単体での開発はしないんだろうな」程度だった。なので、あまり機能の追加とかは期待していなかった。まぁ、機能的には問題なかったし、バグにも遭遇しなかったのでまったく気にしていはいなかったんだけど。一応、プロジェクトのrssだけはsageに登録しておいて、動きがあればサイトを見に行くつもりにはしていた。 sageに登録といっても、自分的には完了したプロジェクト扱いにしていたので、とりあえず登録、むしろ、sageのフィードが増えたときのリストラ対象でした。そんな状態だったので、先日のアップデートは予想外の外。一応、changelogやrelease noteを読んだ限りでは、メジャーバージョンアップじゃなくてbugfixだよ、的なことは書いてあったけど、とりあえずソースを落としてきてrpmパッケージを作ってみた。動作自体はまだ試していないけど、あんまり問題なさそう。これからのバージョンアップも密かに期待しておこう。

2007-08-06

SunbirdとiPod nanoを同期したい

自分のスケジュールは全部iPod nanoに入れるようにしている。
理由は
  • iPod nanoは外出時に必ず持っている
  • iCalを使えばMacとの同期が簡単
  • 元々、iCalendar形式でスケジュールを管理していた
といった感じ。他にあると思うけど、この3つが主な理由。特に、必要に応じてOSを渡り歩く人種なので、どのプラットフォームでも理解できるiCalendar形式でのスケジュール管理というのが重要だったりする。

だけど、iPod nanoにスケジュールを入れるにはiCalを使わないと、悲しいことになるという頭痛のタネがあった。/Calendars/にicsファイルを突っ込めば、ちゃんとスケジュールとして認識してくれるんだけど、スケジュールの名前が反映されないという問題があった。これはiCalendar形式でスケジュールの名前を定義するタグが定義されていない(ような気がする)という原因があるみたい。(ここらへんはRFCを真面目に読んでいないからわからない)

だけど、最近はgoogleカレンダーでプライベート用のスケジュールを管理している。やっぱり、googleの提供するインターフェースはエレガントだし、ゆくゆくはgoogle APIを使ってマッシュアップしたいという目論みもある。一番いいのは自前のサーバを調達して、WebDAVで公開、ていうのが一番理想的だったりするんだけどね。俺WebDAVサーバはちょっとめんどくさいから、ペンディングしている。

実は以前、google カレンダーを使いだして、3秒後ぐらいに壁にぶつかっている。それはiCalにはgoogleカレンダーと同期する機能が提供されていない、という問題に起因していた。この場合の「iCalにはgoogleカレンダーと同期する機能」の定義は「iCalとgoogleカレンダーの両方で正しくスケジュールを編集できる」ということ。iCalでもgoogleカレンダーの内容は参照できるみたいだけど、第3者が公開しているスケジュールとして認識されて、スケジュールの変更、追加ができない。ここらへんで最初は挫折して、iCalべったりな生活を余儀なくされていた。

というわけで、sunbirdがgoogleカレンダーに対応したのを契機に真面目にiCalと喧嘩してみることにした。といりあえず、sunbirdにはiCalednar形式でスケジュールをエクスポートする機能がついているので、iPod nanoとの最低限の同期には問題ない。ただ、iPod nanoから見るとスケジュールの名前が「その他」てなるだけ。で、iPod nanoのスケジュール管理機能は音楽管理機能みたいにわけわかんないDBで管理していないと思うので、iCalがiPod nanoに吐いたicsファイルをじっと見てみた。どうやら、X-WR-CALNAME:というタグでスケジュールの名前をつけているらしい。タグの名前がXから始まっているのでAppleの独自拡張でしょう。多分。あと、diffをとってみて、sunbirdが吐いたicsファイルとiCalが吐いたicsファイルを比べて、足りていない部分を適当に書き足してみた。結果のdiffはこんな感じ。
--- google_calendar.ics    2007-08-06 19:57:32.000000000 +0900
+++ google_calendar-00.ics    2007-08-06 20:02:40.000000000 +0900
@@ -1,14 +1,19 @@
BEGIN:VCALENDAR
VERSION:2.0
+CALSCALE:GREGORIAN
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
+X-WR-CALNAME:スケジュールの名前
+X-WR-CALORDER:3
BEGIN:VTIMEZONE
-TZID:/mozilla.org/20070129_1/Asia/Tokyo
-X-LIC-LOCATION:Asia/Tokyo
+TZID:Asia/Tokyo
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19700101T000000
+TZOFFSETTO:0900
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:Japan
+BEGIN:STANDARD
+TZOFFSETTO:0900
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
多分、+X-WR-CALNAME:スケジュールの名前だけでいいと思うけど、とりあえずヘッダー部分で足りていないタグはいれてみた。
で、書き足したicsファイルをiPod nanoのディレクトリに入れたら、きちんとスケジュールの名前も認識して表示された。

とりあえず、満足。あとはこのパッチあての作業とか、iPod nanoに自動でコピーしてくれるスクリプトができたら幸せな生活が送れる気がする。

2007-07-31

Mac OS XのopenコマンドがLinuxにも欲しい!!

Mac OS Xをコマンドラインから使っている人は知っていると思うが,Mac OS Xにはopenというステキなコマンドが用意されている.

このコマンドの使い方はいたってシンプルで以下のように実行をする.
open 引数

実行結果は引数に与えたファイル属性にあったアプリケーションやプログラムを起動してくれるのである.pdfファイルを引数にするとプレビューが立ち上がるし,テキストファイルを引数にするとテキストエディタが立ち上がるといった具合だ.また,起動するプログラムはあらかじめ該当ファイルの「情報を見る」で登録することができる.ものぐさな自分にとってはまさにうってつけのコマンドだったりする.なので時々,MacからLinuxなどのUnixサーバにログインすると,openと打っている自分がいる.RedHat系のディストリビューションだけかもしれないが,実はopenというコマンドは用意されていて,コンソールなどで使うらしい.

しかたがないのでopen.shというシェルスクリプトを作ってみることにした.

まず,fileコマンドでファイルタイプを調べる.

fileType="`file "$i" | awk -F:\ '{print $2}'`"

で変数fileTypeに応じた処理をこんな感じで振り分ける.

case "$fileType" in
ファイルタイプ)
;;
esac

もしも,未知のファイルタイプに遭遇したら

*)
echo "$fileType"
exit 1
;;

としている.あとは使いながらファイルタイプのリストと処理を追加していけば幸せになれたりする.

ついでに,リモートログインした時にXが使えないときはDISPLAY変数をよしなに設定してくれる処理を入れているので,ディレクトリの中身をnautilusとかでも見れたりできる.

2007-07-30

carbon emacsのnxmlモードが残念な件

前のエントリでmamumo-modeが残念な動きをしているという話.

この前のエントリでは自前でビルドしたEmacsを使うことにしたけど,やっぱり自前ビルドは茨の道だった.とくにインラインの日本語変換が悲しいことになっている.やっぱりCarbon Emcasのインラインパッチて重要だよね.

とはいえ,Carbon Emacsの現状だとphpのコーディングのときにかなり悲しい思いをするのは確か.nxml-modeやnxhtml-modeのうまみが今ひとつ理解できないのもあって,/Applications/Emacs.app/Contents/Resources/site-lisp/nxml/nxhtml/php-mode.elだけを読み込ませることにした.あとのelispは無視する方向で……

とりあえず,.emacsとかに

(load "/Applications/Emacs.app/Contents/Resources/site-lisp/nxml/nxhtml/php-mode.el")
(require 'php-mode)

て書いて急場をしのぐ.がんばってmumamo-modeの最新版とかを入れてもいいんだけどね.今は時間がないのでこれでなんとかする.

nxmlパッケージに含まれているphp-mode.elはバージョンが1.3.0とかになっているけど,あんまり気にしない.つーか,changelogを読んでもあんまり嬉しい追加機能はないみたい.まぁいいや.

2007-07-25

carbon emacsの2007 summerバージョン

先日,Emacsが数年ぶりにバージョンアップし,自分が使っているCarbon Emacsも2007 Summerバージョンで本家のバージョンアップに追従したようだ.このCarbon Emacsはあらかじめ便利なelispプログラムも付属しているので大変重宝して使っていたのだが,nxmlパッケージ(とくにphp-modeとmumamo-mode)がうまく動作していないような気がする.

元々のphp-modeはsourceforgeで配布されているパッケージが入っていたようだが,今回のバージョンからnxmlパッケージに含まれるようになったらしい.このためphp-modeでファイルを編集している時に,TabもしくはC-iでインデントをしようとすると,mumamo-modeていうnxmlパッケージに入っているmmm-modeの新しいやつを使うかい?と聞かれるようになった.

最初はとりあえずyesと答えていたけど,どうやらmumamo-modeの起動に失敗しているっぽい.エラーメッセージを読んだら,autostart.elというファイルが見つからないとぶーたれていた.とりあえず.emacs.elでautostart.elを直接指定して読み込ませるようにしたら,こんどはmumamo-modeを使うぜ,と叫んだ時点でemacsが強制終了するようになった……

Carbon Emacsで提供されているnxmlモードはビミョーに古い気がするけど,新しいバージョンを入れようとまでは思わない.nxmlパッケージの中のnxhtml-modeはかなり気になるモードだけど……

ということで,Emacsはgnu版を落としてきて,自分でビルドしたものを使うようにした.とりあえずはCarbon Emacsの次期バージョンでこの問題が解決したら,Carbon Emacsを使うけど,現状だったら自分でビルドしたemacsを使っていたほうがいいかな.

2007-06-20

zphoto with Fedora Core 7

zphotoをFedora Core 7で使いたかったが,パッケージが無かったので,自分で作ってみた.以下は覚え書き. 実はFedora Core 6の時にもzphotoをコンパイルしたことはあるのだが,そのときはwxGTK関係で大ハマりしてGUIのwxzphotoが作れなかった.どうせzphotoを実行するのはリモート接続先のホストなのでそのときはあんまり気にならなかったが,ちゃんとzphotoのパッケージを作ろうと思い立ったのでついでにwxzphotoのビルドもリトライしてみた. zphotoをつくるにあたって必要なパッケージは以下の通り. (追記:compat-wxGTK-develも必要だった) imlib2 popt compat-wxGTK-common-devel compat-wxGTK compat-wxGTK-devel compat-gcc-34 compat-gcc-34-c++ ミソはcompat関係.zphotoのみだったらgcc4系でもビルド可能だがwxzphotoをビルドするにはwxGTKとgcc3のcompat環境が必要.あとwxGTKのバージョンは2.4でないといけない予感.多分,2.6ではビルドできないはず. また,mingライブラリについてはパッケージが提供されていないので,こっちもrpmを作ってやった.これはクセはなく,普通に./configure, make, make installができるはず. あとは,zphotoのソースを展開して以下の要領でいけるハズ. CC=/usr/bin/gcc34 CXX=/usr/bin/g++34 ./configure --prefix=/usr/local \ --with-wx-config=/usr/bin/wxgtk-2.4-config \ --disable-avifile make CC=/usr/bin/gcc34 CXX=/usr/bin/g++34 make install configureオプションに--disable-avifileをつけているのは,avifile環境をインストールしていないため.多分,configureスクリプトがちゃんと判断してくれると思うけど,なんとなく気持ち悪いのでオプションでavifileは使わないよと明示している. ここまでやったら/usr/local/bin/zphotoと/usr/local/bin/wxzphotoがインストールされているはず. ちなみに,wxzphotoはせっかく作ったものの,機会がないのでまだ試していない.

2007-06-18

PTP遊び

ふとしたきっかけでGPLなPTPに対応したプログラムがあることを知ったので、D80でちょこっと試してみた。以下は簡単なまとめ。 gPhoto2 パッケージとしてはかなりまとも。gnomeとラブラブな関係なので、たいていのLinuxディストリでパッケージが提供されていると思われる。また、開発も活発というのもプラス要因。ただ、D80を操作するには以下に挙げるような致命的な欠点がある。 1. gphoto2 --capture-imageとかしてもちゃんとメモリに画像が保存されない。 2. シェルを使ってキャプチャしたら、画像が保存されるが、二枚目をキャプチャできない。どうやら、プログラムか本体でバスのリリースがうまくいっていないぽい。 はっきり言って、D80では使いものにならない。といことで、ネットを彷徨っていたら、libptp2というライブラリを発見。このライブラリにはptpcamという小さなプログラムが付属している。問題はFedoraプロジェクトではrpmを配布していないということ。 どうやら、gcc4ではコンパイルが通らないことがrpmを提供していない理由の一つぽい。幸い、compat-gcc-34ではコンパイルできたのでspecファイルをでっち上げて、rpmを作ってみた。 実際にptpcamを使ってみたら、gphoto2のイケていないとこは問題なくクリアした。ということで、しばらくこいつで遊んでみることにする。

2007-06-17

Fedora Core 7のr8169ドライバ

どうやら,FC7のカーネルに含まれるr8169(つまり,ギガニのドライバモジュール)は腐っているような予感,少なくとも,2007年6月13日まで配布されていたバージョンではブート時に,このNICが原因でコケていた.ネットで調べてみるとFC 5の時にもギガニのドライバモジュールが腐っていたらしい.やっぱりケチって安物のNICを買っちゃいけませんね. しゃーないから.アキバでIntel製のギガNICを購入.ホントは2口のNICが買えればよかったんだけど,予算の都合上,1口のバルクを購入.2口のNICて20k円もするのね.ちょっとびっくり. で.さっそくマシンにNICをインストール…… なんか「CPUエラーです」とか文句言われてBIOSすらあがってこない. 2〜3ヶ月前くらいにグラボを変えたときにも.同じ症状にあったことを思いだし.とりあえず画面の出力先をDVI -> VGAに変えてみる.……ちゃんとbootした.どうやら,MBのBIOSがDVI出力にちゃんと対応していないような気がする.面倒くさいのでVGAのままにして.マシンをBoot. 今度は指したはずのNICが認識されていない.NIC が半刺しでした orz. 今度こそちゃんとbootして,NICも認識されている. とかやってるとupdateで新しいkernelが提供されていた.確認とか面倒くさいので,このままにしちゃえ.