実験した素材

せっかくShoesの外のrubyと通信させるならrubygems使いたい→だったらARじゃねーの?という発想しかわかなかったので、まずこんなん書いて

%w(rubygems active_record).each{|x| require x}
ActiveRecord::Base.establish_connection(
  :adapter => 'sqlite3', :database => './sample.db'
)

ActiveRecord::Schema.define do 
  create_table "members", :force => true do |t|
    t.column "name", :string
    t.column "age", :integer
    t.column "description", :text
  end
end

class Member < ActiveRecord::Base;end
Member.create({:name => "Miles Davis",:age => "70", :description => "Plays The Trumpet"})
Member.create({:name => "Herbie Hancock",:age => "40", :description => "Rock It"})
Member.create({:name => "Michael Jackson",:age => "120", :description => "Beat It"})

drbの受け側でこんなん書いて

%w(rubygems active_record drb/drb).each{|x| require x}

ActiveRecord::Base.establish_connection(
  :adapter => 'sqlite3',:database => './sample.db'
)
class Member < ActiveRecord::Base;end

class ARServer
  attr_reader :all_members
  
  def initialize
  end
  
  def find(name)
    member = Member.find_by_name(name)
    ret(member)
  end
  
  def list
    all_members = []
    members = Member.find(:all)
    members.each do |m|
      all_members << ret(m)
    end
    all_members
  end
  
  private
  def ret(m)
    tmp = {}
    m.class.column_names.each do |n|
      tmp[n.to_sym] = m.attributes[n]
    end
    tmp
  end
end



if $0 == __FILE__
  DRb.start_service("druby://localhost:12345", ARServer.new)
  puts "StARt reMotE AR @"+DRb.uri
  
  begin
    sleep
  rescue Interrupt
    exit
  end
  
end

Shoesでこんなのを書いた

%w(drb/drb socket).each{|x| require x}

## http://lists.sourceforge.jp/mailman/archives/divip-list/2004-May/000008.html
class Socket
  TCP_NODELAY = 1
end

## init
## variablezz
mem = DRbObject.new_with_uri("druby://localhost:12345")

name_list = []
mem.list.each do |m|
  name_list << m[:name]
end

name,age,description = nil

## shoes
Shoes.app :title => "AR meets Shoes", :width => 480, :height => 480 do
  stack :margin => 10 do
    text "I'm an ActiveRecorder", :font => "Nail Scratch 36px"
  end
  flow :margin => 10 do
    text "Name", :width => 64, :font => "Nail Scratch 18px"
    name = list_box :width => 180, :top => 5, :left => 48, :items => name_list
  end
  flow :margin => 10 do
    text "Age", :font => "Nail Scratch 18px"
    age =  edit_line :width => 175, :top => 5, :left => 48
  end
  stack :margin => 15 do
    text "Description", :font => "Nail Scratch 18px"
    description =  edit_box :width => 240
  end
  stack :margin => 10 do
    button "OK" do
      res = mem.find(name.text)
      age.text = res[:age].to_s
      description.text = res[:description]
    end
  end  
end

ActiveRecordオブジェクトを使うのに一度クッションが入るのがあれだけど、Shoesとオレrubyがしっかりとdrbでつながれましたよ。