2006年 11月 10日

RingServer を繋ぐ

両方の Server 同士でそれぞれタプルを書き込み合うっていうのがたぶん一番簡単な方法かな?

ts    = Rinda::TupleSpace.new
place = Rinda::RingServer.new(ts)

DRb.start_service(uri, ts)

other_ring_server = DRbObject.new_with_uri("druby://other-network")
ts.notify(tuple_match).each do |t|
  other_ring_server.write(t)
end

でもこれだけだと NAT とかの場合にタプルは取得できるのにサービスに接続できないというハメになりそう。
drb/gw.rb を使わないとだめかな? SimpleDelegator を DRbUndumped にしてあげるだけでもいけそうな気がする

Rinda::PeskyRingProvider

class Rinda::PeskyRingProvider < Rinda::RingProvider
	def provide
		entry = nil
		loop do
			begin
				if entry
					# 登録済みタプルを削除する
					entry.renew(0)
				end
				# RingServer を再検索する
				Rinda::RingFinger.finger.lookup_ring_any
				entry = super
			rescue DRb::DRbConnError, RuntimeError => e
				# RingServer が見つからないときのエラーをキャッチ
				entry = nil
			end

			sleep 60
		end
	end
end

AppleScript

スクリプトエディタのライブラリ使うとアプリケーションごとのリファレンス見れるのか……
inspect 相当の命令ってないのかなぁ。{1, 1} を "{1, 1}" にするとか

rubyosa libxml-ruby

http://rubyosa.rubyforge.org/ を入れようと思ったら libxml-ruby が入らなかった。

extconf.rb:64: undefined method `find_header' for main:Object (NoMethodError)

ruby のバージョンが古いせい (1.8.2) っぽい。
しかし新しいバージョン入れるのめんどい(コンパイルはしてあるけど、置き換えるのがいろいろめんどそう……)ので、

sudo gem install libxml-ruby -- --with-xml2-include=/usr/include/libxml2

した。

rubyosa 使って applescript にインターフェイスにアクセスした場合帰ってくる文字コードは Shift_JIS みたいだ。

タイムタグがついた歌詞ファイルを HTTP でとってきて iTunes に同期させるテスト

http://lab.lowreal.net/trac/browser/c/lyric/itunes-timetag.rb

/ART-SCHOOL/EVIL/02-WISH.txt みたいな感じになってるのを HTTP からとってきて表示させてみる。
しかし track position が秒単位でしかとれないのでいまいち。

今日の gem install