
Applied Monotonicity: A Brief History of CRDTs in Riak - cmeiklejohn
http://christophermeiklejohn.com/erlang/lasp/2019/03/08/monotonicity.html
======
joeyrosztoczy1
Just have to plug the super-practical and awesome implementation of CRDT's in
Elixir's Phoenix Framework used for pub_sub and in the Presence feature:
[https://github.com/phoenixframework/phoenix_pubsub/blob/mast...](https://github.com/phoenixframework/phoenix_pubsub/blob/master/lib/phoenix/tracker.ex)

------
marknadal
CRDTs are great, and I've seen a lot of quality in Christopher's work.

A few other resources for those interested in CRDT subject:

\- Our cartoon explainer
[https://gun.eco/distributed/matters.html](https://gun.eco/distributed/matters.html)

\- An excellent talk by Martin Kleppmann
[https://youtu.be/yCcWpzY8dIA](https://youtu.be/yCcWpzY8dIA)

\- Marc Shapiro's in depth talk
[https://www.youtube.com/watch?v=oyUHd894w18](https://www.youtube.com/watch?v=oyUHd894w18)

------
eikenberry
Nice to see more about CRDTs and Riak. Worked a bit with Riak a few years back
and was sure at the time that CRDTs would play a much larger role in
distributed databases, but have seen very little about them since.

Anyone have any more resources on the adoption/use of CRDTs?

~~~
lachenmayer
CRDTs are quite actively discussed in the IPFS community, in particular here:
[https://github.com/ipfs/research-CRDT/](https://github.com/ipfs/research-
CRDT/) (lots of great resources if you're interested in CRDTs)

Also check out automerge, a CRDT that aims to be as JSON-like as possible:
[https://github.com/automerge/automerge](https://github.com/automerge/automerge)

Martin Kleppmann (one of the creators of Automerge) has given several great
in-depth talks about it, eg.
[https://www.youtube.com/watch?v=yCcWpzY8dIA](https://www.youtube.com/watch?v=yCcWpzY8dIA)

~~~
sagichmal
I was not able to actually find the Javascript implementation of the data type
in that repo. I have tried to implement from first principles (i.e. the paper)
in my language, but large parts seem to be left under- or un-specified. Did I
miss something? I would love to be wrong about this...

~~~
lachenmayer
I haven't dug deep into the implementation, but most of the interesting CRDT
stuff seems to be in the "backend" directory in that repo:
[https://github.com/automerge/automerge/tree/master/backend](https://github.com/automerge/automerge/tree/master/backend)

In particular the "operations" defined in [1] section 4.2 are defined in this
file:
[https://github.com/automerge/automerge/blob/master/backend/o...](https://github.com/automerge/automerge/blob/master/backend/op_set.js)

[1] [https://www.cl.cam.ac.uk/~arb33/papers/KleppmannBeresford-
CR...](https://www.cl.cam.ac.uk/~arb33/papers/KleppmannBeresford-CRDT-JSON-
TPDS2017.pdf)

------
Laymer
Research : Implementation : Writing style :

I think it's really worth mentioning how much work it takes to write this kind
of article. Congratulations Chris, I think that on top being a great
researcher, you are also a great writer. And a quick look at the Lasp
repositories shows that you did not only write about CRDTs' history, you made
a big part of it happen as well.

Meiklesoft™ ftw ️

~~~
Laymer
> Research : Implementation : Writing style :

There should have been stars there, what I meant was :

Research : * * * * * Implementation :* * * * * Writing style : * * * * * _

