W00T (Without Operational Transformation)
This paper describes a method of building online collaborative systems that is far simpler than OT. A few years ago I would have dismissed it as a hack (a key to its implementation strategy is that it never deletes characters from the document). But a few years of experience in software engineering have taught me to appreciate it’s simplicity in implementation. Simple implementation and “good enough” feature set is sometimes the right move.
It’s pretty easy reading as far as academic papers go. It’s full of examples to make sure that you really know the edge cases of the algorithm by the time you’re done reading.
An Intro to OT
This is one of the first papers to introduce OT as a technique for building collaborative editors. It’s pretty light on implementation details and spends more time than I’d like describing what real-time collaboration is (I guess you couldn’t take that for granted in 1995). It’s an interesting read, but if you’re interested in getting started with OT, I’d recommend starting instead with this article by Daniel Spiewak. It describes the OT algorithm at a high level and gets into some of the complexities of using it to build an OT server/client.
When I was done with Spiewak’s article, I still didn’t have a solid idea of how to implement OT on text or XML or any particular datatype. He directs to you to the Google Wave whitepapers to find out more, but I found the ot.py implementation to be a better explanation. It’s pretty small and easy to read in entirety. There are more implementations at that link (js, Haskell, lua) but I haven’t dug into them. If you find one that you think is great, let me know!
The Way of Kings
This is probably the first fiction book I’ve read since high school. I don’t think I would have had the time to get into it had we not been travelling in China without laptops/phones/etc. It was engrossing. The only downside is that it’s part one of a ten part series of books only two of which are done.
I’ll follow up in 16 years and let you know if it was worth it. ;)
If you draw any quad and join its midpoints with lines, you get a parallelogram! That's pretty neat. The animation below repeatedly draws a (not quite) random quad and joins its midpoints with lines.