[トップ] [更新履歴] [著書] [コンピュータ] [ゲーム] [CGI配布]
[2001/08/04]の日記よりもちこみ。
(要[RAA:druby - distributed ruby])
[2001/10/19]ちゃっかりRAAに登録しちゃった♪
ちょっと機会があったので、某所で話題になってる「プリモプエル」なるものを見に行った。 手をにぎったりなでなでしたりするとしゃべるぬいぐるみだ。 ちょっとさわってみたけどあいにく電池がきれてるっぽくてあまりよくわからなかった。 まあ、かわいい代物だ。
しかし、ここでRubyな実装を考えてしまうのが我らがRubyist。 「反応せよ」という信号は任意のタイミングで発生しうる。 となると当然dRubyってなるよね。
制御システムはdRubyオブジェクトに持たせよう。 そして、クライエントはそのオブジェクトにいろいろメッセージを送ればいい。 で、とりあえず実験的に実装してみたのがこれ。 名前はRubyなことから「ルビモ(仮)」と名付ける。
遊ぶ前に
$ ruby rbmoctl.rb
とルビモサーバ(爆ぅ)を起動しておくこと。
で、クライアント側はirbでやってみることにする。
irb(main):001:0> require 'drb' # おまじない1 true irb(main):004:0> DRb::start_service # おまじない2 #<DRb::DRbServer:0x402707f4 @thread=#<Thread:0x402705d8 sleep>, @grp=#<ThreadGroup:0x40270628>, @load_limit=262144, @argc_limit=256, @idconv=#<DRb::DRbIdConv:0x40279d40>, @acl=nil, @front=nil, @uri="druby://xxxxxx:2946", @soc=#<TCPServer:0x402707b8>> irb(main):010:0> $KCODE="e" # おまじない3 "e" irb(main):005:0> rbmo = DRbObject.new(nil, "druby://localhost:9999") # ルビモ召喚(笑) #<DRb::DRbObject:0x4026bfc4 @ref=nil, @uri="druby://localhost:9999"> irb(main):053:0> rbmo.hand_push # はじめて手をにぎると "はじめまして" irb(main):054:0> rbmo.hand_push; rbmo.hand_push # 一回手をにぎってからまたすぐにぎる "うぜーぞ!" irb(main):055:0> rbmo.hand_push; sleep 2; rbmo.hand_push # ちょっと(2秒)たってまたにぎると "わーいわーい" irb(main):056:0> rbmo.hand_push; sleep 4; rbmo.hand_push # 長いことにぎらないと(4秒)寂しがる "寂しいよ、遊んでよ" irb(main):048:0> rbmo.talk "あなたの名前は?" # お話もできたりする "ルビモだよー" irb(main):049:0> rbmo.talk "何で動いてるの?" "dRubyだよー" irb(main):050:0> rbmo.talk "あなたは何才?" "0ちゃい" irb(main):051:0> rbmo.talk "かわいいね" "わーいわーい" irb(main):052:0> rbmo.talk "誰につくってもらったの?" "わかんなぁ〜い"
となるわけだ。
というわけで反応できる動作を増やしたかったら RbmoCtl クラスにメソッドを追加してしまえばいい、たったそれだけ。 これこそがdRubyの威力なんだろう。
ま、実際のプリモみたいにするにはセンサーがキャッチしたらフックとなるスクリプトを実行できればいいんだが、そこら辺が死ぬほどむずいだろう。 制御工学についての知識もいるし。 今は組み込みLinuxもあることだし、そいつにRubyブチこんで、センサーのドライバは拡張ライブラリとして実装って感じになるんだろうか。 というわけで今日はお開きだ。