Hacker News new | comments | show | ask | jobs | submit login
Ask HN: Frameworks for real-time collaboration in a web application?
33 points by saikat 2290 days ago | hide | past | web | 12 comments | favorite
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?

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).

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.

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

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

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.)

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.

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

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

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.

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!

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

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)

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | DMCA | Apply to YC | Contact