2000-10-31(火) [長年日記]
■ EMS
おれのVisorは、10/28の14:35に「arrived」したらしい。もちろん我が家にはまだarriveしてないんだけど。日本国内で3日もさまよっているのだろうか。謎が多いぞ、EMS。
■ AERA
AERAなんて初めて買った。まつもとさんが載っているからなんだけど、表紙が白川博士じゃなかったら立ち読みで済ましたかも(笑)。でもまぁ、たとえどうしょもない駄洒落だけで有名な(笑)AERAでも、一般誌に載るなんてすごい。さすが我らがカリスマ。いや、カリスマってのとは違うよなー。教祖とも違うし(笑)。うまい肩書きを探しておこう。
■ USB
さて今日は、別の事務所に行ったので、我らが散財大王small様にRio500を持ってきてもらって、USBのテスト。例のSOTECの安マシンで、「KondaraのKernel 2.2のままでRio500を使うテスト〜」。まずはドライバのロード。
# /sbin/insmod usbcore Using /lib/modules/2.2.16-5k/usb/usbcore.o # /sbin/insmod usb-uhci Using /lib/modules/2.2.16-5k/usb/usb-uhci.o # /sbin/insmod rio500 Using /lib/modules/2.2.16-5k/usb/rio500.o
■ あら。すっきり入りましたな。やっぱうちのマシンはおかしいんだ。
続いてrio500関連のツールをdownload。RPMがあるのでささっと入れて、ドキュメント……がないし。でも/usr/local/bin/に、rio_hogehogeというコマンドが数個入っている。名前からだいたい想像がつきます。試しにRio500を接続して電源ON。たぶん内容をリストしてくれるであろうrio_statコマンドを実行してみたら、あっさり中身がリストされる。あらー。動いちゃったよ。簡単すぎ。てことは、うちのBD100はBIOSをアップデートしなきゃいかんわけね。でもって、動いたら500を買わないと。わー、予定外の出費じゃないかー。いいんだか悪いんだか……。
2000-10-30(月) [長年日記]
■ アジアカップ
アジアカップ決勝。すげー危なかったけど、勝ててよかった。柳沢が出てきたときはどうしようかと思ったけど(←お約束のコメント)。MVPは川口だな。だてにオールバックじゃないね。昨日は札幌もとうとう優勝を決めたので、かみさん秘蔵のシャンパンを開けようか……って話になったんだけど、飲んだら最後、翌日の出社はないよな、ってことで延期。来週、川崎がナビスコで優勝したら開けよう(関連なし)。なんにせよ、ちゃんと出社した自分をほめてあげたいです。
■ biff
いままで、fetchmailのログ出力先を/dev/consoleにして、xconsoleで眺めていたいんちきbiffだが、もうちょっとマシにしたくなったので作ることにした。こういうチマチマしたもんばっかり作ってるな、最近。いわゆる普通のbiffは、メールサーバーにアクセスして新着メールを監視するものだけど、ウチの環境はメールが届くと同時にprocmailが振り分けちゃうので、サーバーに溜った時点ではもう遅い。ISPからfetchしてきたと同時になんらかのアクションを起こさないといけない。タイミングとして一番いいのは.qmailで、メールからSubjectを抜き出すフィルタを作って、その出力を……どこに出そう?
フィルタはメール1通ごとに起動されるから、その出力はどこか別のプロセスで一括して表示しないといけない。プロセス間通信を使えばよろしい。今回は同じマシン上なので、UNIXソケットを使うことにしよう。使い方、イマイチよく知らないけど(笑)。表示側アプリ(サーバー)は、Ruby/Gtkでいい。汎用にするために、来たモノはなんでも表示する汎用コンソール(myconsole)。
#!/usr/bin/ruby -KE
require 'socket'
require 'thread'
require 'gtk'
include FileTest
SOCKET = "/tmp/myconsole-#{ENV['USER']}"
File.delete( SOCKET ) if exist?( SOCKET ) and socket?( SOCKET )
$gs = UNIXServer.open( SOCKET )
Thread.start do
loop do
ns = $gs.accept
Thread.start do
sock = ns
while l = sock.gets
$log.insert( nil, nil, nil, "\n" + l.chomp )
end
end
end
$gs.close
end
window = Gtk::Window.new( Gtk::WINDOW_TOPLEVEL )
window.set_title( 'my console' )
window.signal_connect( 'delete_event' ) do false; end
window.signal_connect( 'destroy' ) do exit; end
logvadj = Gtk::Adjustment.new( 0, 0, 0, 0, 0, 0 )
$log = Gtk::Text.new( nil, logvadj )
logvscroll = Gtk::VScrollbar.new( logvadj )
log_box = Gtk::HBox.new( false, 0 )
log_box.pack_start( $log, true, true, 0 )
log_box.pack_start( logvscroll, false, false, 0 )
window.add( log_box )
$log.show
logvscroll.show
log_box.show
window.show
window.set_usize( 8, 8 )
Gtk::main
■ クライアント側のフィルタは単純にこんな感じ(biff)。
#!/usr/bin/ruby -KE
require 'socket'
require 'nkf'
head = ARGF.gets( "\n\n" )
subject = nil
head.each do |line|
if /^Subject:\s*(.*)$/ =~ line then
subject = $1
elsif subject
if /^\s+(.*)$/ =~ line
subject += $1
else
break
end
end
end
if subject then
subject = NKF::nkf( '-e', subject )
else
subject = 'no subject'
end
begin
SOCKET = "/tmp/myconsole-#{ENV['USER']}"
sock = UNIXSocket.open( SOCKET )
sock.puts subject
sock.close
rescue Errno::ECONNREFUSED
end
■ 出力には差出人を加えてもいい。表示させる必要のないメールを判断してスキップするようなプラグインを加えられるようにしてもいいな。
あとは、.qmailに「|biff」って行を追加するだけ。セッションの始めにmyconsoleを起動して、(sawmillの設定でタイトルバーとかを消して)画面の隅においておけばよろしい。動作状況はこんな感じ。ああ、こんなに簡単ならとっととやればよかったじゃん。
しかしなんだ。いまうちではfetchmailがメールを1通fetchすると、qmail-ほげほげが走り(←何が走るのかよく知らない)、procmailが走って振り分けをし、さらにメーリングリストの場合はdispatchがバックアップを取り、ものによってはcut-egroupsがeGroupsの広告を削ってからqmail-ingectを呼び出し、さらに今日からbiffも走るという状態だ。メール1通につきプロセス6個も消費してるし。お大尽な話だなぁ、こりゃ。こういう工夫を自力でどんどん追加できちゃうのって、UNIXならではの楽しみでやんすな。
2000-10-29(日) [長年日記]
■ 巨人が勝ったそうで。いや、どうでもいいんだけどね、プロ野球面白くないし。今日のスポーツのトピックスは、「世界二輪GP 250ccクラスで、中野がゴール100m手前でチャンピオンを逃す」と「サッカー日本代表、アジアカップで優勝(予定)」でしょう。それにしても、今日の決勝を最後まで見たら、明日の出社はないような気がする……。
■ mph-get
Ruby 1.6化の余波がまだ続いている。こんどはmph-get。libmphget.rbがrequireできないと言って動かない。調べてみるとこのファイル、/usr/lib/ruby/1.4/にあった。標準ライブラリでもないモノを、こんなところに入れてはいけません。ということで、/usr/lib/ruby/site_rubyに移動して事なきを得る。んで、mph-get upgradeをかけたら、Apacheが1.3.14に上がっていた。が、mphのヤツ、ついでにRubyを1.6.1→1.4.6にバージョンダウンしようとしてrpmの実行でコケる。あうあう。なんで、古いパッケージで上書きするのがデフォルトなんだろう。今入ってるのが新しかったら無視するのが普通の動作って気がするが。
まぁいい。最近の(?)mph-getには、holdってコマンドがあるのだ。holdされたパッケージは、アップグレードの対象から外してくれる。これにRuby本体と、それに依存するmod_ruby、ruby-ebを加えておこう。
$ sudo mph-get hold ruby mod_ruby ruby-eb $ mph-get hold reading database... H kondara-backgrounds: 1.2-1k H mod_ruby: 0.1.8-5k H ruby: 1.6.1-1k H ruby-eb: 1.4-0vl1
■ これでよし。kondara-backgroundsがhold対象とは知らなかった。
■ それにしても、同じように拡張ライブラリが1.4依存のディレクトリに入ってるんじゃないかと思って調べてみたら、Ruby-EbやRuby/Gtkも1.4/i586-linuxに入っているのだった。うーん、ソース直してリビルドするしかないのか、これは。
■ USB
Rio300の電池蓋がそろそろ寿命。落として蝶番が割れちゃったのをだましだまし使ってきたんだけど、使ってるうちに勝手に開くようになってしまった。rioコマンドでLinuxから順調にデータを送れるようになってるので、乗り換える気がしないんだけど。もちろん、Kernelが2.4になればUSBが普通に使えて、rio500が使えるようになるはずで、そしたら500を買ってもいいんだが(600は見た目はいいけど電池交換がやたら面倒だから却下)。
Yahoo!オークションで300をGETすっかなー、などと考えつつ情報収集をしていたら、Kondaraのページでこんなドキュメントを発見。そうか。KondaraでKernel 2.2のままUSBを使うってのもアリ? じゃあちょっとやってみましょう。
# /sbin/lspci | grep -i usb 00:07.2 USB Controller: Intel Corporation 82371AB PIIX4 USB (rev 01)
■ Intelですな。それでは
# /sbin/insmod usbcore Using /lib/modules/2.2.16-5k/usb/usbcore.o # /sbin/insmod usb-uhci Using /lib/modules/2.2.16-5k/usb/usb-uhci.o /lib/modules/2.2.16-5k/usb/usb-uhci.o: init_module: デバイスもしくはリソースがビジー状態です
■ あれ? ちょっとリブートしてみる? ……ダメだ。やっぱりな。実はこのマザーボード(Iwill BD100)、Windows 98でもUSBが使えなかったといういわく付きなのだった(笑)。たぶん、BIOSをアップデートすればいいんだろう。ちょっと考えておこう。その前に、会社のKondaraマシンで実験すべぇ。
しかし、Rioもそうだけど、おれってけっこう新しいモノに飛びつくくせに、そのあとはすごく保守的と言うか、古いモノを大事にしちゃうって言うか。Rioは最初の300を発売日に買ったのに、世間はいまや600だ。デジカメなんて、最初はあのCASIO QV-10をやはり出てすぐに買ったのに、今使ってるのは85万画素のSANYO DSC-X110。最新型はその4倍の画素数だっつーのに。Palmも、3年近く前にpilot5000を買って以来、故障でしかたなくPalmPilotに乗り換えただけで、やっと最近新型を買う気になったし。バイクもそうだよなぁ。カブは流行る前から乗ってるのに、もう12年も同じマシンだ。変なヤツだ、我ながら。