Archive for the ‘Technical’ Category

Make your version numbers count

Posted in Technicalon Jun 3, 2013

I’ve seen many software products have a version numbers in the form of:


Where X, Y, and Z are integers. For example, I’m using Linux 3.8.0.

Communicating a software version number is important because it communicates the fact that the same software title can be different between versions.

Unfortunately, when using X.Y.Z numbering, too many software publishers leaves the meaning out of the components of the version number. Often changes in X mean “big change”, changes in Y mean “medium change” and changes in Z mean “small change”. So software of version 3.2.1 is much better than version 1.2.3, but version 1.0.2 is only minimally better than version 1.0.1.

The problem with this is that it it is subjective. What a publisher considers a big change might not be important to a particular customer. What a publisher considers a small change might fix a show-stopping bug for another customer. When it takes someone’s judgement to decide the version number of the next release, your version numbering scheme is messed up.

When choosing a version numbering scheme it is important to remember how the version number will be used. Sometimes, a customer wants to know how old a software release is, in which case a date-based scheme might be appropariate. In many situations, a customer only wants to know if one version is newer than another version. In this case, I might suggest a simple numbering scheme where version 20 is newer than version 19 is newer than 18.

Firefox uses an X.Y scheme where X is the release number and Y indicates how many bugfix re-releases have been made. For example, Firefox 21.2 would indicate the second bugfix release for the 21st new feature release of Firefox.

When developing a software library, I like to use an X.Y.Z numbering scheme. If the API to the library is backwards incompatible, then X increments (and Y and Z reset to zero). If I add a new feature, then I increment Y (and Z is reset to zero), and I increment Z if I fix a bug. Consumers of my library can look at the version numbering to help them quickly decide whether or not they should update. If they see only Z change, then they should be able to get the only the bug fixes and improve stability. If they need to use a new feature, they should use a version with an incremented Y component. If the X component of the version changes, the library should not be updated until the developer has an opportunity to review the changes and adapt the consumer of the library.

Use UPPERCASE in QR codes

Posted in Technicalon Apr 24, 2013

If you are generating QR codes, you should try for a QR code that uses only uppercase characters, numbers, and some basic symbols.   This way, the code only uses 5.5 bits per character.  If you were to include lowercase characters, then you use 8 bits per character.

For example, encoding HTTP://SQUAREGALAXY.COM results in this image:

But encoding (lowercase) results in this more complicated (harder to scan) image:

In this year’s spring cleaning, Google was bold enough to kill off Google Reader, a product that they had been supporting for over 7 years.  Considering Google’s lack of restraint in discontinuing even popular products, the list of Google services that may get cut next suddenly gets bigger:

Google Offers tries to play in an over-saturated market of daily deal sites.  Google may decide to stop offering Offers directly, and role that functionality into Google Shopping.

Google Checkout plays better in some use cases than in others.  Google may decide to refine the scope of Wallet/Checkout, perhaps restricting its use as a third party checkout system, where Paypal maintains a stronghold.

Google Finance hasn’t seen a significant update in many years.  Being a non-essential componenet to the Google portfolio, Finance may find itself in the same situation of Reader with decreased usage and lack of profitability.

Google Toolbar for IE will likely see decreased usage because of IE 10 and Windows 8.  Most Google fans will probably just use Google Chrome instead, leaving little motivation for Google to continue supporting Toolbar.

Google Picasa is an oddity.  It doesn’t appear to fit well into any of Google’s main strategies.  It is also one of Google’s few remaining desktop installed software offering.  I don’t think Google will kill Picasa, but they may decide to sell it off to someone else.

Google Talk for Windows may go away as Google pushes people to use chat in Gmail, Google+, or mobile apps. Talk may service spring cleanings depending on how it plays into the Google Apps for Businesses strategy.

Google Voice allows you to have a single phone number that connects to all your phones.  But with many people ditching land lines in favor of their (Android) phone, Google Voice is looking more and more obsolete.

Orkut probably still has quite the following in various geographies, but it seems odd that Google would want to continue two competing social platforms.

Google Alerts is a minor feature that isn’t very well used, so I could see it going away in favor of other Google efforts.

Google News is a lot like Google Reader, in that it aggregates articles from all sorts of other sites, and doesn’t contain any advertising.  With more people being alerted to news from their social media sites, and with news providers requiring paid subscriptions for online access, discontinuing Google News would be about as bold as discontinuing Google reader.

iPhone 5 and siblings

Posted in Technicalon Sep 12, 2012

Today Apple announced some new portable devices, perhaps most notably, the iPhone 5.  Here are some of my thoughts about today’s announcement:

  • The iPhone 5 is more or less an incremental release.
    •  Incremental releases tend to follow the obvious path of making everything a little better.
    • Incremental releases show less innovation, but better iterations about what is already there.
  •  The iPhone 5 didn’t really come out with any new big features that the competition isn’t really doing.
  • I don’t think the iPhone 5 has enough new features to convince people to upgrade their existing iPhone early.
    • But of course there are those Mac fanatics who always have to have the latest iSomething.
    • I think that when phone users do go to upgrade, the iPhone 5 will likely make many people happy.
  • When the latest iPad came out, they branded it the “New iPad”.  Why wasn’t iPhone 5 branded as the “New iPhone”?
  • The new iPod Nano follows Apple’s indecision about the shape of an iPod Nano.
  • I am sad to see that the new iPod Nano doesn’t have a camera like the 5th generation had.
  • The new iPod Nano looks like an iPod Touch want-to-be.
  • I think the iPod Nano is a great option for a parent who wants to buy their kid a classy music player without the Internet (and games)
  • I think there is a small market for the new iPod Nano.
    • I think most people will be willing to pay a little bit more to get the much more capable iPod Touch.
  • Is apple ever going to allow third party apps on a iPod Nano?
  • I like the refresh to the iPod Touch.  I’m a big fan of the SmartPhone minus the phone gadgets.
    • I wish there was an iPod Touch equivalent for Android.  Yes, there is the Samsung Galaxy Player, but it is old and far behind what Android phones can do now days.
  • I had a 2nd Generation iPod Touch (still missing somewhere, maybe in the couch?).  The new iPod Touch makes it tempting to replace it.
  • Dual cameras, Retina Display, Siri, and many other iPhone features make the new iPod Touch about the most capable non-phone device that you can put in your pocket.
  • No iPad Mini, unless you consider the new iPod Touch.
    • The bigger iPod Touch display isn’t quite big enough for me to think of it as an iPad Mini, but closer!
    • The new iPod Touch price is what I would think of for an iPad Mini.
    • With the most expensive iPod Touch priced at the same point as the cheapest iPad, I don’t know that there is room for an iPad Mini.
  • At the beginning of their presentation today, Apple rattled on too long about rocks.  No one cares how you made your last Apple Store.

Over the last few years, Google has been working on their own pet programming language, called Go.  It is a high level language that is compiled to native binary code.  I took a quick look at Go to determine whether or not it would be good on an embedded system.


It is very easy to build a cgo compiler that will cross compile to ARM.  If you are using ARM or x86 for your embedded system, you can have a program compiled and running on your system in just a few minutes.  If you are using another architecture, you may be out of readily available support, but not out of luck–the gccgo compiler may provide just what you need.

Go links everything statically.  This means that you never have to worry about getting all the run-time dynamically linked libraries at just the right version on your embedded system.

Go is a nice high-level language that doesn’t require an interpreter.  Interpreters can be big and slow, which isn’t ideal for an embedded system.


Go binaries are big.  This is because everything is always statically linked.  Go binaries also contain a certain amount of run-time overhead like garbage collection.

Go was developed first for x86.  Support for other architectures have come after support for x86, so running Go on an ARM isn’t as well tested as running Go on an x86.

Go is new.  You don’t get years and years of experience with Go as you would with other languages like C++.  Additionally, you are less likely to find highly-experience Go programmers as you would with other more common langauges.


Because Go binaries are big, it makes it impractical to use Go on an embedded system except for in a few cases.  If you have lots and lots of storage on your embedded system, Go becomes more practical. If you are using Go to write a single monolithic program for your embedded system, the binary size overhead may be less of an issue.  If you want to write lots of small applications (which use dynamically linked libraries) than Go is not for you.

Because Go is new, it may not have seen as much testing as might be needed for critical embedded systems.  But if you need to quickly get a prototype working, Go might speed up development.  I would imagine that a large company might want to stay away from Go for now, but small startups who like to take risks might justify using Go to capture the big development rewards.

Software quality != testing

Posted in Technicalon Jul 27, 2012

I was working in an organization when there was a lot of panic about lack of software quality.  Immediately a team was spun up and tasked to implement some form of automated testing.

While well intentioned, I think the associated between software quality and testing is a little misguided.  Testing can be used to discover a lack of software quality, but by itself it doesn’t cause software to be of higher quality.  Sure a software developer can take the results of testing and fix any defects, but that process isn’t testing, it is developing.

Software quality comes through quality software development.  When software developers follow good development practices, they will create higher quality software.

So while testing isn’t bad, a company looking to improve software quality should look at the development practices first.

Software I use on my Mac

Posted in Technicalon Feb 14, 2012

Here is a list of software that I use on my Mac.  All of which can be downloaded for free.

I have a lot of other software that I also use: other web browsers, VPN client, Twitter client, Kindle Reader, etc.  But I don’t use them often enough to put them on the list as programs that I frequently use.