[#14497] Re: Gtk::Menu の使い方に関する質問 — Hiroshi Igarashi <igarashi@...>
いがらしです。
[#14503] Re: rubyfaq-990702.tar.gz — Akira Endo <akendo@...3.rim.or.jp>
遠藤です.
まつもと ゆきひろです
[#15177] Gtk::Menu の使い方に関する質問 — Miyaki Masahiro <miyaki@...>
はじめまして、宮木と申します。ruby-gtkのメニューオブジェクト
[#15179] ruby にメッセージの国際化の仕組みはありますか? — "HIRATA Naoto" <hirata-naoto@...>
はじめまして,平田@武蔵工大と申します.
[#15188] LAPACK へのインターフェース — Takashi Nishimoto <g96p0935@...>
Ruby を数値計算言語として使ってみたいのですが、
[#15245] Solaris 2.6 — Koyama Hideo<fa8h-kym@...>
御無沙汰しております。小山です。
[#15247] Meeting2000 0.93b3 出します — 松尾尚典 <matsuo_hisanori@...21.odn.ne.jp>
松尾です。
[#15264] 年月を範囲でうまく扱うには? — Yukihiko Eda <yuki-e@...>
江田です。
In message "[ruby-list:15264] 年月を範囲でうまく扱うには?"
> 大した手間でもなさそうだし、年月のクラスを作っちゃうのは
In message "[ruby-list:15284] Re: 年月を範囲でうまく扱うには?"
ふなばです。
ごとけんです
青山です。
ごとけんです
ふなばです。
[#15274] RE: Ruby-1.3.4 for cygwin (was Ruby/Gtk for cyg win) — 助田 雅紀 <masaki.suketa@...>
助田です.
[#15321] Re: rubyfaq-990702.tar.gz — Inaba Hiroto <inaba@...>
稲葉です.
[#15362] chomp で nil が返るのは? — ARIMA Yasuhiro <fit0298@...>
有馬です。
まつもと ゆきひろです
From: matz@netlab.co.jp (Yukihiro Matsumoto)
まつもと ゆきひろです
[#15378] RubyFAQ-990713 — Akira Endo <akendo@...3.rim.or.jp>
遠藤です.
In message "[ruby-list:15378] RubyFAQ-990713"
高橋征義です。
[#15384] getpeername — OHARA Shigeki <os@...>
大原です。
[#15405] nkf の使い方 — goto@...
後藤@横河工事です。たびたびお世話になります。
まつもと ゆきひろです
[#15406] dRuby/rudy/DRb — Masatoshi SEKI <m_seki@...>
[#15419] Serial I/O by Ruby — ARIMA Yasuhiro <fit0298@...>
有馬です。
[#15467] debugger exception handle (Re: Modified debug.rb) — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
なひです.
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
In message "[ruby-list:15551] Re: debugger exception handle (Re: Modified debug.rb)"
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
前田です。
[#15472] raa — Masaki Fukushima <fukusima@...>
福嶋です。
まつもと ゆきひろです
[#15474] RAA (Re: [Patch] debug.rb) — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#15482] maillib 0.4.0 — Minero Aoki <aamine@...>
あおきです。
[#15497] how to use ruby-mode.el — Yoshiki Wada <wada@...>
和田と言います。
[#15518] 省略記法 — ARIMA Yasuhiro <fit0298@...>
Pascal では、構造体のメンバを表記する際に省略記法があります。
まつもと ゆきひろです
有馬@FITECです。
まつもと ゆきひろです
[#15530] 半 to 全 — Sinichiro Dezawa <dezawa@...>
出沢です
出沢です
このメイリングリストで‘杉原’というとsugihara.comの方ですよね。
In message "[ruby-list:15655] Re: 半 to 全"
すひ。
[#15557] グループウェアサーバ — hisanori@...
松尾です。こんにちは。
ども鴫原です。
松尾です。
ども鴫原です。
松尾です。おはようございます。
[#15572] tcltklib (LoadError) — SONE Toshihiko <tsone@...>
はじめまして、曽根俊彦と申します。OpenBSD 2.5(i386), Tcl/Tk 8.0.5
まつもと ゆきひろです
From: matz@netlab.co.jp (Yukihiro Matsumoto) さん
わたなべです.
[#15593] クラス定数について — Takashi Nishimoto <g96p0935@...>
以下のプログラムを実行したのですが、
[#15602] Meeting2000 0.93b4 リリースします — 松尾尚典 <matsuo_hisanori@...21.odn.ne.jp>
松尾です。
[#15615] make でのエラーに対する仕様 — Noritsugu Nakamura <nnakamur@...>
[#15634] Qt — kikutani@...
ruby/Qtという案はかつてあったのでしょうか?
立石です。
[#15669] cannot install ruby-gtk into FreeBSD 2.2.x — TAKAHASHI Masayoshi <maki@...>
Ruby Workshopのお手紙(請求書とも言う)が届いてうれしい高橋征義です。
いがらしです。
高橋征義です。
まつもと ゆきひろです
いがらしです。
まつもと ゆきひろです
わたなべです.
わたなべです.
いがらしです。
まつもと ゆきひろです
いがらしです。
小松です。
ごとけんです
小松です。
ごとけんです
小松です。
[#15679] about postgres-0.5.1 — goto@...
後藤@横河工事です。たびたびお世話になります。
前田です。
後藤@横河工事です。
まつもと ゆきひろです
後藤@横河工事です。
立石です。
まつもと ゆきひろです
笠原@Ruby初心者です.初めまして.
まつもと ゆきひろです
西@九大です。お久しぶりです。
まつもと ゆきひろです
[#15700] Ruby 1.3.6 — Yukihiro Matsumoto <matz@...>
Ruby 1.3.6 is out, check out:
[#15704] Ruby 1.3.6 — Yukihiro Matsumoto <matz@...>
Ruby 1.3.6 is repacked, check out:
[#15720] ruby debugger (like gdb attach) — kikutani@...
前にも2度ほど質問しましたが、cursesとかslangとかののrubyアプリを
まつもと ゆきひろです
On Fri, 30 Jul 1999 12:53:46 +0900,
Fri, Jul 30, 1999 at 02:13:13PM +0900 において
なひです.
On Sun, 1 Aug 1999 21:37:31 +0900,
なひです.
On Sat, 14 Aug 1999 14:49:39 +0900,
まつもと ゆきひろです
On Tue, 17 Aug 1999 12:37:37 +0900,
Wed, Aug 18, 1999 at 02:21:00AM +0900 において
なひです.なんか今ごろ.^^;
日時 Tue, 7 Sep 1999 19:00:14 +0900 の
[#15757] class compare — SONODA Yoshihide (園田 吉英) <ysonoda@...>
こんにちは、園田@九大です。
[#15761] alias new open — たむら けんいち <tamura-r@...>
たむら です。
[#15784] awk の gsub に相当するカウンターはないですか。 — Yukari Ono <fairy@...>
はじめまして、小野 ゆかり と申します。
[#15787] ERb について — 松尾尚典 <matsuo_hisanori@...21.odn.ne.jp>
松尾です。
[#15805] ruby-gtk-0.20 make install error — kikutani@...
ruby-gtk-0.20 ですが、make install のとき
[ruby-list:15406] dRuby/rudy/DRb
咳です。
次期shttpsrvのモジュールにと温めていた分散(?)Rubyを
シンプルに書き直してみました。1.2系では動きません。
お目汚しにどうぞ。
method_missing のあたりがとくに自信ないです。
drb.rb --- distributed Rubyモジュール
drbs.rb --- サンプルサーバー
drbc.rb --- サンプルクライアント
分散オブジェクトって聞きかじった程度なので
どんな機能が必要でどんな用語があるかなど、
よくわかっていないのでへんな間違いがあると思います。
使い方
はじめに自局の Remote Object ハンドラを起動します。
front はクライアントが Remote Object を指定しなかったときに
返事をするオブジェクトです。
DRb.start_server('druby://hostname:port', front)
ネーミングサービスなどは front を使って実現できそうです。
クライアントはデフォルトの Remote Object を作って、
普通にメッセージを送ります。
ro = DRbObject.new(nil, 'druby://server:prot')
ro.sample(1, DRbEx.new(2), 3)
引数のオブジェクトは Marshal::dump して送りますが、
dump不能なときは Remote Object に変換されて送ります。
dumpされたくないときは、dumpできないようにしておくか、
DRbObject.new(obj) で Remote Object に明示的に変換して逃げます。
GCされて動かなくなりそうなときは自分で保護して下さい。
drb.rb
#!/usr/local/bin/ruby
=begin
Tiny distributed Ruby --- dRuby
DRb --- dRuby module.
DRbProtocol --- Mixin class.
DRbObject --- dRuby remote object.
DRbConn ---
DRbServer --- dRuby message handler.
=end
require 'socket'
require 'marshal'
module DRb
def start_service(uri, front=nil)
@uri = uri.to_s
@front = front
@server = DRbServer.new(@uri)
@thread = @server.run
end
module_function :start_service
attr :uri
module_function :uri
attr :thread
module_function :thread
attr :front
module_function :front
end
module DRbProtocol
def parse_uri(uri)
if uri =~ /^druby:\/\/(.+?):(\d+)/
host = $1
port = $2.to_i
[host, port]
else
raise RuntimeError, 'can\'t parse uri'
end
end
def dump(obj, soc)
begin
str = Marshal::dump(obj)
rescue
ro = DRbObject.new(obj)
str = Marshal::dump(ro)
end
soc.write(str) if soc
return str
end
def send_request(soc, ref,msg_id, *arg)
dump(ref, soc)
dump(msg_id.id2name, soc)
dump(arg.length, soc)
arg.each do |e|
dump(e, soc)
end
end
def recv_reply(soc)
succ = Marshal::load(soc)
result = Marshal::load(soc)
[succ, result]
end
def recv_request(soc)
ro = Marshal::load(soc)
msg = Marshal::load(soc)
argc = Marshal::load(soc)
argv = []
argc.times do
argv.push Marshal::load(soc)
end
[ro, msg, argv]
end
def send_reply(soc, succ, result)
dump(succ, soc)
dump(result, soc)
end
end
class DRbObject
def initialize(obj, uri=nil)
@uri = uri || DRb.uri
@ref = obj.id if obj
end
def method_missing(msg_id, *a)
succ, result = DRbConn.new(@uri).send_message(self, msg_id, *a)
raise result if ! succ
result
end
attr :ref
end
class DRbConn
include DRbProtocol
def initialize(remote_uri)
@host, @port = parse_uri(remote_uri)
end
def send_message(ref, msg_id, *arg)
begin
soc = TCPSocket.open(@host, @port)
send_request(soc, ref, msg_id, *arg)
recv_reply(soc)
ensure
soc.close if soc
# ObjectSpace.garbage_collect
end
end
end
class DRbServer
include DRbProtocol
def initialize(uri)
@host, @port = parse_uri(uri)
@soc = TCPServer.open(@port)
@uri = uri.dup
end
def run
Thread.start do
while true
proc
end
end
end
def proc
ns = @soc.accept
Thread.start do
begin
s = ns
begin
ro, msg, argv = recv_request(s)
if ro and ro.ref
obj = ObjectSpace._id2ref(ro.ref)
else
obj = DRb.front
end
result = obj.__send__(msg.intern, *argv)
succ = true
rescue
result = $!
succ = false
end
send_reply(s, succ, result)
ensure
close s if s
# ObjectSpace.garbage_collect
end
end
end
end
drbs.rb
#!/usr/local/bin/ruby
require 'drb.rb'
class DRbEx
def initialize
@hello = 'hello'
end
def hello
@hello
end
def sample(a, b, c)
a.to_i + b.to_i + c.to_i
end
end
if __FILE__ == $0
DRb.start_service('druby://localhost:7640', DRbEx.new)
DRb.thread.join
end
#!/usr/local/bin/ruby
require 'drb.rb'
class DRbEx2
def initialize(n)
@n = n
end
def _dump
raise TypeError, 'can\'t dump'
end
def to_i
@n.to_i
end
end
if __FILE__ == $0
DRb.start_service('druby://localhost:7950')
ro = DRbObject.new(nil, 'druby://localhost:7640')
p ro.hello
p ro.sample(DRbEx2.new(1), 2, 3)
p ro.sample(1, ro.sample(DRbEx2.new(1), 2, 3), DRbEx2.new(3))
end