Tools, Jigs, and Devices

One of the things that drives me crazy is that a lot of software developers don’t write software to make their jobs easier.  Whether it’s testing code, monitoring environments, or researching bugs, there are lots of ways to automate your way out of a boring job and look like a genius.  It’s work, but it makes it easier in the long run.

In other jobs this happens all the time.  Carpenters know that creating a simple tool (called a jig) can save a time and increase quality.  Even street sweepers have a stick with a nail in the end.  But for a Java developer, when they need to do something that takes 7 separate steps, you’re lucky if they’ll write them all down, much less make a tool to do it for them.

The first time I tried this, I automated the build for a software project.  It was a classic situation where there was only one person that could build the project, and it took lots of specialized knowledge, and it only got done about once a week.  If you didn’t get something into that build, you’d have to wait another week until the next one.

Fortunately, I had just read Jared Richardson’s Ship It, which talked about repeatable builds.  I automated the download and build out of the SCM, and made it so anybody would be able to build.  My boss said that was the best process improvement he’d seen in his career.  Of course, he was the one that spent a half-day each week putting together the build, so he was the happiest person of all.

Shortly thereafter, I increased the number of tests we were doing for an upgrade from 12 (two tests per person, six developers, all manual) to over 8,000.  We found a ton of bugs that traced back to the same cause, and a lot of little bugs that were special cases.  None of those were covered in the original 12 test cases.  In the end, the upgrade went smoothly and page generation time went from 3 minutes to 15 seconds.

One great book about automation is, The Productive Programmer by Neil Ford.  I save myself 3 hours a week by taking some of those ideas and putting them into everyday life.  Especially:

  • Know your IDE
  • Create your own launchpad
  • Automate repetitive tasks

It’s 5 years old, but the techniques are more about how to be productive, so they are still relevant.  If you were only going to read one book to make you a better programmer this year, I’d make it The Productive Programmer.

And there are other tools you can use to make things easier.  I’ve started using Maven for builds, because creating new boilerplate apps is fast and easy.  Launchy is a little software device that lets you type in what program to run, and even corrects your spelling.  Using documentation to document things you really need is a tenant of Agile development, but you’d never know it from how most people do Agile.  Saving those documents forever means I usually never use them, except for about twice a year, when I need something I thought I was done with.

Think about some things that you do that you can automate.  You might be surprised how much you can get done when you don’t have to do it yourself.


New Computer Software Install List

I recently got a new computer for work, and it’s taken a while to get all the tools I’m used to.  Here are the things I’ve missed in the last week in approximate order.

  • Launchy – keyboard launcher so I don’t have to click to find my apps.
  • CLCL – Clipboard manager so I can find things on my clipboard without having to copy them again.
  • UnixUtils – Windows commands that give you handy unix utilities: ls, find, grep, etc.
  • GVIM – Windows, Linux, and Mac compatible super-VI editor.
  • AutoHotKey – Remaps your keys to different keys, or provides global key shortcuts.
  • PuTTY –  Telnet and SSH client.
  • Cropper – Screen capture tool that goes to a file OR your clipboard.
  • Winamp – Music player with great radio stations and visualizations.
  • VLC – Video Lan Client plays almost any video file.
  • Virtualbox – Virtual machines are SO handy.
  • WinSCP – Windows-friendly tool for copying files to and from remote servers.
  • SoapUI – For hitting web services and parsing WSDL.  Plus, the latest version has a copy of TCPMon, which is like a wiretap for TCP communications.


There are also the different versions of Java and Ruby that are handy to have around.  In order to keep those straight I try to make a setupXXX.bat in the c:\ folder to set the environment variables for each.  That way each time I start a command window I can set the environment to what I need.

One tool I’ve always liked, but never have been able to use with discipline, is TiddlyWiki.  It’s like a wiki, but it runs locally in your browser.  It seems like it would be very handy for keeping track of lists, but I always use paper notebooks to keep my lists in, so I have at least ten separate versions that I start and don’t update.

Maybe now that I have a list where I can find it, I will be able to set up my next computer even faster.

Kickstart Java Projects with a Simple Ant File

A couple of times a year, I think about starting a new Java project.  Usually it’s a tool to automate tasks that I’m tired of doing manually.  It often involves parsing a file, or testing a web service, or accessing a database.

For a while I would write it in Ruby, but it was always a pain to distribute.  First, you’d have to see if the other user knows what Ruby is, tell them to get it installed, etc.  Plus, in my organization, ruby isn’t a supported platform, so these projects never have a chance to get maintained or updated unless I do it.

I’m just enough of an automation geek to think that all projects, even these little ones, need to have a build system.  That way if I do want to update it I can do it without having to remember how to set up the class path, etc.  And I don’t like using IDEs for builds.

What I really wanted was the convenience of the Rails new project with the acceptance of the Java language.  After fiddling around a bit, I decided to write my own.

It’s just one ant file.  It creates the directories, compiles the files, and jars them up for you.  It keeps old versions of the jars with date-time stamps, but copies the latest version to the build.xml directory so you can easily run it.  It can run junit test, and it even includes instructions on how to compile your first code and test classes.

If you need a simple way to start a small Java project, you can check it out.


December Updates

Updates for December:

  • Just missed the Triangle Arduino meeting after staying up all night rolling out new software.  I hear there’s a new Arduino kit under the tree, though.
  • While Setting up for our home schooler, I found is available.  I bought it, but I’m waffling on whether to move the email and so forth over.

More to follow,