What's in a version number? (Or: Musings on backwards compatibility)
alexgaynor.net
alexgaynor.net
I'm still not sure if it's the best way to go about it though. But I think version numbering is still much stronger than tacking multiple "finals" to a file name. Happy to hear what others are doing!
Use the format filename_YEAR_MO_DY_username.xlsx. This has the benefit that Lexicographic ordering every OS does in its file explorer is the same as chronological order, so it acts as a crude version control system.
Yeah and, sadly, yeah. Someday.
Unfortunately what MS Office does that people often want is "present an interface with which I'm familiar" and "read all these MS Office files that people send me", neither of which LaTeX, CSV, and Python handle well (although I wouldn't be surprised if there were a Python module for at least rudimentary support of MS Office file formats).
Not to disagree with your main point—I also rely on that toolkit, though, as a not-very-computational mathematician, I find I don't have that much need for programming in my workflow—but I do think one has to be careful about what people are reluctant to give up.
Not if "being usable by the people you work with" is a requirement, sadly.
Sure there's lots of more robust ways to track versions. But the above simple convention is a step function in quality of life while requiring hardly any work.
There's nothing special about 1.0.0 vs 2.0.0, it just means there was a breaking change and you may need to do some work when upgrading.
And a major, awesome feature might get released as 1.15.25 -> 1.16.0, that's OK. (marketing hates this)
Personally I'm frequently rug pulled by breaking changes in patch updates.
Imo, semver is just a way for lazy devs to break backwards compat and feel ok about it.
Which would be fine if they maintained their old versions, which of course they don't, so what's the point of semver? All the breaking change version change means to me is you've forked your library and left me holding the bag.
I either have to update my code to accommodate your changes or I need to change your code to accommodate security issues.
And fuck me sideways if I have you as a peer dependency.
Is there a better alternative?
And yes, of course they would have, but at least they wouldn't be able to lie about what theyre doing.
There is a better alternative, maintain backwards compatibility. And if you break it, acknowledge what you're doing, forking your lib and leaving everyone who relied on you holding the bag.
Linux has maintained backwards compat for decades, there really isn't much excuse.
In what way? IIRC there is no stable ABI in Linux.
Regardless maintaining backward compatibility forever is non-trivial. Besides Java I can't think of another major platform still actively supporting their v1.0 work.
⸻⸻⸻
1. It would be nice to have some mathematical theme, but I don't know of anything that's (a) sufficiently well-known (going with, say, famous mathematicians wouldn't work because the list is not necessarily agreed upon nor is it obvious to the casual user whether Riemann comes before or after Weierstrass), (2) non-numeric (so no fibonaccis or primes) and (iii) of sufficient length (so no platonic solids or named polygons).
Also, the "final" is usually what one may submit for a review, then the remarks may just be relating to _that_ "final", quite logically creating another train-car in the filename.
I also encouraged colleagues to date-version in such cases, but this eventually leads to multiple date-stamped train.
A curious thing is that rarely the researchers get back to those older versions, they just keep them and as easily forget about why they kept them, once the reasearch is pushed out.
So my solition back then was letting them do their thing as they see fit within the project area till the conclusion, then round out all the related artifacts and stuff them into a repo. Any revisions then get added to that repo, as well as any remarks about what/when was submitted to where/whom. Loosely structured and messy, but hopefully internally relevant and consistent.
The main goal - preserve first, then rearrange, if needed.
filename-yyyy-mm-dd-n.xlsx
I don't worry about anything beyond that. The file system manages snapshots without my attention, messy software like Box or SharePoint can manage versioning if files need to live there, the OS can try to manage metadata, all of that is separate from my needs: fast easy access to old/new versions of documents.When I'm working on something and I feel like I'm about to make major changes, I save with today's date. If I want to know what I presented to people at a specific meeting, I look up the meeting date. If I want to branch or add a version or tag (final_FINAL_V2) then I'll rename the file, but I always update the date.
You use the date only part of ISO8601, because it's the standard for dates. E.G. 2021-10-08 this is a serial number. They'll want to know who last touched the file, but the subversion is next. This can either be a letter, or better, another small number. Field size depends on the wor... most productive day.
filename-2021-10-08-01-YOU.txt
Note, all version fields are always full-width (padded).
yc: Please tell us something surprising or amusing that one of you has discovered.
dhouston: The ridiculous things people name their documents to do versioning, like "proposal v2 good revised NEW 11-15-06.doc", continue to crack me up.
We managed to get the sales people to use SVN for their work on proposals. Now the proposal is simply called "project name/proposal.docx", instead of having dozens of documents with unclear provenance around, possibly over multiple machines.
In addition to that you can lure them in with the option to roll back to old data, and central backups.
The problem is cultural. You will not shift that.
I infer Windows.
Create a scheduled task that starts frequently but not if another instance is running. The task runs a powershell script.
The script creates a FileSystemWatcher tracking the "HEAD" spreadsheet.
On write, it copies the file, appending a date-time.
Users do nothing in particular. But they visibly see backups being created. So they know they can just work on the current file and not rename it.
This is horrific macguyver shit, but it's attuned to the customer needs, can be distributed as a single file that creates the scheduled task, and requires near-zero user behaviour modification.
Avenues of further development: debounce, so 14 saves in a single minute don't create 14 backups; toast notifications using BurntToast so that errors are not silent
1. What rustc does with crater (linked from article), where you can actually test real code. On a smaller scale, the author of the article points out cryptography package for Python, which runs tests of its most popular upstream dependencies. This latter is probably feasible for many libraries.
2. Analytics, though this requires work to make it private and anonymous, and for libraries maybe requires system-level infrastructure. (Again, this was suggested by Alex.)
3. Beta testing, surveys, and other forms of user feedback.
Personally, I think he spent his "backwards-incompatibility budget" for about 5 years with that change because that's probably how long it will take for the new version of cryptography to be widely adopted and supported long-term.