Skip to main content

ログ取得ツール

外部フィルタ

Apache HTTP Serverに、mod_ext_filter.soというのがある。まだexperimentalということでパッケージ化のときに収録していないことも多いだろう。ソースからmod_ext_filter.cをもってきて、apxs -c mod_ext_filter.c -o mod_ext_filter.so -sharedでコンパイル、apxs -i mod_ext_filter.soでインストールできる。 この拡張モジュールは何をするかというと、外部プログラムのフィルタを使えるのだ。sedもawkもperlも、なんでもアリだ(いいの?)。httpd.confでいろいろ設定すると何でもかますことができる。今のところはOutputFilterのみ。 これを見て思ったのは、むかしあったよなー、大阪弁フィルタ(yorosiku.net)、ということだ。これを噛ましてみようではないか。

LoadModule ext_filter_module modules/mod_ext_filter.so
<IfModule mod_ext_filter.c>
  ExtFilterDefine osaka-text mode=output cmd="/some/path/to/osaka"
</IfModule>

で、.htaccessやブロック等で

<IfModule mod_ext_filter.c>
AddOutputFilter osaka-text .html .htm .php
</IfModule>

などのようにする。ApacheのAddOutputFilterというのはすでにあるフィルタに追加するように見えて上書きしてしまうようで、PHPやCGIやSSIなどをOutputFilterで設定して使っている場合は、AddOutputFilter PHP;osaka-text .phpなどといちいち書かなければならない(Fedora Core 1のはAddType application/x-httpd-php .phpとなっていてSetOutputFilterではない)。 で、VirtualHostを使って大阪弁フィルタをかましてみた(現在はやっておりません)。 くだらん。 experimentalということもあって、けっこうセキュリティ上の問題があるのかもしれないし、検索にosaka側がひっかかって見に来た人が激怒したらどうすんの、とかいろいろあるよね(笑)。

Suicaで明日へのゲートが開く?

携帯電話でSuica、2005年度後半に JR東日本(itmedia.co.jp)。カードだけではICつけた甲斐がない、という。

JR東日本は4月13日、非接触型ICカード「Suica」の機能を搭載した携帯電話サービス「モバイルSuica」を、2005年度後半に開始すると発表した。

電車、買い物、脱カード型。そして次は何であるべきか。 ここは一発、Suicaで等々力のスタジアムに入れるようになって欲しいところだ。ピッ! でも前売りのほうが安かったりするわけだし、後援会の会員かどうかの情報(やっぱ割引のため)をSuicaごときに入れるのは抵抗がある。シーズンチケットの場合は定期みたくなるのかな。 定期のシステムはいいね。買い物Suicaはジュース定期やパン定期にもなります、みたいな。おれはたぶん、リカルデントガム定期にするけど。 ところで私のはいまだにペンギンSuicaに変身できない。メニューに交換が出てこないってことはすでにペンギンの機能は入ってるってことかな。窓口で聞いてみないといかんのだが、いつも並んでるので。

記憶の片隅

Linux/IA32のmallocは一度に2GB弱まで。2GB「弱」というのは、2GBは取れないからだ。2GB制限の理由はずいぶん前にも見たことがあるこのへん(sse.co.jp)を参照のこと。これはファイルサイズの2GB制限と違って時代錯誤的なことではなく、現実に起きて納得の現象だ。そんな制限を承服するかどうかは考え方次第だ。 ではmallocではなくstaticな配列なら2GB以上取れるのか? 同じくらいのサイズまでしか取れないのです。

char mem[1024*1024*1024*2];
int main(int argc, char **argv){}

gcc曰く、「警告: 式の整数がオーバーフローしました」「配列 mem' の大きさが負です」…そうかintだから駄目なのか、と思ってunsignedにキャストすると正しい警告が出る。曰く、「配列 mem’ の大きさが大きすぎます」「`mem’ の領域サイズがわかりません」。 しかしgccが配列のサイズで文句を言うのは気に食わん! 1GBで配列を取ってコンパイルし、アセンブラコードを直して

        .comm   mem,1073741824,32
        .section        .note.GNU-stack,"",@progbits
                           ↓
        .comm   mem,1073741824*2,32
        .section        .note.GNU-stack,"",@progbits

これでコンパイル、リンクは成功する。で、できたバイナリを実行するとsegmentation fault。デバッガからも起動できない…そんなのはあたりまえだ(笑)。 じゃmmap(2)は? /dev/zeroへのmmap(2)を使えばメモリを確保できる。やはりこれも2GB制限があるのだ。MAP_FAILEDが返ってきて、Cannot allocate memoryと言われる。 スタックの場合は実はアセンブラコードを直すと2GBを越えられる。どっかでオーバーフローしてマイナスになっちゃってるのかもしれないし、たぶん動作はしないだろう。ただ、確保する(したつもり)だけでは落ちない。 …我ながら意味のないことばかりやってるな。

名前の問題

swigメモ。いつか問題が解決するだろうと信じている。 ライブラリって、swigでPythonからも使えるようにするじゃん。このとき、小さいライブラリだと、「ライブラリの名前=モジュールの名前=唯一の構造体の名前」っていうことも珍しくない。例えば"name"だとすると、C側の関数名もname_func1()にするでしょ。こうしたときに、ややこしいから整理すると、

typedef struct name{
  int member;
}name;

name *name_init(int id);
void name_exit(name *arg);
int name_func1(name *arg);
int name_func2(name *arg, int arg2);

がname.hで定義されているとする。これをswigのソースname.iで

// swig -python name.i
// gcc -c name_wrap.c -I/usr/include/python2.2 -I.
// gcc -shared name_wrap.o -lname -L. -o _name.so
%module name
%{
#include "name.h"
%}
%include "name.h"

とするとする。使っている側のココロとしては、

if a=name.init(100):
  a.func1()
  a.func2(1)

だと思う。しかし実際できあがってみると、

if a=name.name_init(100):
  name.name_func1(a)
  name.name_func2(a, 1)

という悲しい状況になる。これを回避するための方法は%renameを使う方法である。name.iで

%rename(init) name_init;
%rename(func1) name_func1;

などとしておくと、

if a=name.init(100):
  name.func1(a)
  name.func2(a, 1)

まではとりあえずあっさりスッキリシャッキリするわけだ。しかしaというオブジェクト、おまえはどういうつもりなのか。C struct以上の機能はないのか。そこで、name.iにこう書き加える(name構造体がPythonのクラスになったものにメンバを追加する)。

リスク回避

宮里藍のプロテスト実技を免除=女子ゴルフ(yahoo.co.jp)。この措置には誰も文句をつけないだろう。

日本女子プロゴルフ協会(LPGA)は12日の理事会で、宮里藍のプロテストについて実技テストを免除することを承認した。宮里は今季ツアー開幕戦のダイキンオーキッドレディースでツアー2勝目を挙げており、過去の戦績から、実技は十分免除に値すると判断した。

まあ、実技テストなんてさせて万が一にも落ちちゃったら、テストのほうが疑われてしまうよな(笑)。無用なギャンブルはせずに権威を守るべき。そういう面からも、当然な判断。

あべ晋三、コマンドラインを操る

安倍幹事長(s-abe.or.jp)の操作。あの人、何やってんすか。

[FRONTIER @ JAPAN] # su shinzo_abe
Password: ********
[FRONTIER @ JAPAN] # cd koizumi_cabinet
[FRONTIER @ JAPAN] # cd jimin_honbu ; grep "people_heart_jp.src" (ファイル名は切れている?)
[FRONTIER @ JAPAN] # ./configure ; make new_japan ; make install
[FRONTIER @ JAPAN] # ln -s /usr/local/bin/new_japan /usr/bin/new_japan
[FRONTIER @ JAPAN] # cp ./etc/great.cfg /etc/new_japan.cfg
[FRONTIER @ JAPAN] # chkconfig --level 2345 new_japan
[FRONTIER @ JAPAN] # top
[FRONTIER @ JAPAN] # I  (←マウスカーソルかも?)

とりあえずFRONTIERというのがホスト名かな。cdしても変わらないから、JAPANというのはディレクトリ名ではないよな。JAPANというユーザでログインしてたのかもしれない。そこからshinzo_abeにsuする、と。exit codeを表示しないように設定して、people_heart_jp.srcという正規表現にひっかからなかったようだ。ファイル名をぼかしたのはアレだろう、ヤバい機密のファイルだからだろうな。chkconfig使うってことはたぶんLinuxなんじゃないかと思う。 最後から2行目のtopで何を確認して、どのプロセスを殺したか。それが問題だ。でも;とかのところで空白を入れるのは律義だな。私はいつも入れない。 …だからどうしたって。 (追記) 2004-04-12 21:05 いやまあ普通に考えれば逆で、JAPANというホストにFRONTIERというユーザでログインしたんだろうな。FRONTIERS(fujitsu.com)ファンってこと…か?? むしろ、フロンティアレッツ(fujitsu.com)ファンってことかも?? (追記) 2004-04-13 22:49 書き忘れていた。パスワードは便宜上「*」で表示しているが、これは本来なら表示されない。しかしながら着目したいのは、8文字のパスワードを使っているということだ。古くからのUnixユーザなのだろうか(むかしUnixのパスワードは8文字までしか有効でなかったのだ)。

zshのバグ?

かなり前からそうで、マイナーバグだと思っていたのだが、今のバージョンでも起こるようだ。どこかに報告したほうがよいだろうか? zshで

 # cat =(df)

としてみてほしい。zshが戻ってこなくなる。ずっとRunning状態のまま。不思議なのは、cat =(df -T)だとOKだったりすることだ。 私はこの現象を説明できる気がしない。 zshを知らない人のためのメモ。=(cmd)というのはcmdの標準出力をテンポラリファイルに書き込んでファイル名を返します。なので、cat =(cmd)というのはcmdの標準出力をテンポラリファイルに書き込んで、catの引数にテンポラリファイルの名前を与えます。viとかは標準入力を編集できなかったりするし、複数のコマンドを書けるので、2つのコマンドの出力のdiffをとったりするときにものスゴく便利ですよ!! テンポラリファイルは当然のように勝手に消えます。偉い。 (追記) 2004-04-12 21:21 そうだ思い出した。=(cmd)を一番使うのはnetpbmを使うときだ。 pnmcat -lr =(jpegtopnm hoge1.jpg) =(jpegtopnm hoge2.jpg) =(pngtopnm hoge3.png)とかって。生活の知恵だ。良い子のみんなは覚えておこうね。 (追記) 2004-05-07 14:22 思いついてdfのaliasを解いてcat =(df)をやったらちゃんと戻ってきた。なんなんだろう。=(cmd)の中ではaliasが無限ループしてんのかな。私のdfはなんとなく以下のようにaliasしてある。

己の歯で時代を噛め

「このあたりで一番リカルデントガムを安く手に入れる方法」を探しに、昼休みに旅に出た。私としては、だいたい粒ガム1本を1日で噛み切るのがスタンダードだ。 昔よく行ってたドラッグストア、116円(ノーマル、バラのみ)。マルエツ、99円(シトラスミント、バラ)。しかしマルエツは3個パックが340円くらいなのでバラで買ったほうが安かった。シトラスミントは最近あまり売ってる店がないのでとりあえず10個購入。 普段のマルエツで99円で売ってくれるとは思えない。なんとなれば、ノーマル(シトラスミントじゃないほう)は120円くらいだったし、3個パックの値段づけから見ても99円が特異だったのだろう。以前綱島に住んでいた頃は、裏のダイクマでシトラスミント、ノーマルとも495円(税抜き)で5個パックを売ってくれていた。だいたいそこで1月に1度、5個パックを2つずつ買えば約2,000円/月で賄える計算になっていた。 ネットではどうだろうか。楽天では売ってないが、Yahoo!ショッピングで見つけた。特売屋。20個1,932円(税込)。これは安い。ただし送料(450円)、振込手数料(52円:JNB同士)もしくは代引手数料(200円)がかかる。…大量に仕入れない限り、利益はなさそうだ。 今度武蔵小杉で探してみようかな。そろそろリカルデントガム専用の店を見つけておきたい。シトラスミント・ノーマルとも安定的に供給してくれて、安くて、入りやすい店がいいなぁ。 (追記) 2004-04-12 21:06 しまった、忘れててまっすぐ帰ってきてしまった…