Chordious 2.0.3 now available

I know it’s been a few months since the last release, but I’ve done a lot of work behind the scenes to improve this latest version of Chordious.

The primary impetus of this release is to improve accessibility. For my day job, I recently left Xbox and joined the Windows XAML team at Microsoft. XAML is one of the technologies developers use to create the GUIs (windows, buttons, text boxes, etc.) for their Windows apps, and it’s what I use for Chordious. Through my new job I’ve been exposed to some of the many accessibility features of Windows, things like screen magnifiers and readers for the blind or near-blind, closed captions for the deaf and hard of hearing, etc.

The previous versions of Chordious were downright atrocious to navigate with Narrator, the built-in screen reader. Same if you’re primarily a keyboard user, like many users of accessibility software. I had no idea how much work and testing I should have been doing to make sure those tools play nicely with my app. So a great deal of the work in 2.0.3 is to make Chordious friendly to screen reader software and keyboard users.

Most of the controls now have proper access keys now, that is, when you press ‘Alt’ on your keyboard, the little underscores that pop up so you jump directly to a particular control. You can for example, now press ‘C’ or ‘Alt+C’ on the main window to jump straight into the Chord Finder. You can now also press the ‘Esc’ key to exit just about any window, ‘Enter’ in lists of diagrams to open the editor, or press ‘Y’ or ‘N’ for Yes or No dialogs.

Hopefully, navigating around Chordious with a keyboard will be much easier.

I also put in a lot of work cleaning up the code for readability and future maintainability. That process helped me find and fix many bugs, but also improve the app’s overall stability and performance.

But what about new features, you ask?

Thank Peter from Switzerland for suggesting I make it easier to copy diagram directly into the clipboard, rather than require you to formally export them as image files. Now, if you select a diagram in either of the Finders, or in the Library, you can press ‘Ctrl+C’ to copy the image directly to your clipboard, or ‘Ctrl+Shift+C’ to get prompted to cleanly resize the image before you copy it. You can then paste the image just as you would any other into emails, word processors, graphics programs, etc.

You can also find “Copy to Clipboard” commands in the context-menu when you right-click on diagrams in the Library and the Diagram Editor. There you’ll also have an option to copy the raw SVG text to the clipboard, if you want to see that.

Here’s the full change list for 2.0.3:

  • UI is now friendly to Narrator and other screen readers
  • Improved keyboard navigation with alt-keys for most controls, ‘Enter’ to open list items
  • Can now copy diagram images directly to the clipboard via context-menu and/or ‘Ctrl+C’, ‘Ctrl+Shift+C’
  • Can now exit out of any window with the ‘Esc’ key
  • Improved handling of update failures
  • Fixed bug where changing text in dialogs didn’t enable the ‘OK’ button
  • Fixed bug where closing a Finder during a long search may cause a crash later
  • Fixed automatic versioning code to remove dependency on VS extension
  • Fixed many miscellaneous string and localization bugs
  • Fixed Code Analysis warnings and issues to improve code quality and style
  • Fixed Setup warnings
  • Tidied XAML files for readability
  • Performance and reliability improvements
  • Updated Svg.NET to 2.3
  • Updated MVVMLightLibs to 5.3.0.0

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

/jon

Tagged with: , ,
Posted in Releases

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