Back in January 2006 I left an agency after three years and started freelancing. I was mostly a front-end developer who knew how to make things work in IE. I purchased the original MacBook Pro and found Tiger to be a great Operating System for my needs. I plugged in TextMate, Adobe Creative Suite and MAMP and my setup was done. I was able to turn up at a client and start working straightaway. After some pretty hefty setup costs my freelancing business had little or no overheads and the expensive hardware I purchased was completely rock solid. I really had the Mac experience - it was a joy to use and completely reliable.
Within a few months I had clients asking me to create server-side applications. I knew a little PHP and before long I had created my own CMS framework and purchased a (dv) media temple server complete with Plesk. I started to host sites and began to become proficient in Linux administration.
Again OSX was a fabulous platform for this development.
I realised that developing your own software is often re-inventing the wheel and largely because of following Veerle Pieters I picked up Expression Engine. It was perfect for my requirements. I was mostly creating brochure sites for clients that wanted to manage content and have a simple interface to manage content by. Without realising it I was already a full-stack developer. I was designing, doing the markup, hooking it up to ExpressionEngine and then providing hosting services. OSX was the exact platform I needed for this. I designed in Photoshop, did my markup in TextMate and then pulled up a terminal to maintain Linux servers.
I started to play with Rails as early as Rails 1 but by the time I created an application for a client it was Rails 2 I was working against. I started to become unhappy with the level of control I had with Media Temple and the Plesk server I was using and decided to migrate everything to a blank Ubuntu server on Slicehost (now part of Rackspace). For deploying Rails applications I needed to up my Linux skills. At this stage my Linux skills had become intermediate.
Once I had created my first Rails application there was no way I was going back to PHP. Ruby is a beautiful language, perhaps still my favourite language to date. Rails taught me about TDD and how to be fully confident in deploying an application.
With most of the Rails community on Macs it was a great experience. Around this time I really started to learn and value the UNIX tools available on OSX. Homebrew had just emerged and a vibrant community was making trivial to install a range of UNIX tools. I moved my text editor to vim and created a dotfiles repository to manage configuration.
In early 2010 I started to play with Node.js. It was a young project but I liked it as soon as I started to play with it. After a couple of blog posts I was approached to write a book and started to write some applications with Node.js. OSX is a great operating system for developing Node.js applications and again most of the community use OSX.
OSX offered tools like Vagrant that really helped to create an image that could be shared with other developers when a service orientated architecture got complicated.
Simply I wasn’t really using very much of OSX any more. I started to loathe the weight of applications like iTunes and my 2009 iMac (with RAM maxed out) was starting to groan.
I have used most of the big Linux distros in my time - CentOS, Fedora, Ubuntu, Debian. I liked to experiment with operating systems with VirtualBox and had started to play with Arch Linux on top of OSX. Initially it seemed a very bare bones distribution and it felt like you had to do a lot of work. But I quickly realised that this was the strength. You are encouraged to learn and understand how things work right from partitioning disks yourself to picking your desktop. I really liked this flexibility.
I wanted a lightweight desktop so after discounting Gnome I tried XFCE and LXDE. I liked both but they still felt heavy for what I needed - namely a browser and terminal. Using these desktops took me to explore tiling windows managers. I found dwm, openbox, awesome and i3.All of these window managers felt great to me.
I discovered the suckless project and found the philosophy I had been looking for:
We are the home of quality software such as dwm, dmenu, st and plenty of other tools, with a focus on simplicity, clarity and frugality. Our philosophy is about keeping things simple, minimal and usable.
I have been using dwm now for about six months and am far more productive than I was on OSX. I use st as my terminal, and Chromium as my browser.
My setup is very minimal and relies on git to manage source code and my dotfiles to manage configuration between a couple of Arch machines.
Looking back on my early career where I was a front-end developer my skill set has almost come full circle back to the browser. But now I carry strong experience on the server and a hunger to discover how things work. Rails abstracted too much for me - for much of the time I had no idea how a request went through the application and returned data. Because Arch forces you to understand the platform you are using, and more importantly to read the man pages it is easy to get out of trouble. Having said that I have had no issues. Not one. Arch packages are on the bleeding edge so I had expected that running on OSX hardware I might run into some trouble. Not at all.
I am a developer who develops software that gets deployed on the Linux platform so it makes sense to develop on Linux. That decision has paid dividends so many times. It is easy to install any software I need and projects like docker make it easy to develop on exactly the environment I will be deploying to.
I’m not suggesting that Linux, Arch or dwm are right for everyone. In fact they are tailored almost perfectly to what I’m looking for - an open, minimal operating system. My career is probably a driver for this. I started at the top of the stack migrated all the way down to the metal and bubbled back up to the top. As such I want to know how everything works and to keep software as simple as possible. Arch and dwm is exactly what I was looking for.
Have an update or suggestion for this article? You can edit it here and send me a pull request.
Using HashiCorp Vault with LDAP
How to use HashiCorp Vault to setup an LDAP backed secret store with read-only access for users in groups and read-write access for specific users
Linux and Unix xargs command tutorial with examples
Tutorial on using xargs, a UNIX and Linux command for building and executing command lines from standard input. Examples of cutting by character, byte position, cutting based on delimiter and how to modify the output delimiter.
Copy a file in Go
How to copy a file in Go. The ioutil package does not offer a shorthand way of copying a file. Instead the os package should be used.