This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
uf:guanotes [2008/10/01 10:38] elisag |
uf:guanotes [2009/11/18 15:11] elisag |
||
---|---|---|---|
Line 5: | Line 5: | ||
Guanotes application allows flockrs to post notes, called guanotes, to the ambient ( i.e any device available in the surroundings ranging from other flockr device to devices installed on public places such as KK). This is a concept similar to Stickies application in Mac but guanotes can hop from one device to another. | Guanotes application allows flockrs to post notes, called guanotes, to the ambient ( i.e any device available in the surroundings ranging from other flockr device to devices installed on public places such as KK). This is a concept similar to Stickies application in Mac but guanotes can hop from one device to another. | ||
- | Flockrs can thus discover other flockrs guanotes, store them and exchange them later with other flockrs such that guanotes can be percolated through the entire Urbiflock. | + | Flockrs can thus discover other flockrs guanotes, store them and exchange them later with other flockrs such that guanotes can be 'percolated' |
- | Flockrs can also subscribe to a particular type of guanotes such that they are automatically notified whenever they meet a flockr carrying guanotes of that particular type. | + | Flockrs can also subscribe to a particular type of guanotes such that they are automatically notified whenever they meet a flockr carrying guanotes of that particular type. Currently, flockrs can subscribe to receive guanotes sent to a particular flock. This functionality is reminiscent to the subscription to a mailing list. |
Another idea is that flockrs can stop the percolation of guanotes. For example, if a flockr detects that a spam guanote or a guanote with unapropiate content, it could stop its propagation. | Another idea is that flockrs can stop the percolation of guanotes. For example, if a flockr detects that a spam guanote or a guanote with unapropiate content, it could stop its propagation. | ||
- | ==== Design | + | ==== What is a guanote? |
- | To implement | + | A guanote consists of a message and a receiver list (a flock or individual flockrs). |
+ | In order to avoid flooding the network, TOTAM ensures that only flockrs belonging to the receiver list are used as //routers// (so that only potential targeted flockrs carry guanotes). | ||
- | The idea is to build a framework similar to TOTA, called AmbientTOTA, | + | A guanote can be sent to a flock or an explicit collection of flockrs. In the later case end users can enumerate the targeted flockrs |
- | AmbientTota has been designed to be independent from service discovery. So, Guanotes will also have to implement some glue codeto plug in the discovery mechanism of Urbiflock (via Flockr). | + | ==== Usage Scenario ==== |
- | Here comes the public interface to interact with an AmbientTota framework: | + | {{:uf: |
- | < | + | The above figure illustrates the propagation of a guanote in a campus-based scenario. It shows six flockrs connected in Urbiflock and running the Guanotes application. The communication range of their devices is depicted with a dotted line while the colored dot on their devices denotes the gender of the flockr |
- | makeTupleSpace() | + | |
- | makeTuple(tupleID) | + | |
- | extendTuple: | + | |
- | </ | + | |
- | A tuple space (ts) in AmbientTota basically consists of a local ts, an ambient ts (to inject tuples in the ambient). The public interface of an ts is the following: | ||
- | < | ||
- | // tota operations to manage a local ts | ||
- | def add(tuple) | ||
- | def delete(template) -> vector with the deleted tuples | ||
- | matching the template | ||
- | def read(template) -> vector with the matching tuples | ||
- | |||
- | //publishes a tuple into the ambient ( ~ inject in TOTA) | ||
- | def inject(tuple) -> subscription object to cancel the injection | ||
- | |||
- | // places a listener on to the local TS ( ~ subscribe in TOTA) | ||
- | // it returns a publication object to be able to unsusbscribe | ||
- | when: template matches:{ | tuple | | ||
- | // code | ||
- | } | ||
- | //Templates are currently boolean expressions on tuples. | ||
- | Example of template applied to guanotes: | ||
- | { |guanote| | ||
- | |||
- | //methods belonging to the propagation protocol | ||
- | // notifies the ts of the discovery of another one | ||
- | // and starts the propagation protocol (send side) | ||
- | def notifyTSDiscovered(ts) | ||
- | // notifies the arrival of tuples from a ts | ||
- | // second stage of the propagation protocol (receive side) | ||
- | def receiveTyples(tuples) | ||
- | |||
- | </ | ||
- | |||
- | A tuple in our system is just the object contained in a local TS offering the following API to propagate itself: | ||
- | |||
- | < | ||
- | // called in every tuple at pass() | ||
- | def decidePropagation() -> boolean | ||
- | // specifies operations on the local TS | ||
- | def doAction (); | ||
- | // specifies operations on the tuple itself | ||
- | def changeTupleContent() -> tuple | ||
- | // if true -> note gets added to local TS | ||
- | def decideStore () -> boolean | ||
- | // if true -> tuple gets unexported and deleted from local TS. | ||
- | //new operation not in TOTA | ||
- | def decideDie() -> boolean | ||
- | </ | ||
- | |||
- | decideDie() is there for discontinuous decidePropagation functions. for example, tuples that should be only propagated every Tuesday could not implemented with TOTA because the propagation protocol only gets called once. We change this by providing decideDie() that gets called when you decide not to propagate. Like this a tuple can still be propagate at a later point in time, despite the fact that the decidePropagation function has evaluated to false at a certain moment. |