What the Chordious version numbers mean

Like many developers, I have my own specific set of rules for how and when I release updates to Chordious, and how I pick the new version numbers. Earlier today I outlined a system for automatically generating app version numbers, and then thought it’d make for a nice “real-world” example to pop over here and try to explain the rhyme, reason, and code behind the version numbers I use for Chordious.

The first thing to understand is that I have two different release channels, with two classes of builds: “Official” and “Preview”. In short, Official builds are stable, infrequently updated, and targeted for all users, while Preview builds are potentially unstable, frequently updated, and aimed for dedicated beta testers. See more here: What’s the difference between “Official” and “Preview ” releases?

Now, for Official builds, the version looks like this: Major.Minor.Build.

  • Major is set manually.
  • Minor is set manually and is always an even number.
  • Build is set manually and is simply an increasing number.

So for example, the latest Official build as of this post is 2.0.2.

For Preview builds, the version looks like this: Major.Minor.Build.Revision.

  • Major stays manually set, as before.
  • Minor is set manually and is always an odd number.
  • Build is auto-generated in the format YYDDD, where:
    • YY is the last two digits of the year that the code was compiled.
    • DDD is the day of year that the code was compiled.
  • Revision is auto-generated in the format HHMM, where:
    • HH is the hour that the code was compiled.
    • MM is the minute that the code was compiled.

For example, if I had released a Preview build of Chordious on August 19, 2016 at 8:40PM UTC, the version might have looked like: 1.9.16232.2040.

So how do I manage all of this? As the post linked to above describes, I use a T4 text template to auto-generate the version information for my builds. The code (as of this post, latest here) looks like this:

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#
    int major    = 2;
    int minor    = 0; // Official == even, Preview == odd
    int build    = 2;
    int revision = 0;

    string version = String.Format("{0}.{1}.{2}.{3}", major, minor, build, revision);

    if (minor % 2 == 1) // Preview build
    {
        // Auto-generate the build and revision
        DateTime buildTime = DateTime.UtcNow;
        
        build = (1000 * (buildTime.Year % 100)) + buildTime.DayOfYear;
        revision = (100 * buildTime.Hour) + buildTime.Minute;
        
        version = String.Format("{0}.{1}.{2:000000}.{3:0000}", major, minor, build, revision);
    }
 #>
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
  
using System.Reflection;

[assembly: AssemblyCompany("Jon Thysell")]
[assembly: AssemblyProduct("Chordious")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

[assembly: AssemblyVersion("<#= version #>")]
[assembly: AssemblyFileVersion("<#= version #>")]

So, when I’m working on Official builds, I just set the version numbers at the top of the code. In this case, you can see that I’m working on Chordious 2.0.2. Since the minor version is even, the code just uses the values I’ve set directly. When I’m releasing an update from one Official build to another (ie. with the same minor and major version), I just increment the build number by one. So the next Official build in the Chordious 2.0 line will be 2.0.3.

Now, when I’m done working on the Official builds and ready to start working on the next Preview, I increment the minor version by one. In this case, I’ll then be working on the “Chordious 2.1 Preview”. And now that the minor version is odd, the code will automatically override the build and revision version with each release, freeing me to work fast and not worry about keeping track of version numbers.

Finally, when the “Chordious 2.1 Preview” is over, that is, when the builds have become sufficiently stable, I’ll get ready to push out all the new goodness to normal users. I’ll increment the minor version to two, and reset the build and revision to zero. At that point I’ll release Chordious 2.2.0 in the Official channel and switch to only fixing major bugs.

Why this whole odd / even switch? Version numbers in general help me keep track of user feedback (so I know which version they’re having problems with) but it also makes it very easy to tell if a person is using an Official or Preview build. It also helps me manage my time, as I switch between “rest” periods of maintaining “Official ” builds (maybe focusing on documentation and tutorials) and “active” periods on Preview builds (where I’m coding like a madman).

As for the major version, when I update that, it’ll be because I feel like I’m releasing a whole new app. When I stopped working on Chordious 1.0 (Classic Chordious) and rebuilt the entire app from scratch, that was worth bumping the major version number. At this point I have no idea what a Chordious 3.0 would look like, so that major version isn’t going to change for the foreseeable future.

Did you find this interesting? Would you like to see more “behind-the-scenes” posts like this? Sound off in the comments!

/jon

Tagged with:
Posted in Dev News

Chordious 2.0.2 now available

It’s been about a month since the last release, so time for another update!

The primary purpose of this release is to fix various issues in the Chord and Scale Finders and to implement some much needed unit tests. Adding barres to chord diagrams was always a little finicky, but they now work as intended for both regular and mirrored Chord Finder results. Also, it turns out a lot of valid scales weren’t being found by the Scale Finder, the result of several minor bugs in the search algorithm.

The only new feature in this release the ability to cancel long-running searches in both Finders. If you start a search but decide it’s taking too long or that you meant to search for something else, you can now press the ‘Esc’ key on your keyboard to stop the search.

Here’s the full change list for 2.0.2:

  • Chord/Scale Finder searches can now be canceled with the ‘Esc’ key
  • Fixed bug with full barres in the Chord Finder crossing open/muted strings
  • Fixed bug with partial barres in the Chord Finder not mirroring properly
  • Fixed bug where reach wasn’t calculating correctly in the Scale Finder
  • Fixed bug where scales past the 12th fret weren’t found in the Scale Finder
  • Fixed bug where many scales were missed by the Scale Finder
  • Added CoreTest unit testing project
  • Added unit tests for finding where to barre in chords
  • Refactored Chord/Scale Finder code for testability added some unit tests

Update to the latest version of Chordious today, and keep the feedback coming!

/jon

Tagged with: , ,
Posted in Releases

Chordious 2 Scale Finder tutorial now available

I’ve just finished and uploaded the tutorial for the Scale Finder:

See all of the tutorial videos in the ongoing Chordious 2 Tutorial playlist.

Enjoy!

/jon

Tagged with: , ,
Posted in Tutorials

Chordious 2 Chord Finder tutorial now available

I’ve just finished and uploaded the tutorial for the Chord Finder:

See all of the tutorial videos in the ongoing Chordious 2 Tutorial playlist.

Enjoy!

/jon

Tagged with: , ,
Posted in Tutorials

Chordious 2.0.1 now available

It’s been just over a week since I released Chordious 2.0, and already I have the first minor update!

The primary purpose of this release is to unblock all of the users in countries that use commas instead of periods as decimal marks (ie. 1/2 = 0,5 instead of 0.5). Turns out that little thing caused all kinds of havoc in Chordious.

Thanks to the two users who reported the issues that pointed me in the right direction!

I also took the opportunity to clean up a few other things, and add a couple of features that (may) pave the way for creating a portable, USB-drive friendly version of the app, and publishing to the Windows Store.

Here’s the full change list for 2.0.1:

  • Fixed bug where diagrams would render as black boxes in some locales
  • Fixed bug where marks on the fretboard could be pushed off the bottom
    when resizing
  • Fixed bug where the nut was not being drawn in the correct position if
    the nut ratio != 2.0
  • Opacities and ratios are now presented as percentages
  • Fixed various bugs with the formatting of decimal numbers
  • Standardized install locations
  • Renamed user config to Chordious.User.xml
  • Added option to choose user config from the command-line
  • Added option to hide/disable updating functionality

Update to the latest version of Chordious today, and keep the feedback coming!

/jon

Tagged with:
Posted in Releases

Chordious 2 Installation and Quickstart tutorials now available

As promised, I’ve begun recording video tutorials on how to use Chordious 2.0. First up is a basic tutorial for getting the app installed:

After that, we have a basic tutorial on the quickest way to get started with Chordious, namely to find chord diagrams for your favorite instrument and exporting them as image files.

I will continue to announce new tutorial videos as I create them, and add them to an ongoing Chordious 2 Tutorial playlist.

Stay tuned and enjoy!

/jon

Tagged with: ,
Posted in Tutorials

Chordious 2.0 now available

Yes, it’s finally here. Three and a half years since I first got this crazy idea of writing an app to generate chord diagrams, two years since I finished Chordious 1.0 and I decided to rebuild Chordious from scratch, and after 185 commits to GitHub, 46 preview releases, and at some 43,401 lines of code, Chordious 2.0 is done!

Features

  • Create clean, scalable, fretboard diagrams
  • Extensive styling options
  • Find chords for all your instruments and tunings with the Chord Finder
  • Find scales for all your instruments and tunings with the Scale Finder
  • Save and maintain your collections of diagrams in the Diagram Library
  • Import your Classic Chordious ChordLine documents
  • Export your diagrams as SVG, JPG, or PNG images
  • Rich Diagram Editor
  • Automatic updates

I’d like to give a big thanks to my wife Anne for not just tolerating all the time I put into this little app, but encouraging me to keep working on it. Another big thanks to all of the users who have sent me feedback over years, especially my number one beta tester Brian L.

Thanks for all of the feedback!

This is a big milestone, but I’m not done yet. I’ve got plans for more features, support for other platforms, and so much more. But for the immediate future, stay tuned for some long awaited video tutorials.

Try out Chordious today!

/jon

Tagged with:
Posted in Releases