My personal bugbear is the network coverage.
Context: London / UK (EE).
Yes, I have 5G at home, but it's just one bar and sometimes even this one bar will disappear. Yes, there is 5G/4G all around the city, but you can't hold an uninterrupted conversation over FaceTime Audio while on the overground train or driving. I'll not even discuss the underground.
However, uninterrupted, low-latency, average bandwidth is a hard market and even harder to design.
CRDT at the very low level is an append only operations log with snapshots.
This can be easily stored in a file. The trick is to solve merging with another version you just got from a friend. But then operations are idempotent and appending two operation logs with idempotent operations is simple.
Yes, ideally OS would provide a container that it natively merges, but meanwhile nothing prevents apps from storing their data in say sqlite based append only logs and when needing to solve conflict/import/merge just append new operations.
Regarding tutorials;
Good news - 1.4.1 release should be available in the App Store and it comes with the fix for tutorials duplicates. From now on each tutorial document have a hardcoded UUID, so when they get generated on multiple devices they still get merged into one single Document. CRDT is beautiful.
Bad news - existing users need to remove old tutorials for the fix to work. Matching old and new tutorials based on title only could cause problems for some users. Sorry.
I still remember Piotr Wozniak's strong opinions about using ML for spacing prediction. But indeed market moves and even now SM is doing research in AI (again) https://www.supermemo.com/en/blog/ai-in-supermemo
CR-SQLITE is awesome. In my dream parallel universe OS would natively support:
- file
- folder
- pipe
- op-log
and provide primitives to merge op-logs (remove duplicate entries).
Maybe CR-SQLITE could be a gateway, but it feels a bit too high level. E.g. you can't just concatenate two op-logs and leave deduplicate to something else (I might be missing something)
Android version is a roadmap candidate. Baby steps ;)
Any clue when the team will be releasing the swift version?
I've been experimenting with the 1.x release to use in a Markdown editor but I had to revert for now to using my own CRDT implementation. Mainly because of speed (caching is hard but useful) and API limits (e.g. need to update cursor, and index text in documents). Still I love the abstraction of Automerge that I can treat as a black box container that I can just trust to do the right thing in the most optimal manner. It's a very nice abstraction.
Imagine the world where code is represented as a tree of operations, where every character have unique, immutable address. Diff becomes something way simpler. Welcome to the world of CRDT.
I hope, one day we will have a thing like automerge but as file format with a native OS provided merging.