Archive for the ‘Technical’ Category

Another Jacob Brunson

Posted in Life, Technicalon Jul 24, 2015

Just found out that there is another Jacob Brunson out there.  And he codes in python.  And searching for “Jacob Brunson” in Google shows his web site first.  It is like my identity has been stolen.

I am Jacob Brunson, and now I have to put on my search engine optimization hat for a while.

However, Bing still shows my web page as number 1.  I might have to switch my default search engine for a while.  Google is obviously flawed.

Full circle Javascript

Posted in Technicalon May 22, 2015

When I first started learning Javascript, in the Netscape Navigator version 3 days, all the programming for a page was done in the web browser.  Javascript could read the query parameters to a page and construct the page with information according to the request.  In those days, I did everything in the browser because I couldn’t afford my own web server, and the free servers of those days (Geocities, Tripod) only really supported static pages.

Finally I got access to a server that ran PHP, which was awesome because I could do all the programming on the web server, reducing the frustration of dealing with various versions of web browsers that supported different feature sets.

But recently, web browsers conform to standards better, support a richer feature set, and are supported by many Javascript client libraries.  I’m finding that more and more, I’m ditching the server side program in favor of more client side programming. This is especially true with my embedded system work, where offloading the User Interface to the web browser provides a better experience.

Recently I got a Chromebook, which has forced me to step up my search for a good web-based IDE. I only looked at the free-level capabilities, looking for something that would handle multiple projects and maximum flexibility. Here are my top three recommendations:

Koding provides a clean interface with a lot of flexibility. In particular, I like that they provide a full AWS virtual machine. This is particularly nice for those who want to do more than just code, but to design or experiment with an entire software stack. However, their interface is a little bit less like an IDE and more of just a terminal and editor connected to that virtual machine.

Cloud9 works more like a good IDE where you can set up a build and run tasks. But the build and run environments seem to work outside of your particular terminal environment, which makes their workflow different than it might be on other platforms.

Codeanywhere maybe be a good mix. For code editing it provides a little more than a text editor, and doesn’t want to control or own your project. You can actually keep your code external, and access it through (S)FTP, Google Drive, or Dropbox, and simply access it through code anywhere. But the still also give you a “DevBox” which is something like a VM.  Additionally, Codeanywhere provides mobile apps (which I haven’t tried).

I looked at other solutions (Codio, Codebox, Codenvy, PythonAnywhere, Nitrous) but excluded most of them because they didn’t allow me full control over my software stack.

The problem with all of these is that they can’t access code that you don’t have on the Internet, for example, code in your private Intranet only. For that I found that I could quickly install the open source Codebox IDE on my private Intranet server.

So long Springpad

Posted in Technicalon May 29, 2014

Springpad is kind of like a mix between Evernote and Pinterest.  It was a very clean personal organization site that I thought was pretty decent.  Sadly, they announced this week that they are shutting down.

It is always a little sad when I see such a good product and many hours of innovation just die.

Coding in the cloud

Posted in Technicalon Dec 30, 2013

I’ve been looking for ways to write code inside a web browser.  There are a number of offerings, and I plan on giving a serious look to the free ones.

So far, I’ve come across, It seems like a good site to share code snippets that can be executed right on the site. Kind of like a YouTube-like site for sharing code.  It isn’t the sort of site that you would want to code a large project, but good for sharing just a chunk of code that might be useful by others or useful for programming instruction.

Some of the things I am looking for when writing code in the cloud is the ability to import, export, run, and write code easily.  I am especially looking for the ability to work along side my existing development practices on my home computer.

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: