Ruby で iCal データをマージする

興味はありつつなかなか勉強の進まない iCal. とりあえず簡単そうなところで複数のカレンダーを一つにまとめようと考えた。調べてみると、

  1. 一つのカレンダーは BEGIN:VCALENDAR から END:VCALENDAR まで
  2. RFC 2445 的にはこれを複数並べるのは可能っぽい
  3. てことは実は cat するだけで ok ?

cat したファイルを読み込ませた結果は、

Sunbird も Apple製iCal も最初のカレンダーしか認識できなかった。

うーむ、そういうことか。やっぱ一つ一つのイベントを一つのカレンダー上に作成していかないとダメか。ということで書いてみたのは以下のコード1

引数を与えなければオプションの与え方が表示されるので、それ見てなんとなく想像して使うよろし。

Usage: icat [options] ICS_FILES
    -l, --list-from-file FILE

基本的に cat として使えるようにした。当然パイプから受け取ることはできないけど。

url の解釈には open_uri を使っているので http か ftp, あるいはファイルのパスを与えることができる。

書いてみて思ったけど、Ruby の Icalendar ライブラリも Vpim::Icalender も複数のカレンダーを認識できるっぽい。少なくとも Icalendar.parse() の結果は複数のカレンダーが含まれる形になっている。2ということはやっぱ仕様的には複数カレンダーを一つの .ics に含むのは ok なんだよね? 単に GUI アプリに対応しているのが少ないってことなのかな。

[2008-11-26 追記]

最初 Icalendar 1.0.2 を利用して動かしたら to_ical で folding の際にマルチバイト文字が壊れてしまったので Vpim::Icalendar 1.1 に差し替えました3。文字化けは解消しましたが、なんか fold してないだけのような気も…。中は読んでいないので確証はないですけど、これはこれで相互運用性に問題あるなぁ。

ところで gist を使うと貼付けたコードも履歴を取れるのがよいですね。いつか github.com がサービス停止したらコードが返ってこないという危険性はありますが。

[2008-12-03 追記]

スクリプトと同じ場所にある特定の名前の YAML からしか設定を与えられないとかアホかっちゅー仕様だったので、オプションの与え方を大幅に変えました。

[2008-12-04 追記]

さらに ics ファイルの与え方を変更。

icat *.ics > dest

ってできた方が便利なのでそうした。

  1. 初めて gist から貼ってみるよ! 

  2. 実際には一つしか入っていない場合がほとんどなので parse().first で問題ないけど。 

  3. RFC によると 75 octets より長かったら fold すべしと書いてある。伝統的なメールベースでの転送も考えてあるってことかな。 

MeCab とりあえずよく分からず

いい加減 Namazu はやめたいんだけど、なんか基本的な部分で分かっていないことが多い。形態素解析もその一つなんだけど、今どき形態素解析は MeCab よね、と思ったけど、MeCab のサイト見ても意味がよく分からない。

ChaSen のときも思ったけど、理屈が前面に出てこられても興味がないので頭にさっぱり入ってこない。そしてサンプルがあまりにそっけなさすぎて全然分からない。

例えば辞書は EUC-JP が標準だと。じゃあ EUC-JP で表現できないデータを MeCab に突っ込みたくなったらどうすればいいのか。そういうことは MeCab の仕事の範疇の外? 詳しくないからよく分からない疑問が次々に湧いてきて全然本論に入れない、いちばんダメなパターンでぐーるぐる。

辞書の再構築の方法は載っている。いや違うんだ、おれが欲しいのは辞書の再構築の方法じゃない。と思ったけど、こういうことか?

  • 辞書に依存しない云々という記述はあるが、パンピーは気にしちゃいけない。UTF-8 のデータをそのまま解析したけりゃやはり UTF-8 の辞書が要る?
    • むしろ辞書に依存しない汎用的な設計 = 辞書をガンガン作れる = 辞書をガンガン作れ?
  • 辞書の指定方法は
-d --dictdir=DIR
-u --userdic=FILE

しかなさげなので、EUC-JP のシステム辞書も UTF-8 のシステム辞書も欲しい場合は複数のディレクトリを用意して置いておき、利用するときに -d で指定する?

  • じゃあバインディングからそれらを使い分けたいときはどうしたら?
    • あー mecab バイナリと同じパラメータを文字列で MeCab::Tagger() に与えるってか
    • つか普通使い分けとかそういうことは考えない?
    • MeCab に突っ込む前に変換すりゃいいじゃん?
    • 変換のコストがバカにならない場合は?
  • 周辺ツールにはパスも通ってないし man もないし HTML 上にもほとんど情報がない

むーん。

MeCab の辞書構造と汎用テキスト変換ツールとしての利用

を見ても……。なんだろう。何かしようと思ったら辞書を構築すべし、ってことなの? 毎回辞書の構築なんてやってられないよね? よく見る方法はシステム辞書のディレクトリを -d で指定してるけど、ユーザー辞書は何に使うの?

むーん。

PentiumM サーバ、とりあえず形に

自宅サーバ高速化の計画がずいぶん前からあったんだけど、やっと形になってきた。途中でリビングに置いて違和感のないミニタワーが手に入らなくてやる気がなくなったのもあるけど、ハードウェアが苦手なのと必要以上にケチりすぎてずいぶん時間が経ってしまった。ポイントとしては

  • mPGA479 + Pentium M の固定がちゃんとできてなかった
  • NIC はとりあえず Intel PRO を一つ用意しておくと安心
  • CD-ROM ドライブくらいは用意しておくと安心

て辺り。

今回、Marvell NIC + フロッピーのみという構成で FreeBSD 6.1 をインストールしようとしたんだけど、さすがに無謀だったみたい。NIC を認識しなきゃネットワークインストールはできないし、追加のドライバを食わせようにも最小限のインストールだけは済んでないといけない。結局、CD ドライブを一時的に借りてインストールした。1

ハードウェアはほとんど買ったものを組み合わせただけなんだけど、付属クーラーのファンがうるさかったのでクーラーそのものは交換せずに無理矢理ファンだけ回転数の少ないものに取り替えて済ませた。さすが Pentium M、ちょっとでも風があれば十分。

いやしかし、はえーな、これ。portsdb の更新がもう信じられないくらいに速い。何これ。

  1. もしかして USB で Flash 刺してなんとかなったか? そんなでかいの持ってないけど。 

netatalk on nfs

NFS でマウントしたディスクを共有フォルダとして Netatalk で扱う。ロック周りでエラーを吐きまくり、

  1. ドラッグしてファイルを放り込むのはエラーメッセージつきで可能
  2. 削除は不可能

という状態。(Samba の方も一部面白くない挙動をするが、削除できないとか致命的なものはない。)

こりゃ困ったな。nfs マウントして netatalk を走らせてる機械が設定しているつもりの permission は関係ない模様。やっぱ無理だったか? netatalk 側で CNID scheme だのあれこれいじったりしてみたけど、どれも無関係っぽい。nfs のバージョンはひょっとして関係あるかーと思ったけど確認の方法が分からない。

[2005-11-26 追記] 解決

これとは別にもう一つ、アクセスできていたはずの共有フォルダをなぜかマウントできなくなるという現象が発生し、試しに新しくフォルダを掘って共有掛けたら確実に再現するという事態に陥っていたが、両方解決した。

  1. Berkeley DB を利用する .AppleDB/ は NFS 上に置かない
    • .AppleVolumes.defalut でマウントポイントごとに dbpath: を使ってローカルのファイルシステムにデータベースを置くようにする
    • Berkeley DB を NFS で使うなという話は リポジトリの作成と設定(Subversion のドキュメント)にとても分かりやすく書かれています
  2. nfs mount の際に lock しないオプションを利用する
    • Linux なら nolock, FreeBSD なら -L を利用する。これでとりあえずファイルを操作する際のエラーは止まり、通常通りにファイルの生成、削除が行えた。
    • これはこれで何か問題が起きそうな気はするが、負荷を上げた際にどうなるかは今後の課題ってことで。
    • NFS サーバ側の動作によって違うかもしれない。まぁ何か不都合が起きたときにはここを疑う価値あり、程度に解釈すればよい。また、lock がないなんて気持ち悪すぎる、という向きにはファイル共有用の領域だけロックが外れるようなパーティションの切り方をすればまだマシかと。

基本的なことを自分が分かっていなかっただけとは言え、NFS の上で netatalk を動かそうなんて人はいないのか全然情報がなくて困った。

netatalk2 で Finder からパスワード変更できない

環境は FreeBSD 6.0-RELEASE + netatalk 2.0.3 + 各種パッチ(netatalk2.0.3のcjk patch ports にさらに non-ascii-volume patch を当てたもの)。もちろん afpd のインスタンスは -setpassword になっている。クライアントは OS 9 でも OS X でも一緒。

変更できたようなフリはする。ログ1では

Nov 25 09:26:42 afpd[720][auth.c:905]: I:AFPDaemon: password change continued.
Nov 25 09:26:42 afpd[720][auth.c:896]: I:AFPDaemon: changing password for <USERNAME>
Nov 25 09:26:42 afpd[720][uams_dhx_pam.c:159]: I:UAMSDaemon: uams_dhx_pam.c :PAM
: PAM Success
Nov 25 09:26:42 afpd[720][auth.c:905]: I:AFPDaemon: password change succeeded.

って言ってるんだけど、実際には変更したつもりのパスワードで認証は通らない。つか /etc/pam.d/ に netatalk とか afpd とかないのに全然エラーが出ないけど、こういうもんなんだろうか。くそー PAM がよく分かってねぇ。

しかし手順は必ずしも分かりやすくないけど、パスワード変更の UI があったり、ゲストとしてのアクセスも明示できたり、afp の方が全体的にちゃんとしてる気がする。smb の方はどっちも明示できないから何が起きているのかイマイチ分かりにくい。認証を通過したら、そのユーザーにアクセス権限のある共有フォルダだけ見えるってのも afp の方が親切な感じ。

とりあえずパスワード変更については別なアプローチもある2ので、別な実験へと進むことにする。失敗記録を書いてツッコミ待ち戦法。

  1. netatalk はログを設定で on/off できないのが痛い。ports で入れた netatalk はログを吐かないので build し直しちゃったじゃないか。K6-2 350MHz なのに! 

  2. 現状では smbpasswd からシステムアカウントのパスワードも同時に変更しちゃえば afp の方でもパスワードは変わるわけだから、それ用のインターフェイスをどうにか用意すればいい。まぁパスワードの変更をさせないっていう判断もなくはないんだけど、それはあんまりやりたくない。 

Firefox 1.0 対応 Breeze Theme げとー

Whitehart - A Firefox Theme

やたー。やたー。

OS X 版 Firefox のバグ

テーマによってレンダリング結果が異なる。form など一部は変わって当然なんだけど、textarea の width に 100% を指定すると親要素の大きさを無視して(親要素まで巻き込んで)100% 確保しようと頑張ってしまう。標準テーマだと問題ないし、同じテーマを Windows 版で使っても問題ない。うーむ。

めまいと肩こりと

サロンパスを貼って寝たら、少なくとも先週よりはマシになったようだ。今日はまだ月曜だし、サロンパス以外にも今週末はことのほかよく休んだってのもあるけど。

めまいを感じるようになったのはこの2週間から3週間くらい。この少し前から冷え込んできているのと、めがねが古いものになっている。肩こりが原因なら以上の2つの素因が引き金と考えると、時期的にも一致する。 しかし、頭が痛いとか首が痛いとかは今まであったが、めまいがひどくなるってこともあるもんかね。

http://www.geocities.jp/kanaidou/syoujou.htm

によるとそういうこともあるようだけど。実際には24時間ずっとめまいがするのではなく、頭をある角度に傾けるとめまいがするというものなので、たぶん血行かなぁという気はしていた。

そういえば最近はコーディングの時間が増えたので以前よりはるかに姿勢は悪くなっているだろう。日本語を書いているよりコーディングの方が身体への負担は大きい。モニタの角度も合ってないし。

Maxtrix Revolutions を見た

本当は見る自分にも惰性入っていたのだが、まぁそれは言うまい。戦闘シーンがどんどんドラゴンボール化してしまうのも予想ついていたことだし。

ただ、ハリウッドっぽくないなぁと感じる点があちこちに。かなりおいしい役でそれほど有名でないアジア人が登場するし、ラストで主役が生還してこない。(死んだかどうかは知らない。)特にラストシーンのすっきりしなさ加減は実にハリウッドらしくない。ジャパニメーションヲタの作った映画だからなのか、ラストシーンが後付けだからなのか。(1作目のラストシーンが実によくできていたのに対し、2作目移行は話のスケールが急激に大きくなり、登場人物がやたらと増え、説明的な描写がやたらと多くなってしまった。)

以降はネタバレ。ラストシーンを自分なりに説明してみる。

  • 目的を達成したプログラムが終了するってこと
  • スミスの増殖は cp による overwrite ではなく override(だった部分もある)
  • ネオの強さではなくスミスの存在の負の影響とアーキテクトの存在
  • ネオの実体が machine city にたどり着いたことでネオを触媒化できたこと

なんか、ラストの辺りでナウシカとパトレイバー THE MOVIE の 1 を思い出したのは自分だけだろうか。ドラえもんとか。とにかくラストシーンの作りが日本映画っぽい。

ちなみに 2作目のような、アレゲな人間だけが理解できる用語をちりばめたりする遊びはない。まぁ別に要らないでしょ。全体的な感想としては、娯楽としては1作目で終わっておくべきだった。メッセージとしては3作目まで必要かもしれないが、それにしてはちょっと半端ではないか。

About

例によって個人のなんちゃらです