トップ «前の日記(2002-02-12) 最新 次の日記(2002-02-14)» 月表示 編集

日々の流転


2002-02-13 [長年日記]

λ. 表現したい何かがある。でも言葉が見つからない。言葉を探すうちに、表現したかった何かはこぼれ落ちてしまう。

λ. Gimp-Rubydruby

いくつか問題のあることに気が付いた。とりあえずメモ。

Tags: ruby

λ. drbはGCを分散化していないはずなので、リモートにまだ参照が残っているオブジェクトがGCされてしまう可能性がある。そういえば、殆んどのオブジェクトはハンドルの整数でしかなくて実体はGimpに管理されているんだよなぁ。で、型チェックとメソッド定義のために別のオブジェクトにラップしてある。こいつらをGCから保護してやるにはどうしたら良いかな。う〜みゅ。重要なのは、ラップした結果のオブジェクトじゃなくて、型とハンドルの整数なので…… そっか、DRbIdConvを差し換えて、それらのオブジェクトを扱う際にはObject#__id__によらない参照にしてしまえば良いのか。Gimp::PDB::Procの場合も名前で参照するようにしてしまうか。

λ. あらかじめURIを決めてgimpを起動しておかなくちゃいけないのもアレだ。解決するには、基本的にはクライアント側でdRubyのサーバを起動しておいて、新しく起動するgimpにURIを渡して向こうから接続させれば良いと思う。常に新規にgimpを起動するとしたらこんな感じか。

module Gimp
  def start(acl = nil, &block)
    server = DRb::DRbServer.new(nil, block, acl, GimpDRbIdConv)
    system('gimp', '--no-interface', '--batch',
           %Q[(ruby-fu-druby-yield-gimp "#{server.uri}")])
  end
  module_function :start
end