Live data from Hacker News

Creating a collaborative app using CRDTs

medium.com

1–10 of 15 posts

Re: Creating a collaborative app using CRDTs

#3
This a promising field but the article doesn't mention (at least that I could find) the challenges in implementing CRDT techniques for data structures that humans tend to use such as documents diagrams and spreadsheets, while maintaining acceptable size and performance.

Re: Creating a collaborative app using CRDTs

#4
post #2

I had a lot of hope for crdt as a more general technique for client server communication, but it seems that usage of crdt for anything other that collaborative documents is pretty rare

I'm working on this. It is challenging. Even for documents there are challenges.

Re: Creating a collaborative app using CRDTs

#5
I found this hard to read.

You state “I will explain later” a number of times. It would be better to hold off introducing the topic until it is more contextual to the reader. It breaks the flow of your writing.

The text could be broken up into more paragraphs.

You could use some more headings to break up sections:

1. What is a CRDT 2. What problem do they solve and some simple examples. 3. State based solutions 4. Operator based solutions 5. Join-semi lattice 6. Putting it all together.

In your second join-semilattice diagram it’s not obvious that the two blue nodes are being merged into the green.

The pseduo code you’ve included for the g-counter, 2p-set and or-set are quite unintuative imo.

I’m probably not your target audience but I read a lot of academic writing now and I think this could be better.

Content is great though, didn’t know what a join-semi lattice was before hand so thanks a lot!

Re: Creating a collaborative app using CRDTs

#6
I don't really understand CRDTs, but I'd like to. The problem I keep encountering is that resources either assume I'm better at math than I am, or they come across as trying to over simplify/poorly analogize a hard thing (reminiscent of monad tutuorials ~2011). Can anyone point me to some resources that slowly,but thoroughly explain the concepts to me?

Re: Creating a collaborative app using CRDTs

#7

I don't really understand CRDTs, but I'd like to. The problem I keep encountering is that resources either assume I'm better at math than I am, or they come across as trying to over simplify/poorly analogize a hard thing (reminiscent of monad tutuorials ~2011). Can anyone point me to some resources that slowly,but thoroughly explain the concepts to me?

This is one of the best videos I've seen on CRDTs: https://www.youtube.com/watch?v=pMMDVphop40

CRDTs are just a way to send to send data between parties so that all parties end up with the same thing after receiving all messages, even if they receive them out of order. The way the messages are encoded is the math part, ensuring that you can keep applying these functions to your existing state to always get to the final state. That's where the associative/commutative requirements come from.

Note that there are operation-based (sending how something should be updated) and stated-based (sending what it should be updated to) CRDTs and they have different semantics and use-cases.

Re: Creating a collaborative app using CRDTs

#8

I don't really understand CRDTs, but I'd like to. The problem I keep encountering is that resources either assume I'm better at math than I am, or they come across as trying to over simplify/poorly analogize a hard thing (reminiscent of monad tutuorials ~2011). Can anyone point me to some resources that slowly,but thoroughly explain the concepts to me?

This is one of the best videos I've seen on CRDTs: https://www.youtube.com/watch?v=pMMDVphop40 CRDTs are just a way to send to send data between parties so that all parties end up with the same thing after receiving all messages, even if they receive them out of order. The way the messages are encoded is the math part, ensuring that you can keep applying these functions to your existing state to always get to the fin…

Wow, that is a fantastic video, thanks!

Re: Creating a collaborative app using CRDTs

#9
post #2

I had a lot of hope for crdt as a more general technique for client server communication, but it seems that usage of crdt for anything other that collaborative documents is pretty rare

CRDTs allow multiple concurrent mutations to the same data. If it's just between a single client and server then there's no need for this. There are some databases that are now using it for replication though.

Re: Creating a collaborative app using CRDTs

#10

I don't really understand CRDTs, but I'd like to. The problem I keep encountering is that resources either assume I'm better at math than I am, or they come across as trying to over simplify/poorly analogize a hard thing (reminiscent of monad tutuorials ~2011). Can anyone point me to some resources that slowly,but thoroughly explain the concepts to me?

Here's my attempt at explaining what CRDTs are in 30 seconds:

CRDT are a type (e.g. a String, a Vector, an Integer) that has limitations with how it can be mutated.

For example, you can create an Integer CRDT that can only be `increased` and `decreased`, or a String CRDT that can only have characters `inserted` and `deleted` at given positions.

These limited mutating capabilities are chosen so that there never can be any conflict.

Post reply on HN