The Boston Diaries

The ongoing saga of a programmer who doesn't live in Boston, nor does he even like Boston, but yet named his weblog/journal “The Boston Diaries.”

Go figure.

Friday, July 24, 2015

The new way to version software

The Complete Drone-Ver Specification

This also lives at drone-ver.org.

Drone-Ver v.1.sleepy.0.0.calamitous.1437363538.7
Summary

Given a version number MAJOR­.MOOD­.ISSUES­.SOCIAL­.DICTIONARY­.UNIXTIME­.SEVEN, manage your releases as laid out in this comic:

  1. MAJOR is incremented when you feel like you've added something cool.
  2. MOOD is how you felt when you released this version.
  3. ISSUES is the number of open GitHub issues against your project.
  4. SOCIAL is the number of GitHub forks & favourites of your project.
  5. DICTIONARY is a random dictionary word.
  6. UNIXTIME is the unix time, and
  7. SEVEN is always the number seven (7).

Via Brian Yoder, Cube Drone - - Version Sacrifice

This is clearly a satirical response to Semantic Versioning as there are some who don't like it. I found the Drone-Ver stuff hilarious (why yes, I am a geek—why do you ask?) and according to it, mod_blog should be at version 28.bemused.0.3.chinnier.1437723165.7 (assuming bug fixes are “something cool”) instead of the current version of 4.7.5.

But I also found Semantic Versioning to be a decent attempt to make version numbers have some semantic meaning. Semantic Versioning seems to be geared more towards libraries, and if there was one change I would make to it, it would be that minor versions (backward compatible changes or enhancements) shouldn't break user code (so that if you have a program that uses Foo major version 4.0.n, it should compile cleanly against 4.1.n, 4.2.n, etc. since they all should be compatible) but that bug fixes might break user code (if, for instance, you worked around it, or somehow used the bug as a feature of your code) but if you used the API as described, things should be okay.

Semantic Versioning breaks down for applications though, as there is no real API to speak of (which causes a change in the major version number). I think a good approach for applications with Semantic Versioning is that a major version should only change if configuration or data files change format (such that the new format is incompatible with the older format, or the older version can't load newer versions of the configuration or data files), new features or enhancements cause the minor version number to update, and bug fixes bump the patch version.

Using that criteria, mod_blog would be at version 2.7.5—there was a configuration file format change when I switched from using my own half-baked configuration format to using Lua as the configuration format (otherwise, the storage format for mod_blog hasn't changed one bit in fifteen years, although it has been enhanced, older versions would be able to deal with the newer information by simply ignoring it).

And just for the record:

Versions of mod_blog
date releasedversioncomment
Sat May 30 23:48:18 2009 -0400v2.0Yet another idea to add to the blogging engine
Mon Jun 22 19:51:15 2009 -0400v3.0Removed more dead code.
Wed Sep 9 03:22:07 2009 -0400v3.1Feature: Replaced how we pick the adtag
Wed Sep 9 17:45:17 2009 -0400v3.2Feature: Some more template defs
Sun Nov 6 02:01:41 2011 -0500v3.3Lua configuration
Sun Nov 6 02:01:41 2011 -0500v3.4Document current bug in source code
Mon Nov 14 22:51:10 2011 -0500v4.0Made sure the dependencies were correct in Makefile
Tue Nov 6 14:37:10 2012 -0500v4.1Removed internal entry cache
Mon Dec 31 22:46:01 2012 -0500v4.2The 'Gasp! Released at Last' Version
Mon Mar 3 17:57:00 2014 -0500v4.3The 'Clean Memory' Version
Fri Jun 27 03:02:24 2014 -0400v4.4The 'My­Google­Face­Space­Plus­Book Fix' Version
Thu Aug 21 17:10:07 2014 -0400v4.5.0Display version of libraries used, in addition to the version of the program.
Sun Apr 19 19:08:46 2015 -0400v4.5.1The 'Make the Makefile makier' Version
Sun May 3 02:19:23 2015 -0400v4.6.0The 'XXXX Face­Google­My­Twitter­Plus­Space­Book' Version
Fri Jun 5 21:53:54 2015 -0400v4.6.1Bug fix—double free
Sun Jun 7 19:48:09 2015 -0400v4.6.2Bug fix—if not using email notification, code doesn't compile
Sun Jun 7 20:03:00 2015 -0400v4.6.3Bug fix—don't use _IO_cookie_io_functions_t
Sun Jun 7 21:51:40 2015 -0400v4.6.4Bug fix—potential double free (yet again).
Sat Jun 27 18:09:27 2015 -0400v4.6.5Bug fix—encoded entries via email mess things up.
Thu Jul 2 17:38:09 2015 -0400v4.6.6Bug fix—unauthorized person posting via email leads to double fclose()
Mon Jul 6 17:53:30 2015 -0400v4.6.7Bug fix—a NULL tumbler crashes the program.
Sun Jul 19 17:08:43 2015 -0400v4.7.0The 'Tumblers Reloaded' Version
Sun Jul 19 22:28:18 2015 -0400v4.7.1Bug fix—date checking on exiting tumbler_new() was borked.
Mon Jul 20 01:25:46 2015 -0400v4.7.2Bug fix—previous and last calculations were borked.
Mon Jul 20 04:00:34 2015 -0400v4.7.3Bug fix—check tumbler date(s) against last entry, not the current time
Mon Jul 20 17:52:24 2015 -0400v4.7.4Bug fix—current link was wrong
Fri Jul 24 03:32:45 2015 -0400v4.7.5Bug fix—the assert() when comparing dates was wrong

The history prior to version 2.0 is … um … murky. I had … issues … with the previous version control system so pretty much the history from December 1999 through May 2009 have been lost in time, like tears in rain. As you can see, the version numbers have been inconsistent early on, but as time went on, I've done a bit better with the version numbers (it's been more consistent with 4.6.0 onwards).

Obligatory Picture

[It's the most wonderful time of the year!]

Obligatory Links

Obligatory Miscellaneous

You have my permission to link freely to any entry here. Go ahead, I won't bite. I promise.

The dates are the permanent links to that day's entries (or entry, if there is only one entry). The titles are the permanent links to that entry only. The format for the links are simple: Start with the base link for this site: http://boston.conman.org/, then add the date you are interested in, say 2000/08/01, so that would make the final URL:

http://boston.conman.org/2000/08/01

You can also specify the entire month by leaving off the day portion. You can even select an arbitrary portion of time.

You may also note subtle shading of the links and that's intentional: the “closer” the link is (relative to the page) the “brighter” it appears. It's an experiment in using color shading to denote the distance a link is from here. If you don't notice it, don't worry; it's not all that important.

It is assumed that every brand name, slogan, corporate name, symbol, design element, et cetera mentioned in these pages is a protected and/or trademarked entity, the sole property of its owner(s), and acknowledgement of this status is implied.

Copyright © 1999-2019 by Sean Conner. All Rights Reserved.