Modeling CRDTs in Alloy – the importance of idempotence
bytes.zone
bytes.zone
I think you're (mis)quoting me. I made a comment like that on the webpage for ShareJS back in 2011 which eventually made it into the wikipedia article on operational transform.
If I remember correctly, what I actually said was that it took us about 2 years to implement the OT algorithms we used for Google Wave. And if we rewrote it again today from scratch, it would take just as long a second time because there's no standard, reusable libraries that implement collaborative editing in a pluggable way that any application can use. The collaborative editing engine that powered Google Wave was bespoke, and if we rewrote it today we'd need to write another bespoke collaborative editing engine from scratch.
Thats why I wrote ShareJS, and later ShareDB and more recently why I've been working with CRDTs. I love generic collaborative editing libraries is because of the hope that they'll bridge this gap, and make generic tools that can work in any application. I was right on the money with Figma - as I understand it, it took them about 2 years to build the collaborative editing code that sits underneath their application, because there still aren't enough truly great libraries to use for building software like this.
Now that I have it, I'm going to edit the post to make it less misremembered.
It can be used to model not only algorithms but principally concepts.
I always use Alloy before starting a new design.
[^] (well, properly, semilattices, because that's what state-based CRDTs are based on. But semilattices are "just" commutative idempontent monoids ^_^)
"Finding bugs without running or even looking at code" by Jay Parlar https://www.youtube.com/watch?v=FvNRlE4E9QQ