トップ 最新 追記   RSS 1.0 FEED  

Journal InTime


2005-05-03 (Tue) [長年日記]

_ [] すがきや

ひさびさにユニーですがきやのラーメンを食べることができた。

ついでに、袋の方のインスタントラーメンを買って帰る。 松江でも売ってるかもしれないけど。


2005-05-05 (Thu) [長年日記]

_ [ximapd] やまださんのパッチ

いろいろありがとうございます。 trunkにマージしました。

大量のインポート時のSEGVは私も確認していたのですが、前からBDBの拡張ライブラリでGCがらみのSEGVを確認していたのでそのあたりを疑っています。 Rastもあやしいような気もしますが...。


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より引用]

おお。

_ [Rails] 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

なんて書いてあった。 なひさんにがんばってもらうしか!

本日のツッコミ(全2件) [ツッコミを入れる]

_ nahi [む。そのコメントだけ読むと「あのメソッドじゃだめなん?」とか思うけど、きっと違うんだろうなぁ。つまり何が問題か把握で..]

_ shugo [私もあんまりコード読んでないのでよくわかってないのですが、 primitive typeは全部Rubyの標準クラスに..]


2005-05-07 (Sat) [長年日記]

_ [ximapd] #31 (spam filter support)

実装する時間がないので、とりあえず、メモ。

  • spamメールは`spam'メールボックスにインポート、本文はインデックスしない。
  • 古いspamは適当にexpire
  • `spam'メールボックスからメールが明示的に削除(つまり他のメールボックスに移動) されたら、hamとして学習させる。
  • `spam'メールボックスにメールがコピーされたら、spamとして学習させる。

基本的に外部プログラムを呼び出すつもりだけど、プラグイン構造にしとけば bsfilterなどを組込みやすいかも。

_ [Rails] ログのANSIカラーエスケープシーケンス

いつの間にか、ログにANSIカラーエスケープシーケンスが使われるように なっていた。 svnのコミットログを見るとけっこう前からそうだったみたいだけど、前はそうなって なかったような。 あ、Debianのパッチがデフォルトでオフにしてたのか。 やっぱり普通の感覚ではデフォルトはオフだよねえ。

ただ、lvの-cオプションでANSIカラーエスケープシーケンスを通すようにできることを発見したのは収穫だった。

$ lv -c log/test.log

しかし、うっとうしいな。

config/environment.rbに、

ActiveRecord::Base.colorize_logging = false

と書いてオフにできた。すっきり。


2005-05-08 (Sun) [長年日記]

_ [Rails] #1272 ([PATCH] base64 support for Action Web Service)

とりあえず、base64が使えるようにしたパッチをtracに突っ込んでみた。 こんなんでいいのかしら。

_ [mod_ruby] rubyのHEAD対応

なひさんに指摘していただいていた、rubyのHEADで 動かなくなっていた問題を修正。 ついでに、anonymousでもticketを修正できるようにした。 これでパッチを受け取れる:)

ところで、Qtrue/Qfalseって(VALUEでなく)intの値として使ってもいいのかな。

今は、

#define Qtrue 2

だから問題ないけど、

#define Qtrue 2L

とかになるとまずそうだよなあ。たとえば、rb_exec_recursive()とか。


2005-05-09 (Mon) [長年日記]

_ [仕事] 月曜

土日に仕事すると月曜は辛いなあ。 土日にレジャーでも辛いけど。


2005-05-11 (Wed) [長年日記]

_ [仕事] 納期

いつの間にかすぐそこまで迫っている。

Railsに深入りしないように注意しよう。 WebサービスではおとなしくStringを使うようにするとか、table_nameのオーバーライドはreset_sequencesが効かなくなるからやめておくとか。

_ [Ruby] [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-13 (Fri) [長年日記]

_ [仕事] 午前様

とにかくつかれた。

しかもまだ完成していないよん。あはは。


2005-05-14 (Sat) [長年日記]

_ [ximapd] またメールボックス壊れた

またメールボックス壊れた…… orz

[ただのにっき(2005-05-12)より引用]

ごめんなさい、ごめんなさい、ごめんなさい。

たまにbdb拡張ライブラリがGC/スレッドがらみでSEGVするので、 代りにSQLite + ActiveRecordなんてどうかな、と思ってます。 *1 Rastではテスト以外でbdb拡張ライブラリは使ってないので問題ないはず(だよね?)

しかし、gonzui方面では問題になってないのかなあ。

*1  また依存ライブラリが増える。わーい。

_ [ソフトウェア] Rast 0.1.2 ももうすぐ?

インデックスからごみを削除する機能が出来つつあるらしい。

Rastの新バージョンがどんどん出そうだけど、boronに入れるのはもうちょっと待ってくださーい > 心当りのある人たち


2005-05-16 (Mon) [長年日記]

_ [仕事] 納品

とりあえず、一区切り。

しかし、会社に戻って来て「何とか無事に終わったねえ」とか話していると、なぜかT君のかばんの中から納品したはずのCDが! まあ、どうせすぐ差し替えなんですけどね。


2005-05-17 (Tue) [長年日記]

_ [仕事] 二度目の納品

今回はCDはちゃんと置いてきたものの、テスト中にバグが発覚。 まあ、三度目の正直って言いますからね(二度あることは三度あるとも言うけど)。

_ [会社][ximapd] IPA X 2005 出展

うちの会社がIPA X 2005にRastを出展するのですが、ブースで ximapdのデモもするそうなので、お暇な方はどうぞ(自分が行くわけじゃないです)。 あと、登録制の検索サービス*1を無料でやる予定なのですが、 その申し込みの受け付けもするようです。 こっちはあとでWebでも受け付けるでしょうが、そんなにリソースは避けないので、あまり登録が多いと受け付け終了するかもしれません。

なお、入場は無料ですが、招待券のPDFを 印刷して持って行く必要があるようです。

*1  URLを登録すると適当にクロールしてくれて、あとはうちのCGIのURLをactionに指定した検索フォームを自サイトに貼れば、自サイトに検索機能を追加できる、というもの。Googleでもできるわけですけど、Rastの方がうれしいケースもあると思います。自分のホストのloadは上がらないしね:)


2005-05-19 (Thu) [長年日記]

_ [Ruby] Tigerでreadlineがビルドできない

HEADで直した つもりですので、rm -rf /usr/lib/libreadline*とかする前に試してみてください。

追記:

と思ったけど、libeditだとirb/completionの補完でSEGVしました:(

何でusername_completion_function()なんか呼ぶんだ?


2005-05-20 (Fri) [長年日記]

_ [プログラミング] ParticipateFAQ - codefest2005 - Trac

楽しそうだなあ。

Q: アルコールは持ち込み可ですか?

A: いいえ。もうしわけないけど、遠慮下さい。

[ParticipateFAQ - codefest2005 - Tracより引用]

中田さん行くんだっけ。だいじょうぶ?

_ [Ruby] 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より引用]

興味深い。

_ [プログラミング] rl_attempted_completion_function

Readlineの補完候補を返す関数であるrl_attempted_completion_function は、補完候補の先頭の一致部分*1 を返さないといけないのだが、GNU Readlineの場合は候補が一つしかない 場合は省略しても動く。 一方、libeditではかならず返す必要があるようだ(返さないとstrcmp()にNULLを 渡して落ちる)。

*1  候補が["file", "fill"]なら"fil"

本日のツッコミ(全3件) [ツッコミを入れる]

_ なかだ [行きません。「各自自分のPCをもって」こいというところですでにアウト。]

_ なかだ [あ、別の「中田さん」が参加してるのか。失礼しました。]

_ shugo [あ、なかださんじゃなかったんですね。 まつもとさん 中田さん という並びを見て、てっきりなかださんなのかと。]


2005-05-23 (Mon) [長年日記]

_ [Ruby] SEGV

仕事で書いているRailsアプリケーションのテストでSEGV。 どうも、viewでsyntax errorが起きている部分がまずいようだ。

ここで深入りすると仕事が進まないうちに一日が終わることがままある *1 ので、ぐっとこらえてruby-devに投げる。 *2 まつもとさんによって一瞬で修正。

*1  しかも、今回はGCがらみだったので危険な匂いが。 まあ、たいていGCがらみなんだが。

*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) [長年日記]

_ [Rails] #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として認識された。 うまい具合に何かがリセットされたらしい。それが何かはわからないけれど。

_ [Ruby] libedit対応

まあ、これはNetBSD対応ですからね。

_ [ximapd] Berkeley DBのロッキングサブシステム

使うのやめて、自前でロックしようかな。 これでロック時の待ちでCPU100%とかはなくなるかも。

本日のツッコミ(全3件) [ツッコミを入れる]

_  [最近よく聴くMVCはあんまり理解できません。WebとGUIでなにが違ってなにが同じなんですかね。視点によって同じよう..]

_ たかはし [MVC model2という言い方もあります>違う名前]

_ shugo [そんな名前が。 その名前が通じる人にはそもそも説明の必要がなさそうですね:)]


2005-05-25 (Wed) [長年日記]

_ [プログラミング] MVC(2)

私もあんまり理解してないんですが、

最近よく聴くMVCはあんまり理解できません。WebとGUIでなにが違ってなにが同じなんですかね。視点によって同じようにも見えるし、違うようにも見えます

[Journal InTime - #1343 (:include executes many SQL statements) , ALPS Touchpad not detected , オープンソース , MVC , ALPS Touchpad detected..より引用]

ModelとViewとControllerに分かれており、ModelがViewに依存しないので再利用性が 高い(ということになっている)ところまでは同じなんですが、それぞれの関係は かなり違うように思います。

とくに、古典的MVCで一番かっこいい(と私が思っている) ModelからViewに間接的に更新が通知される部分が Webアプリケーションだと実現できないので、毎回ControllerでModelを 操作した後、Controllerから画面遷移して次のViewを表示、という形に なっちゃうんですよね。

後輩が最初「全体の処理の流れをControllerで記述したいんですけど...」と話していて、違和感を覚えました。

_ [言語] お予算

じゃなくて、ご予算か。

本日のツッコミ(全2件) [ツッコミを入れる]

_  [そうそう。クラスをああ分割することがMVCじゃないんすよねー。たぶん。 modelの更新の通知とviewの再描画のコ..]

_  [だから(?)Divを書いたんだった。]


2005-05-27 (Fri) [長年日記]

_ [Rails] 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。

_ [Ruby] [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のエラーでコケるのと関係あるのかしら。

_ [プログラミング][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側でできるはずだ (やったことないけど)。

そういえば、強い型の言語からもずいぶん遠ざかっているな。

本日のツッコミ(全2件) [ツッコミを入れる]

_ WR [はじめまして。 > リレーションが表現されてなかった それは誤解です。リレーション=テーブルです。 (ちなみに外部参..]

_ shugo [なるほど。]


2005-05-28 (Sat) [長年日記]

_ [ximapd] プロジェクトページ移動

プロジェクトページを以下のURLに移動しました。

<URL:http://projects.netlab.jp/ximapd/>

また、レポジトリも

<URL:http://projects.netlab.jp/svn/ximapd/>

に移動しました。 httpsでもアクセスできます。*1

もう少し社内で調整してからメーリングリストも用意しようと思います。 QuickMLが楽かな。

*1  CAcert.orgの証明書を使っています。


2005-05-30 (Mon) [長年日記]

_ [ximapd] いろいろ変更

メールの格納方法とかいろいろ変えてるので、HEADは危険ですよ! まあ、いつだって危険なんだけど。

--import-imapまわりはかなり仕様が変わった。

  • --imap-hostなどは--remote-hostに変更。
  • デフォルトでは未読メールのみ取得。 (--import-allで全メール取得。--import-imap-allの方がいいかな。)
  • デフォルトではフラグは取得せず。 (--import-imap-flagsでフラグも取得。)

これをfetchmail代りに使って運用しよう。 取得したメールをサーバから削除する機能も付けないと。

都合で進捗表示は削ってしまったけど、そのうち--verboseで進捗を出せるようにしたい。 progressbar.rbがラクかなあ。

_ [ximapd] 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のメールは一つのページになるんだ。 スレッドなくてもいいかも。 ちょっと使ってみるかな。

_ [ximapd] version 0.0.1リリースとメーリングリスト

version 0.0.1をリリースしました。 主な変更点は以下の通りです。

  • --import-imapオプションを追加しました。 [やまだあきらさん]
  • SSLをサポートしました。 [やまだあきらさん]
  • internal dateをサポートしました。 [やまだあきらさん]
  • Berkeley DBのロッキングサブシステムを使用しないようにしました。
  • メールのパスを<ximapd_dir>/YY/MM/DD/UIDに変更しました。
  • デーモンの起動に--startオプションが必要になりました。
  • すべての設定項目をコマンドラインオプションで指定できるようにしました。
  • EXAMINEのバグを修正しました。

やまださんの変更以外は地味ですね。

あと、メーリングリストも用意しました。 参加方法はプロジェクトページを 参照ください。