Hi

Its final evaluation period, so I take this time to write some final notes on the project I worked on this summer, that is integrating collaborative editing into the VisualEditor project[1]. So to fit rightly into the scope of GSoC, the whole collaborative thing on VisualEditor was split into two phases, of which, the first phase was aimed to be delivered. The system is to allow only one user to make changes to a document in an editing session, while the others can spectate the changes in realtime, therefore halting at a stage where concurrency issues arising from multiple editors, would be deal with.

The project is majorly composed of the server-side and client-side components. A server(collaboration server in this context) has been built, which co-ordinates different clients participating in an editing session. Some of the things that the collaboration server does are -

1. Maintains a centralized copy(server's copy) of the document that is worked on in an editing session.
2. Listens to the incoming transactions from a client who makes a new change to the document and applies those transactions to the server's copy of the document.
3. Broadcasts an incoming transaction to the other clients subscribed to the same editing session that triggered the transaction, so that they can apply that transaction to their local documents and keep in sync.
4. Re-use the VisualEditor modules to create a binding for taking care of the above.
5. Talks to an external parsoid service, when it needs the HTML feeding for initializing a document. Initially it used parsoid modules to parse wiki content internally, but considering the scalability, this is done over HTTP using an external parsoid service.
6. And ofcourse, it scales the above features for multiple editing sessions.

The server is built in node.js and uses socket.io library for making persistent connections with the clients. For testing, nodeunit has been used.

The other major aspect of the project is, the client module, which hooks into VisualEditor, initiates a connection with the server, and does all the things with transactions including translating them to the server. The components of client module, like other components of VE, interact using events, which has allowed me to test them easily. And, for testing some major parts of the code, qunit has been used.

So the above, makes for more than 90% of all that I wanted to do. Some of the things that remain are -

1. Authentication of users on collaboration server - Currently, the users which connect to the collaboration server are not validated before putting them on one of the editing sessions. To overcome this, there has to be way by which MediaWiki could help in validating a user coupled with some extra information by a third party. This called for the need of OAuth, but since OAuth isn't ready yet, Roan and Trevor suggested to have a new API module for doing that. I've implemented the API module[2], and written the authentication part in my project aligned with  the implementation. So its nearly done.

2. Transfer of editing control - This is one feature I've not worked on due to confusions mainly related to correctly attributing edit credits to particular users which took part in the editing session. I think, this should not be hard to implement, once the confusions are stripped away.

The above are part of the tasks in my current plan. My plan for future is to further refine the code that I've written so far, especially the server side code. There have been umpteen times when I've shown my demo to people, and they've said, 'dude, it would be amazing if it supported multiple editors', that has always enticed me to work on supporting multiple editors. But, I realized, it was really good decision to cut the scope till what has been done for the sake of robustness. Although, it will be a challenging task, but its definitely in my plan to work on supporting multiple editors in future. The time when we won't need Etherpad, hopefully :)

It has been a great fun and learning time working along side some bright students, dedicated volunteers and amazing Wikimedia engineers, especially the VisualEditor team. Special thanks to Trevor, Gabriel, Roan, Mark(traceur), and all those who ever showed interest in my project. Definitely looking forward to more awesome work.

Cheers!
 
--
Ashish Dubey



--
Ashish Dubey