[Sugar-devel] Collaboration support for sugar web activities

Emil Dudev emildudev at gmail.com
Fri Jan 10 15:10:25 EST 2014

After a lot of debugging of javascript, I'm finally able to show a small
preview of what TogetherJS will look like.
The branches will be at the bottom.

For testing purposes I've chosen the Get Things Done web activity.
The first thing I added to GTD was colors, so entries by different users
can be distinguished. This is probably not the best way, but it's simple.
When you open the activity, you'll notice a new icon at the top. When you
click on the icon, TogetherJS will start. You will notice it's panel at the
right side of the screen. There you should have access to the chat and some
user options (I've disabled the audio chat).
After TogetherJS has started, you can go to the network view and invite a
user. Because this feature is not fully implemented, only the creator will
be able to invite other users. Also, there will be little to no indication
of an accepted invite.
When the other user accepts the invite, GTD will start and TogetherJS will
start automatically, too. Since it's still in development, Mozilla's public
hub server is used, and it may take a while for the connection to start.
With me it takes about 10-15 seconds before the session starts.
After that, the users can begin collaborating. They can see their pointers
(I've disabled click indication). The list should be synced. TogetherJS's
chat is available the entire time.
Since GTD is simple, it was easy to setup list syncing. The code can be an
I've noticed some bugs in my syncing code, but it's nothing big and you can
still see TogetherJS's capabilities.

About the code:
I've implemented only the bare minimum to get my tests working. Full
support of sugar's invites is needed (indication of accepted invite, list
of users on the shared activity...).
The code is full of different kind of notes (mostly TODO ones). This is
just on this stage.
About the javascript code: I've added a file collaboration.js, which should
be the interface between an activity and TogetherJS. The file I've created
is... not good enough. Probably it would be best to integrate it with a
Storage element, like it is done in dictstore. I have no idea how such an
API would look like.
As noted above, currently Mozilla's hub server is used. I have plans to
redirect this through telepathy, but I'll probably work on that next week.

A long email with lots of information. I've probably forgot to mention
something. If there is something, I'll add it later.

sugar: https://github.com/edudev/sugar/tree/collaboration
gtd-activity: https://github.com/edudev/gtd-activity/tree/collaboration
togetherjs (This is not needed, it's just to show the changes I've made):

Emil Dudev

On Tue, Jan 7, 2014 at 9:52 AM, Emil Dudev <emildudev at gmail.com> wrote:

> Hello,
> Thanks to Manuel Quiñones, I was able to check out in detail a Mozilla
> project - https://togetherjs.org
> TogetherJS is a javascript library for... well, collaboration.
> It consists of a client side and a server side.
> The server side acts only as a bridge between clients and it repeats
> the messages it recieves. It's nothing complicated, nothing
> interesting, I'll ignore that for now.
> Once in a TogetherJS session, users can communicate with each other
> (there is a chat offered by TogetherJS). User's pointers are also
> shared (if desired). There also other features like audio chat and
> video syncing, which are somewhat experimental (by what I understood
> from the docs).
> More importantly, except these features, the library comes with an
> API, which will allow web activity authors to sync different objects
> from the page. Everything is controlled by javascript.
> I've already started on integrating TogetherJS with sugar.
> In order for two users to be in the same session, they must share one
> togetherjs ID. I've based this ID sharing on telepathy - like the
> current activity invites are sent.
> After having the same ID, the session is then supported by the upper
> mentioned server. Mozilla has offered such a server for public use,
> but I do not think that sugar should be using it. I think that it
> would be best if this is handled via telepathy, just like the current
> activities communicate. As mentioned above, the server has no special
> role other than receiving messages and sending them to all
> participating clients.
> An alternative would be to host such a server for sugar's needs (the
> server is a single nodejs script). I do not like this way, as it would
> cause web activities to depend on an Internet connection.
> I hope that by the end of the week I can show a web activity having
> collaboration support based on TogetherJS.
> Regards,
> Emil Dudev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sugarlabs.org/archive/sugar-devel/attachments/20140110/6c28898c/attachment.html>

More information about the Sugar-devel mailing list