Patrick Stiegeler | 9 Dec 07:14 2002
Picon

Hilfe: DRb/TupleSpace - Problem


	Hallo,

Ich habe begonnen, mich mit Rubys TupleSpace zu beschaeftigen und bin auch
gleich auf ein Problem gestossen, das ich mir nicht erklaeren kann. Auch
im Netz habe ich dazu nichts gefunden. Vielleicht kann mir jemand von euch
dabei helfen?

Es geht um folgenden TupleSpace client:

	require 'drb'
	require 'tuplespace'

	DRb.start_service
	tuple_space = DRbObject.new(nil, "druby://localhost:8888")

	class Dummy
        	def initialize
        	end
	end

	s = Dummy.new
	# s = 7
	tuple_space.out [s]

Die letzte Zeile liefert die Fehlermeldung:

(druby://localhost:8888)
/usr/local/lib/ruby/site_ruby/1.6/tuplespace.rb:93:in `put_que': undefined
method `length' for #<DRb::DRbUnknown:0x40234198> (NameError)
(Continue reading)

Clemens Fischer | 9 Dec 18:23 2002

Re: Hilfe: DRb/TupleSpace - Problem

Patrick Stiegeler <stiegele <at> informatik.uni-freiburg.de>:

> Ich habe begonnen, mich mit Rubys TupleSpace zu beschaeftigen und bin auch
> gleich auf ein Problem gestossen, das ich mir nicht erklaeren kann. Auch
> im Netz habe ich dazu nichts gefunden. Vielleicht kann mir jemand von euch
> dabei helfen?

entschuldige die bloede frage:  was ist tupelspace, und wofuer kann
man es gebrauchen?

  clemens
armin | 9 Dec 17:36 2002

Re: Hilfe: DRb/TupleSpace - Problem

> > Ich habe begonnen, mich mit Rubys TupleSpace zu beschaeftigen und bin auch
> > gleich auf ein Problem gestossen, das ich mir nicht erklaeren kann. Auch
> > im Netz habe ich dazu nichts gefunden. Vielleicht kann mir jemand von euch
> > dabei helfen?
>
> entschuldige die bloede frage:  was ist tupelspace, und wofuer kann
> man es gebrauchen?
>
Ich habe seit Monaten nichts mehr damit gemacht, aber ich
denke so in etwa ist es.

Der Name Tuple kommt aus der Mathematik und beschreibt ein Array von
Werten. Ein Tuple-space kann verteilt sein in einem greren Tuple-Space,
wie eine Schachtel in einer Schachtel oder die bekannten russischen Puppen.

Jeder Tuplespacke kennt drei Operatoren:
- out: ein Tuple speichern
- in:  ein Tuple aus dem Tuple space herausholen
- rd:  ein Tuple aus dem Tuple space auslesen, aber es bleibt im
Tuplespace.

Die Methoden in und rd sind sehr maechtig, da sie einen
Mustervergleich durchfuehren knnen. Gibt man hier ein Muster an,
wird der Tuplespace ein Tuple zurueckliefern, auf welches das Muster
passt.

Wenn unser kommunaler Tuplespace registriert, welche Musiktitel man sich
gerade anhrt, kann man diese Information (mit dem Benutzernamen als Schlssel) speichern:

ts.out [ 'armin', track ]
(Continue reading)

Patrick Stiegeler | 10 Dec 05:19 2002
Picon

Re: Hilfe: DRb/TupleSpace - Problem


	Hallo,

Nach einigem Suchen habe ich herausgefunden, warum sich mein
TupleSpace-Programm nicht wie erwartet verhaelt. Es liegt am Verhalten von
DRb. Falls sich noch jemand fuer die Loesung des Problems interessiert:

Es sieht so aus, als ob bei einem Zugriff auf das TupleSpace-Objekt des
Servers via "tuple_space.out [s]" die Parameter (Hier ein Array mit einem
Dummy) serialisiert und zum Server geschickt werden. Dort angekommen
muessen wieder Objekte daraus gebastelt werden und hier ist es wohl
so, dass der Marshal die Klassendefinition der zu bastelnden Objekte
kennen muss. Fuege ich naemlich dem Server die Definition der Dummy-Klasse
hinzu, so funktioniert alles wie beabsichtigt.

Soweit ich das ueberblicke ist es also nicht ohne weiteres moeglich einen
TupleSpace-Server laufen zu lassen, der als Austauschstelle fuer
beliebige, ihm unbekannte Objekte dient. Schade...

On Mon, 9 Dec 2002, Patrick Stiegeler wrote:

> [...]
>
> Es geht um folgenden TupleSpace client:
>
> 	require 'drb'
> 	require 'tuplespace'
>
> 	DRb.start_service
> 	tuple_space = DRbObject.new(nil, "druby://localhost:8888")
(Continue reading)

Clemens Fischer | 10 Dec 14:44 2002

Re: Hilfe: DRb/TupleSpace - Problem

Patrick Stiegeler <stiegele <at> informatik.uni-freiburg.de>:

> ... dass der Marshal die Klassendefinition der zu bastelnden Objekte
> kennen muss. Fuege ich naemlich dem Server die Definition der
> Dummy-Klasse hinzu, so funktioniert alles wie beabsichtigt.

vielleicht war es ja auch so gedacht!  ich persoenlich haette mich
grfragt, woher die "andere seite" denn meine object-struktur kennt.

> Soweit ich das ueberblicke ist es also nicht ohne weiteres moeglich
> einen TupleSpace-Server laufen zu lassen, der als Austauschstelle
> fuer beliebige, ihm unbekannte Objekte dient. Schade...

also muesste es meta-information fuer objekte geben, die dem marshal
zum ausfuellen mitgegeben wird.  ob man das wohl nachruesten kann?
so ungefaehr, dass man zunaechst struktur-info schickt und ein
kleines prograemmelchen auf der empfaengerseite daraus objekt-
definitionen baut.  geht das denn eigentlich?

  clemens
Pit Capitain | 10 Dec 21:22 2002
Picon

Re: Hilfe: DRb/TupleSpace - Problem

On 10 Dec 2002 at 14:44, Clemens Fischer wrote:

> Patrick Stiegeler <stiegele <at> informatik.uni-freiburg.de>:
> 
> > Soweit ich das ueberblicke ist es also nicht ohne weiteres moeglich
> > einen TupleSpace-Server laufen zu lassen, der als Austauschstelle
> > fuer beliebige, ihm unbekannte Objekte dient. Schade...
> 
> also muesste es meta-information fuer objekte geben, die dem marshal
> zum ausfuellen mitgegeben wird.  ob man das wohl nachruesten kann?
> so ungefaehr, dass man zunaechst struktur-info schickt und ein
> kleines prograemmelchen auf der empfaengerseite daraus objekt-
> definitionen baut.  geht das denn eigentlich?

Wenn ich mich richtig erinnere, hat TaskMaster so etwas wie "remote 
require" implementiert. Schaut doch mal unter:

http://www.ruby-lang.org/raa/list.rhtml?id=422

Gruß,
Pit
Patrick Stiegeler | 11 Dec 01:20 2002
Picon

Re: Hilfe: DRb/TupleSpace - Problem


Danke, fuer denn Tip mit dem "remote require". Das ist wohl eine gute
Notloesung. Notloesung deshalb, weil ich am liebsten immer noch ein
anonymes schwarzes Brett haette. Ich haette gerne eine Pinnwand, ohne
meinem Schreiner erzaehlen zu muessen, was fuer Zettel ich daran pinnen
werde.
  Aber das geht wohl, wie Clemens auch gemeint hat, nur dadurch, dass ich
bei Bedarf das gesamte Objekt und nicht nur seinen Zustand uebermittle.
Weiss jemand, ob das geht? Kann man in Ruby komplette Objekte serialisieren,
d.h. so verschicken, dass sie auf der anderen Seite wieder ins Leben gerufen
werden koennen, ohne dass der Empfaenger vorher etwas ueber das Objekt weiss?
Einfach eine Klassendefinitionsdatei mitzuschicken ist wohl nicht das
wahre, denn schliesslich kann die Klasse zum Zeitpunkt des Versendens des
Objektes ganz anders aussehen. Ohjeh: ich glaub, transparentes,
verteiltes Ruby ist ganz schoen knifflig...
Michael Neumann | 11 Dec 08:10 2002
Picon
Picon

Re: Hilfe: DRb/TupleSpace - Problem

Patrick Stiegeler wrote:
> 
> Danke, fuer denn Tip mit dem "remote require". Das ist wohl eine gute
> Notloesung. Notloesung deshalb, weil ich am liebsten immer noch ein
> anonymes schwarzes Brett haette. Ich haette gerne eine Pinnwand, ohne
> meinem Schreiner erzaehlen zu muessen, was fuer Zettel ich daran pinnen
> werde.
>   Aber das geht wohl, wie Clemens auch gemeint hat, nur dadurch, dass ich
> bei Bedarf das gesamte Objekt und nicht nur seinen Zustand uebermittle.
> Weiss jemand, ob das geht? Kann man in Ruby komplette Objekte serialisieren,
> d.h. so verschicken, dass sie auf der anderen Seite wieder ins Leben gerufen
> werden koennen, ohne dass der Empfaenger vorher etwas ueber das Objekt weiss?
> Einfach eine Klassendefinitionsdatei mitzuschicken ist wohl nicht das
> wahre, denn schliesslich kann die Klasse zum Zeitpunkt des Versendens des
> Objektes ganz anders aussehen. Ohjeh: ich glaub, transparentes,
> verteiltes Ruby ist ganz schoen knifflig...

Probier mal folgendes:

  class YourClass
    include DRbUndumped
    ...
  end

In diesem Fall wird das Objekt nicht serialisiert, sondern eine Referenz darauf
an die andere Seite geschickt. 

MfG,

  Michael
(Continue reading)

Patrick Stiegeler | 11 Dec 10:23 2002
Picon

Re: Hilfe: DRb/TupleSpace - Problem


On Wed, 11 Dec 2002, Michael Neumann wrote:

> [...]
>
> Probier mal folgendes:
>
>   class YourClass
>     include DRbUndumped
>     ...
>   end
>
> In diesem Fall wird das Objekt nicht serialisiert, sondern eine Referenz darauf
> an die andere Seite geschickt.

Jaaaaaaaaaaa!!!!!!!!!

Danke! Genau das habe ich gesucht.....
Clemens Fischer | 13 Dec 17:18 2002

Re: Hilfe: DRb/TupleSpace - Problem

Patrick Stiegeler <stiegele <at> informatik.uni-freiburg.de>:

> On Wed, 11 Dec 2002, Michael Neumann wrote:
>
>>   class YourClass
>>     include DRbUndumped
>>     ...
>>   end
>>
>> In diesem Fall wird das Objekt nicht serialisiert, sondern eine Referenz darauf
>> an die andere Seite geschickt.
>
> Jaaaaaaaaaaa!!!!!!!!!

na, jetzt kannste bitte auch erklaeren, wie das funktioniert.  wenn
ich referenz lese, denke ich zeiger.  wenn ich zeiger lese, denke ich
erst sehr viel spaeter an strukturinformation, und ausserdem muessen
alle, die einen zeiger benutzen, vorher schon wissen, worauf der
ueberhaupt zeigen soll!

  clemens

Gmane