<?xml version="1.0" encoding="utf-8"?>
<!-- name="generator" content="pyblosxom/1.2.1 06/01/2005" -->
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">

<rss version="0.91">
<channel>
<title>ddaa bbloggs   </title>
<link>http://ddaa.net/blog/gobby-first-look</link>
<description>Some free bits of software.</description>
<language>en</language>
<item>
    <title>A Look at Gobby</title>
    <link>http://ddaa.net/blog/gobby-first-look.html</link>
    <description>&lt;p&gt;For a couple of months now, I have been looking into implementing a
collaborative text editor similar to &lt;a class=&quot;reference&quot; href=&quot;http://www.codingmonkeys.de/subethaedit/&quot;&gt;SubEthaEdit&lt;/a&gt;, but &lt;a class=&quot;reference&quot; href=&quot;http://www.gnu.org/philosophy/free-sw.html&quot;&gt;libre&lt;/a&gt;. This personal
project is probably to take another direction now that I have discovered Gobby,
and found out that &lt;a class=&quot;reference&quot; href=&quot;#gobby-it-works&quot;&gt;it does work&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;some-other-libre-collaborative-text-editors&quot;&gt;
&lt;h2&gt;&lt;a name=&quot;some-other-libre-collaborative-text-editors&quot;&gt;Some other libre collaborative text editors&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The initial research taught me about some related projects in the free software
world, in particular the &lt;a class=&quot;reference&quot; href=&quot;http://thread.gmane.org/gmane.editors.abiword.devel/17000&quot;&gt;Gnome Office Collab&lt;/a&gt; initiative that was discussed
on the Abiword developers mailing list. This discussion included a &lt;a class=&quot;reference&quot; href=&quot;http://thread.gmane.org/gmane.editors.abiword.devel/17275&quot;&gt;very
valuable post&lt;/a&gt; linking to the excellent computer science paper
[&lt;a class=&quot;reference&quot; href=&quot;http://citeseer.ist.psu.edu/sun98achieving.html&quot;&gt;sun98achieving&lt;/a&gt;] that was purportedly implemented by SubEthaEdit.&lt;/p&gt;
&lt;p&gt;But as far as &lt;a class=&quot;reference&quot; href=&quot;http://www.gnu.org/philosophy/free-sw.html&quot;&gt;libre&lt;/a&gt; collaborative text editors went, I did not find much.&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;The &lt;a class=&quot;reference&quot; href=&quot;http://students.olin.edu/2007/mcolyer/projects/collaborate/&quot;&gt;Collaborate&lt;/a&gt; application seemed like a good candidate, but it just did
not work correctly. Though the web page looks good, it&apos;s just an aborted
student project.&lt;/li&gt;
&lt;li&gt;The &lt;a class=&quot;reference&quot; href=&quot;http://www-mice.cs.ucl.ac.uk/multimedia/software/nte/&quot;&gt;Network Text Editor&lt;/a&gt; [&lt;a class=&quot;reference&quot; href=&quot;http://citeseer.csail.mit.edu/handley97network.html&quot;&gt;handley97network&lt;/a&gt;] appears more mature, but it&apos;s
an &lt;a class=&quot;reference&quot; href=&quot;http://en.wikipedia.org/wiki/Mbone&quot;&gt;MBone&lt;/a&gt; application and is all about making collaborative text editing work
with such an unreliable transport. That might make for good academic
publications, but that seems to me like the kind of contortions you would
only perform to fit within an imposed research program.&lt;/li&gt;
&lt;li&gt;At the time, I also noticed this intriguing &lt;a class=&quot;reference&quot; href=&quot;http://www.debian.org/&quot;&gt;Debian&lt;/a&gt; package, called
&lt;a class=&quot;reference&quot; href=&quot;http://packages.debian.org/testing/libs/libobby-1.0-0&quot;&gt;libobby-1.0&lt;/a&gt;. However, that did not seem to be actually used by something
and it had the annoying property of enforcing a centralised model. It turns
out that this is the core library used by Gobby.&lt;/li&gt;
&lt;li&gt;I have also recently been pointed at &lt;a class=&quot;reference&quot; href=&quot;http://ace.iserver.ch/&quot;&gt;ACE&lt;/a&gt;, a Java application.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;centralised-or-decentralised&quot;&gt;
&lt;h2&gt;&lt;a name=&quot;centralised-or-decentralised&quot;&gt;Centralised or decentralised?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;What do I mean when I say: centralised model? In short, that means that all
editing actions goes through a central, fixed, server instead of being
transmitted among peers.&lt;/p&gt;
&lt;p&gt;Centralisation in a real-time collaborative environment is problematic: the
server network bandwidth can become a bottleneck, latency is increased as any
two users have to communicate through the server, and the editing session
cannot outlive the server. These problems are aggravated by the fact that the
server often runs on the workstation of one of the participants, who may want
to leave the editing session, and whose network connectivity may be less than
carrier-grade.&lt;/p&gt;
&lt;p&gt;When several people are collaborating on the same data over the internet, there
are technical challenges in ensuring that all users see the same document, and
that the changes appear to each user in a natural order. What makes the problem
difficult is that, if you want to provide smooth editing experience, you must
accept that different users may have slightly diverging document states.&lt;/p&gt;
&lt;p&gt;When you type a word in a collaborative text editor, you want the word to
appear immediately on your screen and then be sent to other participants in the
editing session. Then another user can type another word before receiving what
you typed, and that should also be displayed instantly on the other user&apos;s
screen. In that scenario, you and the other user&apos;s document state &lt;em&gt;diverge&lt;/em&gt; for
a short while. Among other things, the collaborative text editor must ensure
that everybody ends up with the same document state after a short while. That
is the &lt;strong&gt;convergence&lt;/strong&gt; problem.&lt;/p&gt;
&lt;p&gt;Other technical challenges of concurrent document editing include &lt;strong&gt;causality
preservation&lt;/strong&gt;, and &lt;strong&gt;intention preservation&lt;/strong&gt;. Causality preservation means
that if you type &amp;quot;Hello&amp;quot;, and a second user types &amp;quot;World&amp;quot; after seeing &amp;quot;Hello&amp;quot;,
then a third user must always see &amp;quot;Hello&amp;quot; appear &lt;em&gt;before&lt;/em&gt; &amp;quot;World&amp;quot;. Intention
preservation simply means that edits always have the desired effect, which is
not as simple as it sounds because document states may diverge.&lt;/p&gt;
&lt;p&gt;Convergence and causality preservation seem difficult to achieve without
arbitration. The usual solution to arbitration problems is to centralise the
system, a single &lt;strong&gt;server&lt;/strong&gt; process on a single computer decides in which order
things really happened and breaks ties. &lt;a class=&quot;reference&quot; href=&quot;http://en.wikipedia.org/wiki/Special_relativity&quot;&gt;Special relativity&lt;/a&gt; explains that two
causally independent events may appear to have occurred in different orders for
different observers, so it often looks like there is no way around
centralisation when arbitration is needed. But the &lt;a class=&quot;reference&quot; href=&quot;http://citeseer.ist.psu.edu/sun98achieving.html&quot;&gt;sun98achieving&lt;/a&gt; paper shows
that centralisation is not required for collaborative text editing, and
explains how to do without.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;the-need-for-a-decentralised-messaging-abstraction&quot;&gt;
&lt;h2&gt;&lt;a name=&quot;the-need-for-a-decentralised-messaging-abstraction&quot;&gt;The need for a decentralised messaging abstraction&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Centralisation, even if it problematic, avoids some other difficult problems.
The &lt;a class=&quot;reference&quot; href=&quot;http://citeseer.ist.psu.edu/sun98achieving.html&quot;&gt;sun98achieving&lt;/a&gt; paper makes a good job of explaining how to handle editing
operations, but it says nothing about session negotiation. In particular, if
you want to prevent two users from using the same nickname, or the same text
colour, or you want documents in the session to have unique names, you have a
difficult distributed resource management problem.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;reference&quot; href=&quot;http://www.spread.org/&quot;&gt;The Spread Toolkit&lt;/a&gt; solves a related problem, providing a messaging
abstraction for decentralised networks. Unfortunately, it is very oriented
towards clustering applications and requires that network participants be
declared in a configuration file. That makes it completely unsuitable for use
in a user friendly collaborative text editor. Also, its &lt;a class=&quot;reference&quot; href=&quot;http://www.spread.org/license/&quot;&gt;license&lt;/a&gt; has an
attribution clause that makes it &lt;a class=&quot;reference&quot; href=&quot;http://www.gnu.org/philosophy/bsd.html&quot;&gt;GPL-incompatible&lt;/a&gt;. However the Spread
Message Service Types look like they would be a good foundation for a generic
distributed messaging system.&lt;/p&gt;
&lt;p&gt;Another problem with decentralised collaborative text editing over the internet
is that to really reap the benefits of decentralisation in robustness and
performance, you need to build a &lt;a class=&quot;reference&quot; href=&quot;http://en.wikipedia.org/wiki/Mesh_network&quot;&gt;mesh&lt;/a&gt; of network connections which touches
another difficult research problem (pointers gladly accepted): the construction
of a robust mesh without going for a fully-connected network. In addition to
this theoretical problem, special care would be needed to transparently and
reliably establish connections to other session participants in the present of
&lt;a class=&quot;reference&quot; href=&quot;http://en.wikipedia.org/wiki/NAT&quot;&gt;NAT&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My personal experiments were based on a decentralised model, and I got very
tangled into the distributed resource management problem. I think that before
we can have a usefully decentralised collaborative text editor, we will need a
good decentralised messaging abstraction that provides a foundation for
resource management and a transparent fault-resilient mesh network of peers.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;gobby-it-works&quot;&gt;
&lt;h2&gt;&lt;a name=&quot;gobby-it-works&quot;&gt;Gobby, it works!&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A few days ago, a colleague pointed me at &lt;a class=&quot;reference&quot; href=&quot;http://gobby.0x539.de/&quot;&gt;Gobby&lt;/a&gt;. The collaborative text editor
from the &lt;a class=&quot;reference&quot; href=&quot;http://0x539.de/members.html&quot;&gt;0x539.dev group&lt;/a&gt;. I downloaded and compiled the application, played
a bit with it, read the (still quite short) mailing list archive, and chatted a
lot on the &lt;a class=&quot;reference&quot; href=&quot;irc://irc.blitzed.org:6667/0x539&quot;&gt;#0x539 IRC channel&lt;/a&gt;. And I have to say I was quite positively
impressed!&lt;/p&gt;
&lt;p&gt;In short, Gobby is a multi-platform (Linux, Mac, Windows) collaborative text
editor written in &lt;a class=&quot;reference&quot; href=&quot;http://en.wikipedia.org/wiki/C_Plus_Plus&quot;&gt;C++&lt;/a&gt; and using the &lt;a class=&quot;reference&quot; href=&quot;http://www.gtk.org/&quot;&gt;GTK&lt;/a&gt; toolkit. Despite the low version
number (0.2.0 was recently released) it&apos;s already quite usable though it still
has a few annoying limitations:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;When a user loads a document, the whole document appears with the background
colour of that user, making it impossible to see the text that user has typed
during the session.&lt;/li&gt;
&lt;li&gt;The Undo mechanism does not distinguish between local and remote edits. There
is no way (yet) to undo your actions without first undoing more recent
actions from other users.&lt;/li&gt;
&lt;li&gt;The networking implementation is still less than ideal, in particular, the
application freezes while trying to establish a connection.&lt;/li&gt;
&lt;li&gt;The carets and selections of other users are not visible.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On the upside, most of these limitations are likely to be fixed in the near
future, except multiple-caret and multiple-selection display that would require
a non-trivial amount of GTK programming.&lt;/p&gt;
&lt;p&gt;Most of the features you would expect are already there:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Lock-less collaborative text editing that actually works, providing all three
of convergence, causality preservation and intention preservation.&lt;/li&gt;
&lt;li&gt;Each user is associated to a background colour that marks the text the user
has typed during the session.&lt;/li&gt;
&lt;li&gt;A built-in chat service.&lt;/li&gt;
&lt;li&gt;Syntax highlighting provided by the &lt;a class=&quot;reference&quot; href=&quot;http://gtksourceview.sourceforge.net/&quot;&gt;GtkSourceView&lt;/a&gt; widget.&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference&quot; href=&quot;http://www.zeroconf.org/&quot;&gt;Zeroconf&lt;/a&gt; networking using &lt;a class=&quot;reference&quot; href=&quot;http://www.porchdogsoft.com/products/howl/&quot;&gt;Howl&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A sane build system, based on the &lt;a class=&quot;reference&quot; href=&quot;http://vipe.technion.ac.il/~shlomif/lecture/Autotools/&quot;&gt;GNU Autotools&lt;/a&gt; suite.&lt;/li&gt;
&lt;li&gt;Localisation support using &lt;a class=&quot;reference&quot; href=&quot;http://www.gnu.org/software/gettext/&quot;&gt;gettext&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My main issues with this project is that it is written in C++, which is not a
language I would be programming in for fun, and that it enforces a centralised
model. However, centralisation appears like a reasonable choice when you
consider the additional complexity involved by useful decentralisation.&lt;/p&gt;
&lt;/div&gt;</description>
  </item>
	    <item>
      <title>A Look at Gobby</title>
      <link>http://ddaa.net/blog/gobby-first-look/gobby-first-look</link>
      <description>&lt;p&gt;For a couple of months now, I have been looking into implementing a
collaborative text editor similar to &lt;a class=&quot;reference&quot; href=&quot;http://www.codingmonkeys.de/subethaedit/&quot;&gt;SubEthaEdit&lt;/a&gt;, but &lt;a class=&quot;reference&quot; href=&quot;http://www.gnu.org/philosophy/free-sw.html&quot;&gt;libre&lt;/a&gt;. This personal
project is probably to take another direction now that I have discovered Gobby,
and found out that &lt;a class=&quot;reference&quot; href=&quot;#gobby-it-works&quot;&gt;it does work&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;some-other-libre-collaborative-text-editors&quot;&gt;
&lt;h2&gt;&lt;a name=&quot;some-other-libre-collaborative-text-editors&quot;&gt;Some other libre collaborative text editors&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The initial research taught me about some related projects in the free software
world, in particular the &lt;a class=&quot;reference&quot; href=&quot;http://thread.gmane.org/gmane.editors.abiword.devel/17000&quot;&gt;Gnome Office Collab&lt;/a&gt; initiative that was discussed
on the Abiword developers mailing list. This discussion included a &lt;a class=&quot;reference&quot; href=&quot;http://thread.gmane.org/gmane.editors.abiword.devel/17275&quot;&gt;very
valuable post&lt;/a&gt; linking to the excellent computer science paper
[&lt;a class=&quot;reference&quot; href=&quot;http://citeseer.ist.psu.edu/sun98achieving.html&quot;&gt;sun98achieving&lt;/a&gt;] that was purportedly implemented by SubEthaEdit.&lt;/p&gt;
&lt;p&gt;But as far as &lt;a class=&quot;reference&quot; href=&quot;http://www.gnu.org/philosophy/free-sw.html&quot;&gt;libre&lt;/a&gt; collaborative text editors went, I did not find much.&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;The &lt;a class=&quot;reference&quot; href=&quot;http://students.olin.edu/2007/mcolyer/projects/collaborate/&quot;&gt;Collaborate&lt;/a&gt; application seemed like a good candidate, but it just did
not work correctly. Though the web page looks good, it&apos;s just an aborted
student project.&lt;/li&gt;
&lt;li&gt;The &lt;a class=&quot;reference&quot; href=&quot;http://www-mice.cs.ucl.ac.uk/multimedia/software/nte/&quot;&gt;Network Text Editor&lt;/a&gt; [&lt;a class=&quot;reference&quot; href=&quot;http://citeseer.csail.mit.edu/handley97network.html&quot;&gt;handley97network&lt;/a&gt;] appears more mature, but it&apos;s
an &lt;a class=&quot;reference&quot; href=&quot;http://en.wikipedia.org/wiki/Mbone&quot;&gt;MBone&lt;/a&gt; application and is all about making collaborative text editing work
with such an unreliable transport. That might make for good academic
publications, but that seems to me like the kind of contortions you would
only perform to fit within an imposed research program.&lt;/li&gt;
&lt;li&gt;At the time, I also noticed this intriguing &lt;a class=&quot;reference&quot; href=&quot;http://www.debian.org/&quot;&gt;Debian&lt;/a&gt; package, called
&lt;a class=&quot;reference&quot; href=&quot;http://packages.debian.org/testing/libs/libobby-1.0-0&quot;&gt;libobby-1.0&lt;/a&gt;. However, that did not seem to be actually used by something
and it had the annoying property of enforcing a centralised model. It turns
out that this is the core library used by Gobby.&lt;/li&gt;
&lt;li&gt;I have also recently been pointed at &lt;a class=&quot;reference&quot; href=&quot;http://ace.iserver.ch/&quot;&gt;ACE&lt;/a&gt;, a Java application.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;centralised-or-decentralised&quot;&gt;
&lt;h2&gt;&lt;a name=&quot;centralised-or-decentralised&quot;&gt;Centralised or decentralised?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;What do I mean when I say: centralised model? In short, that means that all
editing actions goes through a central, fixed, server instead of being
transmitted among peers.&lt;/p&gt;
&lt;p&gt;Centralisation in a real-time collaborative environment is problematic: the
server network bandwidth can become a bottleneck, latency is increased as any
two users have to communicate through the server, and the editing session
cannot outlive the server. These problems are aggravated by the fact that the
server often runs on the workstation of one of the participants, who may want
to leave the editing session, and whose network connectivity may be less than
carrier-grade.&lt;/p&gt;
&lt;p&gt;When several people are collaborating on the same data over the internet, there
are technical challenges in ensuring that all users see the same document, and
that the changes appear to each user in a natural order. What makes the problem
difficult is that, if you want to provide smooth editing experience, you must
accept that different users may have slightly diverging document states.&lt;/p&gt;
&lt;p&gt;When you type a word in a collaborative text editor, you want the word to
appear immediately on your screen and then be sent to other participants in the
editing session. Then another user can type another word before receiving what
you typed, and that should also be displayed instantly on the other user&apos;s
screen. In that scenario, you and the other user&apos;s document state &lt;em&gt;diverge&lt;/em&gt; for
a short while. Among other things, the collaborative text editor must ensure
that everybody ends up with the same document state after a short while. That
is the &lt;strong&gt;convergence&lt;/strong&gt; problem.&lt;/p&gt;
&lt;p&gt;Other technical challenges of concurrent document editing include &lt;strong&gt;causality
preservation&lt;/strong&gt;, and &lt;strong&gt;intention preservation&lt;/strong&gt;. Causality preservation means
that if you type &amp;quot;Hello&amp;quot;, and a second user types &amp;quot;World&amp;quot; after seeing &amp;quot;Hello&amp;quot;,
then a third user must always see &amp;quot;Hello&amp;quot; appear &lt;em&gt;before&lt;/em&gt; &amp;quot;World&amp;quot;. Intention
preservation simply means that edits always have the desired effect, which is
not as simple as it sounds because document states may diverge.&lt;/p&gt;
&lt;p&gt;Convergence and causality preservation seem difficult to achieve without
arbitration. The usual solution to arbitration problems is to centralise the
system, a single &lt;strong&gt;server&lt;/strong&gt; process on a single computer decides in which order
things really happened and breaks ties. &lt;a class=&quot;reference&quot; href=&quot;http://en.wikipedia.org/wiki/Special_relativity&quot;&gt;Special relativity&lt;/a&gt; explains that two
causally independent events may appear to have occurred in different orders for
different observers, so it often looks like there is no way around
centralisation when arbitration is needed. But the &lt;a class=&quot;reference&quot; href=&quot;http://citeseer.ist.psu.edu/sun98achieving.html&quot;&gt;sun98achieving&lt;/a&gt; paper shows
that centralisation is not required for collaborative text editing, and
explains how to do without.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;the-need-for-a-decentralised-messaging-abstraction&quot;&gt;
&lt;h2&gt;&lt;a name=&quot;the-need-for-a-decentralised-messaging-abstraction&quot;&gt;The need for a decentralised messaging abstraction&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Centralisation, even if it problematic, avoids some other difficult problems.
The &lt;a class=&quot;reference&quot; href=&quot;http://citeseer.ist.psu.edu/sun98achieving.html&quot;&gt;sun98achieving&lt;/a&gt; paper makes a good job of explaining how to handle editing
operations, but it says nothing about session negotiation. In particular, if
you want to prevent two users from using the same nickname, or the same text
colour, or you want documents in the session to have unique names, you have a
difficult distributed resource management problem.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;reference&quot; href=&quot;http://www.spread.org/&quot;&gt;The Spread Toolkit&lt;/a&gt; solves a related problem, providing a messaging
abstraction for decentralised networks. Unfortunately, it is very oriented
towards clustering applications and requires that network participants be
declared in a configuration file. That makes it completely unsuitable for use
in a user friendly collaborative text editor. Also, its &lt;a class=&quot;reference&quot; href=&quot;http://www.spread.org/license/&quot;&gt;license&lt;/a&gt; has an
attribution clause that makes it &lt;a class=&quot;reference&quot; href=&quot;http://www.gnu.org/philosophy/bsd.html&quot;&gt;GPL-incompatible&lt;/a&gt;. However the Spread
Message Service Types look like they would be a good foundation for a generic
distributed messaging system.&lt;/p&gt;
&lt;p&gt;Another problem with decentralised collaborative text editing over the internet
is that to really reap the benefits of decentralisation in robustness and
performance, you need to build a &lt;a class=&quot;reference&quot; href=&quot;http://en.wikipedia.org/wiki/Mesh_network&quot;&gt;mesh&lt;/a&gt; of network connections which touches
another difficult research problem (pointers gladly accepted): the construction
of a robust mesh without going for a fully-connected network. In addition to
this theoretical problem, special care would be needed to transparently and
reliably establish connections to other session participants in the present of
&lt;a class=&quot;reference&quot; href=&quot;http://en.wikipedia.org/wiki/NAT&quot;&gt;NAT&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My personal experiments were based on a decentralised model, and I got very
tangled into the distributed resource management problem. I think that before
we can have a usefully decentralised collaborative text editor, we will need a
good decentralised messaging abstraction that provides a foundation for
resource management and a transparent fault-resilient mesh network of peers.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;gobby-it-works&quot;&gt;
&lt;h2&gt;&lt;a name=&quot;gobby-it-works&quot;&gt;Gobby, it works!&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A few days ago, a colleague pointed me at &lt;a class=&quot;reference&quot; href=&quot;http://gobby.0x539.de/&quot;&gt;Gobby&lt;/a&gt;. The collaborative text editor
from the &lt;a class=&quot;reference&quot; href=&quot;http://0x539.de/members.html&quot;&gt;0x539.dev group&lt;/a&gt;. I downloaded and compiled the application, played
a bit with it, read the (still quite short) mailing list archive, and chatted a
lot on the &lt;a class=&quot;reference&quot; href=&quot;irc://irc.blitzed.org:6667/0x539&quot;&gt;#0x539 IRC channel&lt;/a&gt;. And I have to say I was quite positively
impressed!&lt;/p&gt;
&lt;p&gt;In short, Gobby is a multi-platform (Linux, Mac, Windows) collaborative text
editor written in &lt;a class=&quot;reference&quot; href=&quot;http://en.wikipedia.org/wiki/C_Plus_Plus&quot;&gt;C++&lt;/a&gt; and using the &lt;a class=&quot;reference&quot; href=&quot;http://www.gtk.org/&quot;&gt;GTK&lt;/a&gt; toolkit. Despite the low version
number (0.2.0 was recently released) it&apos;s already quite usable though it still
has a few annoying limitations:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;When a user loads a document, the whole document appears with the background
colour of that user, making it impossible to see the text that user has typed
during the session.&lt;/li&gt;
&lt;li&gt;The Undo mechanism does not distinguish between local and remote edits. There
is no way (yet) to undo your actions without first undoing more recent
actions from other users.&lt;/li&gt;
&lt;li&gt;The networking implementation is still less than ideal, in particular, the
application freezes while trying to establish a connection.&lt;/li&gt;
&lt;li&gt;The carets and selections of other users are not visible.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On the upside, most of these limitations are likely to be fixed in the near
future, except multiple-caret and multiple-selection display that would require
a non-trivial amount of GTK programming.&lt;/p&gt;
&lt;p&gt;Most of the features you would expect are already there:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Lock-less collaborative text editing that actually works, providing all three
of convergence, causality preservation and intention preservation.&lt;/li&gt;
&lt;li&gt;Each user is associated to a background colour that marks the text the user
has typed during the session.&lt;/li&gt;
&lt;li&gt;A built-in chat service.&lt;/li&gt;
&lt;li&gt;Syntax highlighting provided by the &lt;a class=&quot;reference&quot; href=&quot;http://gtksourceview.sourceforge.net/&quot;&gt;GtkSourceView&lt;/a&gt; widget.&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference&quot; href=&quot;http://www.zeroconf.org/&quot;&gt;Zeroconf&lt;/a&gt; networking using &lt;a class=&quot;reference&quot; href=&quot;http://www.porchdogsoft.com/products/howl/&quot;&gt;Howl&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A sane build system, based on the &lt;a class=&quot;reference&quot; href=&quot;http://vipe.technion.ac.il/~shlomif/lecture/Autotools/&quot;&gt;GNU Autotools&lt;/a&gt; suite.&lt;/li&gt;
&lt;li&gt;Localisation support using &lt;a class=&quot;reference&quot; href=&quot;http://www.gnu.org/software/gettext/&quot;&gt;gettext&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My main issues with this project is that it is written in C++, which is not a
language I would be programming in for fun, and that it enforces a centralised
model. However, centralisation appears like a reasonable choice when you
consider the additional complexity involved by useful decentralisation.&lt;/p&gt;
&lt;/div&gt;</description>
      <category domain="http://www.sauria.com"></category>
      <dc:date>2005-08-08T15:53:00Z</dc:date>
    </item>
   </channel>
</rss>