実験した素材
せっかく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でつながれましたよ。