acts_as_searchableを使う程度であれば、例えばDebianなら、 aptでhyperestraierのパッケージを入れるだけで十分なのですが、 estcmd等のコマンドラインツールを使ったりしようとすると、 estraier というRubyGemsが必要になったりします。

   1  # estcmd
   2  /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:304:in `report_activate_error': Could not find RubyGem estraier (> 0) (Gem::LoadError)
   3          from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:238:in `activate'
   4          from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:76:in `active_gem_with_options'
   5          from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:50:in `gem'
   6          from /usr/local/bin/estcmd:15

このestraierをインストールするためには、HyperEstraier のパッケージ以外にも、 QDBM の開発用ライブラリパッケージを インストールしておく必要があります。

   1  # aptitude install libqdbm-dev

あとは、gemコマンドで通常通りにestraierをインストールします。

   1  # gem install estraier

これで estcmd などのコマンドラインツールが使えるようになります。

   1  # estcmd
   2  estcmd: command line utility for the core API of Hyper Estraier
   3  
   4  usage:
   5    estcmd put [-cl] [-ws] db [file]
   6    estcmd out [-cl] db expr
   7    estcmd edit db expr name [value]
   8    estcmd get db expr [attr]
   9    estcmd uriid db uri
  10    estcmd inform db
  11    estcmd optimize [-onp] [-ond] db
  12    estcmd merge [-cl] db target
  13    estcmd search [-vu|-va|-vf|-vs] [-gs|-gf|-ga] [-cd] [-ni] [-sf|-sfr|-sfu|-sfi] [-attr expr] [-ord expr] [-max num] [-sk num] [-aux num] [-dis name] db [phrase]

posted by Png genki on Fri 7 Dec 2007 at 18:08

Changeset 8321 - Rails Trac - Trac

Preparing for release shortly

Tracのタイムラインを見ていたら、Rails 2.0が本日 (米国時間だと12/6)リリースするみたいですね。

rails_2_0

posted by Png genki on Fri 7 Dec 2007 at 08:52

ワークパイル(Work pile)は、並列処理の為のアルゴリズムの一種です。

lucille 開発日記: マルチスレッド化: ワークパイル

簡単に云ってしまえば、ワークパイルはサーバ/クライアント機構と似たようなもので、ジョブを処理するスレッド部分ではマスタースレッドから仕事(ジョブ)を受け取って処理し、仕事がなくなるまでループするというものです。

いわゆる生産者消費者問題を解決する手法の一つですね。 ちょっとサンプルコードを見てもらったほうがはやいかも。

workpile.rb

   1  require 'thread'
   2  
   3  class Workpile
   4    def initialize(num_workers)
   5      @queue = Queue.new
   6      @workers = ThreadGroup.new
   7  
   8      # Spawn worker threads
   9      num_workers.times do |i|
  10        @workers.add(Thread.new do
  11          puts "Worker #%d is ready." % i
  12          loop do
  13            @queue.pop.call # work
  14            puts " (#%d)" % i
  15          end
  16        end)
  17      end
  18    end
  19  
  20    def push_task(&block)
  21      @queue.push block
  22      @workers.list.sort_by{rand}.each{|worker| worker.run} # wake up!
  23    end
  24  
  25    def start
  26      while input = gets.chomp
  27        break if input == 'exit'
  28        input.split('').each do |i|
  29          push_task{print i}
  30        end
  31      end
  32    end
  33  end
  34  
  35  Workpile.new(3).start

出力結果

   1  % ruby workpile.rb
   2  Worker #0 is ready.
   3  Worker #1 is ready.
   4  Worker #2 is ready.
   5  hello!
   6  h (#0)
   7  e (#2)
   8  l (#1)
   9  l (#0)
  10  o (#2)
  11  ! (#0)

3つのワーカースレッドを作成して、投入したタスクを処理しています。 RubyのQueueは同期の面倒を見てくれるので、何も考えずにpushpopでタスクのやり取りを行うことができてしまいます。 しかも、キューが空になったらカレントスレッドを停止するように なってるんですね。

並列処理というとC/C++でCriticalSectionやmutexのネイティブAPIを さわるようなのばかりだったので、こんなに簡潔に記述できるのは 良いですね。やはりインターフェイス重要だな。

クリスマスに出る(という噂の)Ruby 1.9でネイティブスレッド化されたら、 もっと楽しいかもしれませんねー。

posted by Png genki on Fri 7 Dec 2007 at 06:14
Contents
HyperEstraierのコマンドラインツールをインストールする手順
Rails 2.0 本日リリース?
Rubyで簡単にワークパイルを実装
Comments
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
瀧内元気: おお、チェックしてみます。thx! '11-12
overisland: Reeder for iPhone もこの UI を実装していますね。 '11-12
瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 ... '11-12
tkawa: http://devcenter.heroku.com/articles/rails31_he... '11-12
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ