On Presence updates/User Profiles/Collaboration

From OLPC
Revision as of 06:39, 29 April 2008 by 18.97.7.101 (talk) (New page: == Presence updates == We should aim for a user experience that allows a child to view not only the status of their friends (who is online, what activities they participate in), but also t...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Presence updates

We should aim for a user experience that allows a child to view not only the status of their friends (who is online, what activities they participate in), but also the status of as many other children other children as possible. It is reasonable not to expect to have thousands of children in a plain mesh network, but it is not this upper limit that should be driving the choice of having mesh network-wide information about all other children and all currently shared activities. Instead, we should aim to constantly provide this information and attempt to drive upwards the upper limit of the children we can support in a simple mesh, before we fall back on a server for centralized information. This would allow children to reach beyond their "friends" circle onto other children that were considered to be "strangers", enlarge their community and make their experience more interesting.


Presence updates are notifications of changes that happen to a user's profile by the user. These notifications MAY contain the new user profile (I can piggyback my new nickname on the notification itself), or MAY trigger a request for a complete update (if I change my picture and this will trigger requests by other users for my new picture - doing the same for just the nickname will have absurd overhead).


Discovery updates (to adopt Scott's terminology) do not bare any information about the user, other than the fact that she is online and reachable. The flow of discovery updates throughout the mesh network allow users to build a list of contacts that are currently reachable within the mesh network, but provides no further information about those users. At this point, matching cached information to unique user IDs in the contact list may provide (potentially stale) profile information about a user.


When a user receives a discovery update from a target user that has not been encountered before, she MAY choose to request a full presence update (includes information about the whole profile) from the target user. The user MAY also cache received profile information about the target user for future reference. If profile information was previously cached, a presence update (hash of current target user's profile) MAY be requested and compared to the (hash of the) cached profile and then act accordingly.


By separating presence updates from discovery updates, we minimize the information necessary to maintain basic information on which unique IDs are present in the mesh network (thus maximizing scalability even without the use of "optimizations" such as only exchange discovery updates with friends, use of a central XMPP server, etc), while we maintain an extensible set of information about the user that may include fields of arbitrary size like large pictures.


User Profile

The user profile is a set of fields describing user information and user status. User information MUST include some basic information such as nickname and colors and MAY include biographical information such as real name, age, sex, class, year, etc. User status MUST include a list of activities that the user is currently sharing publicly and MAY include other information such as a short status ("online", "away", "extended away", etc), and a status message ("feeling sleepy", "I'm bored!").


A change by the user to her user profile, triggers an update within the mesh network as described in the previous section. As a result, we attain central control within the network stack not only of how user information gets locally stored and globally shared by means of presence updates, but we can also reuse the same mechanism as a simple collaboration mechanism: by including the list of shared activities (by the user) in her user profile and propagating presence updates, we have detailed information not only of user information for all other users, but also a detailed list of what activities are being shared and by whom.


Collaboration

When a user chooses to share an activity, her user profile is altered and a presence update is triggered within the network. A row is appended to her user status containing three fields:



Activity IDs

Activity IDs are closely related to networking, mainly in two ways:

  1. When providing a list of activities currently shared within a