Zero (zerosync.dev) uses transactional conflict resolution, which is what our prior product Replicache and Reflect both used. It is very similar to what multiplayer games have done for decades.
It works really well and we and our customers have found it to be quite general.
It allows you to run an arbitrary transaction on the sever side to decide what to do in case of conflicts. It is the software equivalent of git asking the user what to do. Zero asks your code what to do.
But it asks it in the form of the question "please run the function named x with these inputs on the current backend db state". Which is a much more ergonomic way to ask it than "please do a 3-way merge between these three states".
Conflict resolution is not the reason why there has not been a general-purpose sync engine. None of our customers have ~ever complained about conflict resolution.
The reason there has not been a general-purpose sync engine is actually on the read side:
- Previous sync engines really want you to sync all data. This is impractical for most apps.
- Previous sync engines do not have practical approaches to permissions.
These problems are being solved in next generation of sync engines.
A (IMHO) good and easy to read introduction is Wadler's "EFFICIENT COMPILATION OF PATTERN-MATCHING", chapter 5 of "The Implementation of Functional Programming Languages" https://simon.peytonjones.org/assets/pdfs/slpj-book-1987-2up... - actually I can recommend the whole book as an instruction to (the interesting stuff of) writing a compiler for a functional language. It also contains an introduction to the lambda calculus.
Zynk is building a totally new, all-platform file transfer application that is going to do things right - and will be a breath of fresh air in this crazy world of colossal cloud-powered inefficiency (HN Launch pending).
We're a Rust only shop, hiring a REMOTE Rust developer.
If you're fascinated by efficiency, performance, stability, reliability, doing things right, as well as pushing the boundaries of what modern hardware and networking can do, this may be for you.
If you're not afraid of creating a custom solution that answers the very narrow needs of a task, and and doing it the best way possible, this may be for you.
If you ever thought or pondered about if this insane, bloated cluster of cr*p can be replaced by a single modern machine running some custom code or carefully picked components, this may be for you.
If KISS means something to you and you love the CLI, this may be for you.
If you appreciate what Rust can do for you and the entire lifecycle from dev to robust product, this may be for you.
If you've reached the end of this post, this may be for you.
We're easy, flexible, non bureaucratic and we don't waste time on unnecessary things.
Ignore the website, we're in stealth mode. Apply at: m at zynk.it
Oh, this is one I hadn't heard of. There are several different takes on this idea, and I've had the notion to make my own for some years, too (not enough free time...)
I feel like a good "how powerful is this tool, really?" test would be to model the Adobe PSD format with it. That format is bananas, and is what got me into this topic in the first place.
But for those interested, here are some other tools in this vein:
Algorithms Illuminated by Tim Roughgarden really helped me understand algorithm design and analysis. Used it to prep for a masters in computer science, with no previous degree in the area.
Yes, it is targeted towards middle and high school students. Yes, I read it and (more importantly) worked through most of the problems in my mid-30's. It is great if, like me, you coasted/crammed through your early mathematics education and never felt like you dialed in the fundamentals. It is also great if, like me, you needed some pen-on-paper practice and did not know where to start.
I'm a huge fan of the scrimba[0] style of teaching. They're a fairly well established startup now, whose content style involves having a screen cast be recorded with an interactive code editor, review window and slides which you can move around and use as an online IDE.
You can interrupt the narrator at any time and interact with their code editor as if it was your own, messing with the code at that time and review the results.
Right now they seem to be focused on fronted skills, namely React and more general web dev topics but I'm very happy with how quickly i was bale to get the hang of React using their courses.
“Deep Learning for Coders with Fastai and PyTorch: AI Applications Without a PhD” will allow you to design and implement deep learning models with only good programming skill. Basic maths, no algorithms, no proofs. Howard’s paper on ULMFiT was state of the art 5 years ago, and it was originally just a part of this book. My claim is that this will be considered a classic in due time. It turns deep learning from an academic discipline into programming problems.
Its contents is what I consider the meta game of programming. Understanding types seems to be a real boost to think about architecture, implementation, etc.
"Good Strategy / Bad Strategy" by Richard Rumelt - An awesome book on strategy, which explains very plainly how to construct a reasonable strategy, and see signs of bad strategy. It (among other things) dissects NVIDIA's rise in the late 2000's, and predicts (more or less) the next ten years of where the company went.
"The Effective Manager" by Mark Horstman - All the things that no one says or tells about management and communication.
"Team Topologies" by Skelton and Pais - A really good view of organizational design patterns and anti-patterns for software teams rooted in the premise of Conway's Law.
former CFA turned developer here. I've been doing an informal workshop on "Finance for Developers", figured I should share my material here for people looking for more. Not selling anything.. yet but this stuff is easy for me to pump out given my previous career haha
to make a point directly related to this post - i believe accounting is the starting point for finance - but you can learn "just enough" accounting to make it work.
Hey. Check out Juan Pedro Bolivar Puente's talks om value oriented design. He worked on Ableton which is a large application. He specifically speaks to Undo. He describes a much better pattern than the Command Pattern.
He also released his source for Value Oriented Data structures
Juan Pedro is a next level programmer who I think has pushed the craft forward through his work on bringing Value Oriented Design into the C++ world.
It is described here:
https://rocicorp.dev/blog/ready-player-two
It works really well and we and our customers have found it to be quite general.
It allows you to run an arbitrary transaction on the sever side to decide what to do in case of conflicts. It is the software equivalent of git asking the user what to do. Zero asks your code what to do.
But it asks it in the form of the question "please run the function named x with these inputs on the current backend db state". Which is a much more ergonomic way to ask it than "please do a 3-way merge between these three states".
Conflict resolution is not the reason why there has not been a general-purpose sync engine. None of our customers have ~ever complained about conflict resolution.
The reason there has not been a general-purpose sync engine is actually on the read side:
These problems are being solved in next generation of sync engines.For more on this, I talk about it some here:
https://www.youtube.com/watch?v=rqOUgqsWvbw