

Ask HN: Frameworks for real-time collaboration in a web application? - saikat

I spent some time looking for frameworks that make making a real-time, collaborative web application (like Dabbleboard or Etherpad) easier.  From what I could find, there are various frameworks that handle the real-time part, but not the collaboration part (XMPP/Bosh/Sophe.js, various Comet solutions like Tornado, APE, Node.js, Orbited, APE, and WebSockets (which may or may not also be a Comet solution depending on your view)).  Then there is Google Wave which seems like it does most of what I want (handles operational transformations for me), but is currently restricted to other wave (or wave sandbox, if you use an embedded wave) users.  Then there is mobwrite, which does synchronization for me using differential synchronization, but as far as I can tell, this won't apply to apps that use structured data (my data is in JSON).  I'm leaning towards building a custom solution on top of WebSockets that tries to deal with real-time edits from different clients, but before I go at it, does anyone know of any other frameworks out there that would help me build such an app?
======
RedKnight
We provide an Operational Transformation Engine at www.beweevee.com that works
in web applications through either a Silverlight/Javascript bridge or
natively. As an example, a client of ours has integrated their javascript text
editing control using Silverlight only for OT transformation purposes as their
backend was entirely coded in Java.

You can get more info at www.beweevee.com

~~~
saikat
Awesome, I hadn't heard of that. Thanks!

------
jeandenis
I was in a similar situation last spring and really didn't find anything that
worked. But that was pre-Google Wave. Today, I believe the open-sourced wave
reference server (<http://code.google.com/p/wave-protocol/>) includes op
trans. It's under Apache 2.0 and I doubt it'd take you long to rip out and
wrap op trans into something useful for you.

FYI, after failing to find anything last year, I ended up implementing an
operational transformation framework from scratch (using standard comet for
comm). The literature's good enough that you can make sense of it all. Solo,
it took me 2 weeks to implement the algorithm, another 2 weeks to put a
callback framework around it to make it useful (like a SAX parser for changes
to a shared xml structured document) and one more week to port it to js
(original in Java) and add networking. Was a ton of fun and even useful for a
couple of projects (shared canvas, text editor, collaborative UML'ing).

~~~
JeremyHerrman
I setup a local wave server and used their client application to connect
multiple consoles to a wave. I've been meaning to hook this up to a web client
but haven't found the time yet.

------
mahmud
One you have a prototype push link up and running; server and client able to
reach each other on demand, the rest is just a simple matter of user
authentication, managing timestamps, and maintaining consistency between the
server side data-structure modeling the shared "object" being collaberated on,
and the disparate views the users have of it in their clients.

This stuff can't be trivially made into a framework, because "collaboration"
is not a particular problem, but a whole class of same-same but different
problems (as Thais would say.)

~~~
saikat
Sure it wouldn't be trivial to be made into a framework, but from what I
understand, a framework for "collaboration" seems at least possible since I
think this is one of Google Wave's goals.

------
coulix
On the adobe side (i know) you have <http://labs.adobe.com/technologies/afcs/>
AFCS which answer this set of problem quite well.

As mahmud said "rest is just a simple matter of user authentication, managing
timestamps, and maintaining consistency between the server side data-structure
modeling the shared "object" being collaberated on,"

Which is imho not so easy.

------
nudge
Lunascript(<http://www.asana.com/luna>) looks pretty exciting but I don't
think it has been released yet.

~~~
boucher
It hasn't been released, and probably won't be released in the near future.

------
andreshb
Does any one else have this problem? If so, would you pay for the solution? If
lots of people answered yes... this could be a product for a startup!

------
ssriram
I used APE and a heavily modified tiddlywiki to put together BlipWiki at
<http://www.baggr.com> and used the python/javascript diff-match-patch
libraries from <http://code.google.com/p/google-diff-match-patch/> to keep the
data in sync

------
ajessup
I'm trying to build a OT library to run on node.js. If anyone's interested in
getting involved drop me a line (ajessup -at- gmail dot com)

