〜2003年2月下旬〜
というわけでdjgppのバイナリはここ1ヶ月ほど実行できないものになってた。 が、誰も文句を言う人がいないというのもなんだな。
1.6は簡単だった。1.8で試そうとしたらPragProgRubyはまだ1.7.3だった。 で、同じようにrbconfig.rbをでっちあげて、win32oleで試してみるとリンクでこける。
Cannot export .idata$4: symbol not found Cannot export .idata$5: symbol not found Cannot export .idata$6: symbol not found Cannot export .text: symbol not found Cannot export msvcrt-ruby17_NULL_THUNK_DATA: symbol not found
どうもmsvcrt-ruby17.libをリンクするとこうなるようだ。 1.6だと大丈夫なのはdllwrapだからか。くー。 msvcrt-ruby17.libからlibmsvcrt-ruby17.dll.aを作るのは簡単だから、 別に用意するかな。
% printf 'NAME msvcrt-ruby17.dll\nEXPORTS\n' >x.def % nm -g --defined msvcrt-ruby17.lib |\ sed -n '/00000000 I __imp__/s///p' >>x.def % dlltool --def=x.def --output-lib=libmsvcrt-ruby17.dll.a
てな感じで。これを$(libdir)へコピーすればokだ。 あとはインストーラ作って1.8で試してみよう。
メッセージをよく見るべきだった。
Cannot export .idata$4: symbol not found
なんだからexportが関連してる。つまり--export-all-symbolsがいけないわけだ。 これを外せばちゃんとDLLを作ることができた。 というわけで、CONFIG["LDSHARED"]から削除。 問題はerubyがdefファイルを作らないからエラーになることぐらいかな。
--exclude-sym='.idata$4,.idata$5,.idata$6,.text,^?msvcrt-ruby17_NULL_THUNK_DATA'
をldへ渡せれば--export-all-symbolsのままでもいいが、 ^?は実はDELコードなのと、gccから,を含んだ引数をldへどうやって渡せばいいかわからん。 さすがにこんなところまでquoteできるようにはなってない。 あ、何がまずいかというと、たとえば
-Wl,--exclude-sym='.idata$4,.idata$5'
とgccの引数で指定するとldには
--exclude-sym=.idata$4 .idata$5
が渡ってしまう。やっぱ個々にばらすしかないか。
-Wl,--exclude-sym='.idata$4',--exclude-sym='.idata$5'
ならokだった。くー。美しくないがこれでいこう。
と思ったら$はmakeに食われてしまう。2個必要だ。 msvcrt-ruby17_NULL_THUNK_DATAもversionに合わせて変更しなきゃいけないな。
そうそう。msvcrt-ruby17.dllを直接リンクすると問題ないんだよね。 ってことは-L$(bindir)が最初に来るようにすればいいだけの話か? DLDFLAGSに追加しよう。なんだいけたじゃん。
1.6で試すとbindirがMakefileで定義されてない。 しょうがないから$(prefix)/binで代用。なかなかうまくいかないもんだな。 いやいや、1.6はdllwrapだから追加しなくてもいい。
NACK5を聞いていると椎名林檎の例のアルバムが今日発売らしい。 「茎」を中心にシンメトリになっているということなので、 曲目を調べてみる。
1.宗教 2.ドッペルゲンガー 3.迷彩 4.おだいじに 5.やっつけ仕事 6.茎 7.とりこし苦労 8.おこのみで 9.意識 10.ポルターガイスト 11.葬列
なるほど。
漢字 カタカナ 漢字 ひらがな ひらがな+漢字 漢字 ひらがな+漢字 ひらがな 漢字 カタカナ 漢字
でしかもちゃんと対応する文字数も同じだ。 CCCDだから買うことはないが。
気になって他のアルバムも調べたら「勝訴ストリップ」もシンメトリだ。 文字数を見てみると一部例外がある。ということは今回はそこも徹底したわけだ。
これは面白い。
SHFS is a simple and easy to use Linux kernel (2.4) module which allows you to mount remote filesystems using plain shell (ssh/rsh) connection. It supports some nice features like number of different caches for access speedup, target system optimisations, etc.
インストールすれば
% mkdir ~/helium % sudo shfsmount -u watanabe helium/home/eban ~/helium
でアクセスできるようになる。-oでuidとgidを指定すればファイルのownerも問題なし。 でも頻繁に
% ls ls: .: Stale NFS file handle
となってしまうなあ。
そういえばLUFSというのも freshmeatでよく見かける。READMEには
sshfs, ftpfs, localfs, locasefs, gnutellafs, gvfs, cardfs, cefs
とある。sshfsを試したがSEGVになってしまった。うーむ。
特命リサーチ200X-2を見てたらナイジェリアからのspamで騙される日本人が増えてるらしい。 というわけで今月のspamを調べてみた。
CMAIL_DELIMITER = "\C-_\C-L\n" ARGV.each do |file| print File.basename(file), ':' total = 0 nigeria = 0 open(file) do |fh| while message = fh.gets(CMAIL_DELIMITER) total += 1 nigeria += 1 if message =~ /nigeria/i end end print nigeria, '/', total, "\n" end
を実行してみると
spam:40/368
と出た。1割強もあるのか。今月も相変わらずのペースで来てるねえ。
ruby-bugのSpamAssassinの結果をよく見ると
BODY: Nigerian scam key phrase
とあった。 SpamAssassinがspamかもしれないと判断したものは今のところ100%spamだ。 そろそろruby-bugsへ流さなくてもいいんじゃないかなあ。
urimethodmapを使って w3m ruby-list:10000 と実行すると
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/10000
へ飛ぶlocal cgiを書いてみようと思い立つ。が、実質1行だった。
% cat ~/.w3m/cgi-bin/ruby-ml.cgi #! /bin/sh blade='http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby' echo w3m-control: GOTO $blade/${QUERY_STRING/://}
$QUERY_STRINGには ruby-list:10000 が入っているので:を/に変換している。sedを使う必要もなし。 あとは~/.w3m/urimethodmapに
ruby-list: file:///cgi-bin/ruby-ml.cgi?%s ruby-dev: file:///cgi-bin/ruby-ml.cgi?%s ruby-ext: file:///cgi-bin/ruby-ml.cgi?%s ruby-math: file:///cgi-bin/ruby-ml.cgi?%s ruby-talk: file:///cgi-bin/ruby-ml.cgi?%s ruby-core: file:///cgi-bin/ruby-ml.cgi?%s
を追加すればokだ。 ruby-ml.cgiは~/.w3m/configのcgi_binで指定したディレクトリに置く。
raaも同じように作れる。
#! /bin/sh url='http://raa.ruby-lang.org' name=${QUERY_STRING##*:} echo w3m-control: GOTO $url/${name:+list.rhtml?name=$name}
これでw3m raa: なら http://raa.ruby-lang.org/ へ、w3m raa:fooなら http://raa.ruby-lang.org/list.rhtml?foo へ飛ぶようになる。
更新。
やっぱこっちも % w3m ruby-list: でアクセスしたくなった。
#! /bin/sh blade='http://blade.nagaokaut.ac.jp' ml=${QUERY_STRING/://} case "$ml" in */) echo w3m-control: GOTO $blade/ruby/${ml}index.shtml;; *) echo w3m-control: GOTO $blade/cgi-bin/scat.rb/ruby/$ml;; esac
ってなぜRubyで書かない?
カーネルをmakeしたときとは違うversionのGCC 3.2.2でmakeしたのがまずかった気がする。 GCC 2.95.3でmakeしなおそう。
/usr/lib/liblufs-sshfs.so: undefined symbol: cerr
なかなか上手くいかない。
更新。
自分で使うもの。リクエストされたもの。RAAでよく見かけるもの。ぐらいかな。 他にライブラリが必要だと優先順位は下がります。あとサイズが大きいのも。 ADSLになったからサイズはもうどうでもいいけど。
Ruby/JSは明日にでも。
来週の月曜日だから今週末にはprefix対応を入れないと。
今月も終わりに近づいてかなりspamもたまったので bsprocを使ってBayesian Filteringしてみよう。 とりあえず日本語とか考えずに今月手で整理したspamとruby-talkでindexを作る。
% bsproc -i -t ~/cmail/spam -c ~/cmail/ruby/ruby-talk.*
現在~/cmail/spamは417通。え?もう400越えてるの?それはそれとして、 このindexを使って~/cmail/spamをばらばらにして試すと365通がspamと認識された。 spamじゃないと認識されたのは、日本語、ドイツ語、何語だかわからないのと、 非常に短かいもの。なかなか大したもんだ。 不思議なことに韓国語とか中国語のspamは全部spamと認識されてる。
indexを作るときにやけに速かったなと感じたので、 コマンドラインを確認してみた。
% bsproc -i -t ~/cmail/spam -c ~/cmail/ruby/ruby-talk.*
うーむ。-cはこれだと最初にマッチしたものだけが有効になってしまう。 結局spam(417通)とruby-talk.0007(221通)だけを処理してたのか。 面倒なのでzshの機能を使い
% bsproc -i -t ~/cmail/spam -c =(cat ~/cmail/ruby/ruby-talk.*)
としてみたら、Out of Memoryになってしまった。 とりあえずここ半年ぐらいで手を打つことにしよう。
% bsproc -i -t ~/cmail/spam -c =(cat ~/cmail/ruby/ruby-talk.{021*,03*})
で作ったindexでspamの検査すると416/420になった。おぉ。 検出できなかったのは、 何語かわからないもの、生のSJIS、普通の日本語のspamが2通だった。
今月のruby-listで試すと7通がspamと認識された。 見た感じではjavascriptとかhtmlを含んだメールは高くなってるようだ。 verboseモードで確認してみると
List-Owner 0.05215419501133787 $$$ 0.99 List-Unsubscribe 0.07522123893805309 List-Id 0.05215419501133787 List-Software 0.05215419501133787 Posted 0.05215419501133787 $B$ 0.99 ISO-2022-JP 0.9114456709487061 iso-2022-jp 0.9475206289558674 $7$ 0.99 List-Post 0.06487695749440717 yahoo.co.jp 0.9703483010569625 unsubscribe 0.07522123893805309 List-Help 0.06487695749440717 $5$$ 0.99
と、日本語を構成してる要素がことごとく高くなってしまっている。 やはりなにも考えないのは無理がある。 当然といえば当然の結果ではあるが、 yahoo.co.jpが高くなっているのには笑った。
rubyのprefixも/tmp/$USERということなら
% /tmp/$USER/bin/ruby extconf.rb --with-js-dir=/tmp/$USER
で、いけそうな気がします。