<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sugarlabs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bemasc</id>
	<title>Sugar Labs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sugarlabs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bemasc"/>
	<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/go/Special:Contributions/Bemasc"/>
	<updated>2026-05-14T20:30:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Talk:Features/Terminal_Sharing&amp;diff=41204</id>
		<title>Talk:Features/Terminal Sharing</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Talk:Features/Terminal_Sharing&amp;diff=41204"/>
		<updated>2009-12-06T17:04:29Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This sounds quite fun and useful. Is there a reason this couldn&#039;t be integrated with the Terminal activity itself, with these features enabled when the activity is shared? -[[User:Eben|Eben]] 02:04, 25 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: There is no major technical reason that this sharing functionality could not be integrated into the main Terminal activity.  However, there is a security issue.  The Terminal activity exposes the full power of the user over the machine.  On an XO in the default configuration, this includes root access with no password.  Even without root access, anyone participating in the activity could easily &amp;quot;rm -rf .sugar&amp;quot; and delete your entire Journal, etc.  Advising users not to share the Terminal with people they don&#039;t trust might be sufficient... I&#039;m not sure how to reach consensus on this point.&lt;br /&gt;
&lt;br /&gt;
:ShareTerm, simply by not being named &amp;quot;Terminal&amp;quot;, is treated as a normal activity, and so is sandboxed by Rainbow... if Rainbow is present. If Rainbow is not present, then ShareTerm has no security advantage at all.  &lt;br /&gt;
&lt;br /&gt;
:Adding sharing to Terminal itself, in an unsafe fashion, would have the distinct advantage of allowing deep technical troubleshooting and problem-solving directly over the collaboration system.  I could invite an expert onto my machine to perform arbitrary upgrades and maintenance, and watch them as they work. Perhaps you can think of a clever user interface that will ensure &amp;quot;unsafe sharing&amp;quot; is only performed after careful consideration? Perhaps an activity that can only be shared with &amp;quot;Friends&amp;quot;? [[User:Bemasc|Bemasc]] 17:57, 6 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feature Acceptance ==&lt;br /&gt;
&lt;br /&gt;
Hi Benjamin,&lt;br /&gt;
&lt;br /&gt;
what would be the downside of packing the needed packages inside the activity? I guess one criteria for adding to the platform is: is this worthy for several activities? -[[User:Erikos|Simon Schampijer]] 04 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: My principal reason for wanting Screen to be a Sugar dependency is to avoid shipping binaries inside .xo bundles.  I strongly believe that .xo bundles should be &amp;quot;noarch&amp;quot;, to run on any platform.  I would be happy to ship the Screen source code and compile it on the user&#039;s machine, but gcc is not a sugar dependency either.&lt;br /&gt;
&lt;br /&gt;
: Additionally, as Eben noted, the functionality described here is quite close to Sugar&#039;s fundamental mission, and there is an argument for including it in Terminal.  Making Screen a Sugar dependency allows us to make these kinds of decisions later.  It also opens a door for other shared activities that make use of a shared command line. [[User:Bemasc|Bemasc]] 17:57, 6 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Hey Benjamin,&lt;br /&gt;
&lt;br /&gt;
Is there a way that this technology could be achieved without the dependencies, while maintaining security?  I&#039;m wondering about sending input and output over encrypted tubes rather than relying on sshd, and using some kind of key event trapping to redirect input instead of screen. It would be nice to keep Terminal&#039;s scrollback functionality etc. while sharing.  Perhaps you should post this activity to ASLO with instructions for installing the dependencies.  Bonus points for trapping the lack of the dependencies and showing a legible error message at startup!  [[User:Wade|Wade]] 12:55, 21 September 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: I&#039;m not using SSH here to maintain any kind of security.  In fact, it provides little cryptographic security, because the private key for the session is known and fixed.  I&#039;m using it simply because RSH (unencrypted remote shell) is no longer installed in most distributions.  SSH is being used here to provide bidirectional terminal access over the network.  This is difficult to achieve in any other way due to the notorious vagaries of the TTY subsystem.&lt;br /&gt;
: I haven&#039;t found any easy way to achieve the desired functionality without using Screen and OpenSSH.  These seem like fairly harmless dependencies to me, since OpenSSH is already installed on almost every Sugar machine, and GNU Screen is already installed on many or most Linux desktops.&lt;br /&gt;
: In contrast to Terminal Sharing, Sayamindu has recently implemented a sort of [http://lists.sugarlabs.org/archive/sugar-devel/2009-November/020799.html &amp;quot;Terminal Watching&amp;quot;] functionality.  He used the accessibility features of our Terminal widget to scrape the screen and send it over a tube.  This is also interesting, and does not introduce any new dependencies.  It is, however, a less powerful form of collaboration. [[User:Bemasc|Bemasc]] 17:04, 6 December 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code&amp;diff=35725</id>
		<title>Summer of Code</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code&amp;diff=35725"/>
		<updated>2009-08-25T00:47:47Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: fix link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{ GoogleTrans-en | es =show | bg =show | zh-CN =show | zh-TW =show | hr =show | cs =show | da =show | nl =show | fi =show | fr =show | de =show | el =show | hi =show | it =show | ja =show | ko =show | no =show | pl =show | pt =show | ro =show | ru =show | sv =show }}{{TeamHeader|Summer of Code|home=Summer of Code Project Home|xbgColor=ffe792}}&amp;lt;/noinclude&amp;gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
{{Draft}}&lt;br /&gt;
&lt;br /&gt;
From the 2009 FAQ: &amp;quot;Google Summer of Code (GSoC) is a global program that offers student developers stipends to write code for various open source projects.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sugar Labs Google SoC page: http://socghop.appspot.com/org/show/google/gsoc2009/sugarlabs&lt;br /&gt;
&lt;br /&gt;
This is a project under [[Development Team]]. [[User:Mchua|Mchua]] is the current project coordinator and can be contacted with any questions.&lt;br /&gt;
&lt;br /&gt;
== 2009 results ==&lt;br /&gt;
&lt;br /&gt;
We had a great year. All 5 of our students were successful, and several of them made really important improvements to Sugar. Here&#039;s the results:&lt;br /&gt;
&lt;br /&gt;
{{Version_support_for_datastore/results}}&lt;br /&gt;
&lt;br /&gt;
=== Karma ===&lt;br /&gt;
&lt;br /&gt;
The [[Karma]] GSoC project has been a success. Participant Felipe Lopez Toledo set out to create a high-level library for creating interactive digital learning lessons using only openweb technologies. The result is the [http://git.sugarlabs.org/projects/karma/repos/mainline/blobs/master/js/jquery.karma-0.3.js karma jQuery plugin] that provides high-level functions for manipulating image, audio, and internationalization.&lt;br /&gt;
&lt;br /&gt;
You can view the demo of [http://karma.sugarlabs.org/karma/examples/adding_up_to_10/index.html Adding up to 10] to see an example interactive lesson.&lt;br /&gt;
&lt;br /&gt;
The Karma Project is an initiative to create a platform that enables web developers to create compelling interactive learning materials for the Sugar Learning Environment without having to learn a new set of programming tools.&lt;br /&gt;
&lt;br /&gt;
=== Groupthink ===&lt;br /&gt;
The [[Summer_of_Code/2009/Groupthink|Groupthink GSoC Project]] successfully achieved its specified goals.  The student, Benjamin Schwartz, wrote&lt;br /&gt;
# a [http://bemasc.net/~bens/groupthink/groupthink.gtk_tools.SharedTextView-class.html gtk SharedTextView widget] that provides live shared editing in a self-contained object&lt;br /&gt;
# a [http://bemasc.net/~bens/groupthink/groupthink.groupthink_base.UnorderedString-class.html network interface] to allow sharing this widget over the network&lt;br /&gt;
# a SharedTextDemo activity (versions [http://lists.sugarlabs.org/archive/sugar-devel/2009-June/014795.html 1], [http://lists.sugarlabs.org/archive/sugar-devel/2009-June/015346.html 2], [http://lists.sugarlabs.org/archive/sugar-devel/2009-June/015713.html 3], [http://lists.sugarlabs.org/archive/sugar-devel/2009-July/016739.html 4], and [http://lists.sugarlabs.org/archive/sugar-devel/2009-July/017004.html 5]) to demonstrate the use of this widget&lt;br /&gt;
# an automated [http://bemasc.net/~bens/groupthink/groupthink.groupthink_base.Group-class.html#dumps serialization system] for saving and loading state [http://bemasc.net/~bens/groupthink/groupthink.sugar_tools.GroupActivity-class.html#read_file with the Journal]&lt;br /&gt;
# [http://bemasc.net/~bens/groupthink/groupthink.sugar_tools.GroupActivity-class.html other] code necessary so that Sugar activities could seamlessly rejoin a shared instance and merge in changes made offline&lt;br /&gt;
# [http://git.sugarlabs.org/projects/pippy/repos/pippy-groupthink/commits/0f30ab2a17670d3f7e7723fe4f4756333030c3e0 patches] to enable live shared editing of Python code, with syntax highlighting and Undo/Redo, in [http://activities.sugarlabs.org/en-US/sugar/addons/versions/4041#version-35 Pippy-35]&lt;br /&gt;
# extensive [http://bemasc.net/~bens/groupthink/ API documentation] for Groupthink.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support from Sugar Labs and Google, Groupthink has grown from a toy project into a library that developers can really use.&lt;br /&gt;
&lt;br /&gt;
== Previous Introduction ==&lt;br /&gt;
&lt;br /&gt;
The purpose of this page (was) to coordinate a Sugar Labs Summer of Code effort.&lt;br /&gt;
&lt;br /&gt;
=== What (made) a good project ===&lt;br /&gt;
&lt;br /&gt;
Our focus is on &#039;&#039;&#039;collaboration&#039;&#039;&#039; and &#039;&#039;&#039;community&#039;&#039;&#039; for the summer 2009 round of projects, though we&#039;ll also consider thoughtful proposals that lie outside these two areas and can make a strong case for how they would support the Sugar Labs [[Sugar_Labs|mission]]. &lt;br /&gt;
&lt;br /&gt;
==== Collaboration ====&lt;br /&gt;
&lt;br /&gt;
This refers to API or activity work that makes [[olpc:Activity_sharing | collaboration]] &amp;quot;work better.&amp;quot; A good metric for &amp;quot;works better&amp;quot; is to ask the following: &amp;quot;6 months after the summer ends, which projects are likely to have caused the highest increase in children-hours spent collaborating over Sugar Activities?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Community ====&lt;br /&gt;
&lt;br /&gt;
This refers to meta-work that makes it easy for Sugar to reach a broader [[Sugar Labs]]; this includes development tools (and accompanying implementation of processes and training), internationalization/localization, accessibility, infrastructure-building, and porting Sugar to other platforms. &lt;br /&gt;
&lt;br /&gt;
A good metric for &amp;quot;reaches a broader community&amp;quot; is to ask the following: &amp;quot;6 months after the summer ends, which projects are likely to cause the highest increase in SL community members that have participated consistently on a team for a minimum of 3 months?&amp;quot;&lt;br /&gt;
{{:Summer of Code/Getting Involved}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
==Subpages==&lt;br /&gt;
{{Special:PrefixIndex/{{PAGENAMEE}}/}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Participate]]&lt;br /&gt;
[[Category:Project]]&lt;br /&gt;
[[Category:GSoC]]&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code&amp;diff=35717</id>
		<title>Summer of Code</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code&amp;diff=35717"/>
		<updated>2009-08-24T21:57:26Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: Add Groupthink project info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{ GoogleTrans-en | es =show | bg =show | zh-CN =show | zh-TW =show | hr =show | cs =show | da =show | nl =show | fi =show | fr =show | de =show | el =show | hi =show | it =show | ja =show | ko =show | no =show | pl =show | pt =show | ro =show | ru =show | sv =show }}{{TeamHeader|Summer of Code|home=Summer of Code Project Home|xbgColor=ffe792}}&amp;lt;/noinclude&amp;gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
{{Draft}}&lt;br /&gt;
&lt;br /&gt;
From the 2009 FAQ: &amp;quot;Google Summer of Code (GSoC) is a global program that offers student developers stipends to write code for various open source projects.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sugar Labs Google SoC page: http://socghop.appspot.com/org/show/google/gsoc2009/sugarlabs&lt;br /&gt;
&lt;br /&gt;
This is a project under [[Development Team]]. [[User:Mchua|Mchua]] is the current project coordinator and can be contacted with any questions.&lt;br /&gt;
&lt;br /&gt;
== 2009 results ==&lt;br /&gt;
&lt;br /&gt;
We had a great year. All 5 of our students were successful, and several of them made really important improvements to Sugar. Here&#039;s the results:&lt;br /&gt;
&lt;br /&gt;
{{Version_support_for_datastore/results}}&lt;br /&gt;
&lt;br /&gt;
=== Karma ===&lt;br /&gt;
&lt;br /&gt;
The [[Karma]] GSoC project has been a success. Participant Felipe Lopez Toledo set out to create a high-level library for creating interactive digital learning lessons using only openweb technologies. The result is the [http://git.sugarlabs.org/projects/karma/repos/mainline/blobs/master/js/jquery.karma-0.3.js karma jQuery plugin] that provides high-level functions for manipulating image, audio, and internationalization.&lt;br /&gt;
&lt;br /&gt;
You can view the demo of [http://karma.sugarlabs.org/karma/examples/adding_up_to_10/index.html Adding up to 10] to see an example interactive lesson.&lt;br /&gt;
&lt;br /&gt;
The Karma Project is an initiative to create a platform that enables web developers to create compelling interactive learning materials for the Sugar Learning Environment without having to learn a new set of programming tools.&lt;br /&gt;
&lt;br /&gt;
=== Groupthink ===&lt;br /&gt;
The [[Summer_of_Code/2009/Groupthink Groupthink GSoC Project]] successfully achieved its specified goals.  The student, Benjamin Schwartz, wrote&lt;br /&gt;
# a [http://bemasc.net/~bens/groupthink/groupthink.gtk_tools.SharedTextView-class.html gtk SharedTextView widget] that provides live shared editing in a self-contained object&lt;br /&gt;
# a [http://bemasc.net/~bens/groupthink/groupthink.groupthink_base.UnorderedString-class.html network interface] to allow sharing this widget over the network&lt;br /&gt;
# a SharedTextDemo activity (versions [http://lists.sugarlabs.org/archive/sugar-devel/2009-June/014795.html 1], [http://lists.sugarlabs.org/archive/sugar-devel/2009-June/015346.html 2], [http://lists.sugarlabs.org/archive/sugar-devel/2009-June/015713.html 3], [http://lists.sugarlabs.org/archive/sugar-devel/2009-July/016739.html 4], and [http://lists.sugarlabs.org/archive/sugar-devel/2009-July/017004.html 5]) to demonstrate the use of this widget&lt;br /&gt;
# an automated [http://bemasc.net/~bens/groupthink/groupthink.groupthink_base.Group-class.html#dumps serialization system] for saving and loading state [http://bemasc.net/~bens/groupthink/groupthink.sugar_tools.GroupActivity-class.html#read_file with the Journal]&lt;br /&gt;
# [http://bemasc.net/~bens/groupthink/groupthink.sugar_tools.GroupActivity-class.html other] code necessary so that Sugar activities could seamlessly rejoin a shared instance and merge in changes made offline&lt;br /&gt;
# [http://git.sugarlabs.org/projects/pippy/repos/pippy-groupthink/commits/0f30ab2a17670d3f7e7723fe4f4756333030c3e0 patches] to enable live shared editing of Python code, with syntax highlighting and Undo/Redo, in [http://activities.sugarlabs.org/en-US/sugar/addons/versions/4041#version-35 Pippy-35]&lt;br /&gt;
# extensive [http://bemasc.net/~bens/groupthink/ API documentation] for Groupthink.&lt;br /&gt;
&lt;br /&gt;
Thanks to the support from Sugar Labs and Google, Groupthink has grown from a toy project into a library that developers can really use.&lt;br /&gt;
&lt;br /&gt;
== Previous Introduction ==&lt;br /&gt;
&lt;br /&gt;
The purpose of this page (was) to coordinate a Sugar Labs Summer of Code effort.&lt;br /&gt;
&lt;br /&gt;
=== What (made) a good project ===&lt;br /&gt;
&lt;br /&gt;
Our focus is on &#039;&#039;&#039;collaboration&#039;&#039;&#039; and &#039;&#039;&#039;community&#039;&#039;&#039; for the summer 2009 round of projects, though we&#039;ll also consider thoughtful proposals that lie outside these two areas and can make a strong case for how they would support the Sugar Labs [[Sugar_Labs|mission]]. &lt;br /&gt;
&lt;br /&gt;
==== Collaboration ====&lt;br /&gt;
&lt;br /&gt;
This refers to API or activity work that makes [[olpc:Activity_sharing | collaboration]] &amp;quot;work better.&amp;quot; A good metric for &amp;quot;works better&amp;quot; is to ask the following: &amp;quot;6 months after the summer ends, which projects are likely to have caused the highest increase in children-hours spent collaborating over Sugar Activities?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Community ====&lt;br /&gt;
&lt;br /&gt;
This refers to meta-work that makes it easy for Sugar to reach a broader [[Sugar Labs]]; this includes development tools (and accompanying implementation of processes and training), internationalization/localization, accessibility, infrastructure-building, and porting Sugar to other platforms. &lt;br /&gt;
&lt;br /&gt;
A good metric for &amp;quot;reaches a broader community&amp;quot; is to ask the following: &amp;quot;6 months after the summer ends, which projects are likely to cause the highest increase in SL community members that have participated consistently on a team for a minimum of 3 months?&amp;quot;&lt;br /&gt;
{{:Summer of Code/Getting Involved}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
==Subpages==&lt;br /&gt;
{{Special:PrefixIndex/{{PAGENAMEE}}/}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Participate]]&lt;br /&gt;
[[Category:Project]]&lt;br /&gt;
[[Category:GSoC]]&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Talk:Features/Terminal_Sharing&amp;diff=34838</id>
		<title>Talk:Features/Terminal Sharing</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Talk:Features/Terminal_Sharing&amp;diff=34838"/>
		<updated>2009-08-06T17:57:38Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This sounds quite fun and useful. Is there a reason this couldn&#039;t be integrated with the Terminal activity itself, with these features enabled when the activity is shared? -[[User:Eben|Eben]] 02:04, 25 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: There is no major technical reason that this sharing functionality could not be integrated into the main Terminal activity.  However, there is a security issue.  The Terminal activity exposes the full power of the user over the machine.  On an XO in the default configuration, this includes root access with no password.  Even without root access, anyone participating in the activity could easily &amp;quot;rm -rf .sugar&amp;quot; and delete your entire Journal, etc.  Advising users not to share the Terminal with people they don&#039;t trust might be sufficient... I&#039;m not sure how to reach consensus on this point.&lt;br /&gt;
&lt;br /&gt;
:ShareTerm, simply by not being named &amp;quot;Terminal&amp;quot;, is treated as a normal activity, and so is sandboxed by Rainbow... if Rainbow is present. If Rainbow is not present, then ShareTerm has no security advantage at all.  &lt;br /&gt;
&lt;br /&gt;
:Adding sharing to Terminal itself, in an unsafe fashion, would have the distinct advantage of allowing deep technical troubleshooting and problem-solving directly over the collaboration system.  I could invite an expert onto my machine to perform arbitrary upgrades and maintenance, and watch them as they work. Perhaps you can think of a clever user interface that will ensure &amp;quot;unsafe sharing&amp;quot; is only performed after careful consideration? Perhaps an activity that can only be shared with &amp;quot;Friends&amp;quot;? [[User:Bemasc|Bemasc]] 17:57, 6 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feature Acceptance ==&lt;br /&gt;
&lt;br /&gt;
Hi Benjamin,&lt;br /&gt;
&lt;br /&gt;
what would be the downside of packing the needed packages inside the activity? I guess one criteria for adding to the platform is: is this worthy for several activities? -[[User:Erikos|Simon Schampijer]] 04 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: My principal reason for wanting Screen to be a Sugar dependency is to avoid shipping binaries inside .xo bundles.  I strongly believe that .xo bundles should be &amp;quot;noarch&amp;quot;, to run on any platform.  I would be happy to ship the Screen source code and compile it on the user&#039;s machine, but gcc is not a sugar dependency either.&lt;br /&gt;
&lt;br /&gt;
: Additionally, as Eben noted, the functionality described here is quite close to Sugar&#039;s fundamental mission, and there is an argument for including it in Terminal.  Making Screen a Sugar dependency allows us to make these kinds of decisions later.  It also opens a door for other shared activities that make use of a shared command line. [[User:Bemasc|Bemasc]] 17:57, 6 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=WebCollab&amp;diff=34415</id>
		<title>WebCollab</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=WebCollab&amp;diff=34415"/>
		<updated>2009-07-30T20:19:07Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Activities in Sugar may employ the Telepathy framework to implement collaborative behaviors over the network.  The messages sent between participating Activities may be routed through a server, when using Telepathy&#039;s XMPP backend (Gabble), or they may be routed directly from the sender to the receiver, when using Telepathy&#039;s Link-local XMPP backend (Salut).  Communication with Telepathy occurs over D-Bus, using the Telepathy D-Bus API.&lt;br /&gt;
&lt;br /&gt;
Programs written in Javascript+HTML+CSS, designed to run in a browser, can also provide online collaborative behaviors, as evidenced most famously by Google Docs.  However, this collaboration typically requires a cooperating central server, because the standard browser security model does not permit a javascript application to communicate directly with any computer other than the server.&lt;br /&gt;
&lt;br /&gt;
This page presents a simple design to enable decentralized, serverless collaboration between javascript applications.  This model also extends naturally to environments in which a central server is available.&lt;br /&gt;
&lt;br /&gt;
==Architecture Overview==&lt;br /&gt;
WebCollab employs a server, the HTTPCollab server.  The javascript webpage interacts with this server by downloading files from it and uploading files to it.  For a single central server, that&#039;s all there is to it.&lt;br /&gt;
&lt;br /&gt;
To enable decentralized operation, such as would be expected when using Telepathy, the servers talk to each other.  Every time a local user uploads a file to the local server, the local server transmits the file to all the other servers, which make it available at the same path.  Javascript clients are expected to poll directories that may contain messages in which they are interested, so the system acts as a message-passing interface with named messages.  A client that uploads a file can reasonably expect that all other clients will soon become aware of that file&#039;s existence.&lt;br /&gt;
&lt;br /&gt;
Common web browsers typically permit javascript programs to communicate only with the server from which they were downloaded.  Therefore, it may be necessary to download the javascript program, or at least a portion of it, from the HTTPCollab server.&lt;br /&gt;
&lt;br /&gt;
==Type-0 Design==&lt;br /&gt;
The Type-0 design is the simplest useful implementation of this architecture.  It does not provide a high degree of efficiency or security, but it permits the full range of desired client behaviors.&lt;br /&gt;
&lt;br /&gt;
===The Type-0 HTTPCollab Server-&amp;gt;Client Interface===&lt;br /&gt;
In the simplest case, the Server exposes an interface that is simply HTTP/1.1, specifically GET, PUT, and DELETE.  Some directory on the server (e.g. http://karmashare.sugarlabs.org/schools/GPA/group22/collabdir/) is selected as the &amp;quot;collaboration directory&amp;quot;, and the server is configured to accept PUT and DELETE within this directory.  To avoid interference by malicious actors PUTing gigabytes of data or DELETEing indiscriminately, it may be appropriate to employ an access control mechanism such as an HTTP cookie.&lt;br /&gt;
&lt;br /&gt;
As far as a simple server is concerned, this describes its entire interaction with the client.&lt;br /&gt;
&lt;br /&gt;
===The Type-0 JSCollab Client-&amp;gt;Server Interface===&lt;br /&gt;
The server allows the client to upload arbitrary files, and every webapp can make use of this system as pleases its authors.  However, a simple structure may provide a valuable scaffolding on which to build more complex systems.  JSCollab describes one such simple client-side behavior.&lt;br /&gt;
&lt;br /&gt;
A JSCollab client has a unique id during each session.  This id may be a random string, and it need not be the same from session to session.  The id must be a valid HTTP path name and must not contain the characters &amp;quot;_&amp;quot; or &amp;quot;/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A message in JSCollab has a key, a value, and an index.  The key is a string subject to the same constraints as the unique id.  The value is a sequence of arbitrary bytes.  The index is an integer indicating the number of messages previously sent by the user, incremented for each message, starting at 0.&lt;br /&gt;
&lt;br /&gt;
To broadcast a message, a JSCollab client uploads a file with the name {unique id}_broadcast_{index}_{key}.  The contents of the file are the value of the message.  The index is represented as a base-10 string.&lt;br /&gt;
&lt;br /&gt;
To send a message to a specific user specified by a target id, the client uploads a file with the name {unique id}_to_{target id}_{index}_{key}&lt;br /&gt;
&lt;br /&gt;
For efficiency reasons, it may sometimes be appropriate to delete messages.  A client may delete messages using the HTTP DELETE command.  Because messages always have unique names, and are immutable, there is no risk of races between a client deleting a file and another client creating a file with the same name or updating the existing file.&lt;br /&gt;
&lt;br /&gt;
===The Type-0 SugarHTTPCollab Server-&amp;gt;Server Interface===&lt;br /&gt;
In the case of Sugar and Telepathy, the server runs on localhost, and acts as an interface to Telepathy.  When the activity is initiated, the server is launched on any open port on localhost, and the browser is pointed at a known url on the host (e.g. http://localhost:42141/index.html) from which to download the first page.  The javascript is already aware of the collaboration directory URL (e.g. http://localhost:42141/collabdir/).&lt;br /&gt;
&lt;br /&gt;
The server is configured to accept all PUT and DELETE requests in collabdir/.  If the activity is already shared, the PUT or DELETE request is immediately also transmitted to all other collaborating server instances.&lt;br /&gt;
&lt;br /&gt;
When a new server joins, it must be informed of the current state of collabdir/.  This is easy to do in a simple way; just pick a random participant upon joining and ask for the complete contents.  Performing this update in a reliable and efficient manner is nontrivial, but should be possible.  A sophisticated implementation is probably not necessary for a first release.&lt;br /&gt;
&lt;br /&gt;
==Refinements==&lt;br /&gt;
===The Type-1 HTTPCollab Server-&amp;gt;Client Interface===&lt;br /&gt;
The Type-0 Server has two obvious deficits: efficiency and security.  Efficiency is low, in the sense that if A sends a message to B, C will have to download the whole list of messages again to find out that the message is for someone else.  Security is low, in the sense that any user can easily impersonate any other, or interfere with others&#039; communications.&lt;br /&gt;
&lt;br /&gt;
To enable greater efficiency, an obvious step is to introduce directories.  Messages to one user may be segregated in a separate directory, so that users do not have to monitor each others messages.&lt;br /&gt;
&lt;br /&gt;
To enable greater security, an obvious step is to employ access control permissions on these directories.&lt;br /&gt;
&lt;br /&gt;
HTTP provides, or at least enables, some types of access control, but it does not provide any standard way for users to create directories.  We could build such a system with POST messages, but a more standards-based approach is available through WebDAV.  The WebDAV HTTP extensions include a MKCOL message type, allowing clients to make directories.  WebDAV also provides a suitable access control mechanism for directories, in the form of Write Locking.&lt;br /&gt;
&lt;br /&gt;
A Type-1 HTTPCollab Server provides a WebDAV interface, including at least GET, PUT, DELETE, and MKCOL.  If security is desired, it should also provide LOCK and UNLOCK.&lt;br /&gt;
===The Type-1 JSCollab Client-&amp;gt;Server Interface===&lt;br /&gt;
A Type-1 JSCollab client implements the same abstraction as a Type-0 client, but using directory structures and locking to improve efficiency and security.&lt;br /&gt;
&lt;br /&gt;
The client first chooses a unique id, then uses the LOCK directive to acquire a depth:infinity write lock on the directory with that name.  This lock will never be released.  If high security is desired, it may be necessary to choose a random name to ensure that no other user could have locked it already.&lt;br /&gt;
&lt;br /&gt;
The client then creates the directory with that name.  Within that directory, the client creates two subdirectories: &amp;quot;broadcast/&amp;quot; and &amp;quot;to/&amp;quot;.  A broadcast message that would be &amp;quot;{unique id}_broadcast_{index}_{key}&amp;quot; in Type-0 becomes &amp;quot;{unique id}/broadcast/{index}_{key}&amp;quot; in Type-1.&lt;br /&gt;
&lt;br /&gt;
If a user wishes to send a message to another user, the user must create a subdirectory of &amp;quot;to/&amp;quot; with the desired target id.  Once created, such a directory should not be deleted.  A directed message that would be  &amp;quot;{unique id}_to_{target id}_{index}_{key}&amp;quot; in Type-0 is &amp;quot;{unique id}/to/{target id}/{index}_{key}&amp;quot; in Type-1.&lt;br /&gt;
&lt;br /&gt;
A Type-1 client must monitor the root collaboration directory for the appearance of new users.  When a new user appears, the client must monitor that user&#039;s broadcast/ directory for broadcast messages.  The client must also monitor that user&#039;s to/ directory in case a message with the client&#039;s unique id should appear.  If such a directory does appear, the client may stop polling to/, but must start polling to/{unique id}.&lt;br /&gt;
&lt;br /&gt;
The large amount of polling required here represents a potential decrease in efficiency.  To achieve high efficiency, the client must employ a form of &amp;quot;long polling&amp;quot; or similar push-like technique.  It is not clear whether such behavior can work with a typical unmodified WebDAV server.&lt;br /&gt;
&lt;br /&gt;
===The Type-1 SugarHTTPCollab Server-&amp;gt;Server Interface===&lt;br /&gt;
This interface is the same as the Type-0, updated to include directories and optionally locking.&lt;br /&gt;
&lt;br /&gt;
JSCollab does not require any concurrency control, so locking is only relevant if it is implemented in a fashion that is at least somewhat secure against a malicious client.  One obvious way to do this is for anyone who locks a path to issue a message indicating &amp;quot;I know the secret token for this lock&amp;quot;.  If any other server receives a request to modify or unlock a locked path, it must (privately*) forward the token from the request to the server that knows the token.  If the token is correct, that server will issue a broadcast message, &amp;quot;X knows the secret token for the lock&amp;quot;; otherwise it will privately respond &amp;quot;no&amp;quot;.  The broadcast message forms a chain of trust from the creator of the lock, indicating who knows the token.  Servers must reject requests to delete, modify, or unlock a file from a server that has not been identified as knowing the token.&lt;br /&gt;
&lt;br /&gt;
This does not resolve concurrency issues, but it does prevent a malicious user from deleting locked files without knowledge of the secret token.&lt;br /&gt;
&lt;br /&gt;
*: If private transmissions are not available, the system could instead transmit a cryptographic hash of the concatenation of the token and the sender&#039;s Telepathy identifier, which can easily be verified by the server, but cannot be reused.&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=WebCollab&amp;diff=34411</id>
		<title>WebCollab</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=WebCollab&amp;diff=34411"/>
		<updated>2009-07-30T18:21:58Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Activities in Sugar may employ the Telepathy framework to implement collaborative behaviors over the network.  The messages sent between participating Activities may be routed through a server, when using Telepathy&#039;s XMPP backend (Gabble), or they may be routed directly from the sender to the receiver, when using Telepathy&#039;s Link-local XMPP backend (Salut).  Communication with Telepathy occurs over D-Bus, using the Telepathy D-Bus API.&lt;br /&gt;
&lt;br /&gt;
Programs written in Javascript+HTML+CSS, designed to run in a browser, can also provide online collaborative behaviors, as evidenced most famously by Google Docs.  However, this collaboration typically requires a cooperating central server, because the standard browser security model does not permit a javascript application to communicate directly with any computer other than the server.&lt;br /&gt;
&lt;br /&gt;
This page presents a simple design to enable decentralized, serverless collaboration between javascript applications.  This model also extends naturally to environments in which a central server is available.&lt;br /&gt;
&lt;br /&gt;
==Architecture Overview==&lt;br /&gt;
WebCollab employs a server, the HTTPCollab server.  The javascript webpage interacts with this server by downloading files from it and uploading files to it.  For a single central server, that&#039;s all there is to it.&lt;br /&gt;
&lt;br /&gt;
To enable decentralized operation, such as would be expected when using Telepathy, the servers talk to each other.  Every time a local user uploads a file to the local server, the local server transmits the file to all the other servers, which make it available at the same path.  Javascript clients are expected to poll directories that may contain messages in which they are interested, so the system acts as a message-passing interface with named messages.  A client that uploads a file can reasonably expect that all other clients will soon become aware of that file&#039;s existence.&lt;br /&gt;
&lt;br /&gt;
Common web browsers typically permit javascript programs to communicate only with the server from which they were downloaded.  Therefore, it may be necessary to download the javascript program, or at least a portion of it, from the HTTPCollab server.&lt;br /&gt;
&lt;br /&gt;
==Type-0 Design==&lt;br /&gt;
The Type-0 design is the simplest useful implementation of this architecture.  It does not provide a high degree of efficiency or security, but it permits the full range of desired client behaviors.&lt;br /&gt;
&lt;br /&gt;
===The Type-0 HTTPCollab Server-&amp;gt;Client Interface===&lt;br /&gt;
In the simplest case, the Server exposes an interface that is simply HTTP/1.1, specifically GET, PUT, and DELETE.  Some directory on the server (e.g. http://karmashare.sugarlabs.org/schools/GPA/group22/collabdir/) is selected as the &amp;quot;collaboration directory&amp;quot;, and the server is configured to accept PUT and DELETE within this directory.  To avoid interference by malicious actors PUTing gigabytes of data or DELETEing indiscriminately, it may be appropriate to employ an access control mechanism such as an HTTP cookie.&lt;br /&gt;
&lt;br /&gt;
As far as a simple server is concerned, this describes its entire interaction with the client.&lt;br /&gt;
&lt;br /&gt;
===The Type-0 JSCollab Client-&amp;gt;Server Interface===&lt;br /&gt;
The server allows the client to upload arbitrary files, and every webapp can make use of this system as pleases its authors.  However, a simple structure may provide a valuable scaffolding on which to build more complex systems.  JSCollab describes one such simple client-side behavior.&lt;br /&gt;
&lt;br /&gt;
A JSCollab client has a unique id during each session.  This id may be a random string, and it need not be the same from session to session.  The id must be a valid HTTP path name and must not contain the characters &amp;quot;_&amp;quot; or &amp;quot;/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A message in JSCollab has a key, a value, and an index.  The key is a string subject to the same constraints as the unique id.  The value is a sequence of arbitrary bytes.  The index is an integer indicating the number of messages previously sent by the user, incremented for each message, starting at 0.&lt;br /&gt;
&lt;br /&gt;
To broadcast a message, a JSCollab client uploads a file with the name {unique id}_broadcast_{index}_{key}.  The contents of the file are the value of the message.  The index is represented as a base-10 string.&lt;br /&gt;
&lt;br /&gt;
To send a message to a specific user specified by a target id, the client uploads a file with the name {unique id}_to_{target id}_{index}_{key}&lt;br /&gt;
&lt;br /&gt;
For efficiency reasons, it may sometimes be appropriate to delete messages.  A client may delete messages using the HTTP DELETE command.  Because messages always have unique names, and are immutable, there is no risk of races between a client deleting a file and another client creating a file with the same name or updating the existing file.&lt;br /&gt;
&lt;br /&gt;
===The Type-0 SugarHTTPCollab Server-&amp;gt;Server Interface===&lt;br /&gt;
In the case of Sugar and Telepathy, the server runs on localhost, and acts as an interface to Telepathy.  When the activity is initiated, the server is launched on any open port on localhost, and the browser is pointed at a known url on the host (e.g. http://localhost:42141/index.html) from which to download the first page.  The javascript is already aware of the collaboration directory URL (e.g. http://localhost:42141/collabdir/).&lt;br /&gt;
&lt;br /&gt;
The server is configured to accept all PUT and DELETE requests in collabdir/.  If the activity is already shared, the PUT or DELETE request is immediately also transmitted to all other collaborating server instances.&lt;br /&gt;
&lt;br /&gt;
When a new server joins, it must be informed of the current state of collabdir/.  This is easy to do in a simple way; just pick a random participant upon joining and ask for the complete contents.  Performing this update in a reliable and efficient manner is nontrivial, but should be possible.  A sophisticated implementation is probably not necessary for a first release.&lt;br /&gt;
&lt;br /&gt;
==Refinements==&lt;br /&gt;
===The Type-1 HTTPCollab Server-&amp;gt;Client Interface===&lt;br /&gt;
The Type-0 Server has two obvious deficits: efficiency and security.  Efficiency is low, in the sense that if A sends a message to B, C will have to download the whole list of messages again to find out that the message is for someone else.  Security is low, in the sense that any user can easily impersonate any other, or interfere with others&#039; communications.&lt;br /&gt;
&lt;br /&gt;
To enable greater efficiency, an obvious step is to introduce directories.  Messages to one user may be segregated in a separate directory, so that users do not have to monitor each others messages.&lt;br /&gt;
&lt;br /&gt;
To enable greater security, an obvious step is to employ access control permissions on these directories.&lt;br /&gt;
&lt;br /&gt;
HTTP provides, or at least enables, some types of access control, but it does not provide any standard way for users to create directories.  We could build such a system with POST messages, but a more standards-based approach is available through WebDAV.  The WebDAV HTTP extensions include a MKCOL message type, allowing clients to make directories.  WebDAV also provides a suitable access control mechanism for directories, in the form of Write Locking.&lt;br /&gt;
&lt;br /&gt;
A Type-1 HTTPCollab Server provides a WebDAV interface, including at least GET, PUT, DELETE, and MKCOL.  If security is desired, it should also provide LOCK and UNLOCK.&lt;br /&gt;
===The Type-1 JSCollab Client-&amp;gt;Server Interface===&lt;br /&gt;
A Type-1 JSCollab client implements the same abstraction as a Type-0 client, but using directory structures and locking to improve efficiency and security.&lt;br /&gt;
&lt;br /&gt;
The client first chooses a unique id, then uses the LOCK directive to acquire a depth:infinity write lock on the directory with that name.  This lock will never be released.  If high security is desired, it may be necessary to choose a random name to ensure that no other user could have locked it already.&lt;br /&gt;
&lt;br /&gt;
The client then creates the directory with that name.  Within that directory, the client creates two subdirectories: &amp;quot;broadcast/&amp;quot; and &amp;quot;to/&amp;quot;.  A broadcast message that would be &amp;quot;{unique id}_broadcast_{index}_{key}&amp;quot; in Type-0 becomes &amp;quot;{unique id}/broadcast/{index}_{key}&amp;quot; in Type-1.&lt;br /&gt;
&lt;br /&gt;
If a user wishes to send a message to another user, the user must create a subdirectory of &amp;quot;to/&amp;quot; with the desired target id.  Once created, such a directory should not be deleted.  A directed message that would be  &amp;quot;{unique id}_to_{target id}_{index}_{key}&amp;quot; in Type-0 is &amp;quot;{unique id}/to/{target id}/{index}_{key}&amp;quot; in Type-1.&lt;br /&gt;
&lt;br /&gt;
A Type-1 client must monitor the root collaboration directory for the appearance of new users.  When a new user appears, the client must monitor that user&#039;s broadcast/ directory for broadcast messages.  The client must also monitor that user&#039;s to/ directory in case a message with the client&#039;s unique id should appear.  If such a directory does appear, the client may stop polling to/, but must start polling to/{unique id}.&lt;br /&gt;
&lt;br /&gt;
The large amount of polling required here represents a potential decrease in efficiency.  To achieve high efficiency, the client must employ a form of &amp;quot;long polling&amp;quot; or similar push-like technique.  It is not clear whether such behavior can work with a typical unmodified WebDAV server.&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=WebCollab&amp;diff=34410</id>
		<title>WebCollab</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=WebCollab&amp;diff=34410"/>
		<updated>2009-07-30T17:36:18Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Activities in Sugar may employ the Telepathy framework to implement collaborative behaviors over the network.  The messages sent between participating Activities may be routed through a server, when using Telepathy&#039;s XMPP backend (Gabble), or they may be routed directly from the sender to the receiver, when using Telepathy&#039;s Link-local XMPP backend (Salut).  Communication with Telepathy occurs over D-Bus, using the Telepathy D-Bus API.&lt;br /&gt;
&lt;br /&gt;
Programs written in Javascript+HTML+CSS, designed to run in a browser, can also provide online collaborative behaviors, as evidenced most famously by Google Docs.  However, this collaboration typically requires a cooperating central server, because the standard browser security model does not permit a javascript application to communicate directly with any computer other than the server.&lt;br /&gt;
&lt;br /&gt;
This page presents a simple design to enable decentralized, serverless collaboration between javascript applications.  This model also extends naturally to environments in which a central server is available.&lt;br /&gt;
&lt;br /&gt;
==Architecture Overview==&lt;br /&gt;
WebCollab employs a server, the HTTPCollab server.  The javascript webpage interacts with this server by downloading files from it and uploading files to it.  For a single central server, that&#039;s all there is to it.&lt;br /&gt;
&lt;br /&gt;
To enable decentralized operation, such as would be expected when using Telepathy, the servers talk to each other.  Every time a local user uploads a file to the local server, the local server transmits the file to all the other servers, which make it available at the same path.  Javascript clients are expected to poll directories that may contain messages in which they are interested, so the system acts as a message-passing interface with named messages.  A client that uploads a file can reasonably expect that all other clients will soon become aware of that file&#039;s existence.&lt;br /&gt;
&lt;br /&gt;
Common web browsers typically permit javascript programs to communicate only with the server from which they were downloaded.  Therefore, it may be necessary to download the javascript program, or at least a portion of it, from the HTTPCollab server.&lt;br /&gt;
&lt;br /&gt;
==The Type-0 HTTPCollab Server-&amp;gt;Client Interface==&lt;br /&gt;
In the simplest case, the Server exposes an interface that is simply HTTP/1.1, specifically GET, PUT, and DELETE.  Some directory on the server (e.g. http://karmashare.sugarlabs.org/schools/GPA/group22/collabdir/) is selected as the &amp;quot;collaboration directory&amp;quot;, and the server is configured to accept PUT and DELETE within this directory.  To avoid interference by malicious actors PUTing gigabytes of data or DELETEing indiscriminately, it may be appropriate to employ an access control mechanism such as an HTTP cookie.&lt;br /&gt;
&lt;br /&gt;
As far as a simple server is concerned, this describes its entire interaction with the client.&lt;br /&gt;
&lt;br /&gt;
==The Type-0 JSCollab Client-&amp;gt;Server Interface==&lt;br /&gt;
The server allows the client to upload arbitrary files, and every webapp can make use of this system as pleases its authors.  However, a simple structure may provide a valuable scaffolding on which to build more complex systems.  JSCollab describes one such simple client-side behavior.&lt;br /&gt;
&lt;br /&gt;
A JSCollab client has a unique id during each session.  This id may be a random string, and it need not be the same from session to session.  The id must be a valid HTTP path name and must not contain the characters &amp;quot;_&amp;quot; or &amp;quot;/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A message in JSCollab has a key, a value, and an index.  The key is a string subject to the same constraints as the unique id.  The value is a sequence of arbitrary bytes.  The index is an integer indicating the number of messages previously sent by the user, incremented for each message, starting at 0.&lt;br /&gt;
&lt;br /&gt;
To broadcast a message, a JSCollab client uploads a file with the name broadcast_{unique id}_{index}_{key}.  The contents of the file are the value of the message.  The index is represented as a base-10 string.&lt;br /&gt;
&lt;br /&gt;
To send a message to a specific user specified by a target id, the client uploads a file with the name to_{target id}_{unique id}_{index}_{key}&lt;br /&gt;
&lt;br /&gt;
For efficiency reasons, it may sometimes be appropriate to delete messages.  A client may delete messages using the HTTP DELETE command.  Because messages always have unique names, and are immutable, there is no risk of races between a client deleting a file and another client creating a file with the same name or updating the existing file.&lt;br /&gt;
&lt;br /&gt;
==The Type-0 SugarHTTPCollab Server-&amp;gt;Server Interface==&lt;br /&gt;
In the case of Sugar and Telepathy, the server runs on localhost, and acts as an interface to Telepathy.  When the activity is initiated, the server is launched on any open port on localhost, and the browser is pointed at a known url on the host (e.g. http://localhost:42141/index.html) from which to download the first page.  The javascript is already aware of the collaboration directory URL (e.g. http://localhost:42141/collabdir/).&lt;br /&gt;
&lt;br /&gt;
The server is configured to accept all PUT and DELETE requests in collabdir/.  If the activity is already shared, the PUT or DELETE request is immediately also transmitted to all other collaborating server instances.&lt;br /&gt;
&lt;br /&gt;
When a new server joins, it must be informed of the current state of collabdir/.  This is easy to do in a simple way; just pick a random participant upon joining and ask for the complete contents.  Performing this update in a reliable and efficient manner is nontrivial, but should be possible.  A sophisticated implementation is probably not necessary for a first release.&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=WebCollab&amp;diff=34409</id>
		<title>WebCollab</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=WebCollab&amp;diff=34409"/>
		<updated>2009-07-30T17:16:49Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: /* The Type-0 JSCollab Client-&amp;gt;Server Interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Activities in Sugar may employ the Telepathy framework to implement collaborative behaviors over the network.  The messages sent between participating Activities may be routed through a server, when using Telepathy&#039;s XMPP backend (Gabble), or they may be routed directly from the sender to the receiver, when using Telepathy&#039;s Link-local XMPP backend (Salut).  Communication with Telepathy occurs over D-Bus, using the Telepathy D-Bus API.&lt;br /&gt;
&lt;br /&gt;
Programs written in Javascript+HTML+CSS, designed to run in a browser, can also provide online collaborative behaviors, as evidenced most famously by Google Docs.  However, this collaboration typically requires a cooperating central server, because the standard browser security model does not permit a javascript application to communicate directly with any computer other than the server.&lt;br /&gt;
&lt;br /&gt;
This page presents a simple design to enable decentralized, serverless collaboration between javascript applications.  This model also extends naturally to environments in which a central server is available.&lt;br /&gt;
&lt;br /&gt;
==Architecture Overview==&lt;br /&gt;
WebCollab employs a server, the HTTPCollab server.  The javascript webpage interacts with this server by downloading files from it and uploading files to it.  For a single central server, that&#039;s all there is to it.&lt;br /&gt;
&lt;br /&gt;
To enable decentralized operation, such as would be expected when using Telepathy, the servers talk to each other.  Every time a local user uploads a file to the local server, the local server transmits the file to all the other servers, which make it available at the same path.  Javascript clients are expected to poll directories that may contain messages in which they are interested, so the system acts as a message-passing interface with named messages.  A client that uploads a file can reasonably expect that all other clients will soon become aware of that file&#039;s existence.&lt;br /&gt;
&lt;br /&gt;
Common web browsers typically permit javascript programs to communicate only with the server from which they were downloaded.  Therefore, it may be necessary to download the javascript program, or at least a portion of it, from the HTTPCollab server.&lt;br /&gt;
&lt;br /&gt;
==The Type-0 HTTPCollab Server-&amp;gt;Client Interface==&lt;br /&gt;
In the simplest case, the Server exposes an interface that is simply HTTP/1.1, specifically GET, PUT, and DELETE.  Some directory on the server (e.g. http://karmashare.sugarlabs.org/schools/GPA/group22/collabdir/) is selected as the &amp;quot;collaboration directory&amp;quot;, and the server is configured to accept PUT and DELETE within this directory.  To avoid interference by malicious actors PUTing gigabytes of data or DELETEing indiscriminately, it may be appropriate to employ an access control mechanism such as an HTTP cookie.&lt;br /&gt;
&lt;br /&gt;
As far as a simple server is concerned, this describes its entire interaction with the client.&lt;br /&gt;
&lt;br /&gt;
==The Type-0 JSCollab Client-&amp;gt;Server Interface==&lt;br /&gt;
The server allows the client to upload arbitrary files, and every webapp can make use of this system as pleases its authors.  However, a simple structure may provide a valuable scaffolding on which to build more complex systems.  JSCollab describes one such simple client-side behavior.&lt;br /&gt;
&lt;br /&gt;
A JSCollab client has a unique id during each session.  This id may be a random string, and it need not be the same from session to session.  The id must be a valid HTTP path name and must not contain the characters &amp;quot;_&amp;quot; or &amp;quot;/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A message in JSCollab has a key, a value, and an index.  The key is a string subject to the same constraints as the unique id.  The value is a sequence of arbitrary bytes.  The index is an integer indicating the number of messages previously sent by the user, incremented for each message, starting at 0.&lt;br /&gt;
&lt;br /&gt;
To broadcast a message, a JSCollab client uploads a file with the name {unique id}_broadcast_{index}_{key}.  The contents of the file are the value of the message.  The index is represented as a base-10 string.&lt;br /&gt;
&lt;br /&gt;
To send a message to a specific user specified by a target id, the client uploads a file with the name {unique id}_to_{target id}_{index}_{key}&lt;br /&gt;
&lt;br /&gt;
For efficiency reasons, it may sometimes be appropriate to delete messages.  A client may delete messages using the HTTP DELETE command.  Because messages always have unique names, and are immutable, there is no risk of races between a client deleting a file and another client creating a file with the same name or updating the existing file.&lt;br /&gt;
&lt;br /&gt;
==The Type-0 SugarHTTPCollab Server-&amp;gt;Server Interface==&lt;br /&gt;
In the case of Sugar and Telepathy, the server runs on localhost, and acts as an interface to Telepathy.  When the activity is initiated, the server is launched on any open port on localhost, and the browser is pointed at a known url on the host (e.g. http://localhost:42141/index.html) from which to download the first page.  The javascript is already aware of the collaboration directory URL (e.g. http://localhost:42141/collabdir/).&lt;br /&gt;
&lt;br /&gt;
The server is configured to accept all PUT and DELETE requests in collabdir/.  If the activity is already shared, the PUT or DELETE request is immediately also transmitted to all other collaborating server instances.&lt;br /&gt;
&lt;br /&gt;
When a new server joins, it must be informed of the current state of collabdir/.  This is easy to do in a simple way; just pick a random participant upon joining and ask for the complete contents.  Performing this update in a reliable and efficient manner is nontrivial, but should be possible.  A sophisticated implementation is probably not necessary for a first release.&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=WebCollab&amp;diff=34408</id>
		<title>WebCollab</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=WebCollab&amp;diff=34408"/>
		<updated>2009-07-30T17:12:53Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: Created page with &amp;#039;Activities in Sugar may employ the Telepathy framework to implement collaborative behaviors over the network.  The messages sent between participating Activities may be routed th…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Activities in Sugar may employ the Telepathy framework to implement collaborative behaviors over the network.  The messages sent between participating Activities may be routed through a server, when using Telepathy&#039;s XMPP backend (Gabble), or they may be routed directly from the sender to the receiver, when using Telepathy&#039;s Link-local XMPP backend (Salut).  Communication with Telepathy occurs over D-Bus, using the Telepathy D-Bus API.&lt;br /&gt;
&lt;br /&gt;
Programs written in Javascript+HTML+CSS, designed to run in a browser, can also provide online collaborative behaviors, as evidenced most famously by Google Docs.  However, this collaboration typically requires a cooperating central server, because the standard browser security model does not permit a javascript application to communicate directly with any computer other than the server.&lt;br /&gt;
&lt;br /&gt;
This page presents a simple design to enable decentralized, serverless collaboration between javascript applications.  This model also extends naturally to environments in which a central server is available.&lt;br /&gt;
&lt;br /&gt;
==Architecture Overview==&lt;br /&gt;
WebCollab employs a server, the HTTPCollab server.  The javascript webpage interacts with this server by downloading files from it and uploading files to it.  For a single central server, that&#039;s all there is to it.&lt;br /&gt;
&lt;br /&gt;
To enable decentralized operation, such as would be expected when using Telepathy, the servers talk to each other.  Every time a local user uploads a file to the local server, the local server transmits the file to all the other servers, which make it available at the same path.  Javascript clients are expected to poll directories that may contain messages in which they are interested, so the system acts as a message-passing interface with named messages.  A client that uploads a file can reasonably expect that all other clients will soon become aware of that file&#039;s existence.&lt;br /&gt;
&lt;br /&gt;
Common web browsers typically permit javascript programs to communicate only with the server from which they were downloaded.  Therefore, it may be necessary to download the javascript program, or at least a portion of it, from the HTTPCollab server.&lt;br /&gt;
&lt;br /&gt;
==The Type-0 HTTPCollab Server-&amp;gt;Client Interface==&lt;br /&gt;
In the simplest case, the Server exposes an interface that is simply HTTP/1.1, specifically GET, PUT, and DELETE.  Some directory on the server (e.g. http://karmashare.sugarlabs.org/schools/GPA/group22/collabdir/) is selected as the &amp;quot;collaboration directory&amp;quot;, and the server is configured to accept PUT and DELETE within this directory.  To avoid interference by malicious actors PUTing gigabytes of data or DELETEing indiscriminately, it may be appropriate to employ an access control mechanism such as an HTTP cookie.&lt;br /&gt;
&lt;br /&gt;
As far as a simple server is concerned, this describes its entire interaction with the client.&lt;br /&gt;
&lt;br /&gt;
==The Type-0 JSCollab Client-&amp;gt;Server Interface==&lt;br /&gt;
The server allows the client to upload arbitrary files, and every webapp can make use of this system as pleases its authors.  However, a simple structure may provide a valuable scaffolding on which to build more complex systems.  JSCollab describes one such simple client-side behavior.&lt;br /&gt;
&lt;br /&gt;
A JSCollab client has a unique id during each session.  This id may be a random string, and it need not be the same from session to session.  The id must be a valid HTTP path name and must not contain the characters &amp;quot;_&amp;quot; or &amp;quot;/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A message in JSCollab has a key, a value, and an index.  The key is a string subject to the same constraints as the unique id.  The value is a sequence of arbitrary bytes.  The index is an integer indicating the number of messages previously sent by the user, incremented for each message, starting at 0.&lt;br /&gt;
&lt;br /&gt;
To broadcast a message, a JSCollab client uploads a file with the name {unique id}_broadcast_{index}_{key}.  The contents of the file are the value of the message.  The index is represented as a base-10 string.&lt;br /&gt;
&lt;br /&gt;
To send a message to a specific user specified by a target id, the client uploads a file with the name {unique id}_to_{target id}_{index}_{key}&lt;br /&gt;
&lt;br /&gt;
For efficiency reasons, it may sometimes be appropriate to delete messages.  A client may delete messages using the HTTP DELETE command.  Because messages always have unique names, there is &lt;br /&gt;
&lt;br /&gt;
==The Type-0 SugarHTTPCollab Server-&amp;gt;Server Interface==&lt;br /&gt;
In the case of Sugar and Telepathy, the server runs on localhost, and acts as an interface to Telepathy.  When the activity is initiated, the server is launched on any open port on localhost, and the browser is pointed at a known url on the host (e.g. http://localhost:42141/index.html) from which to download the first page.  The javascript is already aware of the collaboration directory URL (e.g. http://localhost:42141/collabdir/).&lt;br /&gt;
&lt;br /&gt;
The server is configured to accept all PUT and DELETE requests in collabdir/.  If the activity is already shared, the PUT or DELETE request is immediately also transmitted to all other collaborating server instances.&lt;br /&gt;
&lt;br /&gt;
When a new server joins, it must be informed of the current state of collabdir/.  This is easy to do in a simple way; just pick a random participant upon joining and ask for the complete contents.  Performing this update in a reliable and efficient manner is nontrivial, but should be possible.  A sophisticated implementation is probably not necessary for a first release.&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/Terminal_Sharing&amp;diff=33947</id>
		<title>Features/Terminal Sharing</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/Terminal_Sharing&amp;diff=33947"/>
		<updated>2009-07-22T17:00:45Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{GoogleTrans-en}}{{TOCright}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This feature represents [http://dev.laptop.org/~bemasc/ShareTerm-1.xo ShareTerm], an Activity providing a shareable version of Terminal so that users can interact over the network at a single command prompt.&lt;br /&gt;
&lt;br /&gt;
== Owner ==&lt;br /&gt;
* Name: [[User:bemasc| Ben Schwartz]]&lt;br /&gt;
&lt;br /&gt;
* Email: bmschwar@fas.harvard.edu&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
* Targeted release: 0.86&lt;br /&gt;
* Last updated: 2009-07-22&lt;br /&gt;
* Percentage of completion: 100%&lt;br /&gt;
&lt;br /&gt;
== Detailed Description ==&lt;br /&gt;
ShareTerm is&lt;br /&gt;
a variant of Terminal designed to enable collaborative work at the command&lt;br /&gt;
prompt.  ShareTerm works by starting an unprivileged SSH daemon and a GNU Screen&lt;br /&gt;
session.  The SSH daemon is tunneled over a Telepathy Stream Tube.  To&lt;br /&gt;
avoid the need for passwords, public-key authentication is used.  The&lt;br /&gt;
system should support an arbitrary number of participants, though at the&lt;br /&gt;
moment the sshd is configured with a maximum of 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Benefit to Sugar ==&lt;br /&gt;
I hope that ShareTerm will be useful for teaching UNIX and programming&lt;br /&gt;
skills to novices.  For experts, the window management of Screen will be&lt;br /&gt;
especially useful.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
The only change required to Sugar is to add a dependency on GNU Screen and OpenSSH, which are available in every distro&#039;s package system.  I think ShareTerm may merit inclusion in Fructose, but the important thing is to make Sugar-0.86 depend on Screen.&lt;br /&gt;
&lt;br /&gt;
== How To Test ==&lt;br /&gt;
* Install the bundle from:&lt;br /&gt;
http://dev.laptop.org/~bemasc/ShareTerm-1.xo&lt;br /&gt;
* Install GNU Screen on your system.  MANDATORY.  NOTE: GNU Screen is not&lt;br /&gt;
installed by default on many Sugar systems, including OLPC&#039;s XO distributions.&lt;br /&gt;
* Make sure you are running with Rainbow enabled!&lt;br /&gt;
* Start ShareTerm from the Sugar UI, and then share it like any&lt;br /&gt;
collaborative Activity&lt;br /&gt;
&lt;br /&gt;
== User Experience ==&lt;br /&gt;
Shared Terminal.  Each user can type into the same shared instance from different machines, and their keystrokes will all register.  The instance actually runs on the initiator&#039;s computer.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
GNU Screen and OpenSSH.  If security is a consideration, then Rainbow is an important requirement as well.  Running ShareTerm allows any friend who joins the activity to run arbitrary commands on your computer.  Rainbow ensures that these commands are run as a restricted, unprivileged account.  If you are running without Rainbow, you should be sure to invite only people you trust to your ShareTerm!&lt;br /&gt;
&lt;br /&gt;
== Contingency Plan ==&lt;br /&gt;
Tell people to install GNU Screen and openssh manually before installing shareterm, or possibly try to package static binaries into the .xo.  Neither is ideal, especially because ShareTerm is most appropriate for users who are not yet comfortable with the command line.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
http://lists.sugarlabs.org/archive/sugar-devel/2009-May/014165.html&lt;br /&gt;
&lt;br /&gt;
== Release Notes ==&lt;br /&gt;
No significant changes are noteworthy here.&lt;br /&gt;
&lt;br /&gt;
== Comments and Discussion ==&lt;br /&gt;
* See [[{{TALKPAGENAME}}|discussion tab for this feature]] &amp;lt;!-- This adds a link to the &amp;quot;discussion&amp;quot; tab associated with your page.  This provides the ability to have ongoing comments or conversation without bogging down the main feature page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Feature_Ready_for_Release_Manager]]&lt;br /&gt;
[[Category:Feature]]&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Features/Terminal_Sharing&amp;diff=33945</id>
		<title>Features/Terminal Sharing</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Features/Terminal_Sharing&amp;diff=33945"/>
		<updated>2009-07-22T16:53:58Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: Created page with &amp;#039;&amp;lt;noinclude&amp;gt;{{GoogleTrans-en}}{{TOCright}}&amp;lt;/noinclude&amp;gt;  == Summary == This feature represents [http://dev.laptop.org/~bemasc/ShareTerm-1.xo ShareTerm], an Activity providing a sha…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{GoogleTrans-en}}{{TOCright}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This feature represents [http://dev.laptop.org/~bemasc/ShareTerm-1.xo ShareTerm], an Activity providing a shareable version of Terminal so that users can interact over the network at a single command prompt.&lt;br /&gt;
&lt;br /&gt;
== Owner ==&lt;br /&gt;
* Name: [[User:bemasc| Ben Schwartz]]&lt;br /&gt;
&lt;br /&gt;
* Email: bmschwar@fas.harvard.edu&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
* Targeted release: 0.86&lt;br /&gt;
* Last updated: 2009-07-22&lt;br /&gt;
* Percentage of completion: 100%&lt;br /&gt;
&lt;br /&gt;
== Detailed Description ==&lt;br /&gt;
ShareTerm is&lt;br /&gt;
a variant of Terminal designed to enable collaborative work at the command&lt;br /&gt;
prompt.  ShareTerm works by starting an unprivileged SSH daemon and a GNU Screen&lt;br /&gt;
session.  The SSH daemon is tunneled over a Telepathy Stream Tube.  To&lt;br /&gt;
avoid the need for passwords, public-key authentication is used.  The&lt;br /&gt;
system should support an arbitrary number of participants, though at the&lt;br /&gt;
moment the sshd is configured with a maximum of 10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Benefit to Sugar ==&lt;br /&gt;
I hope that ShareTerm will be useful for teaching UNIX and programming&lt;br /&gt;
skills to novices.  For experts, the window management of Screen will be&lt;br /&gt;
especially useful.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
The only change required to Sugar is to add a dependency on GNU Screen and OpenSSH, which are available in every distro&#039;s package system.  I think ShareTerm may merit inclusion in Fructose, but the important thing is to make Sugar-0.86 depend on Screen.&lt;br /&gt;
&lt;br /&gt;
== How To Test ==&lt;br /&gt;
* Install the bundle from:&lt;br /&gt;
http://dev.laptop.org/~bemasc/ShareTerm-1.xo&lt;br /&gt;
* Install GNU Screen on your system.  MANDATORY.  NOTE: GNU Screen is not&lt;br /&gt;
installed by default on many Sugar systems, including OLPC&#039;s XO distributions.&lt;br /&gt;
* Make sure you are running with Rainbow enabled!&lt;br /&gt;
* Start ShareTerm from the Sugar UI, and then share it like any&lt;br /&gt;
collaborative Activity&lt;br /&gt;
&lt;br /&gt;
== User Experience ==&lt;br /&gt;
Shared Terminal.  Each user can type into the same shared instance from different machines, and their keystrokes will all register.  The instance actually runs on the initiator&#039;s computer.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
GNU Screen and OpenSSH.  If security is a consideration, then Rainbow is an important requirement as well.  Running ShareTerm allows any friend who joins the activity to run arbitrary commands on your computer.  Rainbow ensures that these commands are run as a restricted, unprivileged account.  If you are running without Rainbow, you should be sure to invite only people you trust to your ShareTerm!&lt;br /&gt;
&lt;br /&gt;
== Contingency Plan ==&lt;br /&gt;
Tell people to install GNU Screen and openssh manually before installing shareterm, or possibly try to package static binaries into the .xo.  Neither is ideal, especially because ShareTerm is most appropriate for users who are not yet comfortable with the command line.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
http://lists.sugarlabs.org/archive/sugar-devel/2009-May/014165.html&lt;br /&gt;
&lt;br /&gt;
== Release Notes ==&lt;br /&gt;
No significant changes are noteworthy here.&lt;br /&gt;
&lt;br /&gt;
== Comments and Discussion ==&lt;br /&gt;
* See [[{{TALKPAGENAME}}|discussion tab for this feature]] &amp;lt;!-- This adds a link to the &amp;quot;discussion&amp;quot; tab associated with your page.  This provides the ability to have ongoing comments or conversation without bogging down the main feature page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Category:Feature_Ready_for_Release_Manager]]&lt;br /&gt;
[[Category:Feature]]&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Design_Team/Meetings&amp;diff=28881</id>
		<title>Design Team/Meetings</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Design_Team/Meetings&amp;diff=28881"/>
		<updated>2009-05-09T14:20:43Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: /* Next meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{ GoogleTrans-en | es =show | bg =show | zh-CN =show | zh-TW =show | hr =show | cs =show | da =show | nl =show | fi =show | fr =show | de =show | el =show | hi =show | it =show | ja =show | ko =show | no =show | pl =show | pt =show | ro =show | ru =show | sv =show }}{{TeamHeader|Design Team|roadmap_link=Vision|roadmap_label=Vision}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
== Who and what==&lt;br /&gt;
The meeting is targeted to Sugar core and activity developers, but remains open to anyone interested. It&#039;s primary purpose is to open the design approach, making it more transparent and allowing the community to provide feedback on both current and upcoming features.&lt;br /&gt;
&lt;br /&gt;
In general, discussion focuses on:&lt;br /&gt;
* high level design goals and ideas&lt;br /&gt;
* feedback and discussion of problems in the current design&lt;br /&gt;
* reviews of design proposals&lt;br /&gt;
&lt;br /&gt;
To convert UTC to your local time, use [http://www.timeanddate.com/worldclock/converter.html?hour=11&amp;amp;min=30&amp;amp;sec=0&amp;amp;p1=0&amp;amp;p2=43 this converter] or run: &lt;br /&gt;
 date -d &#039;[current date] [time] UTC&#039; &lt;br /&gt;
 date -d &#039;2008-06-03 14:00 UTC&#039;&lt;br /&gt;
&lt;br /&gt;
== Adding topics ==&lt;br /&gt;
You can add topics for discussion to the topics section for the meeting throughout the week. Posted topics will be collected and sent out in the announcement on the morning of the meeting.&lt;br /&gt;
&lt;br /&gt;
== Meetings ==&lt;br /&gt;
=== Saturday, 2009 May 9, 10 AM ET ===&lt;br /&gt;
==== Topics ====&lt;br /&gt;
&lt;br /&gt;
* Sayamindu&#039;s dictionary dialog.&lt;br /&gt;
*:See http://www.mail-archive.com/sugar-devel@lists.sugarlabs.org/msg04042.html&lt;br /&gt;
* Jameson&#039;s accelerators proposals.&lt;br /&gt;
*:See [[Design_Team/Vision/Proposals#Keyboard_Action]]&lt;br /&gt;
* Printing proposal from several people.&lt;br /&gt;
*:See [[Print Support]], http://www.mail-archive.com/sugar-devel@lists.sugarlabs.org/msg03984.html, http://www.mail-archive.com/sugar-devel@lists.sugarlabs.org/msg03991.html&lt;br /&gt;
* Martin&#039;s clock proposal.&lt;br /&gt;
*:See http://www.mail-archive.com/sugar-devel@lists.sugarlabs.org/msg03934.html&lt;br /&gt;
&lt;br /&gt;
=== Sunday 19 April 2009 13:00 UTC / 9:00 EDT ===&lt;br /&gt;
Log: http://meeting.sugarlabs.org/sugar-meeting.log.20090419_0911.html&lt;br /&gt;
==== Topics ====&lt;br /&gt;
We discussed design goals for the next release 0.86. Design mockups will be created in response to the high-level features listed below (potentially in advance of SugarCamp 2009 on May 16th), to further illustrate the design intent and allow for integration with the development schedule.&lt;br /&gt;
&lt;br /&gt;
High-level feature recap:&lt;br /&gt;
&lt;br /&gt;
* polish activity list in Home&lt;br /&gt;
* support filtering/searching via tags in Home&lt;br /&gt;
* add list views to groups/neighorhood&lt;br /&gt;
* make groups dynamic (like neighborhood)&lt;br /&gt;
* extend activity chat&lt;br /&gt;
* add overlay chat to groups/neighborhood&lt;br /&gt;
* design a bulletin-board _activity_&lt;br /&gt;
* remove management from activity list, ensure _all_ installed activities are in Journal&lt;br /&gt;
* new toolbar design&lt;br /&gt;
&lt;br /&gt;
Concrete design/development tasks:&lt;br /&gt;
&lt;br /&gt;
# design mockups to make the frame more discoverable&lt;br /&gt;
# design mockups to polish the new toolbars&lt;br /&gt;
# Home list view: remove the date column and enable alphabetical sort. Label versions &amp;quot;Version x&amp;quot;&lt;br /&gt;
# Design mockups for tagging/filtering/search within Home view&lt;br /&gt;
# Draft changes to activity.info file to support tagging&lt;br /&gt;
# Design mockups for overlay chat in groups/neighborhood (should also include revising the activity chat..which exists but not as earlier designs proposed)&lt;br /&gt;
# Design mockups of bulletin board activity&lt;br /&gt;
# Design mockups for list views in groups and neighborhood&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Saturday 21 March 2009 14:00 UTC / 10:00 EDT ===&lt;br /&gt;
Log: http://meeting.sugarlabs.org/sugar-meeting.log.20090321_1009.html&lt;br /&gt;
==== Topics ====&lt;br /&gt;
Discussion of the Home view and whether to abandon the notion of favorites for a single consolidated view&lt;br /&gt;
&lt;br /&gt;
See [[Design Team/Vision/Proposals]].&lt;br /&gt;
&lt;br /&gt;
Unify look of web services&lt;br /&gt;
&lt;br /&gt;
=== (Marketing Team) Tuesday 10 March 2009 13:00 UTC / 09:00 EDT ===&lt;br /&gt;
Log: http://meeting.sugarlabs.org/sugar-meeting.log.20090310_1100.html&amp;lt;br&amp;gt;&lt;br /&gt;
Summary: http://www.mail-archive.com/iaep@lists.sugarlabs.org/msg03132.html&lt;br /&gt;
&lt;br /&gt;
=== Sun March 1, 2009 - 13.00 (UTC) / 10.00 EST ===&lt;br /&gt;
&lt;br /&gt;
Logs: [[Design Team/Meetings/09.03.01]]&lt;br /&gt;
&lt;br /&gt;
==== Topics ====&lt;br /&gt;
&lt;br /&gt;
We&#039;ll continue discussion of revised, and thorough, mockups for overlay chat in activities.  This includes ways in which this chat system can extend into the other zoom levels, and short term and long term goals.&lt;br /&gt;
&lt;br /&gt;
Other topics: Discuss development roadmap and prioritize design activities for next build&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Friday December 19, 2008 - 15.30 (UTC) ===&lt;br /&gt;
&lt;br /&gt;
==== Topics ====&lt;br /&gt;
&lt;br /&gt;
We&#039;ll continue discussion of revised, and thorough, mockups for overlay chat in activities.  This includes ways in which this chat system can extend into the other zoom levels, and short term and long term goals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Thursday December 4, 2008 - 15.30 (UTC) ===&lt;br /&gt;
&lt;br /&gt;
==== Topics ====&lt;br /&gt;
&lt;br /&gt;
We&#039;ll focus on possibilities for overlay chat in activites, presenting both short term and long term ideas, and discuss how this could later be extended to the neighborhood.&lt;br /&gt;
&lt;br /&gt;
==== Media ====&lt;br /&gt;
&lt;br /&gt;
* [[Media:Overlay_chat_sketch.pdf | Overlay chat sketch (PDF)‎]]&lt;br /&gt;
&lt;br /&gt;
==== Logs ====&lt;br /&gt;
&lt;br /&gt;
* http://meeting.laptop.org/sugar-meeting.20081204_1042.html&lt;br /&gt;
&lt;br /&gt;
=== Wednesday November 26, 2008 - 15.00 (UTC) ===&lt;br /&gt;
&lt;br /&gt;
We&#039;d like to hold a meeting this week while the topics discussed at the recent SugarCamp are fresh in our minds.  Though this is not part of the usual meeting cycle, I think it&#039;s important enough to merit an extra meeting.  Due to Thanksgiving on Thursday, we&#039;ll hold it on Wednesday instead.&lt;br /&gt;
&lt;br /&gt;
==== Topics ====&lt;br /&gt;
===== Short Term Roadmap Definition =====&lt;br /&gt;
&lt;br /&gt;
To capitalize on the extremely valuable discussions at the recent SugarCamp in Cambridge, we&#039;d like to take some time to define a rough feature roadmap for the Sugar OS within the OLPC 9.1 timeframe.  As a starting point for this discussion, we should likely review the various design proposals presented on the last day of the conference.&lt;br /&gt;
&lt;br /&gt;
=====Groups=====&lt;br /&gt;
=====Resuming activities from Home=====&lt;br /&gt;
=====Enhancing the Journal=====&lt;br /&gt;
=====Improving Toolbars=====&lt;br /&gt;
=====Encouraging Naming/Tagging=====&lt;br /&gt;
&lt;br /&gt;
==== Logs ====&lt;br /&gt;
* http://meeting.laptop.org/sugar-meeting.20081126_1018.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Thursday September 18, 2008 - 15.30 (UTC) ===&lt;br /&gt;
==== Topics ====&lt;br /&gt;
===== Visual Clipboard API =====&lt;br /&gt;
For reference, please see the [http://wiki.laptop.org/go/Specifications/Clipboard clipboard specification].  For a more targeted list of features and goals, please see the [[Development Team/0.84/Clipboard|clipboard planning page]].&lt;br /&gt;
&lt;br /&gt;
We had a fairly long discussion about this, which didn&#039;t seem to get too far. Fortunately, a follow-up between Marco and I clarified some points, and we agreed that it should be possible to implement the majority of the goals across the system using the &amp;quot;formats&amp;quot; allowed in the GTK protocols, and falling back to sane defaults when extra info isn&#039;t provided.&lt;br /&gt;
&lt;br /&gt;
Some references:&lt;br /&gt;
* http://www.pygtk.org/pygtk2tutorial/ch-NewInPyGTK2.2.html#sec-Clipboards&lt;br /&gt;
* http://www.pygtk.org/pygtk2tutorial/ch-DragAndDrop.html&lt;br /&gt;
* http://www.pygtk.org/pygtk2tutorial/ch-ManagingSelections.html&lt;br /&gt;
&lt;br /&gt;
===== Advancing the Journal =====&lt;br /&gt;
I&#039;d like to have a conversation regarding the current iteration of the Journal, future plans, and the steps we hope to take toward them in the next major release so we can scope our goals.  The latest mockups (though slightly out of date) can be seen [http://wiki.laptop.org/go/Designs/Journal here].&lt;br /&gt;
&lt;br /&gt;
Due to the lengthy clipboard discussion, we didn&#039;t hit this topic today.  We&#039;ll pick it up first thing next week.&lt;br /&gt;
&lt;br /&gt;
===== Icon reviews =====&lt;br /&gt;
We discussed three icons today.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Settings (control panel)&#039;&#039;&#039;:  By popular demand, a wrench was chosen as the base for this icon, though it was also proposed that a wrench and screwdriver could be clearer.  It was agreed that the wrench is a simpler icon, and a more generic metaphor which could be used to represent &amp;quot;settings&amp;quot; throughout the system.  A few visual tweaks {{Trac|8198|}} made many happier with the wrench, but since this isn&#039;t a major change they can come post 8.2.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;View Details (Journal)&#039;&#039;&#039;: The old designs for this button closely resembled a play button (but with an open triangle, akin to a greater than (&amp;gt;) symbol), which some found confusing.  The new proposal is an ellipsis [...] icon, to indicate the idea that more info is available, but omitted in the abbreviated list view.  This works nicely within the [wiki.laptop.org/go/Designs/Journal new Journal designs], since the icons will occasionally appear within a string of icon-annotated text.  All present agreed the latter was a better direction.  This change could make 8.2.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Access Point&#039;&#039;&#039;: Recent experience reports have indicated that the removal of an identifier of the connected AP is frustrating.  The proposal discussed is shown [http://interdimensionmedia.com/scratch/devices.png], which wraps the former AP icon (the circle) in &amp;quot;parenthesis&amp;quot; (meant to indicate radio signal).  This retains the primitive circular shape of the current access points, but illustrates which is connected in a way which alludes to the wireless activity LED.  The point was discussed that the other LED is actually more semantically correct, but not as suitable as an icon.&lt;br /&gt;
&lt;br /&gt;
Additionally, these [http://wiki.laptop.org/go/Image:School_server_and_ap.png alternate designs] were proposed, using antennae to make the purpose of the icons clearer.  We may wish to elicit feedback about these alternatives from teachers and kids to see which convey the notion of wireless connectivity the best.  The triangle proposed here was used once, and subsequently removed due to some distaste for the shape in this context, but it may still convey the idea better with the antenna.  This change is strongly desired for 8.2.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development Team]]&lt;br /&gt;
[[Category:Meetings]]&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2009/Groupthink&amp;diff=24959</id>
		<title>Summer of Code/2009/Groupthink</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2009/Groupthink&amp;diff=24959"/>
		<updated>2009-04-03T04:18:18Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* What is your name?&lt;br /&gt;
&lt;br /&gt;
Benjamin Schwartz&lt;br /&gt;
&lt;br /&gt;
* What is your email address?&lt;br /&gt;
&lt;br /&gt;
You know my e-mail address; I&#039;m on the mailing list all the time.&lt;br /&gt;
&lt;br /&gt;
* What is your Sugar Labs wiki username?&lt;br /&gt;
&lt;br /&gt;
bemasc&lt;br /&gt;
&lt;br /&gt;
* What is your IRC nickname?&lt;br /&gt;
&lt;br /&gt;
bemasc&lt;br /&gt;
&lt;br /&gt;
* What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&lt;br /&gt;
&lt;br /&gt;
English&lt;br /&gt;
&lt;br /&gt;
* Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&lt;br /&gt;
&lt;br /&gt;
Cambridge, MA&lt;br /&gt;
&lt;br /&gt;
* Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&lt;br /&gt;
&lt;br /&gt;
I have worked in open-source before.  For example, I am the author of http://dev.laptop.org/git/projects/dobject/&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* What is the name of your project?&lt;br /&gt;
&lt;br /&gt;
Decentralized Asynchronous Collision-free Editing with Groupthink&lt;br /&gt;
&lt;br /&gt;
* Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&lt;br /&gt;
&lt;br /&gt;
To be blunt: Write is awesome, but not as awesome as it could be.  There are three major problems with Write, but really, they&#039;re all the same problem.  The first problem is that if the initiating user leaves the shared session (or their battery dies or ...), sharing will simply cease.  Users may continue to edit, but their edits will not be shared over the network, even though Sugar continues to indicate that it is a shared activity session.  The second problem is that Write is not tolerant to network disruptions.  If the mesh network divides the group in two pieces for a few minutes, this will destroy the shared session, at least for those who&#039;ve lost contact with the initiating node.  Thirdly, Write provides no mechanism for working independently and then later merging changes.  If two students begin editing a report together, then go to their separate homes and keep working, there is no automated way for them to merge their work the next day in school.  Instead, they must use &amp;quot;copy and paste&amp;quot; to manually combine the versions.&lt;br /&gt;
&lt;br /&gt;
To solve this problem, I will implement a completely decentralized, asynchronous text editing system.  I will do this in [Groupthink http://dev.laptop.org/git/projects/dobject/], using the [StringTree http://dev.laptop.org/git/projects/dobject/tree/groupthink/stringtree.py] data structure that I have already written for the purpose.  I still need to write a network serialization format, a disk serialization format, and a widget that is backed by the NetworkedStringTree.&lt;br /&gt;
&lt;br /&gt;
* What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&lt;br /&gt;
&lt;br /&gt;
Week 1: Write a widget, subclassing gtk.TextArea, that is backed by a StringTree&lt;br /&gt;
Week 2: Extend this widget with callbacks that respond correctly when the StringTree is edited by someone else.  (This is actually surprisingly difficult to do, and attempts to attack this problem often wind up in fields like [Operational Transformation http://en.wikipedia.org/wiki/Operational_transformation].)&lt;br /&gt;
Week 3: Write a network protocol (using Groupthink&#039;s existing high-level network system, which runs over Telepathy&#039;s D-Bus tubes).&lt;br /&gt;
Week 4: Write a simple activity containing the SharedTextArea widget over a SharedStringTree, and stress the system to debug live sharing.&lt;br /&gt;
Week 5: Write a disk (i.e. Journal) serialization protocol.  Ideally, this would just be the d-bus network protocol, marshaled into a bytestream, but the dbus-python interface doesn&#039;t expose marshaling.  I wrote [a patch http://bugs.freedesktop.org/show_bug.cgi?id=19723] but demarshaling doesn&#039;t work, and smcv&#039;s been too busy to help me out with it. Pester smcv.&lt;br /&gt;
Week 6: Figure out and implement the journal semantics necessary to allow users to edit things by themselves, then later join a shared session and have their local copy merged into the shared copy.  (This may actually already be the case.  Test, debug, and submit patches as necessary.)&lt;br /&gt;
Week 7: Write documentation.  Write a simple test suite.  Write a SharedTextAreaWithSyntaxHighlighting and replace the widget in Pippy.&lt;br /&gt;
&lt;br /&gt;
* Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve already done much of the work, and specifically the hard algorithmic part.  I&#039;m knowledgeable about the field, and about algorithms in general, having a degree in Mathematics with Computer Science.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
&lt;br /&gt;
* If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&lt;br /&gt;
&lt;br /&gt;
This project will be the first big step for Groupthink.  It will establish Groupthink as a way for naive Activity authors to add reliable, robust sharing functionality to their activities just by importing the groupthink library and using the provided widgets and data structures.&lt;br /&gt;
&lt;br /&gt;
* Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&lt;br /&gt;
&lt;br /&gt;
I live in Cambridge, MA.  A nearby deployment would certainly be appropriate, though I&#039;m not sure where.  One interesting place is the KIPP school in Lynn, MA.  This is a high-intensity charter middle-school for low-income students.  I showed them some XOs last year, and they were ecstatic.&lt;br /&gt;
&lt;br /&gt;
* What will you do if you get stuck on your project and your mentor isn&#039;t around?&lt;br /&gt;
&lt;br /&gt;
I will continue work as before?  I will ask the Gobby people (I found where they hide, and what algorithm they use (it&#039;s adOPTed)!).&lt;br /&gt;
&lt;br /&gt;
* How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project? &lt;br /&gt;
&lt;br /&gt;
I&#039;ll send even more traffic than usual to the mailing list, as I produce code that needs review or testing.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
* We want to make sure that you can set up a [[DevelopmentTeam#Development_systems|development environment]] before the summer starts. &lt;br /&gt;
[[Image:Bms_gsoc2009.png|thumb|right|Oh yeah.]]&lt;br /&gt;
&lt;br /&gt;
* What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&lt;br /&gt;
&lt;br /&gt;
M.  American M.&lt;br /&gt;
&lt;br /&gt;
* Describe a great learning experience you had as a child.&lt;br /&gt;
&lt;br /&gt;
When I was about 12 I read Chaos by James Gleick.  In the footnotes he had the equation for generating a Mandelbrot fractal.  I opened up QuickBasic, started typing, and before long had my first mandelbrot generator.  It was super-awesome.&lt;br /&gt;
&lt;br /&gt;
Actually.  At first it had a bug, and it took me a long time to figure out.  The bug was that I had modified a value and then accessed it again, thinking I was getting the original value.  That bug taught me about the need for temporary variables.&lt;br /&gt;
&lt;br /&gt;
* Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more&lt;br /&gt;
&lt;br /&gt;
I&#039;m down with O(L)PC (Yeah you know me!).&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=File:Bms_gsoc2009.png&amp;diff=24958</id>
		<title>File:Bms gsoc2009.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=File:Bms_gsoc2009.png&amp;diff=24958"/>
		<updated>2009-04-03T04:16:42Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: This should probably be deleted once the application process for gsoc2009 is over.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This should probably be deleted once the application process for gsoc2009 is over.&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2009/Groupthink&amp;diff=24957</id>
		<title>Summer of Code/2009/Groupthink</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2009/Groupthink&amp;diff=24957"/>
		<updated>2009-04-03T04:05:35Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
* What is your name?&lt;br /&gt;
&lt;br /&gt;
Benjamin Schwartz&lt;br /&gt;
&lt;br /&gt;
* What is your email address?&lt;br /&gt;
&lt;br /&gt;
You know my e-mail address; I&#039;m on the mailing list all the time.&lt;br /&gt;
&lt;br /&gt;
* What is your Sugar Labs wiki username?&lt;br /&gt;
&lt;br /&gt;
bemasc&lt;br /&gt;
&lt;br /&gt;
* What is your IRC nickname?&lt;br /&gt;
&lt;br /&gt;
bemasc&lt;br /&gt;
&lt;br /&gt;
* What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&lt;br /&gt;
&lt;br /&gt;
English&lt;br /&gt;
&lt;br /&gt;
* Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&lt;br /&gt;
&lt;br /&gt;
Cambridge, MA&lt;br /&gt;
&lt;br /&gt;
* Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&lt;br /&gt;
&lt;br /&gt;
I have worked in open-source before.  For example, I am the author of http://dev.laptop.org/git/projects/dobject/&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
* What is the name of your project?&lt;br /&gt;
&lt;br /&gt;
Decentralized Asynchronous Collision-free Editing with Groupthink&lt;br /&gt;
&lt;br /&gt;
* Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&lt;br /&gt;
&lt;br /&gt;
To be blunt: Write is awesome, but not as awesome as it could be.  There are three major problems with Write, but really, they&#039;re all the same problem.  The first problem is that if the initiating user leaves the shared session (or their battery dies or ...), sharing will simply cease.  Users may continue to edit, but their edits will not be shared over the network, even though Sugar continues to indicate that it is a shared activity session.  The second problem is that Write is not tolerant to network disruptions.  If the mesh network divides the group in two pieces for a few minutes, this will destroy the shared session, at least for those who&#039;ve lost contact with the initiating node.  Thirdly, Write provides no mechanism for working independently and then later merging changes.  If two students begin editing a report together, then go to their separate homes and keep working, there is no automated way for them to merge their work the next day in school.  Instead, they must use &amp;quot;copy and paste&amp;quot; to manually combine the versions.&lt;br /&gt;
&lt;br /&gt;
To solve this problem, I will implement a completely decentralized, asynchronous text editing system.  I will do this in [Groupthink http://dev.laptop.org/git/projects/dobject/], using the [StringTree http://dev.laptop.org/git/projects/dobject/tree/groupthink/stringtree.py] data structure that I have already written for the purpose.  I still need to write a network serialization format, a disk serialization format, and a widget that is backed by the NetworkedStringTree.&lt;br /&gt;
&lt;br /&gt;
* What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&lt;br /&gt;
&lt;br /&gt;
Week 1: Write a widget, subclassing gtk.TextArea, that is backed by a StringTree&lt;br /&gt;
Week 2: Extend this widget with callbacks that respond correctly when the StringTree is edited by someone else.  (This is actually surprisingly difficult to do, and attempts to attack this problem often wind up in fields like [Operational Transformation http://en.wikipedia.org/wiki/Operational_transformation].)&lt;br /&gt;
Week 3: Write a network protocol (using Groupthink&#039;s existing high-level network system, which runs over Telepathy&#039;s D-Bus tubes).&lt;br /&gt;
Week 4: Write a simple activity containing the SharedTextArea widget over a SharedStringTree, and stress the system to debug live sharing.&lt;br /&gt;
Week 5: Write a disk (i.e. Journal) serialization protocol.  Ideally, this would just be the d-bus network protocol, marshaled into a bytestream, but the dbus-python interface doesn&#039;t expose marshaling.  I wrote [a patch http://bugs.freedesktop.org/show_bug.cgi?id=19723] but demarshaling doesn&#039;t work, and smcv&#039;s been too busy to help me out with it. Pester smcv.&lt;br /&gt;
Week 6: Figure out and implement the journal semantics necessary to allow users to edit things by themselves, then later join a shared session and have their local copy merged into the shared copy.  (This may actually already be the case.  Test, debug, and submit patches as necessary.)&lt;br /&gt;
Week 7: Write documentation.  Write a simple test suite.  Write a SharedTextAreaWithSyntaxHighlighting and replace the widget in Pippy.&lt;br /&gt;
&lt;br /&gt;
* Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve already done much of the work, and specifically the hard algorithmic part.  I&#039;m knowledgeable about the field, and about algorithms in general, having a degree in Mathematics with Computer Science.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
&lt;br /&gt;
* If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&lt;br /&gt;
&lt;br /&gt;
This project will be the first big step for Groupthink.  It will establish Groupthink as a way for naive Activity authors to add reliable, robust sharing functionality to their activities just by importing the groupthink library and using the provided widgets and data structures.&lt;br /&gt;
&lt;br /&gt;
* Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&lt;br /&gt;
&lt;br /&gt;
I live in Cambridge, MA.  A nearby deployment would certainly be appropriate, though I&#039;m not sure where.  One interesting place is the KIPP school in Lynn, MA.  This is a high-intensity charter middle-school for low-income students.  I showed them some XOs last year, and they were ecstatic.&lt;br /&gt;
&lt;br /&gt;
* What will you do if you get stuck on your project and your mentor isn&#039;t around?&lt;br /&gt;
&lt;br /&gt;
I will continue work as before?  I will ask the Gobby people (I found where they hide, and what algorithm they use (it&#039;s adOPTed)!).&lt;br /&gt;
&lt;br /&gt;
* How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project? &lt;br /&gt;
&lt;br /&gt;
I&#039;ll send even more traffic than usual to the mailing list, as I produce code that needs review or testing.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:New-developer-challenge.png|thumb|right|An example of the kind of screenshot of your first modification to your development environment which you should include in your application. Note that the drop-down menu text has Mel&#039;s email address in place of the word &amp;quot;Restart&amp;quot; - your screenshot should contain your email instead.]]&lt;br /&gt;
* We want to make sure that you can set up a [[DevelopmentTeam#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&lt;br /&gt;
* What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&lt;br /&gt;
&lt;br /&gt;
M.  American M.&lt;br /&gt;
&lt;br /&gt;
* Describe a great learning experience you had as a child.&lt;br /&gt;
&lt;br /&gt;
When I was about 12 I read Chaos by James Gleick.  In the footnotes he had the equation for generating a Mandelbrot fractal.  I opened up QuickBasic, started typing, and before long had my first mandelbrot generator.  It was super-awesome.&lt;br /&gt;
&lt;br /&gt;
Actually.  At first it had a bug, and it took me a long time to figure out.  The bug was that I had modified a value and then accessed it again, thinking I was getting the original value.  That bug taught me about the need for temporary variables.&lt;br /&gt;
&lt;br /&gt;
* Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more&lt;br /&gt;
&lt;br /&gt;
I&#039;m down with O(L)PC (Yeah you know me!).&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2009/Groupthink&amp;diff=24956</id>
		<title>Summer of Code/2009/Groupthink</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Summer_of_Code/2009/Groupthink&amp;diff=24956"/>
		<updated>2009-04-03T04:04:20Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: New page: {{TOCright}}  ====About you====  # What is your name?  Benjamin Schwartz  # What is your email address?  You know my e-mail address; I&amp;#039;m on the mailing list all the time.  # What is your S...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
====About you====&lt;br /&gt;
&lt;br /&gt;
# What is your name?&lt;br /&gt;
&lt;br /&gt;
Benjamin Schwartz&lt;br /&gt;
&lt;br /&gt;
# What is your email address?&lt;br /&gt;
&lt;br /&gt;
You know my e-mail address; I&#039;m on the mailing list all the time.&lt;br /&gt;
&lt;br /&gt;
# What is your Sugar Labs wiki username?&lt;br /&gt;
&lt;br /&gt;
bemasc&lt;br /&gt;
&lt;br /&gt;
# What is your IRC nickname?&lt;br /&gt;
&lt;br /&gt;
bemasc&lt;br /&gt;
&lt;br /&gt;
# What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you&#039;d prefer.)&lt;br /&gt;
&lt;br /&gt;
English&lt;br /&gt;
&lt;br /&gt;
# Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.)&lt;br /&gt;
&lt;br /&gt;
Cambridge, MA&lt;br /&gt;
&lt;br /&gt;
# Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?&lt;br /&gt;
&lt;br /&gt;
I have worked in open-source before.  For example, I am the author of http://dev.laptop.org/git/projects/dobject/&lt;br /&gt;
&lt;br /&gt;
====About your project====&lt;br /&gt;
&lt;br /&gt;
# What is the name of your project?&lt;br /&gt;
&lt;br /&gt;
Decentralized Asynchronous Collision-free Editing with Groupthink&lt;br /&gt;
&lt;br /&gt;
# Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?&lt;br /&gt;
&lt;br /&gt;
To be blunt: Write is awesome, but not as awesome as it could be.  There are three major problems with Write, but really, they&#039;re all the same problem.  The first problem is that if the initiating user leaves the shared session (or their battery dies or ...), sharing will simply cease.  Users may continue to edit, but their edits will not be shared over the network, even though Sugar continues to indicate that it is a shared activity session.  The second problem is that Write is not tolerant to network disruptions.  If the mesh network divides the group in two pieces for a few minutes, this will destroy the shared session, at least for those who&#039;ve lost contact with the initiating node.  Thirdly, Write provides no mechanism for working independently and then later merging changes.  If two students begin editing a report together, then go to their separate homes and keep working, there is no automated way for them to merge their work the next day in school.  Instead, they must use &amp;quot;copy and paste&amp;quot; to manually combine the versions.&lt;br /&gt;
&lt;br /&gt;
To solve this problem, I will implement a completely decentralized, asynchronous text editing system.  I will do this in [Groupthink http://dev.laptop.org/git/projects/dobject/], using the [StringTree http://dev.laptop.org/git/projects/dobject/tree/groupthink/stringtree.py] data structure that I have already written for the purpose.  I still need to write a network serialization format, a disk serialization format, and a widget that is backed by the NetworkedStringTree.&lt;br /&gt;
&lt;br /&gt;
# What is the timeline for development of your project? The Summer of Code work period is 7 weeks long, May 23 - August 10; tell us what you will be working on each week. (As the summer goes on, you and your mentor will adjust your schedule, but it&#039;s good to have a plan at the beginning so you have an idea of where you&#039;re headed.) Note that you should probably plan to have something &amp;quot;working and 90% done&amp;quot; by the midterm evaluation (July 6-13); the last steps always take longer than you think, and we will consider cancelling projects which are not mostly working by then.&lt;br /&gt;
&lt;br /&gt;
Week 1: Write a widget, subclassing gtk.TextArea, that is backed by a StringTree&lt;br /&gt;
Week 2: Extend this widget with callbacks that respond correctly when the StringTree is edited by someone else.  (This is actually surprisingly difficult to do, and attempts to attack this problem often wind up in fields like [Operational Transformation http://en.wikipedia.org/wiki/Operational_transformation].)&lt;br /&gt;
Week 3: Write a network protocol (using Groupthink&#039;s existing high-level network system, which runs over Telepathy&#039;s D-Bus tubes).&lt;br /&gt;
Week 4: Write a simple activity containing the SharedTextArea widget over a SharedStringTree, and stress the system to debug live sharing.&lt;br /&gt;
Week 5: Write a disk (i.e. Journal) serialization protocol.  Ideally, this would just be the d-bus network protocol, marshaled into a bytestream, but the dbus-python interface doesn&#039;t expose marshaling.  I wrote [a patch http://bugs.freedesktop.org/show_bug.cgi?id=19723] but demarshaling doesn&#039;t work, and smcv&#039;s been too busy to help me out with it. Pester smcv.&lt;br /&gt;
Week 6: Figure out and implement the journal semantics necessary to allow users to edit things by themselves, then later join a shared session and have their local copy merged into the shared copy.  (This may actually already be the case.  Test, debug, and submit patches as necessary.)&lt;br /&gt;
Week 7: Write documentation.  Write a simple test suite.  Write a SharedTextAreaWithSyntaxHighlighting and replace the widget in Pippy.&lt;br /&gt;
&lt;br /&gt;
# Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve already done much of the work, and specifically the hard algorithmic part.  I&#039;m knowledgeable about the field, and about algorithms in general, having a degree in Mathematics with Computer Science.&lt;br /&gt;
&lt;br /&gt;
====You and the community====&lt;br /&gt;
&lt;br /&gt;
# If your project is successfully completed, what will its impact be on the Sugar Labs community? Give 3 answers, each 1-3 paragraphs in length. The first one should be yours. The other two should be answers from members of the Sugar Labs community, at least one of whom should be a Sugar Labs GSoC mentor. Provide email contact information for non-GSoC mentors.&lt;br /&gt;
&lt;br /&gt;
This project will be the first big step for Groupthink.  It will establish Groupthink as a way for naive Activity authors to add reliable, robust sharing functionality to their activities just by importing the groupthink library and using the provided widgets and data structures.&lt;br /&gt;
&lt;br /&gt;
# Sugar Labs will be working to set up a small (5-30 unit) Sugar pilot near each student project that is accepted to GSoC so that you can immediately see how your work affects children in a deployment. We will make arrangements to either supply or find all the equipment needed. Do you have any ideas on where you would like your deployment to be, who you would like to be involved, and how we can help you and the community in your area begin it?&lt;br /&gt;
&lt;br /&gt;
I live in Cambridge, MA.  A nearby deployment would certainly be appropriate, though I&#039;m not sure where.  One interesting place is the KIPP school in Lynn, MA.  This is a high-intensity charter middle-school for low-income students.  I showed them some XOs last year, and they were ecstatic.&lt;br /&gt;
&lt;br /&gt;
# What will you do if you get stuck on your project and your mentor isn&#039;t around?&lt;br /&gt;
&lt;br /&gt;
I will continue work as before?  I will ask the Gobby people (I found where they hide, and what algorithm they use (it&#039;s adOPTed)!).&lt;br /&gt;
&lt;br /&gt;
# How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project? &lt;br /&gt;
&lt;br /&gt;
I&#039;ll send even more traffic than usual to the mailing list, as I produce code that needs review or testing.&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
[[Image:New-developer-challenge.png|thumb|right|An example of the kind of screenshot of your first modification to your development environment which you should include in your application. Note that the drop-down menu text has Mel&#039;s email address in place of the word &amp;quot;Restart&amp;quot; - your screenshot should contain your email instead.]]&lt;br /&gt;
# We want to make sure that you can set up a [[DevelopmentTeam#Development_systems|development environment]] before the summer starts. Please send us a link to a screenshot of your Sugar development environment with the following modification: when you hover over the XO-person icon in the middle of Home view, the drop-down text should have your email in place of &amp;quot;Restart.&amp;quot; See the image on the right for an example. It&#039;s normal to need assistance with this, so please visit our IRC channel, #sugar on irc.freenode.net, and ask for help.&lt;br /&gt;
# What is your t-shirt size? (Yes, we know Google asks for this already; humor us.)&lt;br /&gt;
&lt;br /&gt;
M.  American M.&lt;br /&gt;
&lt;br /&gt;
# Describe a great learning experience you had as a child.&lt;br /&gt;
&lt;br /&gt;
When I was about 12 I read Chaos by James Gleick.  In the footnotes he had the equation for generating a Mandelbrot fractal.  I opened up QuickBasic, started typing, and before long had my first mandelbrot generator.  It was super-awesome.&lt;br /&gt;
&lt;br /&gt;
Actually.  At first it had a bug, and it took me a long time to figure out.  The bug was that I had modified a value and then accessed it again, thinking I was getting the original value.  That bug taught me about the need for temporary variables.&lt;br /&gt;
&lt;br /&gt;
# Is there anything else we should have asked you or anything else that we should know that might make us like you or your project more&lt;br /&gt;
&lt;br /&gt;
I&#039;m down with O(L)PC (Yeah you know me!).&lt;br /&gt;
&lt;br /&gt;
[[Category:2009 GSoC applications]]&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=0.84/Ideas&amp;diff=9655</id>
		<title>0.84/Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=0.84/Ideas&amp;diff=9655"/>
		<updated>2008-10-16T13:47:08Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: /* Glucose */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Glucose ==&lt;br /&gt;
&lt;br /&gt;
* Implement the source key feature for sugar (i.e. add a modal alert like the objectchooser with a filetree on the left and a non-editable gtksourceview on the right)&lt;br /&gt;
* [http://dev.laptop.org/ticket/7911 #7911] Integrate speech synthesis. &#039;&#039;&#039;(erikos, hemantg)&#039;&#039;&#039;&lt;br /&gt;
* Implement grab/scroll key #447 (erikg?)&lt;br /&gt;
* Incrementally remove PS functionality in favour of implementing Buddy and Activity directly in Sugar toolkit, opening the way to use other unmodified Telepathy backends and clients.&lt;br /&gt;
* Make it possible to subscribe to users (&amp;quot;add friends&amp;quot;) who you can&#039;t see through the server and/or find via Gadget. This means making JIDs human readable, letting the user discover their own JID, providing a way to type them in, and getting the user to approve incoming friend requests.&lt;br /&gt;
* Autosave more intelligently.  Currently, Activities are autosaved on every &amp;quot;context switch&amp;quot;, which makes many things slow.  We should add a &amp;quot;dirty bit&amp;quot; so that Activities only get saved when something has changed, and autosave at most once every N minutes.&lt;br /&gt;
&lt;br /&gt;
== Telepathy ==&lt;br /&gt;
* Implement peer-to-peer connections in Telepathy Gabble so that one-to-one tube data doesn&#039;t go via the XMPP server.  Big performance/reliability wins.&lt;br /&gt;
&lt;br /&gt;
== Control panel ==&lt;br /&gt;
&lt;br /&gt;
* Make layout language &#039;independent&#039; using hippo http://dev.laptop.org/ticket/8148 &lt;br /&gt;
* Add section to set the keyboard layout #6780&lt;br /&gt;
* Add section for the speech settings&lt;br /&gt;
* Better use of localization in the language and date&amp;amp;time section #8312&lt;br /&gt;
* Get rid of the modify_bg hacks and get this into the theme&lt;br /&gt;
&lt;br /&gt;
== Journal ==&lt;br /&gt;
&lt;br /&gt;
* Add start-with option to the entry palette. This is useful in the main view of the journal but as well in the [http://wiki.laptop.org/go/Image:Activity_management-07.jpeg home view activity management]. Use cases are for example the opening of a web-page source in either write or browse without having to reveal the entry&#039;s detail view.&lt;br /&gt;
* Add filter functionality to objectchooser. For example when adding an image into Write the objectchooser should only provide the caller with images [http://dev.laptop.org/ticket/3060 #3060].&lt;br /&gt;
* The activity palette in the home view should allow to resume recent journal entries. [http://wiki.laptop.org/go/Image:Activity_management-07.jpeg Mockup].&lt;br /&gt;
* Encourage to title entries&lt;br /&gt;
* [http://dev.laptop.org/ticket/6128 #6128] Organization with tags.&lt;br /&gt;
* File sharing. Implement [http://monkey.collabora.co.uk/telepathy-spec.git_file-transfer/ file transfer] [http://people.collabora.co.uk/~jonny/spec.html#org.freedesktop.Telepathy.Channel.Type.FileTransfer.DRAFT  (HTML)] for gabble. Implement the UI for file transfer in the Sugar UI ([http://wiki.laptop.org/go/Specifications/Object_Transfers Object Transfer]).&lt;br /&gt;
* Add a Portfolio Activity that children use to select key Journal entries. The Portfolio activity would let them sequence and annotate the entries to make a multimedia presentation of their work.&lt;br /&gt;
&lt;br /&gt;
== Browse ==&lt;br /&gt;
* palette option to download linked file #2903&lt;br /&gt;
* object chooser and download alert in the right window #7498&lt;br /&gt;
&lt;br /&gt;
== Read ==&lt;br /&gt;
* Improved relationship between ebook mode and collaboration #7017 #6537 #6538 #6645 #6736&lt;br /&gt;
* Push evince changes upstream&lt;br /&gt;
&lt;br /&gt;
== Chat ==&lt;br /&gt;
* Switch UI to GTK to enable text selection #8472&lt;br /&gt;
* Wrap as a widget for use in other activities (Andres Ambrois)&lt;br /&gt;
&lt;br /&gt;
== Write ==&lt;br /&gt;
* Elect new master for collaboration when the sharer leaves #3445&lt;br /&gt;
* Colored backgrounds for edits by different participants, as per mockups on [http://wiki.laptop.org/go/Write Write]&lt;br /&gt;
* Use one-to-one tubes such as stream tubes when doing any bulk transfers (if they get implemented as P2P; see below).&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=0.82/Roadmap&amp;diff=478</id>
		<title>0.82/Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=0.82/Roadmap&amp;diff=478"/>
		<updated>2008-05-17T17:21:18Z</updated>

		<summary type="html">&lt;p&gt;Bemasc: Attempt taxonomy conversion, partially (suggested by Marco)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Date&lt;br /&gt;
!Task&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|May 8 2008&lt;br /&gt;
|Development start&lt;br /&gt;
|New features proposal&lt;br /&gt;
|-&lt;br /&gt;
|May 21&lt;br /&gt;
|Sugar 0.81.1 Tarballs Due&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|May 22&lt;br /&gt;
|Sugar 0.81.1 Development Release&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|June 5&lt;br /&gt;
|Sugar 0.81.2 Tarballs Due&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|June 6&lt;br /&gt;
|Sugar 0.81.2 Development Release&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|June 19&lt;br /&gt;
|Sugar 0.81.3 Tarballs Due&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|June 20&lt;br /&gt;
|Sugar 0.82 Beta 1 (0.81.3)&lt;br /&gt;
|Feature, ABI, String freeze&lt;br /&gt;
|-&lt;br /&gt;
|July 7&lt;br /&gt;
|Sugar 0.81.4 Tarballs Due&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|July 8&lt;br /&gt;
|Sugar 0.82 Beta 2 (0.81.4)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|July 21&lt;br /&gt;
|Sugar 0.81.5 Tarballs Due&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|July 22&lt;br /&gt;
|Sugar 0.82 Release Candidate 1 (0.81.5)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|July 31&lt;br /&gt;
|Sugar 0.81.6 Tarballs Due&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|August 1&lt;br /&gt;
|Sugar 0.82 Release Candidate 2 (0.81.6)&lt;br /&gt;
|Hard Code Freeze&lt;br /&gt;
|-&lt;br /&gt;
|August 7&lt;br /&gt;
|Sugar 0.82 Tarballs Due&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|August 8&lt;br /&gt;
|Sugar 0.82 Final Release!&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Glucose Modules ==&lt;br /&gt;
&lt;br /&gt;
* [[Modules#sugar|sugar]]&lt;br /&gt;
* [[Modules#sugar-base|sugar-base]]&lt;br /&gt;
* [[Modules#sugar-datastore|sugar-datastore]]&lt;br /&gt;
* [[Modules#sugar-presence-service|sugar-presence-service]]&lt;br /&gt;
* [[Modules#sugar-toolkit|sugar-toolkit]]&lt;br /&gt;
* [[Modules#sugar-artwork|sugar-artwork]]&lt;br /&gt;
* [[Modules#journal-activity|journal-activity]]&lt;br /&gt;
&lt;br /&gt;
== Fructose Modules ==&lt;br /&gt;
* [[Modules#chat-activity|chat-activity]]&lt;br /&gt;
* [[Modules#web-activity|web-activity]]&lt;br /&gt;
* [[Modules#read-activity|read-activity]]&lt;br /&gt;
* [[Modules#log-activity|log-activity]]&lt;br /&gt;
* [[Modules#write-activity|write-activity]]&lt;br /&gt;
* [[Modules#calculate-activity|calculate-activity]]&lt;br /&gt;
* [[Modules#terminal-activity|terminal-activity]]&lt;br /&gt;
* [[Modules#tamtam-activity|tamtam-activity]]&lt;br /&gt;
&lt;br /&gt;
== Glucose Dependencies ==&lt;br /&gt;
&lt;br /&gt;
* hippo-canvas&lt;br /&gt;
* telepathy-glib&lt;br /&gt;
* telepathy-gabble&lt;br /&gt;
* telepathy-salut&lt;br /&gt;
* telepathy-python&lt;br /&gt;
&lt;br /&gt;
== Tickets ==&lt;br /&gt;
&lt;br /&gt;
* [http://dev.laptop.org/query?status=assigned&amp;amp;status=new&amp;amp;status=reopened&amp;amp;component=sugar&amp;amp;component=datastore&amp;amp;component=presence-service&amp;amp;component=datastore&amp;amp;component=journal-activity&amp;amp;order=priority&amp;amp;milestone=Update.2&amp;amp;col=id&amp;amp;col=summary&amp;amp;col=status&amp;amp;col=owner&amp;amp;col=type&amp;amp;col=priority&amp;amp;col=keywords Glucose tickets] on laptop.org&lt;br /&gt;
&lt;br /&gt;
== New features ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>Bemasc</name></author>
	</entry>
</feed>