2007年5月29日火曜日

メールの添付ファイルを削除して転送

※前のblogから記事を移動。元の公開日:2007/05/29(火) 22:40:21

---

自分宛のメールは携帯に転送してbiffの代わりにしているのだが、これに頼り切っているので何らかの拍子に転送漏れしたりするとひどいときは丸一日以上着信に気づけなかったりして困る。転送漏れの理由はたいてい添付ファイルが大きすぎて携帯の方のメールサーバで蹴られてしまったせいなので、メールのサイズがある程度より大きかったら添付ファイルを削除するようにした。

環境はこんな感じ。

受信 → postfix → maildrop → ISPのsmtp → 携帯
maildropでフィルタをかませて添付ファイルを削除する。
添付ファイル除去用のフィルタはここからもらってきた。

添付ファイル除去フィルタ(w-filter)
http://www.gomibako.com/w-filter/

消した後にちゃんと xxx という添付ファイルがついてました的なメモが残ってくれるのでありがたい。
.mailfilterの記述はこんな感じ。

MAILDIR=$HOME/Maildir
CELLULAR_PHONE="myname@career.example.com"
ATTACH_FILTER="$MAILDIR/w-filter.sh"
ATTACH_LIMIT_SIZE=500000
if ( $SIZE > $ATTACH_LIMIT_SIZE )
{
cc $MAILDIR/
xfilter "$ATTACH_FILTER"
to "!$CELLULAR_PHONE"
}
  • 携帯のメールサーバ的には3Mくらいまでは受け取ってくれるみたいだけど数百K程度でPCドキュメントビューアが開いてくれなくなるので制限は500Kにした。
  • xfilterの引数はダブルクォートで囲まないとエラーになる。
  • .mailfilterの記述にエラーがあった場合/var/log/mail.logあたりに行番号とともに出力される。

STLのstd::vector::clear()ではメモリが解放されない

※前のblogから記事を移動。元の公開日:2007/05/29(火) 22:40:21



---

vectorは、配列の伸長時に発生するnew、copyのコストをできるだけ避けるために、ある程度大きめのメモリを確保しておく実装になっているようです。
  • コンストラクタでは指定した長さ分のメモリが確保される

  • vectorが確保しているメモリ量(配列長)はcapacity()メソッドで確認できる

  • push_back()あるいはresize()等を行ったときにcapacityを超えた時、(多くの場合)それまでの2倍のメモリを確保する

    • 手元のVC++2005では1.5倍、gcc(g++) 4.1.2では2倍だった
  • clear()はデータ数を0にするだけでメモリは解放しない(capacityは変化しない)

  • resize(0)等としても同様

  • reserve()に現在のcapacityより小さい数字を与えた場合は何もしない

  • つまり、vectorが一度でも確保したメモリはオブジェクトが破壊されるまで解放されることはない(?)
stackのベースをvectorにしたりすると思わぬところでメモリオーバーしたりするので注意した方がいいようです。

2007年5月8日火曜日

zshのコマンドラインスタックをviモードで使うには

※前のblogから記事を移動。元の公開日:2007/05/08(火) 22:56:25

---

zshのコマンドラインスタック便利だ!
ESC-qと押せばよい。
という記述はよく見かけるのだが、これはemacsモード(bindkey -e)じゃないと使えない。
viモード(bindkey -v)で生活してる自分には使えず悲しい思いをしていたのだが、気が向いたのでviモードで使えるようにする方法を調べてみた。
setopt noflowcontrol
bindkey '^Q' push-line-or-edit

これでc-qでコマンドラインスタックが使えるようになる。
2行目がc-qにマップするコマンドで、1行目がc-q, c-sへのマップをできるようにするもの。他のキーにマップするなら1行目はいらない。

ちなみに、コマンドラインスタックは英語だとbuffer stack。

2007年2月8日木曜日

mobilecast mLink R 音飛びメモ

※前のblogから記事を移動。元の公開日:2007/02/08(木) 23:21:16

---

SONY VAIO VGN-SZ92PS + mLink R
ふつうにパソコンで仕事しながら音楽を流し音飛びした時間をメモ。

20:00頃使用開始。この時点でフル充電状態ではない。
以下音飛びした時間。
20:09
20:16
20:24
20:50
21:16
21:28
21:39
21:42
22:11
22:19
22:26

22:55電池切れのため終了

かなりはっきりと2~3秒とぎれるので聞き逃しは無いと思う。
5分もおかずに再発することもあれば30分くらい飛ばないこともある。
平均すると1時間に4回くらい。断定には観測時間が短いけども。

2007年2月6日火曜日

mobilecast mLink R (MPX3000R-PK)

※前のblogから記事を移動。元の公開日:2007/02/06(火) 21:14:12

---

amazonで購入。\6,860也。
VAIO Type S VGN-SZ92PSとペアリングしてみたメモ。
1. 充電ケーブルは抜いておく。どうも充電しつつの使用はできないぽい?
2. mLinkのファンクションボタンを青点滅→青・赤交互点灯になるまで押し続ける
3. PC側でスタートメニューからBluetooth設定を起動
3.1. 新しい接続
3.2. エクスプレスモード
3.3. MPX3000Rを選択
3.4. PINコードを聞かれるので 1234 と入力
4. Bluetooth設定の画面でMPX3000Rを右クリック→接続
以上。(3.3と3.4は逆だったかも)
Bluetooth設定のオプションでAVリモートコントロールサービスをONにしておくとWMP、SonicStage、WinDVDとかが本体から操作できる。
WMPで試してみたけどもフォーカスが外れててもふつうに操作できて便利。
(ただし、1度接続するとWMP終了させた後でも本体ボタン押すたびにWMPが立ち上がってきて邪魔なことこの上なし)
fb2kでも使えないかなぁ。。。

使ってみた感じ。
・音量はかなり出る。
・10~20分くらいおき(不定期)に3秒ほどの音飛びが起きる(無線LANのせい?無線無い環境で試せないので不明)
・電池残量の表示がないので不安だが1日仕事中聞いてる位なら全然問題なし
・BGMとして聞く分には音質に特に不満はない

トランスミッターの方も買ってみようかな。

2007年1月26日金曜日

1万曲保持するのに必要なストレージ

※前のblogから記事を移動。元の公開日:2007/01/26(金) 03:14:17

---

<動機>
現在の全所持CDにこの先5年くらいで増やす分を加算して
余裕を持って多めに見積もって1万曲。
・ライブラリー家据え置きPC
・持ち運び1ーノートPC or HDD portable
・持ち運び2ーシリコンオーディオ or 携帯電話
の3シーンでどの容量のブツにどのくらいのビットレートで
エンコしたらいいかなって試算

<計算結果>
・仮定
手元のライブラリより
1163638sec(=1w6d11h13m58s)/4419song=263sec/song
から1曲あたりの長さを260秒と仮定。
1万曲で2,600,000s(=totalsec)となる。

・CDDAを非圧縮で保存した場合
bps_cdda=16bit*44.1kHz*2ch=1441.2kbps
TotalSec*bps_cdda/8=468,390,000 KB (=wavtotal)
500GのHDDに収まる。
1枚のCDを平均して600Mと考えると10000曲=CD780枚くらいで
CD1枚13曲くらいってな換算なのか
1曲あたり45,864KB

・可逆圧縮をかけると
http://www.synthetic-soul.co.uk/comparison/lossless/index.asp?Sort=Compression&Desc=0
このあたりから適当に圧縮率65%とすると、
wavtotal*0.65=304,453,500KB
(60%換算で281GB、70%換算で329GB)
300GのHDDでは不安。
1曲あたり29,812KB

・320kbpsで圧縮すると
vorbis q9, lame V0 最音質重視モード
totalsec*320/8=104,000MB
百Gちょい
1曲あたり10,400KB

・192kbpsで圧縮すると
vorbis q6くらい。たぶん。
lameはよく知らないけどpreset fast standard(V2)でこのくらい?
totalsec*192/8=62,400MB
60Gってとこ
1曲あたり6,240KB

・128kbps
エンコーダーのデフォルトってだいたいこのくらいなのかな。
totalsec*128/8=41,600MB
40Gくらい
1曲あたり4,160KB

・48kbps
vorbis q-1, lame V9, neroaac q0.35あたりかな。。。
totalsec*48/8=15,600MB
1曲あたり1,560KB

・32kbps
vorbisの圧縮率最大(q-2)。
neroAacEncのHEv2でq 0.2くらいかも。
faacのq 10でも同じくらいになったけど聞けた物ではなかった。。。
totalsec*32/8=10,400MB
約10G
1曲あたり1,040KB

<感想>
・500GのHDD買ってきてwav+cueでそのままおいとけばいいんじゃね?
圧縮するにもcodec選ぶのめんどくせーし。
お金余裕ある時にミラーかければなくなることもないかな。
・192kbpsくらいならノートで持ち歩いても邪魔にならなそう。
portable HDD player 買うとしたら60G↑って感じか。
自分の耳と手持ちのイヤホンじゃ違いもよくわかんないしmp3でいいんでないかな。
streamingするならvorbisの方がいいけど、portable系で致命的に聞けないからなぁ。
・8Gのプレーヤーなら大体入るかもって感じ。
ipodnano8Gにaacplus-v2-q0.2でってのがほぼ唯一の解か。
ちゃんと再生できるんかなぁ
携帯だとmicroSDが2Gまでしかないから無理か。
q0.1にしてさらにサイズを半分にしたらmicroSD2枚で解決!w
USBリーダーにつっこんでストラップにつければ携帯性も○ってことで
やっぱしこっちも問題は再生できるかどうか。
・quicktime君はPS(SBRも?)を読んでくれなくてひどい音やった。。。apple頑張ってくれ。。。
・なんかいろいろ適当すぎで数字が小さい方はあんま参考にならなかった。
ビットレートもVBRだから実際はかなりばらつくしなぁ

2007年1月17日水曜日

ファイルからshift-jisの行を抽出

※前のblogから記事を移動。元の公開日:2007/01/17(水) 02:09:45

---

とあるソフトウェアの英語版を配布することになったということで、プログラムの中の日本語を英語に直さなきゃならんらしい。
・メニュー
・ツールバーのポップアップヒント
・ステータスバーに表示するメッセージ
・ダイアログボックス
・ヘルプ、バージョン情報
・メッセージボックス
あたりだろうか。
だいたいはリソースの中だろうけどソースのどこかに散らばってるのもあるよね・・・

ってなわけでとりあえず一覧を作ってみるスクリプトをrubyで書いてみた。
SJISの行でなおかつ"を含んでいたら(コメントよけ)ファイル名・行番号と共に出力する。
指定ファイルがバイナリファイルだったら何もしない。

require 'nkf'

#CODES = {
# NKF::UNKNOWN => "UNKNOWN", # 0
# NKF::JIS => "JIS", # 1
# NKF::EUC => "EUC", # 2
# NKF::SJIS => "SJIS", # 3
# NKF::BINARY => "BINARY", # 4
# NKF::ASCII => "ASCII", # 5
# NKF::UTF8 => "UTF8", # 6
# NKF::UTF16 => "UTF16", # 7
#}

while file = ARGV.shift
port = open(file)
str = port.read
next if NKF.guess(str) == NKF::BINARY
port.close
num = 0
IO.foreach(file){|line|
code = NKF.guess(line)
num = num + 1
#print file + "(" + num.to_s + "): " + CODES.fetch(code).to_s + "\n"
if code == NKF::SJIS
if line.include?("\"")
print file + "(" + num.to_s + "):" + line
end
end
}
end

やってみたら結果291行・・・
多少はコメント行も残ってるけど、手作業で直すのしんどいなぁ。

2007年1月4日木曜日

ntpの同期間隔を短く

※前のblogから記事を移動。元の公開日:2007/01/04(木) 15:58:50

---

参考:http://support.microsoft.com/kb/297227/ja
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient 
名前:SpecialPollInterval
種類:DWORD
値:秒数

1日=86400秒。