559 karma · joined February 5, 2010
[ my public key: https://keybase.io/pvh; my proof: https://keybase.io/pvh/sigs/LBQdAZcNQgeGWODIr1O36lL5KhKirJkU5iwB8uolKDw ]
In other words, you couldn't have a bijective function between an integer and a boolean, because there are fewer possible boolean values than integer values.
Demanding bijective functions is probably more restrictive than you want to be for building real-world systems. We discuss this a bit in the paper -- I think look for "convert".
Long run, I expect neither JSON nor YAML are really the best solutions.
In other words, with Cambria you can build a graph of lenses that describe various data schemas and then translate from or to any of them.
That said, XSLT has different strengths (syntax-aside) in that it is a general purpose templating language with strong functional programming underpinnings.
https://martin.kleppmann.com/papers/pushpin-papoc20.pdf
You can also try PushPin for yourself: https://github.com/automerge/pushpin/
likely outdated binaries are available here: https://automerge.github.io/pushpin/
Also, we're currently in the midst of a new project called Cambria, exploring some of the consequences and data demands for a new Cambrian-era of software here: https://inkandswitch.github.io/cambria/
It's so clearly incomplete that opening the preferences launched a JSON editor window in Visual Studio (not VSCode).
The level of openness it takes to open such a central utility built by what would historically be a low-profile team is quite remarkable, and I am convinced will result in an excellent product ... in time.
For now? It's almost good enough to be my daily driver but not quite.
Good luck to the development team! I'll be watching.
The quality of your applications is primarily determined by what you care about, not by what tools you build them with.
What happens is that humans have intuitive coordination systems and tend to fix the same problems.
In other words, if the card title is "rename auotmerge" then both of us are likely to change it the same way, or at least either resolution is fine. In the event of a conflict we flag the multi-value in the UI so that a human user can decide if they care.
Where this approach shines is in domains where it helps avoid conflicts rather than resolving them. Naively adding replies to a comment thread might result in collisions or misordered comments across nodes of a distributed team. Automerge captures enough metadata from the operations created by users that changes "tend" to merge well.
I realize this is an argument not from first principles but from experience. We weren't able to find examples of other people building web applications with quite this approach (though we would love to hear from them if they are out there) and so the question was "will this feel alright?"
Apparently it does.
If you find this result provocative, I would encourage you to challenge it by attempting to build something with automerge and letting us know how it goes. I believe it will work well in applications where all user operations can always commute to produce a subjectively reasonable result. To make that concrete, a bank account is a poor domain to model with a tool like this, but a shared drawing is much better.
Automerge must select one result to be the default consistently across all uncoordinated peers. If you don't do this, different nodes may see different documents during a conflict state, which is undesirable.
Automerge has fairly robust support for these kinds of use-cases around lists, which we use quite a lot, but we haven't actually needed them for numbers (though I expect we may want them eventually.)
Ink & Switch is an industrial research lab focused on improving creative productivity through better tools. Our past work has included exploring improvements to tools for data journalists, note-taking software designed for minimal engagement, distributed whiteboards, cryptographic identity protocols, and zero-infrastructure web applications.
Our next project is an experiment with a P2P Electron application.
Feel free to email me at pvh@inkandswitch.com and/or apply via this Workable link (https://inkandswitch.workable.com/j/0DE157996E) which includes a lot more detail.
Alternatives to the DIY approach include open-source things like Postgres-BDR, CitusData, TimeScaleDB or closed-source single-vendor things Amazon Aurora, and RedShift.
I've also asked the PM for this project to look into what happened here and alerted the head of our support team. I hope you'll consider giving us a chance to make this right for you and a chance to re-earn your trust.
Eighteen hours a day is enough to keep your app running from 9AM to 3AM every day, and unless your application has a global reach, it should naturally equilibrate into a comfortable place.
We are asking that if you want 24x7 wake-time that you pay for a hobby dyno, but if you can let your application sleep when you do, you won't see any difference at all.
We hope that between the new `free` and `hobby` dynos you should have good choices that support almost any personal or small scale professional app you might want to build.