トップ 最新 追記   RSS 1.0 FEED  

Journal InTime


2005-03-09 (Wed) [長年日記]

_ [仕事][ソフトウェア] rast-0.0.0リリース

とりあえず、ファーストリリースということで。 長い目で見てやってください。


2005-03-10 (Thu) [長年日記]

_ [Ruby] ruby ML 検索

やっぱりデモがないとね、というわけで、作ってみました。

"do end" "{}" 違い

みたいな検索ができたりします。

ちなみに、検索時間はRast::DB#searchでかかった時間を表示してます。 体感だともっと遅く感じるけど*1、ウソじゃないよ。 でも負荷が恐いのであんまりいじめないでください。

*1  古いAAAAレコードが残ってたせいでした

_ [Ruby] ブロックパラメータ

ブロックパラメータ名が外側のローカル変数と重複したらエラー(前田くんの勝ち)※

[Matzにっきより引用]

本当に勝ったんだろうか。もうちょっとよく考えてみないと。

メソッド内で使われたスコープが終わってしまった変数への参照は警告になる※

というのは、

def foo
  bar do
    id = baz
  end
  return id #=> 警告
end

ってことですよね。 警告かあ。*1エラーでもいいかな。ほんとに?

それはさておき、ミーティングでは再度多重代入の仕様変更をプッシュしときました。

*1  Object#idがそのころにまだあったとすれば、ですが。

_ [家族] 結婚記念日

というわけで、義母の家に子供を置いて外食。

せっかくなので田和山の新しい店(といってもいつできたのかよくわからないけど)に行ってみた。 看板もなくて何の店だかよくわからなかったけれど、「この時間(18:30ごろ)にやっているのなら何か食べられるだろう」と思って入ってみると、イタリアンだった。

平日ということもあり、店内はがらがらで、客は他に二組ほど。 そのうちの一組はわりと小さい子どもを連れていた。うちの子どもたち をこういう店に連れて来られるのはいつになるんだろう。 まあ、たまには子どもがいない静かな食事もいいな。 ただ店内の音楽は多少うるさかった。スピーカの真下だったからかもしれない。

メニューを見るとけっこうたくさん並んでいて何を食べるか迷う。 結局、頼んだのは以下の料理。

  • ミネストローネ(二人とも)
  • 真鯛のカルパッチョ(二人でシェア)
  • ボンゴレ・ビアンコ(私)
  • タラバガニとポロネギのビアンコ(奥さん)
  • スズキのソテー(二人とも)

結果的に肉料理は一つも頼まなかった。最近肉より魚の方がおいしいのは 年齢のせいだろうか。

パスタは今一つだったけれどもそれ以外はおいしく食べることができた。 奥さんも同じ感想。でも、自分はちょっと味が濃く感じたのに、奥さんは 薄く感じたらしいので、あてにしてはいけない。

接客も悪くない感じだったのでまた行くかもしれない。 今度は肉を食べよう。

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

_ babie [メールアドレスは加工した方が良いと思いまする。 >ML検索]

_ shugo [おお、すみません、修正しときました。]


2005-03-12 (Sat) [長年日記]

_ [ソフトウェア] ruby ML検索(2)

ソートなどをできるようにして、ソースコードを公開しました。 クイックハックですが、何かの参考になれば。

ちなみにAPIはがんがん変わると思います;)


2005-03-13 (Sun) [長年日記]

_ [家族] 雪ダルマ

雪ダルマ

たくさん雪が降ったので子どもと雪ダルマを作ってみた。 ちょっとつぶれぎみだけど。

実家の方は雪が少ないので、たまにたくさん降るとけっこううれしい。 しょっちゅうこんなんでも困るけど。

_ [家族] イタズラ

イタズラ

下の子はまだ外では遊べないけど、代りに部屋の中でのイタズラに余念がない。 食器棚は勝手に開けられないように雑誌で取手をふさいでいたのに、 簡単に開けられるようになっているし、手の届かなかった本やCD用の棚 まで開けられるようになってしまった。

写真は計量カップだからまだいいけど、ビンに入りのローソクで 同じことをしていて、しかも中身が溶けてきていたり:( 何とかならないですかねえ。

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

_ ma2 [超かわえー。 サイトトップ右上の写真と比べるとお子さんの成長が分かりますねー。]

_ shugo [ありがとうございます:) 他所の子だったらかわいがってるだけでいいんですけどねえ。]


2005-03-14 (Mon) [長年日記]

_ [仕事][ソフトウェア] Rast 0.0.1

早くもリリースされました。 バグフィックスが中心です。

次のリリースまではもうちょっと間隔が空くんじゃないかな。

Mac OS Xでビルドする場合は、Finkを入れて

$ ./configure --with-db-includes=/sw/include/db4 --with-db-libs="-L/sw/lib -ldb-4.2"

みたいな感じで行けると思います。

_ [会社][家族] フィナンシェ

フィナンシェ

奥さんが作ってくれたフィナンシェを会社に持って行ってみた。 ちゃんとラッピングした甲斐があってなかなか評判がよかったようだ。

ちなみにマドレーヌとフィナンシェの違いは、フィナンシェには アーモンドプードルが入っていることらしい。

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

_ まつもと [おいしかったです。ごちそうさま。奥さんによろしく。]

_ shugo [ありがとうございます。伝えておきます。]


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

_ [会社] 会社の住所

(自分の)会社の住所を調べるのに前はhttp://www.netlab.jp/を見ていた のだが、

$ whois netlab.jp

の方が早いことに気付いた。 ちゃんと英語の表記まであるし、電話番号もわかる。

何で今まで気付かなかったんだろう。

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

_ たかはし [「Its use is restricted to network administration purposes...]

_ shugo [ぐは、うちのでもだめすか。]


2005-03-16 (Wed) [長年日記]

_ [その他] 佐川急便

佐川急便って配達遅くない? 昨日の昼にWebで問い合わせた時に「松江店から配達に出発しました」って 書いたのに、今日の昼にまだ届いてないんですけど。 市内なのに途中で一泊してる?

玉湯の時も遅かったし、ずっと家にいたのに不在票が入ってたこともあるし、何か佐川って感じ悪い。


2005-03-17 (Thu) [長年日記]

_ [仕事] EXPLAIN

PostgreSQLでEXPLAINを使おうと思ってマニュアルを見ていたのだが、 なぜかEXAMINEだと思いこんでいてぜんぜん見つからず。 だめすぎ...。


2005-03-18 (Fri) [長年日記]

_ [ソフトウェア] rast-mecab

なんてものを作ってみた。

Rastでは、N-gram(というかトークン)の切り出しをエンコーディングモジュール というものに独立させているが、この部分でMeCabによる形態素解析を 利用しているだけ。

RastとMeCabがインストールされている環境で、

$ ./configure
$ make
# make install

とすれば、インストールできる。

とりあえず、デモN-gram版より結果の件数が少ないのは1万件弱しか 登録してないから。

Rastは隣接チェックを行うので、 趣味の問題 のようなキーワードもちゃんと検索できる。 一方、隣接チェックがない検索エンジンでは 趣味 問題 のようなノイズの多い検索結果になると思う。 辞書も小さくなるし、N-gramよりもいいケースもあるかな。

N-gramの利点の一つに、顧客に 「○○という単語で検索できない」と言われた時に、「そんな文字列は もとの文書に含まれていませんから許してくださいよ」と説明できるということがある。 任意の部分文字列の検索(要はfgrep)ができるからだ。 「これは形態素解析器の辞書がですね...」という説明で納得してくれれば いいけれど、あなたの顧客はそんなに物分かりがよいですか? *1

ここでちょっと考えたのだが、基本的に形態素解析でトークンを切りだし、 未知語が表れたらその部分だけN-gramで処理するというのはどうだろうか。 大多数のケースで良好な結果を得られそうな気がする。

あと、Rastで使う時は、形態素解析器にはなるべく単語を細かく切ってほしい。 たとえば、「日本語」よりも「日本 語」の方が好ましい。 前者だと「日本語」で検索した場合はヒットするが、「日本」ではヒットしない。 一方、後者なら両方にヒットするし、隣接チェックがあれば「日本語」の検索結果 のノイズも増えない。 MeCabをこういう方向にチューニングすることができないかな。

*1  インデックス生成時に単語レベルで正規化したりすると、このメリットが 損なわれるので、曖昧検索などを実装する際はOR検索のような方向性の方が 望ましいかもしれない。 すでに、Rastでは、「tcl/tk」のように規定のN(アルファベットでは3) より短いトークン(「tk」)がある場合には、前方一致検索を行った結果を マージしているので、同様に語尾の揺れなどにも対応できそうだ。

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

_ ty [mecabのN-bestでN=2にしたら以下のようになりました。 obiwan% echo '日本語' | meca..]

_ shugo [なるほど、そういう手がありましたか。]


2005-03-20 (Sun) [長年日記]

_ [家族] サティ

ひさびさにサティに行ったらたまたまバーゲンだった。どおりで人が多いわけだよ。

何も買うつもりなかったのにティーポットなどを購入。しかも値引き対象外:( でも元が安かったのでよしとする。

_ [Ruby] IMAPのtag

IMAPサーバを書こうかなと思ってRFC3501を眺めていると、RFC2060とtagの 仕様が微妙に変わっているのに気付いてしまった。

RFC2060:

tag             ::= 1*<any ATOM_CHAR except "+">

RFC3501:

tag             = 1*<any ASTRING-CHAR except "+">

要は`]'が許されるようになったらしいけど、そんなのtagに使ってうれしい?

うーん、Net::IMAP直さないといかんかなあ。とか言ってたら小人さんが 直してくれたり...しないだろうな。 まあ、クライアントはそんなtag使わなきゃいいわけだけど、サーバは そうはいかないか。何かいきなり萎えちゃったよ、とほほ。

_ [ソフトウェア] 検索ベースのIMAPサーバ

とりあえず、アイデア(っていうほどたいしたものではない)だけメモしとこう。こうしとけば、だれか他の人が書いてくれるかもしれない。

  • 何はなくともSEARCHを実装する。
  • mailboxは基本的にINBOXだけ。代りにThunderbirdのSaved Search Folderを使う。
  • とは言ってもTrashやDraftくらいは必要かもしれない。まあ仮想的に用意すればいいか。
  • INBOXのメール一覧では、\Recentフラグが付いたメールだけ(あるいは1000件だけとか)を返す。
  • Saved Search FolderがないMUA(ほとんど?)のために、サーバ側で Saved Search Folderを用意した方がいいかも。
  • 最近検索した結果は、自動的に上記のServer Side Saved Search Folderにする。しかし、mailbox名が問題
  • 手動でspamを学習させる時に類似文書検索が使えたら便利かなあ。 しかし、IMAPでそういうインタフェイスを提供するのは無理か。 Server Side Saved Search Folderの設定などと一緒にWebインタフェイス を用意するとか?
  • 検索エンジンにはもちろんRastを使いたいが、属性の更新を効率よく 処理できるようにならないと辛そう。まあ、属性は自前でやる手もあるが。
  • RSSも突っ込めると便利かも。あと、NetNewsとか。

morqを改造する、という手あるけど、たぶん大変な部分はmorqから流用できる部分じゃないんだよな。

_ [ソフトウェア] Ajaxで「次へ」

検索サイトで「次へ」というリンクをたどるのがいつも億劫なのだが、最近流行のAjaxで何かできないだろうか。 アクセスキー用意するだけでも便利かもしれないけど、そもそも10件ずつとかで検索結果を表示すること自体、あまり必然性がないと思う。

たとえば、最初はブラウザのスクロールバーを表示させずに一画面で表示できる分だけ出力して、Ctrl-Dとかjとか押してくと必要な部分だけ取って来て表示を書きかえていくとか。 各検索語を座標に取った地図みたいなのを出して、文書を表すアイコンに カーソルを持ってくるとタイトルや概要がポップアップで出てくるとか。

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

_ @@@@ [地図みたいに表現ってのはおもしろそうだけど,4次元(検索語が4つ以上)になったときにどうやって見せるかが問題ですねぃ]

_ shugo [デフォルトでは重みが高い単語3つを選ぶ、とかですかねえ。]


2005-03-21 (Mon) [長年日記]

_ [ソフトウェア] 形態素周辺確率を用いた分かち書きの一般化とその応用

なるほど、これはよさそう。 Rastで何とか使えないかなあ。位置情報に加えて、頻度情報も記録しないと いけないので、ますますインデックスが大きくなりそうだけど。

しかし、BOWと聞くとBSD on Windowsを思い出してしまうのは私だけ?

_ [家族] いりすの丘

乗馬

ひさびさにいりすの丘に。 今日は動物にも恐がらずにいろいろ遊ぶことができたようだ。

馬に乗ってみたりもしたけど、これは親の方が楽しんでいたかもしれない。 といっても、一瞬で終わってしまったけど。

_ [] ジョイフル

宍道に出来たジョイフルで夕食。 それぞれ以下の料理を注文。

  • 私: ペッパーハンバーグの洋食セット(698円)
  • 奥さん: ホタテのマカロニグラタン(499円)
  • 子ども: ハッピープレート(499円)

安いなあ。

ペッパーハンバーグは安いわりに味付けがおいしかった。 あまりいい肉ではないけど、まあ仕方ないですよね。 ホタテのマカロニグラタンはおいしかったけど量が少なかったとのこと。

接客も悪くないし、全体として好印象でした。


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

_ [Ruby] ruby-prof-0.1

Ruby用のプロファイラをリリースしました。 以下のいずれかが必要です。

  • ruby 1.9.0 (2005-03-17) 以降
  • ruby 1.8.2 (2005-03-22) 以降

使い方はprofile.rbとほとんど同じ。

$ ruby-cvs_1_8 -v -runprof fib.rb
ruby 1.8.2 (2005-03-22) [i686-linux]
use CPU clock counter for profiling
6765
  %%   cumulative   self              self     total
 time   seconds   seconds    calls  ms/call  ms/call  name
 90.84    0.074     0.074        1    73.94    81.39  #toplevel
  3.66    0.077     0.003    21890     0.00     0.00  Fixnum#-
  3.61    0.080     0.003    21891     0.00     0.00  Fixnum#<
  1.73    0.081     0.001    10945     0.00     0.00  Fixnum#+
  0.12    0.081     0.000        2     0.05     0.06  IO#write
  0.01    0.081     0.000        1     0.01     0.01  Fixnum#to_s
  0.01    0.081     0.000        1     0.01     0.12  Kernel.print
  0.00    0.081     0.000        1     0.00     0.00  Module#method_added

profile.rbと比べるとかなり高速になっていると思います、 と思ったら結果がおかしいですね...Ruby本体の修正にバグがありました、すみません。set_trace_funcを使う場合は問題なかったのでテストが通ってました:(

先ほど修正をcommitしたので、今のruby_1_8ブランチの先端では以下のように正しい結果が返ると思います。

$ ruby-cvs_1_8 -runprof ~/ruby/fib.rb
6765
  %%   cumulative   self              self     total
 time   seconds   seconds    calls  ms/call  ms/call  name
 81.55    0.037     0.037    21891     0.00     0.03  Object#fib
  7.73    0.041     0.004    21890     0.00     0.00  Fixnum#-
  6.94    0.044     0.003    21891     0.00     0.00  Fixnum#<
  3.24    0.045     0.001    10945     0.00     0.00  Fixnum#+
  0.26    0.045     0.000        1     0.12    45.44  #toplevel
  0.22    0.045     0.000        2     0.05     0.06  IO#write
  0.03    0.045     0.000        1     0.01     0.12  Kernel.print
  0.02    0.045     0.000        1     0.01     0.01  Fixnum#to_s
  0.00    0.045     0.000        1     0.00     0.00  Module#method_added

_ [仕事] SQLの高速化

何とか目標に近い数値を達成。 やっぱり、プロファイラが速いと作業がラク。 ちなみに、今までは、

st = Time.now
...
p [:foo, Time.now - st]

みたいなコードをあちこちに書いてました:(


2005-03-23 (Wed) [長年日記]

_ [Ruby] 「本物の」アプリケーション開発にRubyのような「スクリプト言語」は不十分

「本物の」アプリケーション開発にRubyのような「スクリプト言語」は不十分、 Javaのような「本物の言語」が必要だ、というJavaラブ派

[Matzにっき(2005-03-21)より引用]

「本物のプログラマ」じゃない人には必要なんだろうね、とか言うとフレームに なるんだろうな。

冗談は置いといて、ちゃんとプロファイル取って、アルゴリズムの問題を修正して、 どうしても速くできないところ(死ぬほどビット演算を繰り返すところとか)だけ 拡張ライブラリにすれば、たいていのケースでは問題ない速度が出せると思う。 あと、Rubyプログラムを速くするコツは、なるべくRubyに仕事をさせないこと。 多少メモリ効率を犠牲にしてでも、Cで書かれた組み込みメソッドや拡張 ライブラリのメソッドに多くの仕事をまかせる。

まあ、でも、Rubyはうちの会社の秘密兵器 *1 として使いたいので、今くらいのポジションがいいのかも。

*1  日本ではメジャーじゃんと言われるかもしれないが、たとえば、高橋さんの会社でも使えないんだから秘密兵器と言ってもいいと思う。

_ [ソフトウェア] intel compiler で Apache が 400% 高速化

Googleの広告見てて思い出したけど、これって本当なのかなあ。

abでベンチマーク取ってて「メチャメチャ速いじゃん」と思ったら全部500だった、ということがよくあるのは内緒だ。

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

_ たかはし [ひみつには使ってます。でも、今後はひみつじゃなくても使うかもしれません。]

_ shugo [なにー、実は秘密兵器でしたか。]


2005-03-24 (Thu) [長年日記]

_ Senna 組み込み型全文検索エンジン

gonzuiの発表資料より。

内容も興味深いけど、

有限会社未来検索ブラジル

という社名にウケた。

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

_ ひろゆき [どもども。]

_ もりたぽ [前田さんは26日の寄り合いには見えないのですか?]

_ shugo [どもども。 私は行けないのですが、うちからは西田・橋本の二名が伺いますので、よろしくお願いします。]


2005-03-25 (Fri) [長年日記]

_ [ソフトウェア] imapd

メモ。

  • ML用のメールボックスはX-ML-NameやList-Idなどで自動的に生成する。 ただし、メールボックスを作成するといっても、メールボックス名と 「X-ML-Name = ruby-list」のような検索クエリの対応付けをするだけ。 メールボックス名はとりあえず自動生成して、ユーザの変更も許す。
  • INBOXは「MLでない」とマークされたメールのみを(検索して)表示。
  • ただし、SEARCHコマンドでは全メールを検索して結果を返す。

_ [その他] 雪

こんな時期に雪がめちゃめちゃ降ってるんですけど...。 とりあえず、道路には積もってないの一安心。

_ [ソフトウェア] whois

whois netlab.jp

の方が早いことに気付いた。

[Journal InTime - 会社の住所より引用]

引けなくなっておかしいなと思っていたら、どうもwhoisサーバがwhois.nic.ad.jpから変わっているようだ。

apt-get sourceしてwhoisコマンドを書き変えようとして、ふと思いとどまってDebianのBTSを見てみると、すでに最新(4.7.2)では直っていた。

Bug#301187

apt-lineに記述してあるミラーはまだ更新されてなかったのが敗因。

ところで、whois --versionの結果が、

$ whois --version
Version 4.7.1.

Report bugs to <md+whois@linux.it>.

と、4.7.1に見えるのはバグ?


2005-03-27 (Sun) [長年日記]

_ [その他] 散髪

カプチーノ

ひさしぶりにカプチーノをオープンにして娘と散髪に。 ずいぶん前に乗せようとした時は恐がって無理だったが、今日は楽しんだようだ。

娘は美容院がはじめてだったのでちょっと心配だったのだが、案の上少し 泣いてしまった。声も上げずに涙が頬を伝うのを見ると、やっぱり女の子は髪を切られるのが悲しいのかなと思う。

ちなみに自分はちゃんと隣の床屋で切ってもらったのは言うまでもない。

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

_ はら [知らないおっ(おば)ちゃんとハサミが怖かっただけだったりして。娘とカプチーノでドライブかあ…イーネー。]

_ shugo [そうかもしれないですね。 その人の名誉のために付けくわえると、「おねえさん」かも。]


2005-03-28 (Mon) [長年日記]

_ [Ruby] ローカル変数のスコープ

class SpoofSocket
  attr_reader :input, :output

  def initialize(s)
    @input = StringIO.new(s)
    @output = StringIO.new
  end

  for mid in [:read, :gets, :getc]
    define_method(mid) do |*args|
      @input.send(mid, *args)
    end
  end
end

というコードが動かなくてはまった。 (SpoofSocket#readで、@input.send(:getc, ...)が呼ばれてしまう。)

正しくは、

[:read, :gets, :getc].each do |mid|
  define_method(mid) do |*args|
    @input.send(mid, *args)
  end
end

のように、ブロックを使わないといけない。


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

_ [ソフトウェア] Googleでの検索結果リストにaccesskeyを仕込むGreasemonkey

遅まきながら試してみた。 すばらしい。

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

_ ma2 [Firefox 1.0.2(ja) WinXP だと,greasemonkeyが動作しませんでした。]

_ shugo [Firefox/1.0.2 (Debian package 1.0.2-1)だとだいじょうぶみたいです。 何で上手く..]

_ ma2 [本家MLによると,1.0.2だと動かないという報告があるみたいですね(動くという報告もある)。あと特定のエクステンジ..]

_ shugo [なるほど。 ちなみにその後バックボタンが使えなくなっていることが判明して使うのやめました。やっぱりだめですね:(]


2005-03-30 (Wed) [長年日記]

_ [物欲] Freudenhaus

ウェブサイトはちょっと凝り過ぎで見にくいけど、なかなかよさそう。

Lazudaの広告によると、glasses valleyのメインストアに デザイナーが来てトランクショーをやるらしい。 4/9〜11だったかな? 記憶があやふやなので行かれる方は確認してみてください。

自分は買う余裕がないけど、かずひこさんでも誘うかなあ。

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

_ かずひこ [おお、面白そうですね。ちなみにゆうなの今のメガネは米子の glasses valley で買いました。]