2005-05-06 (Fri) [長年日記]
_ Apache用全文検索モジュールmod_search_rast 0.0.1
全文検索システムRastをApache 2.0.xに組み込み、Webベースのサーチエンジンサービスを実行するモジュール mod_search_rast v0.0.1 をリリース。
[MODULE.JP - Apache用全文検索モジュールmod_search_rast 0.0.1より引用]
おお。
_ base64
どうもAction Web Serviceでは型に:base64を指定しても:stringに正規化されてしまうらしい。
def canonical_type_name(name) name = name.to_sym case name when :int, :integer, :fixnum, :bignum :int when :string, :base64 :string
当然、SOAP的にもxsd:base64ではなくxsd:stringとして公開されてしまう。 うーん、:stringとしておいて、サーバ/クライアントそれぞれで明示的にpack/unpack すれば一応バイナリデータを扱うことはできるけど、気に入らない。
Action Web Serviceって、実は、SOAPではあまり実績がないのかなあ。 ていうか、XML-RPCでも同じ問題があるのかも。 いや、そもそもXML-RPCにxsd:base64相当があるかどうかも知らないけど。
TODOを見ると、
- Don't have clean way to go from SOAP Class object to the xsd:NAME type string -- NaHi possibly looking at remedying this situation
なんて書いてあった。 なひさんにがんばってもらうしか!
2005-05-07 (Sat) [長年日記]
_ #31 (spam filter support)
実装する時間がないので、とりあえず、メモ。
- spamメールは`spam'メールボックスにインポート、本文はインデックスしない。
- 古いspamは適当にexpire
- `spam'メールボックスからメールが明示的に削除(つまり他のメールボックスに移動) されたら、hamとして学習させる。
- `spam'メールボックスにメールがコピーされたら、spamとして学習させる。
基本的に外部プログラムを呼び出すつもりだけど、プラグイン構造にしとけば bsfilterなどを組込みやすいかも。
_ ログのANSIカラーエスケープシーケンス
いつの間にか、ログにANSIカラーエスケープシーケンスが使われるように なっていた。 svnのコミットログを見るとけっこう前からそうだったみたいだけど、前はそうなって なかったような。 あ、Debianのパッチがデフォルトでオフにしてたのか。 やっぱり普通の感覚ではデフォルトはオフだよねえ。
ただ、lvの-cオプションでANSIカラーエスケープシーケンスを通すようにできることを発見したのは収穫だった。
$ lv -c log/test.log
しかし、うっとうしいな。
config/environment.rbに、
ActiveRecord::Base.colorize_logging = false
と書いてオフにできた。すっきり。
2005-05-08 (Sun) [長年日記]
_ #1272 ([PATCH] base64 support for Action Web Service)
とりあえず、base64が使えるようにしたパッチをtracに突っ込んでみた。 こんなんでいいのかしら。
_ rubyのHEAD対応
なひさんに指摘していただいていた、rubyのHEADで 動かなくなっていた問題を修正。 ついでに、anonymousでもticketを修正できるようにした。 これでパッチを受け取れる:)
ところで、Qtrue/Qfalseって(VALUEでなく)intの値として使ってもいいのかな。
今は、
#define Qtrue 2
だから問題ないけど、
#define Qtrue 2L
とかになるとまずそうだよなあ。たとえば、rb_exec_recursive()とか。
2005-05-11 (Wed) [長年日記]
_ 納期
いつの間にかすぐそこまで迫っている。
Railsに深入りしないように注意しよう。 WebサービスではおとなしくStringを使うようにするとか、table_nameのオーバーライドはreset_sequencesが効かなくなるからやめておくとか。
_ [ruby-dev:26142] Re: Dateと SOAPの型のマッピング
とか何とか愚痴ってる間になひさんがさくっと直してくださいました。
ちなみにそろそろsoap4r/1.5.4が出る予定になっており、これを1.8.3に間に合 わせるべくruby_1_8にcommit予定です。
[[ruby-dev:26142] Re: Dateと SOAPの型のマッピングより引用]
すばらしい。
2005-05-14 (Sat) [長年日記]
_ またメールボックス壊れた
またメールボックス壊れた…… orz
[ただのにっき(2005-05-12)より引用]
ごめんなさい、ごめんなさい、ごめんなさい。
たまにbdb拡張ライブラリがGC/スレッドがらみでSEGVするので、 代りにSQLite + ActiveRecordなんてどうかな、と思ってます。 *1 Rastではテスト以外でbdb拡張ライブラリは使ってないので問題ないはず(だよね?)
しかし、gonzui方面では問題になってないのかなあ。
*1 また依存ライブラリが増える。わーい。
_ Rast 0.1.2 ももうすぐ?
インデックスからごみを削除する機能が出来つつあるらしい。
Rastの新バージョンがどんどん出そうだけど、boronに入れるのはもうちょっと待ってくださーい > 心当りのある人たち
2005-05-17 (Tue) [長年日記]
_ 二度目の納品
今回はCDはちゃんと置いてきたものの、テスト中にバグが発覚。 まあ、三度目の正直って言いますからね(二度あることは三度あるとも言うけど)。
_ IPA X 2005 出展
うちの会社がIPA X 2005にRastを出展するのですが、ブースで ximapdのデモもするそうなので、お暇な方はどうぞ(自分が行くわけじゃないです)。 あと、登録制の検索サービス*1を無料でやる予定なのですが、 その申し込みの受け付けもするようです。 こっちはあとでWebでも受け付けるでしょうが、そんなにリソースは避けないので、あまり登録が多いと受け付け終了するかもしれません。
なお、入場は無料ですが、招待券のPDFを 印刷して持って行く必要があるようです。
*1 URLを登録すると適当にクロールしてくれて、あとはうちのCGIのURLをactionに指定した検索フォームを自サイトに貼れば、自サイトに検索機能を追加できる、というもの。Googleでもできるわけですけど、Rastの方がうれしいケースもあると思います。自分のホストのloadは上がらないしね:)
2005-05-20 (Fri) [長年日記]
_ ParticipateFAQ - codefest2005 - Trac
楽しそうだなあ。
Q: アルコールは持ち込み可ですか?
A: いいえ。もうしわけないけど、遠慮下さい。
[ParticipateFAQ - codefest2005 - Tracより引用]
中田さん行くんだっけ。だいじょうぶ?
_ RubyComp: A Ruby-to-LLVM Compiler Prototype
yarv-devより。
In this paper we study the possibility to precompile the Ruby language, a dynamic object-oriented language, into Low Level Virtual Machine (LLVM) code for execution by the LLVM run-time, a compiler framework for lifelong optimization of an application.
[RubyComp: A Ruby-to-LLVM Compiler Prototypeより引用]
興味深い。
2005-05-23 (Mon) [長年日記]
_ SEGV
仕事で書いているRailsアプリケーションのテストでSEGV。 どうも、viewでsyntax errorが起きている部分がまずいようだ。
ここで深入りすると仕事が進まないうちに一日が終わることがままある *1 ので、ぐっとこらえてruby-devに投げる。 *2 まつもとさんによって一瞬で修正。
_ linux-2.6.11.10
カーネルを2.6.11.10にアップグレードした。
前は2.6.9だったので、アップグレードは随分ひさしぶりだ。 最近は2.6も安定しているのでたいした苦労はないだろうと思っていたが、 大きな間違いだった。
_ tapデバイスのMacアドレス
会社のVPNは、OpenVPNでEthernet Bridgingを行っているのだが、前は tapデバイスのMacアドレスの先頭がかならず00:FFになっていたのが、 linux-2.6.11.10ではバラバラな値になるようだ。
dhcpd.confの設定で、
class "vpn-clients" { match if substring (hardware, 1, 2) = 00:FF }
のようにclassを設定していたのが効かなくなってしまってハマった。 とりあえず、
class "vpn-clients" { match if (substring (hardware, 1, 2) = 00:FF) or option dhcp-client-identifier = <自分のdhcp-client-identifier>; }
にしてしのいでいるが、subclass使った方がいいんだろうな、たぶん。
_ VMwareのモジュールのコンパイルに失敗
つづいてのトラブルはVMware。 VMwareのモジュールで使っていた関数が無くなってしまったようで、 コンパイルできなくなっていた。がーん。
<URL:http://knihovny.cvut.cz/ftp/pub/vmware/>から vmware-any-any-update90.tar.gz を取得して、
$ tar zxvf vmware-any-any-update90.tar.gz $ cd vmware-any-any-update90/ # ./runme.pl
で解決。
_ xfree85-driver-synaptics
今度は、tapはtapでもタッチパッドの方のトラブル。 どうも、タップとして判定されてしまうケースが妙に多い。 変なウィンドウががんがん開いてしまう。 もう勘弁してよ...。
何気なくdmesgしてみると、
ALPS Touchpad (Glidepoint) detected input: AlpsPS/2 ALPS TouchPad on isa0060/serio1
のような表示が。 あれ、ひょっとしてドライバが変わってる?
drivers/input/mouse/alps.cを見ると、
/* * ALPS absolute Mode ... * We used to send 'ges'tures as BTN_TOUCH but this made it impossible * to disable tap events in the synaptics driver since the driver * was unable to distinguish a gesture tap from an actual button click. * A tap gesture now creates an emulated touch that the synaptics * driver can interpret as a tap event, if MaxTapTime=0 and * MaxTapMove=0 then the driver will ignore taps.
というコメントを発見。 どうも、ハードウェアが発生させるタップイベントは普通のボタンクリックと 区別が付かないので、代りにソフトウェアでエミュレートしている、という ことらしい。
で、タップを無視するには、MaxTapTime=0とMaxTapMove=0を使え、って? 何だ、それ。 カーネルパラメータっぽくないな、と思って調べると、XF86Config-4の 設定のようだ。 synaptics用のXのドライバを使うのか。ふむふむ。
Debian的には、
$ sudo apt-get install xfree86-driver-synaptics
でインストール。楽勝。*1
Section "InputDevice" Identifier "Configured Mouse" Driver "synaptics" Option "CorePointer" Option "Device" "/dev/psaux" Option "Protocol" "auto-dev" Option "Emulate3Buttons" "true" Option "MaxTapTime" "0" Option "MaxTapMove" "0" Option "MinSpeed" "0.3" Option "MaxSpeed" "1.0" EndSection
のように設定して、無事タップを無効化することができた。
*1 実はXがxserver-xfree86-dri-trunkによってdivertされててハマったんだけど。
2005-05-24 (Tue) [長年日記]
_ #1343 (:include executes many SQL statements)
has_one associationに対して:includeを使うと、なぜか使わない 場合よりもSQLの発行が増える。どうも、associationに対するアクセサ の呼び出しでUPDATEが発行されるようだ。UPDATEって! しかも一つのレコードに対して二回ずつ。 NOT NULL制約がなかったら見逃すところだった。
これじゃ使えないのでレポート。 しかし、自分が何かミスしてるような気もする。 こんなはずないよなあ。
_ ALPS Touchpad not detected
今朝出社前にフリーズ(NumLockとCapsLockのインジケータが点滅してそのまま 何も出来ず電源断)して以来、ALPS Touchpadが検出されなくなってしまった。
今朝までは、
ALPS Touchpad (Glidepoint) detected Disabling hardware tapping input: AlpsPS/2 ALPS TouchPad on isa0060/serio1
という感じだったのが、
input: PS/2 Generic Mouse on isa0060/serio1
と寂しいかぎり。 synapticsドライバも使えなくなった。
カーネルにALPSサポートが入る前と同じ状態になっただけなんだが、 とてもくやしい。
_ オープンソース
ちなみにフリーズした時に何をしていたかというと、右の画像を貼って 「これってネタ?」と書こうとしていたのだった。 これがよくなかったのかなあ。
ちなみにリンク先は見ていないのでどんな内容なのか知らない。
_ MVC
会社で後輩とMVCについて話をしたが、彼はWebアプリケーションの方の MVCしか知らなくて、それをGUIアプリケーションに適用しようとして 困っているようだった。 Webアプリケーションで使われるMVCの方には違う名前を付けるべきだった んじゃないだろうか。 いつものように代替案はないんですが。
_ ALPS Touchpad detected
あきらめきれず、alps.cを書き換えて強制的に ALPS Glidepoint Touchpadとして認識させたらうまく動いた。 その後、もしや、と思ってalps.cを書き換える前のカーネルで起動してみると、 ちゃんとALPSとして認識された。 うまい具合に何かがリセットされたらしい。それが何かはわからないけれど。
_ libedit対応
まあ、これはNetBSD対応ですからね。
_ Berkeley DBのロッキングサブシステム
使うのやめて、自前でロックしようかな。 これでロック時の待ちでCPU100%とかはなくなるかも。
2005-05-25 (Wed) [長年日記]
_ MVC(2)
私もあんまり理解してないんですが、
最近よく聴くMVCはあんまり理解できません。WebとGUIでなにが違ってなにが同じなんですかね。視点によって同じようにも見えるし、違うようにも見えます
ModelとViewとControllerに分かれており、ModelがViewに依存しないので再利用性が 高い(ということになっている)ところまでは同じなんですが、それぞれの関係は かなり違うように思います。
とくに、古典的MVCで一番かっこいい(と私が思っている) ModelからViewに間接的に更新が通知される部分が Webアプリケーションだと実現できないので、毎回ControllerでModelを 操作した後、Controllerから画面遷移して次のViewを表示、という形に なっちゃうんですよね。
後輩が最初「全体の処理の流れをControllerで記述したいんですけど...」と話していて、違和感を覚えました。
_ お予算
じゃなくて、ご予算か。
2005-05-27 (Fri) [長年日記]
_ The Rails BetaBook is Ready
You can now buy the book as either a PDF or as a PDF/Paper book combo.
[PragDaveより引用]
本+PDFは$43.75+送料(日本だと$35.50、あれさっきはもっと安かったような)、PDFだけだと$22.50。
_ [RubyConf] Deadline extension for presentation proposals
The deadline for submitting a proposal for a full-length presentation at RubyConf 2005 is being extended from May 27 to June 3.
[[RubyConf] Deadline extension for presentation proposalsより引用]
preregisterがRailsのエラーでコケるのと関係あるのかしら。
_ 外部キー
外部キー制約付けない派が大多数。なるほど。確かに実務上は付けないほうがよさそうではあるのだけど。 ちょっと意外ではあった
[Csus4.net - Just example. Blog Archive PoEAA 3rdより引用]
そうなのか。 たしかにActiveRecordみたいなの使うと、使いにくい面もあるよね。
ON DELETE CASCADEとか大好きなんだけどな。 find_by_sqlも好きだ。 というか、SQL書くの結構好き。
ちなみに、外部キー使うなら、ON DELETE CASCADEにしないと そもそもfixtureが使えない。 fixutreを書いた順にinsertして、deleteするのも書いた順になるから。 このへんはもうちょっと何とかなりそうな気もする。
_ なぜ外部キーを使うのか
自分の場合、エラーチェックのためではなく、 ドキュメンテーションというかコードの意図を明確にするため という側面が強い。ちょっと型の話に似ている。 リレーショナルデータベースって、「リレーショナル」っていうくせに 外部キーが使えるようになるまではリレーションが表現されてなかったんだもの。ひどい話だ。
ActiveRecordを使う場合はテーブルの関連をassociationで表現できるので、そういう意味では外部キーはなくてもいい。 ON DELETE CASCADE相当のこともActiveRecord側でできるはずだ (やったことないけど)。
そういえば、強い型の言語からもずいぶん遠ざかっているな。
2005-05-28 (Sat) [長年日記]
_ プロジェクトページ移動
プロジェクトページを以下のURLに移動しました。
<URL:http://projects.netlab.jp/ximapd/>
また、レポジトリも
<URL:http://projects.netlab.jp/svn/ximapd/>
に移動しました。 httpsでもアクセスできます。*1
もう少し社内で調整してからメーリングリストも用意しようと思います。 QuickMLが楽かな。
*1 CAcert.orgの証明書を使っています。
2005-05-30 (Mon) [長年日記]
_ いろいろ変更
メールの格納方法とかいろいろ変えてるので、HEADは危険ですよ! まあ、いつだって危険なんだけど。
--import-imapまわりはかなり仕様が変わった。
- --imap-hostなどは--remote-hostに変更。
- デフォルトでは未読メールのみ取得。 (--import-allで全メール取得。--import-imap-allの方がいいかな。)
- デフォルトではフラグは取得せず。 (--import-imap-flagsでフラグも取得。)
これをfetchmail代りに使って運用しよう。 取得したメールをサーバから削除する機能も付けないと。
都合で進捗表示は削ってしまったけど、そのうち--verboseで進捗を出せるようにしたい。 progressbar.rbがラクかなあ。
_ importの進捗表示
結局progressbar.rbを使うことに。
同梱しても問題ないような気もするけど、
class NullObject def initialize(*args) end def method_missing(mid, *args) return self end end begin require "progressbar" rescue LoadError ProgressBar = NullObject end
としておいて、progressbar.rbがある時だけ進捗表示することにした。 (まだ、import_imapのみ。)
2005-05-31 (Tue) [長年日記]
_ QuickMLのアーカイブ
とりあえず、インストールしてみた。
Postfixを1.xから2.1にバージョンアップしたら、QuickMLがうまく送信できない。
[HYSPRO diary - Postfix 2.1とQuickMLより引用]
というのにちょっとひっかかったけど、セットアップはわりと簡単だった。
問題はアーカイブをどうするかだけど、いっそのことqwikWebを使うというのはどうだろう。 スレッドが追えないとつらいかな。
ximapdをPREAUTHな状態で動かして、IMAPでアーカイブを公開というのもちょっと考えたけど、ユーザ数が増えると負荷が高そうだ。 (当分ユーザ数が増える心配はないだろうけど。) あれ、それってそもそもMLいらないって話になるんじゃ。
追記:
qwikWebって、同じSubjectのメールは一つのページになるんだ。 スレッドなくてもいいかも。 ちょっと使ってみるかな。
_ version 0.0.1リリースとメーリングリスト
version 0.0.1をリリースしました。 主な変更点は以下の通りです。
- --import-imapオプションを追加しました。 [やまだあきらさん]
- SSLをサポートしました。 [やまだあきらさん]
- internal dateをサポートしました。 [やまだあきらさん]
- Berkeley DBのロッキングサブシステムを使用しないようにしました。
- メールのパスを<ximapd_dir>/YY/MM/DD/UIDに変更しました。
- デーモンの起動に--startオプションが必要になりました。
- すべての設定項目をコマンドラインオプションで指定できるようにしました。
- EXAMINEのバグを修正しました。
やまださんの変更以外は地味ですね。
あと、メーリングリストも用意しました。 参加方法はプロジェクトページを 参照ください。
_ nahi [む。そのコメントだけ読むと「あのメソッドじゃだめなん?」とか思うけど、きっと違うんだろうなぁ。つまり何が問題か把握で..]
_ shugo [私もあんまりコード読んでないのでよくわかってないのですが、 primitive typeは全部Rubyの標準クラスに..]