User:Dash1291/GSoC status

Status updates of my GSoC project on Realtime Collaborative editing on Visual Editor (User:Dash1291/GSoC_2012_Application) go here.

May 7th

 * Wrote some initial code for the collaboration server. Initial modular structure features separate modules for callbacks for Socket.IO events, server's model (includes data model synthesis, and transaction processing) and a front facing server module which binds all the above and may talk to the parser in the further course.
 * Trevor suggested that the code should be pushed to a remote branch of VisualEditor's git repo. With some amount of initial code written, I'm eager to push it early this coming week.

May 14th

 * Started pushing some initial code to 'realtimeve' branch of VisualEditor. Initial code is not the working code and mostly includes the modular structure of the collaboration server.
 * Started to bind VE modules into a node.js module to be used in the collaboration server, but deferred for later due some codebase changes coming from the 'dmrewrite' branch.

June 12th

 * Finished the modular structure of the server. Server would hold session objects, which would contain a reference to the document and users currently working on the editing session.
 * Wrote a node module as a parsoid interface for the server. Using local wiki for testing.
 * Finished binding of `ve` modules in a node module which is used in the server. This along with a minimal client adapter helped in testing the session initialization on a new connection.

The server currently uses the parsoid interface to fetch HTML of the page requested by the client and serve it to the client on connection establishment. Next task will be building up more on the client adapter, so as to listen to the Surface events and collect new transactions and pass them to the server.

June 22nd

 * In the previous days, I've mostly done work for handling client-server interaction (session initialization, communicating transactions).
 * Session initialization works for multiple clients. A single client is given the publishing right, so that client is the only one which can push transactions to the server. For testing, this client is taken to be the first client that connects to the server. All the other clients that attempt to connect to the server after this client (publishing client), are not able to edit their document but the transactions pushed from the publishing client are broadcasted to all the listening clients(non-publishing) and are applied to their local documents.
 * Passing of editing control is not supported yet. I will be working on that in the coming days.
 * Attempting to create a minimal client UI so that I can prepare an integrated demo for easy and effective testing.

July 1st

 * Prepared a UI and integrated it with the updated VE sandbox. Collaborative editing can be turned on/off using the interface. On enabling, the client connects to the collaboration server and receives the document and loads into its editor. On disabling, the client falls back to the normal editing mode.
 * Integrated the collaboration server to be run along with parsoid service in the same master process but on a different port. The collaboration server is designed in a way that it can parse the wiki pages internally using the parser modules, but can also talk to the external parsoid service over HTTP(and this is the current behavior in practice).
 * Started writing server-side unit tests using a Node.js port of QUnit.

The code is in a state of a demo deployment. I'm preparing to either put it up on a labs instance or my personal instance, whatever is easier at the start of the coming week.