A blog by Jacob
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.
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.
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).
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.
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.
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 runnable.com, 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.
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.
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 http://squaregalaxy.com (lowercase) results in this more complicated (harder to scan) image: