Stuff Michael Meeks is doing

This is my (in)activity log. You might like to visit Collabora Productivity a subsidiary of Collabora focusing on LibreOffice support and services for whom I work. Also if you have the time to read this sort of stuff you could enlighten yourself by going to Unraveling Wittgenstein's net or if you are feeling objectionable perhaps here. Failing that, there are all manner of interesting things to read on the LibreOffice Planet news feed.

Older items: 2021: ( J F M A M J J A S O N D ), 2019, 2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000, 1999, legacy html

LibreOffice Collaborative Editing Prototype

One of the last, big missing features in LibreOffice is collaborative editing, to fill this hole Eike Rathke (of RedHat) has been working for some weeks getting Telepathy code hooked into the LibreOffice core. This was chosen to allow us to setup a channel for multi-way communication over existing Instant Messaging (IM) protocols, without requiring any form of server.

A mini hack-fest

With the lovely Google Summer of Code coming up and this Collaborative Editing task on the menu, we thought that it would be good to break the back of the problem, so we had a basic design agreed, some of the heavy-lifting done, and an awareness of the problem areas, so that we'd be good mentors for that task (though please apply for other tasks too, since we suspect this will be rather a popular one, there are a load of other great things to get stuck into in the project list).

Using some quick funding from The Document Foundation, it was possible to get Eike to Cambridge, with Collabora sponsoring us providing office space and Will; getting all the brain-power we needed into one place: Will, Eike, Myself & Rob.

Outline / progress

The kernel of the collaborative approach chosen here is to realise that, as long as every user of the suite applies every change in exactly the same order, it doesn't much matter what the result is; users will get used to resolving occasional conflicts, as long as they can deterministically see the results, and know that this is what everyone sees. Naturally, more complicated designs are possible, but this at least provides a simple, initial approach while we tease the code apart to extract real controller objects.

Telepathy provides a powerful instant-messaging framework that allows the creation of abstract 'tubes' that tunnel invisibly over the IM protocol - allowing arbitrary new protocols to piggyback on your existing IM chat. Perhaps, even better than that, the Jabber protocol provides multi-user chat-rooms, where the order of messages is defined and consistent - meeting our collaboration requirement. Extending that to one-to-one connections we can select a master to ensure ordering, and for local LAN / auto-discovery we have low enough latency that we can do likewise.

So after some initial design overview from Will, we hacked away happily - I spent much of my time re-immersing myself in the calc core code. It is easy to forget how heroic the hackers that work on the top of LibreOffice are - after all, the lower layers of the system are shared, and have more use and polish. I dug at the view code, and ensuring that the ScDocFunc object, was used - splitting large operations (such as cell entry) into a series of smaller, simpler operations in an undo transaction on the model.

Eike meanwhile worked to get our unit tests working with various main-loop integration horrors under control, and the basic communication channels created and sending messages from A to B. Then he connected that to my lame demonstration protocol work to get messages and co-editing flowing.

Will - providing invaluable design input, hacking help, debugging assistence, API work, an 'Approver' to handle incoming connection requests from mission control, chased down obscure g_signal and C++ exception mis-interactions, provided non-stop enthusiasm, and was an exemplary host.

We spent much of the week, Monday to Friday, from early until late at night closeted in a remarkably pleasant sunlight room hacking away, heads down - with occasional frustrated noises, shaking of the head at code in dire need of discipline and so on.

What does it look like

(awful image hack linked to movie above to avoid iframe/planet troubles). For those who dislike screencasts, a more shaky, real-camera and two side-by-side laptops version, where you can see rather less you can go here, failing that perhaps you'd like a much higher resolution, non-dubbed webm of the above.


To Collabora (where dreams solidify into reality) for hosting us, and providing the invaluable advice, support and enthusiasm of Will Thompson - thank you: Rob McQueen, Philippe Kalaf, Guy Lunardi, Neil McGovern & team. To RedHat for Eike's time & of course to SUSE who pays your humble scribe.

Also to all those who supported LibreOffice financially, your generosity makes this sort of strategic travel possible, thank you.

What's next

This is really just a prototype, there is a lot of work to turn this into a product, ie. you will not be seeing this anytime soon outside of some Experimental feature in any shipping LibreOffice - so unless you actively want to help hack on it - please don't bother the developers with questions.

Next, is the Google Summer of Code, there are a lot of rough edges here for this demo, the instant-messaging contacts list needs finishing, connection setup and negotiation needs re-factoring and pushing down into the framework. Then of course, big chunks of re-work to slowly tease out a controller concept from the code, and ensure that it is interposed correctly between the Model and View / Scripting.

Another area that will need more work, is encouraging the Empathy client onto windows, and providing the telepathy framework in an easy-to-consume form there.

Of course, if you want to play with this, and/or see what new exciting things will come out of the next LibreOffice Hackfest, it would be fantastic to see you at:

For some good German beer, sausages, excellent company, and some intense co-editing of the code.

Get involved

Are you a developer ? do you want to get involved with LibreOffice ? Now is a better time to start than later. It's a good idea to get a generic build first, and do an Easy Hack to get confident that we welcome code contributions, and love to have new people involved.

Then if you want to hack on the telepathy integration - assuming that it has not been merged to master by now (if so the branch will be gone) you want to checkout the feature/tubes2 branch, build it and ask on the developer list which bit you could best work on.

My content in this blog and associated images / data under images/ and data/ directories are (usually) created by me and (unless obviously labelled otherwise) are licensed under the public domain, and/or if that doesn't float your boat a CC0 license. I encourage linking back (of course) to help people decide for themselves, in context, in the battle for ideas, and I love fixes / improvements / corrections by private mail.

In case it's not painfully obvious: the reflections reflected here are my own; mine, all mine ! and don't reflect the views of Collabora, SUSE, Novell, The Document Foundation, Spaghetti Hurlers (International), or anyone else. It's also important to realise that I'm not in on the Swedish Conspiracy. Occasionally people ask for formal photos for conferences or fun.

Michael Meeks (