Version control, collaborative editing and undo
incidentalcomplexity.com
incidentalcomplexity.com
Recording changes as they happen is easier than
inferring them after the fact
That's all very well if you're trying to develop something like Google Docs, where you can define change semantics the merge process understands, then constrain the editors to only allow changes that follow those semantics.But the moment a user wants to take the code out of your editor to process it with some other tool - perhaps they want to sort that text file, or minify that javascript, or just edit in emacs because they like the keybindings - you're back to inferring the changes after the fact.
You'd have to build a lot of tools if you want to stop your users ever wanting to use a tool outside your editor :)
Smalltalk didn't take over the world with that approach, but it's certainly interesting to explore.
Remove that ability by constantly recording changes, and you can no longer control your code: no code review, no feature merging. Everything just becomes a giant mess. A mess that's auditable, but a mess nontheless
Actually I read it a while ago - it must have resonated because I remember it being shorter :-)
Reminds me a little of the Feynman algorithm. 1) Write your question into google. 2) Open the first three results. 3) Copy what you find.
Does it already have a name?
http://programmers.stackexchange.com/questions/129543/what-i...
http://git-scm.com/book/en/v2/Getting-Started-About-Version-...
..not bad
1. Write down the problem.
2. Think real hard.
3. Write down the solution.
Origin: https://xkcd.com/1185/
Implementation: http://gkoberger.github.io/stacksort/
https://neil.fraser.name/writing/sync/
I wrote this to help me understand the algorithm:
It appears the Eve the language evolved from that, and still is. And it seems this DVCS (what this article is about) is meant to compliment Eve.
It made me ask the question "but what is wrong with Git? What IS the problem Yet-Another is solving?"
The whole thing is supposed to "just work" and, at version 0.8, it pretty much does, stably. But we still have a lot to do.
The reason we chose this is because it supports everything from updating your status / location / whatever to chatrooms and collaborative documents. A chess game is just a stream of type "Chess/game" which supports messages like "Chess/move" and "Chess/resign".
All the developer has to do is implement their stream type, or "tools" (components) to interact with the stream or "preview" it in listings. We provide typical tools such as "Streams/related" which automatically handles showing streams related to some given stream, and can update in realtime, allow creation of more streams, etc. The developer would jst handle incoming messages and process their effects. Also sometimes a stream might Refresh because the user, say, came back to a mobile app after it was suspended in the background. In this case the stream player or preview gets the latest state instead of "replaying" what would potentially be 100s of messages. And the whole page doesnt need to be reloaded. It all works already.
Now we are working on Offline streams. For example, a stream that has been created offline isn't shared with anyone so no one else can write to it. This means we ca handle all the persistence on the client and sync it later, when the client connects.
We do not attempt to solve issues via "heuristic" diff based sync algorithms. Instead, the source of truth is the Publishing User's server and it is also the source of chronological order of the messages. The developer never has to worry about messages arriving out of order, or something else, just use the JS API. In addition, we handle the CAP theorem by requiring consistency only per stream. If one message contains (hashed) info from another message on some other strean, we know it was posted later (like bitcoin).
In the end we plan to make this platform completely distributed and power social layer for the web like wordpress powers blogs.
So that's how wedo it!