[REBOL] A REBOL challenge - The Information World
From: g::santilli::tiscalinet::it at: 3-Dec-2001 18:45
A REBOL challenge
[Permission is explicitly granted to publish this document on the
REBOL Zine, on REBOLForces or on any other REBOL-related
With this message, I'm going to launch a challenge. The goal is to
create a peer-to-peer communication system as described below;
implementations will be judged by the members of the REBOL mailing
list, with regards to:
* Code elegance and simplicity
If my free time will permit, I'll partecipate to the challenge
too; a time limit will be set in agreement with the participants.
The resulting code is required to be freely distributable at least
inside the REBOL mailing list; freely distributable software will
be preferred over restricted software because to be useful the
system has to be available to all the users of the Internet.
[I'm quite sure Maarten will participate with a Rugby based
implementation; I'd like to have someone doing a REBOL/IOS based
If you are interested, please read the following document
carefully; comments or requests for clarifications will be
gratefully accepted. [Since this version can be considered a sort
of draft, I would be vert grateful to those of you that will
really be brave enough to read it all and offer me some comments.]
The "Information World"
I want to create a sort of "virtual world". I will call it the
Information World (IW). This world is made of informations, from
static data to "live" entities able to interact with the rest of
The IW is based on three simple entities that the implementation
has to represent. These are "Places", "Objects" and "Agents".
A "Place" is a location in the IW. It can contain objects and
agents, and it can be connected to other places. (The connection
does not necessarily need to be a TCP/IP connection or something
like that; you can think of it as a "road" going from one place to
another. Also notice that if place A is connected to place B,
automatically place B is connected to place A.) Agents can move
from one place to another only using a connection (normal agents
cannot create a new connection).
The implementation of a place has to provide a way for agents to
know what other objects and agents are present in the place. I.e.
the agents will have to be able to query the place where they are
to know what's there besides of them.
are "things", such as repositories, containers,
documents, and so on. An object can contain other objects; for
example, a book shelf object might contain book objects. By
themselves, objects cannot move from one place to another or
interact with other objects or agents. Only agents are able to
iteract with other agents or objects.
The implementation should make it easy for objects to be moved
from a place to another (by agents); also, agents must be able to
query an object to know what actions it can perform on it (for
example, a book shelf might provide a "search" action to allow an
agent to search for a book, and so on).
The implementation has to provide an easy way for users to create
new objects. Also, objects can be cloned.
are the most interesting entity of the IW. They are the
key for the communication, since they are the only entity that can
move from a place to another and interact with other entities.
They can also carry objects, but there should be a limit on the
size of the objects an agent can carry on a given connection.
Implementations have to deal with security issues raised by the
presence of agents.
In particular, two categories of agents have to exist: "Residents"
and "Tourists". The only resident agents available should be:
* The "Road Builder", which creates connections with other
places. It is the only entity that can create connections; of
course it can destroy a connection too.
* The "Sentinel". A sentinel can be placed on every connection
to verify the identity of coming tourists and place restrictions
on them or even disallow their entrance. Each sentinel should be
in communication with the one on the other side (if present) to
be able to identify coming tourists. (Identifying might just
mean assigning a "trust level" or something like that.)
* The "Mail Agent", which is responsible of sending (big)
objects to other places. The mail agents can be asked by an
agent to send an object to another mail agent on another place;
it should also be possible for mail to be delivered to a
specific agent in a place (passing thru the mail agent of that
place). The implementation should provide an efficent way to
transfer any amount of data. (This makes up for the limit of
agents to carry objects; place-to-place connections should be
optimized for the transport of tourists with rather small
baggage, while mail agent-to-mail agent "connections" might be
optimized for transferring big objects.)
* The "Banker". A place might have a banker which holds
important objects. Objects available in the place can be used
(and cloned) by any agent, so a banker might be needed to
restrict access to some objects.
The implementation should not allow for a tourist to become a
resident, unless the user explicitly wants it to (and he/she
should be warned that this is a security issue). Residents
(sentinels and mail agents in particular) should have a secure way
to identify themselves. (There's no reason for a resident to
become a tourist and to move from one place to another; anyway, if
an implementation allows the user to do this, it should take care
of any security issue that may rise.)
Tourists can be of any kind and freely move from one place to
another (provided they get permission from the sentinels)
traveling the IW. The implementation should provide a way for the
user to create new tourists. Tourists can be cloned (with or
without their baggage :). Also, the user has to have a simple way
to instruct a tourist to do something (such as "Go on and search
for this book!").
Because it looks like a lot of fun. :-) And also because our brain
is just a network of rather simple things... ;)
Being visionary today, ;-)
Gabriele Santilli <[giesse--writeme--com]> - Amigan - REBOL programmer
Amiga Group Italia sez. L'Aquila -- http://www.amyresource.it/AGI/