Five years of contracting

April 1st saw me celebrate five years of working as an in independent contractor. This also means I’ve now spent two years in London and it’s been four years since I last worked in Northern Ireland. It’s scary how fast time flies.

Changes and not

My second contract here required the use of a limited company so it meant finally waving goodbye to the simplicities of being a sole trader. I’d originally set up NullTheory Ltd for my very first contract but was advised to go down the sole-trader route so it had been lying dormant for some time. Working through that and later needing professional indemnity and public liability insurance has meant things have seemed a bit more adult and at times daunting but ultimately this has just boiled down to just the logistics of carrying out my day-to-day work.

Most of the contracts themselves I’ve found to be quite similar but I guess that’s the downside to selling what amounts to a commodity skill. I think I’ve seen every possible way of combining Ruby and Rails by now.

In terms of client work the last few months have been particularly challenge free which has seen me refocus on bodybuilding, for better or worse.

The one consistent challenge there has been though is that of pushing up the daily rate…

My first contract in Belfast paid double my last permanent salary and working in Dublin was a nice bump up from there but London has been something else entirely. My current daily rate is more than double my first and it’s tragic how quickly each increase in income has went from making me feel rich to making me want more.

Financial independence

The dream of financial independence has been the thing that’s driven me since 2008 when I was working in the back office of a monstrous US investment bank as the Global Financial Crisis hit. This was definitely amongst the most stressful periods of my life and the only way out seemed to be to have enough money not to have to work ever again. So I started saving as hard as I could and learning what I needed as I went along.

What seemed a lifetime away is now within sight and it has only been possible through working for myself. Each year I’ve maxed out my Stocks & Shares ISA contributions, any profit liable to higher-rate income tax I’ve put into a Self-Invested Personal Pension and just before Christmas I diversified a bit and bought a house back in Belfast.

Money can still be one of those taboo subjects but I’d like to write about it more, I had started developing an information product in the form of understandwealth.com a while back but didn’t get far. Perhaps when I finally withdraw myself from the workforce I’ll feel more motivated to write about how it was done.

The future

The dream so many contractors I’ve spoken with mention is to only work for a number of months of the year and to then take the rest of the time off. I still don’t know wether or not I have the nerve to step away from full-time work. Getting trapped in “just one more year” could happen too easily and after so many years of spending so much of my time working the question arises of what do I do with myself.

Since graduating without the Master’s degree I originally started studying for I’ve thought about returning to University to snag that and maybe even go further and work towards a PhD if I found the ability was there. Other bucket-list items I’ve tossed around in my head are learning a martial art and a new spoken language along with publishing a book.

Realistically though, until the new year I’ll be keeping my head down and managing my investments, after which a decent chunk of time away from the grind will be in order. From there, who knows.

Serving up a static site using Go

Like a lot of people in technology a portion of my time is spent wondering what will be the next programming language, framework or whatever to take off and become popular. Of greater personal importance is the matter of which one of them will get added to my toolboox next and press-ganged into productive use.

For years now Ruby has been my goto for a lot things and I’ve been doing more and more OS X and iOS development but it had been some time since I last picked up something new and I had a hankering for some shinyness.

I started tinkering with Node a few years back but it didn’t have enough appeal to invest much of myself in it and Scala looked a likely contender for a while but I didn’t get any further than solving a few Project Euler problems with it, mostly while spending my evenings in hotel rooms in Dublin.

Enter Go

Earlier this year I spent a month in Melbourne and thanks to having some time away from paid work I could see that my preference seemed to be leaning towards developing web services and then consuming those services with native client apps. I wanted to keep my skills sharp so started tinkering with a personal project and for the API piece the relatively new Go seemed ideal for the job at hand.

Once I got started what struck me was that I was producing a single, standalone binary which didn’t need any external dependencies in order to be run on the target architecture. No need for a particular version of a language or a slew of packages to be installed, just a command to be executed. It’s almost like I’d forgotten that that was how things used to be once upon a time after these years of using scripting languages and it was a liberating experience.

For that project I wanted to do everything test-first but unfortunately the depth of my knowledge of Go in general and web application development with it more specifically are not what I want them to be so when I hit a stumbling the project was abandoned. Perhaps I’ll come back to it in the future.

A Need Emerges

So I still wanted to get some Go out into the wild and when I decided to put together a new website for my limited company I thought I could use the situation as a learning experience.

Serving up a static site can be done any number of ways and I certainly didn’t need to go re-inventing the wheel but with a bit of tinkering I had put together a simple app that could look at a requested path and if it corresponded to a file under public/ then send the file’s contents to the client.

What pleased me with the solution was that it was achieved with only what’s provided out-of-box with Go and without too much code. Simple and to the point and getting it running on Heroku was trivial with the Go buildpack.

The End Result

The site, as simple as it may be, can be found at nulltheory.com and the code is on GitHub. Bon appetit!

My also-ran Markdown Editor for OS X

Quite often I feel the need to learn something new for the sake of learning something new. Covey aficionados would know this as sharpening the saw.

I usually struggle deciding upon something however as there are so many areas to choose from in the software world and it isn’t everyday I feel drawn enough to something to put time and effort into it on top of holding down a day job.

Five years ago it was Rails, two years ago it was testing that I wanted to improve my skills with and I’m now waiting on whatever will be the next major piece of technology or practice I feel I need to push myself towards.

Before the web

When I started out teaching myself to write code I didn’t have access to the Internet and the web as we know it didn’t exist. My output was to evolve from simple CLI programs to games to desktop apps.

These past years a lot of my work life has involved developing web software with scripting languages. Compilers, graphics routines and assembly language have all started to become lost in the mists of time.

Returning to desktop software development seemed like both an interesting challenge and a break from dealing with the web. As I’ve little interest in cross-platform toolkits this meant Objective-C and Cocoa, technologies which I pick up every once in a while but haven’t produced much with. But what exactly to develop?

Eating my own dog food

In May I was working on-site with a client in Dublin and had to produce some documentation for the analytics platform I was building at the time. As usual I chose Markdown and put up with the workflow of editing the content in Vi and running it through the supplied Perl script to see what the HTML, which was eventually to handed over to the client, looked like.

It struck me that here was repeated effort I could automate with software and there didn’t appear to be a widespread, simple Markdown editor for OS X. An opportunity at last to start work on a first offering from my software company I thought.

The possible beginnings of a product-based business

Over the course of a few months I added a bit of code here and an interface tweak there, mostly while staying in hotel rooms in Dublin. Any time I wanted to edit some Markdown I used the app and it suited my purposes fine.

I toyed with the idea of publishing what I had on the Mac App Store. I shared the binary with a couple of people to see what they made of it and was extremely pleased when one asked if it was ok to pass the app on. I could see a possible path opening before me allowing me to start stepping away from a consultancy business model to one centred on selling products.

Beaten to it

Life moved on though, I started a new contract which gave me a lot of new technology to play with and development of this side project was put on hold.

About a month ago I spotted Mou. Not only was it more complete than my effort but it was better designed than I could hope for considering the limitations on my time and Cocoa experience. “Fair play” I thought, I wasn’t quick or decisive enough and as a result, if I’m to build this planned business it will have to be on the back of a different product.

Today I spotted Marked and a quick search turns up a number of other apps and text-editor plugins. Such is life.

Open source

As of today it’s been over 3 months since the last commit to the repo and many superior alternatives exist so I thought I may as well give it away.

The app suits my needs though it would be even better if it could saving/load files from the local filesystem. I may well tinker with it for my own learning purposes but who knows what side-project my interests will wander to next.

The code is available on Github and compiles with Xcode 4.1. Enjoy.