Apologize for forgetting to put in the links there. [1] - http://www.mediawiki.org/wiki/User:Dash1291/GSoC_2012_Application [2] - https://gerrit.wikimedia.org/r/20013
On Wed, Aug 22, 2012 at 9:02 PM, Ashish Dubey <[email protected]>wrote: > 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 _______________________________________________ Wikitech-l mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/wikitech-l
