Hello all,

I've just subscribed to this mailing list and am not able to directly reply to
the previous thread about collaboration in Xournal. Sorry.

I was thinking about the easiest way to implement collaboration in Xournal a
while ago and came up with a plan on how to do this in a way that 1) doesn't
require big modifications to the existing code and 2) avoids all the issues
with synchronization, Internet lag and so on. The idea is to utilize the
existing infrastructure of layers.

Here is how the process would work: collaborator A(lice) makes one or more
layers from the page she is working on, available to selected people (more on
implementation of this below). Her collaborator B(ob) sees that A made some
layers available for him for viewing and incorporates them into his own page
(most probably, below layers he is working on). These layer(s) are available
for B read-only, but he sees every change that A makes. At the same time, B
can make his working layer available to A so that she incorporates it into her
own page. A and B can exchange the ownership of every shared layer at any
moment. It should also be possible to "detach" the read-only layer and make it
your own (before saving into a file, for example). This would destroy the
synchronization between two copies of the layer though. 

What this scheme achieves is that for every shared layer there exists exactly
one collaborator who can modify it, and this collaborator works on this layer
_locally_. All other collaborators can look but don't change. But since layers
are stacked on top of each other, they will see a superposition of shared
layers and their own writing --- exactly what is needed. In fact, this matches
the way I usually work with my collaborators on the same piece of paper: I
never cross out what the other has written, but often write on top of it.

Advantages of this scheme:
1) Easy to incorporate into existing structure. Basically, one needs to allow
   layers to be read-only and to run additional threads that are going to
   update their content.
2) Each layer is edited only locally. There might be a delay with showing the
   result of the changes to a remote collaborator, but not on the computer
   where the editing is done.
3) Easily scalable to any number of collaborators.

Possible disadvantages:
1) Not easy to resume synchronous collaboration after a break (when the
   document was saved on both ends). One solution could be to keep a checksum
   with each layer and if checksums for a certain layer match on both ends,
   then propose to collaborators to decide who is going to edit it. At the
   end, it would be up to humans to decide which layers to share and how.
2) Not possible to edit the same thing on both sides. Is this really needed?
3) ????

Now, concerning the issue of authentication and sharing of the data. I believe
that the easiest solution would be to use the existing IM infrastructure.
Almost everyone nowadays has an account with at least one IM network and there
are plenty of software/libraries that implement interconnections between them.
These existing software can handle authentication. In particular, take care of 
such issues as making some content (layers) available to other participants of
the network. Moreover, the existing XMPP protocol (used by Jabber and others)
is based on XML, so I think it should not be overly complicated to incorporate
Xournal primitives into it. The data would be shared stroke-by-stroke. I guess
this should result in a reasonable latency, especially considering that
communication for each layer would be unidirectional. I'm not any specialist
in Internet protocols though.

Oh, and using existing IM infrastructure would eliminate the need for
distinguishing between servers and clients and avoid problems of having
computers behind firewalls (most of those used at home are).

So what do you think? Does this all make sense?

Thanks for your attention,

   --- Alex.

------------------------------------------------------------------------------
Benefiting from Server Virtualization: Beyond Initial Workload 
Consolidation -- Increasing the use of server virtualization is a top
priority.Virtualization can reduce costs, simplify management, and improve 
application availability and disaster protection. Learn more about boosting 
the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev
_______________________________________________
Xournal-devel mailing list
Xournal-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xournal-devel

Reply via email to