2003-01-08 117284 [長年日記]

Copyright

ソースのCopyrightを1998-2003に変更。もう6年目か、と思うとずいぶんと長いことやってきたものですね。

こんな風にして書き換えたのですが、ちょっとはまりました。

find . -type d -exec mkdir -p ../new/{} \;
for f in `find . -name *.cpp -o -name *.h -o -name *.inl`; do
  sed -e 's/1998-2002/1998-2003/' < $f > ../new/$f
done
cd ../new
find . \( -name *.cpp -o -name *.h -o -name *.inl \) \
  -exec cp {} ../old/{} \;

はじめに、findの-nameの条件を()で括るのを忘れていたために、-execが*.inlの分しか実行されませんでした。しかしfindはわかりにくいですね。しかも、シェルのメタキャラクタと被りまくりなのでエスケープが入ってますますわかりづらいですし。

ところで、findの-exec句で出力側のリダイレクトって使えないんでしょうか?。最初以下のようにしたら標準出力に出てきてしまいました。

find . \( -name *.cpp -o -name *.h -o -name *.inl \) \
  -exec sed -e 's/1998-2002/1998-2003/' \< {} \> ../new/{} \;

ログ

通信時の生のデータのログは、ソケットを扱っているクラスの方で出すようにしました。どこで切れるか予想がつかないのがいまいちですが、プロトコルごとにログを出さなくていいので楽ですし。

フォルダごとにメッセージボックス

今はメッセージボックスはアカウントに一つということになっています。これは、フォルダごとにメッセージボックスを持つようにすると、フォルダ間でメッセージを動かしたときのパフォーマンスが低下してしまうためです(安全性やクラッシュしたときの復旧作業のやりやすさを考えるとフォルダごとのほうが良いでしょう)。

でも、IMAP4の場合を考えると、リモートでメッセージを移動させると、どのみちメッセージ本体はダウンロードしなおすわけで、だとしたらフォルダごとにメッセージボックスを持てても良いですね。さらに、今は複数のフォルダをパラレルに(マルチスレッドで)同期してもメッセージボックスの排他制御がかかってしまいますが、フォルダごとにならばこの制限もなくせますし。