I saw a tweet from a friend today, also a professional developer, expressing dissatisfaction with writing code for a living after 7 years at it, although he still enjoys doing it as a hobby. This is not the first time I’ve seen this sentiment expressed, which is why I consider myself very blessed to still enjoy my career after 7.5+ years of being paid to engineer and develop software. After giving it a bit of thought, I strongly suspect my enjoyment has come from variety – in those 7.5 years I have:
- Developed extensively in C, Delphi and Python, developed significantly in Labview and dabbled in C#
- Designed and developed code for embedded devices, desktop systems and workstations in factory environments
- Developed low-level drivers, front-end GUI-based systems and several layers in between
- Ported large legacy systems to new platforms and architected completely new systems
- Designed a communications spec for device-to-PC communications and designed a variety of systems and tools around it
- Designed and implemented a variety of database schemas
- Assisted in administering a version control system
- Played toolsmith, developing a number of internally used tools
On top of that, I’m regularly consulted on various languages, including C and Python, and have presented training courses on both. This last point is not meant as a boast (I’m hardly a guru on either language) but an indication that I’ve been fortunate enough to get enough exposure to both languages to teach them.
Looking at the list above, I seem to have lucked into the kind of job that changes regularly and keeps me interested – I’ve come to realise how rare this is and I’m certainly not going to take it for granted.
One of my responsibilities at work is to develop and distribute several applications to a different division. These apps all consist of an exe (we’re a Windows shop), some supporting files and an INI config file. They need to be run on several independent PC’s.
The division I am supporting does have technicians, but they are neither hugely technically competent nor blessed with much time to get stuff done, so a “one-touch” installation or update procedure is desired.
There are several ways this could be done, perhaps by distributing an MSI installer which is then installed on each PC. Here is another technique which works for me. It leverages SVN, both because that’s where my code lives and because both sides of this game have access to our SVN server.
- Ensure the exe and additional files are under SVN control.
- Tag the version of the exe which should be distributed. This will be svn://path/to/current/tag
- Create an SVN location with a name something like “current_location“. A good location would perhaps be in the SVN folder of the project, but it really only matters that it is somewhere in your SVN tree.
- Check the “current_location” directory out to a local working copy.
- Create an svn:external property on this working copy, like so:
Check the “current_location” directory back in.
- On each PC the app is to run on, checkout the “current_location” directory. The app will be in a directory called “app” in the checkout location.
The “current_location” directory is now effectively a pointer to the version of the app in current use.
When the app needs updating, create a new tag and edit the svn:external property of your local copy of the “current_location” directory to reflect the new tag and check in. Instruct the technicians to SVN update on their side. This could be done by right-clicking in Windows Explorer via TortoiseSVN for eg.
For a more one-touch solution, I also provide a Windows batch file to automate the checking out of the app on the technicians’ side. This can be quite easily done using the SVN command line implementation made freely available by collabnet (it is of course even easier to do on Unix).
There are some further Windows tricks you can use to make the batch file more comprehensive and useful, but this is enough for now. I’ll write about enhancing the batch file in a (hopefully short-term) future post.
I received my long-awaited (yet still early) promotion today! I’m now officially an Engineer, as opposed to an Engineer-in-Training. It comes complete with a 55% pay increase.
Damn, but it feels good…
I’m back from a week long internet hiatus (at home, anyhow). They came and installed an ADSL last Monday, the 23rd. However, the router I got from my ISP didn’t function on Tuesday when I got it – it didn’t DHCP and it didn’t have the static IP range I was told it did. The idiotic techie couldn’t get it right over three days, until the provincial manager of the ISP gave us his personal one, which worked perfectly. That left him in the lurch over the weekend – I’m assuming he got one from work on Friday though. That improved my outlook on the IS(P) (this is the only hint you’ll get as to who it is) greatly – the manager is a great guy, even if the techie is hideously incompetent – the router does DHCP out the box, you actually have to work to break it.
In other news, my boss asked me what the state of my passport was today – he’s thinking of sending me to Greece for 2 weeks soonish, perhaps several times. There’s something to look forward to, at least the first few times ;-). I’m told it gets real tedious after that, but we’ll see.