2010/12/24

Thunderbirdがすごい。だけど.....

少し前にうちのメールをIMAP化し、昔使っていた別のメールクライアントのメールを取り込むべくインポートをやっていたわけなんですが、 Thunderbird、すごいですね。メールボックスをまたいでメッセージを移動できるし、移動元がPOPで移動先がIMAPだとアップロードまでしてくれます。これで、iPhoneからでも会社からでも自分の家でも全部同じメールが見られる~

と思っていたら、どうもメールの表示順序がおかしいのです。メールヘッダにあるタイムスタンプは確かに維持されているんだけど、表示順序が「Thunderbirdに取り込まれた順」になっている。昨日のメールよりも新しい位置にインポートしたメールがあるわけで、iPhoneで見るときに「最新の100通」を見るとインポートしたメールで埋まってる.....これでは使い物になりません。

で、調べてみると、IMAPサーバに保存されているメッセージのファイル名が「インポートしたときのUNIX秒」になっているっぽい.....これを直せばどうにかなるかな。

というわけで、こんなスクリプトを組みます。要は、各メッセージのファイル名に入っているUNIX秒を、Dateヘッダが示すUNIX秒に差し替えてリネームするわけです。


#!/bin/sh

cd ~
for dir in `find ~/Maildir -type d -name cur`; do
cd $dir
pwd
for file in `ls`; do
dater="`grep ^Date: $file | head -1 | sed -e 's/^Date://; s/ (JST)$//; s/Thr/Thu/'`"
dates=`date -d "$dater" +%s`
new=`echo $dates@$file | sed -e 's/@[1-9][0-9]*\././'`
echo -n "$file -> $new : "
if [ "$file" = "$new" ]; then
echo not renamed.
else
mv -i $file $new
echo renamed.
fi
done
done


コツをいくつか。
・Maildir形式での各メッセージは確実にユニークなファイル名を持つようになっているので、1ファイルずつ処理できます。ファイル名の命名規則については下記で解説されています。
http://cr.yp.to/proto/maildir.html
・head -1が入っているのは、マルチパートのメールとかだとDateヘッダが複数入っているので、一番最初のだけを持ってくる必要があるからです。他の言語を使えばオブジェクトで扱えるのですが、そこまでは要求していないのでこれで十分。
・ThrをThuに変えているのは、dateコマンドのフォーマットとして認識してくれないからです。メールソフトの中には、木曜日の短縮形をThuではなくThrで記述するものもあるみたいですね。

もちろんここにくるまでにちゃんとデバッグしてますよ。mvだけコメントアウトしておけば何度でもプレビューできるので便利です。ついでに、テスト実行時には標準出力「だけ」を捨てておくと、エラーの有無がわかりやすくて便利です。こういうとき、標準エラー出力って便利だな、と思います。

で、imapのサービスを止めて、いざ実行!

Thunderbirdを立ち上げてみると....お!うまくいってる!
しかしログにこんな記述が!
「△△△フォルダから0000通のメールを削除しました」....えええ!!!!

よく見ると、ローカルのメール(実質的なキャッシュ)をリモートフォルダ(つまりIMAP上のオリジナルメール)に合わせている挙動でした。リモートのメールが消されているものと勘違い(汗

改めてiPhoneから見てみたところ、期待したとおりに表示されているようです。

2010/10/17

電話番号パターン認識

こんなモジュールがあるんだー。
http://perldoc.jp/docs/modules/Number-Phone-JP-0.03/JP.pod

2010/10/07

rsyslogのタイムスタンプ

しばらく前にsyslogをrsyslogに置き換えて運用していたんですが、そのせいでawstatsがまともに動かなくなっていたようです。

普通のログだとタイムスタンプが

MMM DD hh:mm:ss

とかになってるんですが、rsyslogがタイムスタンプの標準(?)が

YYYY-MM-DDThh:mm:ss:uuuuuu[+-]zz:zz

になってるみたい。

解除するには、rsyslog.confの各ログの書式に「;RSYSLOG_TraditionalFormat」をつければ良いそうで。
サンプルをば。

mail.* /var/log/maillog



mail.* /var/log/maillog;RSYSLOG_TraditionarFormat

とする。

でも、高精度タイムスタンプが使えるんならその方がいいなぁ。
何とかしてawstatsに食わせるために、

sed -e 's/^\([0-9][0-9]*-[0-9][0-9]-[0-9][0-9]\)T\([0-2][0-9]:[0-5][0-9]:[0-5][0-9]\)\.[0-9]*[+-][0-9][0-9]:[0-9][0-9]/\1 \2/g'

なんて小賢しいフィルタも考えてみたんだけど、maillogconvert.plがうんともすんとも言わない。


さて、どうしたものか.....

2010/10/06

携帯宛のメールが届かない?

友達から「MLに送ったメールが1通だけ届かない」なんてメールがきた。
ログを見てみると、確かにその時間帯に着信したメールがその友達「だけ」に送信されていない。
.....なんでだ?

とりあえず分からないので、postfixをいじってみた。

main.cfに追記

transport_maps = hash:/etc/postfix/transport


transportを作成、ハッシュ化

softbank.ne.jp smtp-softbank:
ezweb.ne.jp smtp-ezweb:
docomo.ne.jp smtp-docomo:


master.cfにカスタムトランスポートを追加

smtp-softbank unix - - n - 1 smtp
-o smtp_destination_concurrency_limit=1
smtp-ezweb unix - - n - 1 smtp
-o smtp_destination_concurrency_limit=1
smtp-docomo unix - - n - 1 smtp
-o smtp_destination_concurrency_limit=1


とりあえず様子を見てみましょ。

2010/10/02

DNSサーバ、そしてお手軽セカンダリDNS

いままで会社のやつに滑り込ませていたので、ちょっと申し訳ない感じがありましたが、やっとDNSを自前運用にしました。
これでDNS/web/mailが全て自前運用になったので、やっと次のステップに進めそうです。

やったこと。
1.使っているサーバ)Centベース)にbindとbind-chrootを入れる
2./var/named/chroot/etc/named.confを編集
2-1.internalセクションの中は全部コメントアウト
2-2.keyセクションもコメントアウト(次の機会にでもいじる予定)
3.sampleディレクトリにあるnamed.*を/var/named/chroot/var/named/にコピー
4.ゾーンファイルを/var/named/chroot/var/namedに作成(命名はドメイン名.zone)
5./var/named/chroot/etc/named.confを編集
さっき作ったゾーンの設定を追記
6.起動!

ちなみに、利用しているお名前.comだと、セカンダリDNSサービスってのがあります。これはラクでいいですね。しかも、自分が利用しているサーバと全く管理形態が異なるので、同時に落ちる心配もほぼ皆無といっていいでしょうし。自分で2台もDNSサーバが用意できない方にオススメ。
ドメインNaviの手順に従って設定し、最後にネームサーバを変更して無事完了です。

というわけで、次は「完全手動ダイナミックDNS」を「ちゃんとしたダイナミックDNS」にしようと思います。

2010/08/16

apacheのコツ

apacheのコツをいくつか。

configはどこにある?

まず、プロセスを見ましょう。すると、httpdなプロセスがいくつかいるはず。
このバイナリに"-V"オプションをつけて実行してみましょう。
ファイルシステムのパーミッションに阻まれない限り、non-rootユーザでも実行できます。
すると、こんな感じの情報が出てきます。

# httpd -V
Server version: Apache/2.2.3
Server built: Apr 4 2010 17:19:54
Server's Module Magic Number: 20051115:3
Server loaded: APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
Architecture: 32-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="run/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"

で、何を見るべきかというと、-Dオプションに続く「HTTPD_ROOT」と「SERVER_CONFIG」を見るのです。このふたつをくっつけたところを見に行ってみると、httpd.confがいるはずです。


ここから先はソースで入れるような人には向かないかもしれませんが、RPM版apacheについていくつか。

httpd.confは初期設定を除いてできるだけいじらない

httpd.confはグローバルな設定(スコープがGlobalなconfig)に止めて、それ意外はできる限り書かないようにしましょう。
VirtualHostの設定なんて書くべきじゃありません。入れておくべきはこのぐらいでしょうか。
  • グローバルパラメータの設定
  • MPMの設定
  • モジュールの読み込み設定
  • 各種インクルード

じゃあ、それ以外はどこに書くの?


Includeを活用しましょう

それは、役割ごとにIncludeするんです。
RPM版apacheのデフォルトでは、こんな記述があります。

Include conf.d/*.conf

サーバ上のパスだと/etc/httpd/conf.d/になります。

ここにいくつかファイルがあるはずですが、不要なものは名前を変えてincludeされないようにしましょう。mod_perlを使わないのであれば、perl.confをperl.conf.offとかに変えるだけ。拡張子が".conf"のものしか読まれないので、これで充分です。

バーチャルホストについてはいろいろやり方がありますが、自分のやりかたを参考までに書いておきます。
  • conf以下にvhostsというディレクトリを掘る
  • vhostsの中に、バーチャルホストのコモンネーム.confでファイルを作成し、該当するバーチャルホストの設定を書く
  • conf.dの下にvhosts.confというファイルを作成する
  • このvhosts.confに、必要なNameVirtualHostを列記し、その下に、Includeでバーチャルホストファイルを読み込んでいく。
こうすることで、httpd.confに余計な改変を加えず、好きな順番でバーチャルホストを読み込ませることができます。
何でバーチャルの順番に気を遣うか。IPアクセスされた際に、最初に設定されたバーチャルホストが反応してしまうので、どのバーチャルホストを先頭に持ってくるかが重要なのです。


まとまりのない文章ですいません。

2010/07/16

WindowsXPにおけるSpeedStep

昔、どっかで調べたことです。
今さら使うのかどうか分かりませんが、とりあえずメモ。


Constant:常に低い駆動周波数でCPUを駆動
Adaptive:CPU使用率が高いときに高い駆動周波数に設定
Degrade:低い駆動周波数でCPUを駆動し、バッテリーの残り容量に合わせてCPUのパフォーマンスを下げていく
None:常に高い駆動周波数でCPUを駆動

電源管理アプレットでの設定 → ACアダプターつき / ACアダプターなし
自宅または会社のデスク → None / Adaptive
ポータブル/ラップトップ → Adaptive / Adaptive
プレゼンテーション → Adaptive / Degrade
常にオン → None / None
最小の電源管理 → Adaptive / Adaptive
バッテリの最大利用 → Adaptive / Degrade

追記
HKU\.DEFAULT\Control Panel\PowerCfg\PowerPolicies\数字

2010/07/11

初体験

大地53をロバ化された...(泣)

ちなみに今日の収穫。
・ヌイグルミ7
・OC3
・ロバ2
・テーマ1
・わらし2

...ちょっと低めだな。

もはやハードウェアに縛られている時代ではない

本日、インターンの対応をやっていて思ったこと。

クラウドに何を求めるのか?

少なくとも、「新しい技術」ではない。
あくまでクラウドとは「基盤」である。
その上にどんな「サービス」があるのかが重要だ。

電車が時間通りに運行されていれば、最低限まともな電車であると認識する。
線路の上を走っていようがタイヤで走っていようが、ACだろうがDCだろうが、狭軌だろうが標準軌だろうが、そんなものは関係ない。それらはあくまで「基盤」である。我々が求めるものは「サービス」である。

サービスは、利用できるのであればその形態は問わない。
iPhoneだろうが、Netbookだろうが、PCだろうが。
googleだって使えるし、evernoteも然り。
そう、ネットにさえ繋がれば、どんなデバイスでも同じように使えるのだ。

2010/07/06

Firefoxのアドオンpart2

前回に引き続き、こんどは会社で使っているPCについてです。
part1で出てきたものについてはタイトルのみ。

Elasticfox
Amazon EC2のフロントエンドツールです。
Evernote Web Clipper
FireBug
HTML関連のエラーを見つけてくれるやつなはずです。
FireGestures
自宅PCに入れているのとはまた別のジェスチャーアドオン。All-in-one Gesturesよりはシンプル。
HTML Validator
HTMLの構文チェックをしてくれます。
Live HTTP Headers
Web Developer
開発者向けのツールだった気がする。人から薦められて入れたので、ちゃんとは覚えてないです。
YSlow
ページのレスポンスタイムをブラウザから計測できるツールです。


あとは会社で使っているPCがもう1台ありますが、それはまたの機会に。

2010/07/04

Firefoxのアドオンpart1

ちょっと気になったので、各環境のFirefoxで自分がどんなアドオンを入れているか調べてみました。隠れた目的としては、各環境で適当な管理状態になっているアドオンを、この際統一してみよう、というのがあります。


All-in-One Gestures

マウスジェスチャーを実現するアドオンです。ローカライズされており、かなり細かいところまで設定が可能。

Compact Menu 2

アドレスバーのところにメニューを押し込むことができるアドオンです。本来のブラウザ領域をできるだけ広く取ろうとすると、メニューバーの領域すらももったいなく感じたために入れてあります。

Evernote Web CLipper

Evernoteにメモを送り込むためのアドオンです。iPhone使いには必須。

FxIF

画像のプロパティを開いたときにExIFのデータが見られるようにするアドオンです。意外に見るツールがないんですよね。

Live HTTP headers

HTTPプロトコルのリクエストやレスポンスをそのまま見ることができます。仕事上必須アイテム。

Tab Mix Plus

タブの挙動を細かく制御できるアドオンです。タブを閉じたあと、どのタブをアクティブにするかを制御できるので、別のタブブラウザからの乗り換えを吸収するのに良いかも。

TwitterBar

アドレスバーからtwitterに投稿できるアドオン。アドレスバーに文章を入れて、右端にあるボタンを押すことで投稿できます。わざわざ別ウィンドウを開かなくてもそのままtwitできるのがポイント。

タブカタログ

まんまですね。Ctrl+Tabでタブを切り替えるときに現れるので便利。



他の環境についても書いていきますが、週明け以降に。
気になったのがあれば是非お試しください。

2010/06/15

Oops!



あらめずらしい

当たりすぎだろ

今日の隕石運、かなりイイ感じ。
夜中はダメ隕石と予想してミサイル2発を置いたら正解。
日中は朝からアイテム隕石5連発。しかもテーマは1回だけ。

どこまで続くかなぁ。

subversionのフックを使ってコンテンツ管理

subversionでコミットをかけた際に最新リポジトリを別ディレクトリに吐き出す方法について、軽くテストしてみました。


  1. $REPOS/hooks/post-commitを新規に作成する。

  2. post-commitに下記の内容を書く。


    /usr/bin/svn export --force repos-path documentroot


  3. chmod +x post-commit



とりあえず目的は達成。あとは、まるまる上書きしたくない場合にどうするかをもうちょっと考えてみます。確認結果については別トピックではなくここに追記する予定。

追記。
exportとcheckoutの違いを挙動から見る限りでは、リポジトリ情報(つまり.svn)が一緒に落ちてくるかどうかの違いっぽいです。
また、importコマンドのテストも行ったんですが、パーミッション管理が必要なツリーは管理に向かないですね。例えば/etc以下の管理とか。まあ、リポジトリにアクセスするときに特定のユーザを指定しているので、当然といえば当然ですね。

2010/06/14

はやぶさ public viewing

宇宙探査船「はやぶさ」が7年の月日を経て地球に帰還するという瞬間を少しでも楽しむべく、相模原は淵野辺にある「宇宙科学研究所」まで行ってきました。


今回見た場所は「研究管理棟」というところで、「はやぶさ」を実際に地球までコントロールする管制室もこの建物の中にあるそうです。正門から1分ほど歩いた正面にあるのですが、そのすぐそばにはM-V(ミューファイブ)型ロケットやM-3SII(ミュースリーエスツー、でいいのかな?)型ロケットの実物模型も展示してあります。長い期間相模原に住んでいましたが、近くにこんなに楽しめるところがあったのは意外です。






会場はこんな感じ。1階入ってすぐのところが「展示室」となっているのですが、100人ぐらいだろうというJAXAの予想を大きく上回り、400人近く来場していたそうです。残念ながらメインの会議室(管制室中継あり)は入館直前で満席になってしまったとのことで、展示室側に席を陣取りました。
進行スタイルとしては、「宇宙教育テレビ」と称したテレビ番組のようです。なので、MCのおにいさんとおねえさんがJAXAのTシャツを着て座っています。脇には大型のディスプレイも設営され、観覧席からもいろんな情報が見えるようになっていました。
プレスもいろいろ来ており、テレビカメラや新聞などのメディアがいたようです。


コスプレイヤーまで現れました。この方、あとでインタビューされていたのですが、兵庫から来たそうです!登場したころはまだはやぶさは高度7万km近くを飛んでいたのですが、一足先に「おかえりなさい!」といったところでしょうか。

twitter端末がMC席になく、観客のほうが先に各種イベントに気付いていたのが残念でしたが、みんなでワイワイ楽しむのはやはり楽しいですね。研究所を後にしたのは夜11時半過ぎでしたが、ちょっと無理してでも行って正解だったと思います。

2010/06/11

ACTPrinter

こんなものを教えてもらいました。

ACTPrinter

PCにインストールするとPDFライターとして機能するのですが、その出力先がiPhoneとなるそうです。
こんな時に便利そうですね。
・書類を持ち出したいけど荷物を増やしたくない時
・急いでいるのに用紙orインクが切れている時
・持ち出そうと思ったらデータがA3版で作成されていた時
・気になったものは「とりあえず印刷」してるけど、それが積み上がって忘れたこと数知れず、と気付いたとき

まだちゃんと読んでないですが、iPhone上ではどうやって見るんでしょうねぇ。気になります。

2010/06/10

smtp-authの認証バックエンドをdovecotにしてみる

postfixでsmtp-authを利用するのに、以前の知識ではsaslpasswdを使った認証方法しか知らなかったんですが、どうも認証バックエンドにdovecotが使えるようなので、それを試してみました。

というのも、パスワード管理をするのに、dovecotとsaslpasswdで別なのも気持ち悪いし、ましてやアカウント情報となると、これにさらにpostfixが加わるので、いちいち設定なんぞしていられない状況なわけです。
とりあえずpostfix側の設定(必要な部分)はこんな感じです。smtpd_sasl_typeでdovecotを選択し、smtpd_sasl_pathで問い合わせ先を(後で作る)dovecotのソケットに向けます。あと、 smtpd_recipient_restrictionsでちゃんと制限もちゃんとかけておかないと、儀式だけのsmtp-authになっちゃいますの でご注意(笑)。
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain = $mydomain

んで、dovecot.confの側はこんな感じ。ファイルソケットを作って待ち受けるのがミソですね。この環境では認証データベースをpasswdにし ているので、他の認証バックエンドを使いたい方は、適宜調整するといけるかもしれません。
auth default {
mechanisms = plain login
passdb shadow {
args = /etc/shadow
}
socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}

2010/06/09

NetScreenセッションアナライザ

NetScreenのセッションアナライザなるものを見つけました。

NetScreen Session Analyzer
http://www.juniperforum.com/index.php/topic,3656.0.html

これに"get session"の結果を投入することで、集計ぐらいはできるようになりました。
細かい分析は難しいにせよ、手軽に集計を取ることぐらいはできそうですね。