でもイメージトークしててもしょうがないので本当にリトライが発生しているのかtcpdumpで調べてみたんだけど、なにせ情報量が多過ぎる。
そんでtcpdumpの情報の解析方法を調べているうちにmiruoってのを見つけて、使ってみたら便利だったのでご紹介。
miruoはDSAS開発者の部屋の「高負荷サイトのボトルネックを見つけるには」で使い方とかも含めて紹介されています。
ダウンロードは↓からどうぞ。
TCPセッションモニタ「miruo」
これは便利だ。
% echo ^[cでも、単純に「echo スペース ハット ブラケット c」って打ってもだめです。
expr $val : 'foo\|bar\|baz'でOK。 でもMac OS X 10.6.3のexprはだめでした。方言があるっぽい。 ちなみにifで使うとしたら
if [ expr $val : 'foo\|bar\|baz' ] then ... fi
if [ "x$val1" = "xfoo" -o "x$val2" = "xbar" ] then ... fiでOK。「-o」なんですね。 一生懸命「||」って書いてました...。
自分はずっと環境変数TERMにvt100を設定していたのですがvt100だとemacsとか使ったときに色が付かないというのがあってここしばらくはxterm-colorを設定していたんです。
でも、xterm-colorだとAlternate Screen Bufferといって、lessやmanやviなどの使用時に使う前の画面状態を覚えておいて、それらが終了したときに元の画面に戻すという機能あって、それがが有効になってしまい、これをどうやったら回避できるのかずっと悩んでいました。
これが有効になってると、直前まで見てたファイルを参考にコマンドを打ったりしたいのにそれが消えてしまい開発効率半減、いや半減以下になってしまうのです(個人的に)。
ということで昨日ずっとその解決法を探していたら、やっとみつけました。
http://slashdot.jp/~doda/journal/438524
詳しくは上記のページを参照してほしいのですが、やり方としては
% infocmp > xterm-color.ti
と、やって現在のterminfoを出力して「rmcup=ふんふん,」と「smcup=ほんほん,」の部分を削除。
% tic -o $HOME/.terminfo xterm-color.ti
とやることで、ホームディレクトリに.terminfo/というディレクトリが出き、その中に編集したterminfoの設定が生成されます。
これでいまわしきAlternate Screen BufferがOFFになるというわけです。
ちなみに自分はtermcapの方は設定してませんが今のところ問題ありません。
でも、termcapを見るソフトだとそちらも設定だめかもしれませんね。
もし今後困ったらそっちも設定してみようと思います。
% ls ~ Desktop/ Library/ Music/ Sites/ public_html/ work/ Documents/ Mail/ Pictures/ dev/ shipit-dist/ Downloads/ Movies/ Public/ local/ tmp/tmpの中はカオスです。 あと仕事系は work/ に、自分で小ネタとかは dev/ に収めてます。
% ls ~/dev AppleScript/ apache/ c/ elisp/ github/ quicksilver/ SIMBL/ appengine/ chumby/ flashlite/ iPhoneApp/ ruby/ actionscript/ arduino/ coderepos/ flex/ oauth/ android/ as2/ ec2/ gisty/ perl/こっちもややカオスですね。
# cpan App::SocialSKKこの際 socialskk.pl も同時にインストールされます。
plugins: - name: SocialIME - name: HatenaBookmark - name: Wikipediaこんな感じに書く。
料理のススメ:これから料理をしようと思っているひとへ - Money does not hurt your heartってでた。はてブからうまく取れてるようですね。
package App::SocialSKK::Plugin::ZipCode;
use strict;
use warnings;
use base qw( App::SocialSKK::Plugin );
use XML::Simple ();
use URI;
use Encode ();
sub get_candidates {
my ($self, $text) = @_;
return if !defined $text || $text !~ /^\d{7}$/;
my $uri = URI->new( 'http://zip.cgis.biz/xml/zip.php' );
$uri->query_form( zn => $text );
my $res = $self->ua->get( $uri->as_string );
if ($res->is_success) {
eval {
my $xml = XML::Simple::XMLin(
$res->content, ValueAttr => [ qw(state_kana city_kana address_kana company_kana
state city address company) ]
);
my @candidates;
for my $seq ( [ 4..7 ], [ 0..3 ] ) {
my $val = join( '', map {
my $v = $xml->{ ADDRESS_value }->{ value }->[ $_ ];
$v ne 'none' ? $v : '';
} @$seq );
push @candidates, Encode::encode(
'euc-jp',
Encode::is_utf8( $val ) ? $val : Encode::decode( 'utf8', $val ),
);
}
return @candidates;
};
}
}
1;
__END__
=head1 NAME
App::SocialSKK::Plugin::ZipCode - Retrieves Candidates from Zip Code API
=head1 SYNOPSIS
# Add a line like below into your .socialskk:
plugins:
- name: ZipCode
=head1 DESCRIPTION
App::SocialSKK::Plugin::ZipCode performs retrieval of
candidates from Zip Code API
=head1 SEE ALSO
=over 4
=item * Zip Code API
http://zip.cgis.biz/
=back
=head1 AUTHOR
Yoshiki Kurihara E<lt>kurihara __at__ cpan.orgE<gt>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>socialskk</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/socialskk.pl</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/dev/null</string>
<key>StandardOutPath</key>
<string>/dev/null</string>
</dict>
</plist>
sbinのsってなんだろうと気になったので調べてみた。
結論から言うと下記のようにSystem BINaryのことでした。
Wikipediaのこの辺にも書いてありますね。
http://momox.net/blog/2007/02/bin_sbin_lib_libexec.html
<ディレクトリ名の意味>
bin -- binary 実行可能なプログラムのこと。
sbin -- system binary システム管理者が主に使用するプログラム。
lib -- ライブラリ--同じ階層のbinとかsbinのプログラムが使う関数(プログラムの断片)
libexe -- プログラムが使うプログラム
よくサービスとかパッケージのディレクトリ内でbinとsbinって作って使い分けてたりするけど自分の中でいまいちその棲み分けができていない。
cronとかに設定するのはsbin?
コマンドラインで実行するのはbin?
とかばっくり自分基準があるけど、この基準も合ってるか怪しい。
こんな基準のやってるよ!ってのがあったら教えて欲しいです。
あとlibexecとかもあるけど、これもなにを置くか微妙で「プログラムが使うプログラム」はこの中みたいですね。ぱっと思いつくので言うとmysqldとかがlibexecに置いてあったりしますね。
% date -v-1d
% date --date '1 days ago'
% date -v-1d +%Y%m%d
% date --date '1 days ago' +%Y%m%d
% date -j -v-1d -f %Y%m%d 20081201 +%Y%m%d
% date --date '20081201 1days ago'