CV

I’m currently employed by Telstra BigPond, and am quite happy here at the moment, so I’ve removed my CV for the time being.

Not that posting my CV would indicate I’m not happy working there, but rather that I don’t feel inclined to update it right now and the old one no longer reflects the work I’ve been doing for the past two years.

Here’s a quick summary of my most recent experience for the interested:

  • 3 years as the sole IT support for Modem Media UK, a large “New Media” agency that built entire websites and performed marketing campaigns. This was a mixed environment and I managed Windows, Mac and Unix machines for the suits, creative people and code monkeys, as well as ad-hoc site maintenance.
  • 2 years at Tiscali (previously LineOne), one of the largest ISPs in Europe as a senior platform engineer. I built and maintained the Tiscali Website, forums and database backend. Spearheaded the Tiscali CERT team. When it was LineOne, I was one of a small team running all of the ISP systems.
  • 4 years at Valuecommerce in Japan, the country’s largest affiliate marketing service. Designed, built and maintained the company’s mass shared hosting environment which had over 5,000 domains and 40,000 email accounts at the time I left. The system was designed around Open Source components on IBM hardware, and EMC SAN storage. Built a high-end 3-node Sun Cluster for the Valuecommerce Database Upgrade project, taking them to Oracle 10G.
  • 2 years (ongoing) in Telstra Bigpond’s ISP platforms team. Systems integration, and software development for various parts of the platform including AAA and mail. Some portions of the platform require custom SOAP services that interface with C api based applications (such as Openwave’s Email MX product) and I write and maintain extensions and services for those applications.

I call myself an all-rounder. These days, I do a lot of software development in C and C++, but before that I called myself a Unix Engineer. I think the reality lies somewhere between these two skillsets, and it gives me a unique insight into what platforms and systems really can work well in a busy environment.

But geeks are not just the sum of their work experience. Most geeks I know experiment and develop things in their spare time, though much of it may not be useful to a company, it is still valid experience nonetheless.

I have spent decades programming in various languages. Here’s a summary of what I know and what I use them for:

  • Perl – High level of proficiency, able to develop quite complex scripts. These days I tend to write anything that requires high performance in C, however. This used to be my first choice for writing web applications, using mod_perl, but these days I would look towards Python & Django web frameworks.
  • Python – I’ve experimented a bit with Python and don’t dislike the language. I think it works well, and more importantly, I like the frameworks available for it. Django is an awesome framework for website development, and I encourange anyone who is interested in developing sites from scratch to check it out. I think that if I was to write a web application from scratch today, I would look at Django first.
  • PHP – A great system and it’s stateless nature makes it very easy to scale applications written in it, as long as you do things like store sessions in a shared database table. It’s a bit of a mess of a language though, and doesn’t appeal to purists. You can’t deny however that excellent applications can be easily written and deployed in php, for example, Wordpress. Not my first choice for web development today, but certainly my second.
  • Java – Comfortable with the language itself but I am always disappointed with the end products. I think this is not a failing of the language, or the runtime, but rather the qality of code that it encourages. As a systems engineer, I have been often frustrated by seemingly simple web applications written in Java that run slowly, use too many resources, or wig out for no apparent reason. Web applications in scripting languages like PHP seem more stable to me, and seem t be able to get the job done with less mess.
  • C – Everyone should know C. If you don’t know C, or you havn’t written an actual application in it, then you probably won’t understand how memory is really allocated and managed by the machine. All higher level languages, at the end of the day, alloc memory the same way and lay out data into memory structures in similar ways. C forces to you consider all of the details.
  • C++ – Object Orientation gone mad. Not a huge fan; I recognise it’s popularity, and I’ve written several projects in C++ that are deployed in production environments, but I feel that perhaps the end result could have been done in a more direct manner in C with perhaps less hoops. Boost goes a long way to providing sorely needed features to C++, but it also introduces a huge amount of complexity.
  • Objective-C & Cocoa – For desktop applications (and mobile phone applications), nothing beats this combination. Apple have done an extraordinary job (or rather, NeXT did, but meh) putting together a cohesive development environment. Cocoa itself is immensely rich, from Core Data to Bindings, Core Animation and the AppKit. I am a registered iPhone developer (though I don’t have time to write iPhone applications at the moment) and have written and contributed to a few Cocoa applications on the Mac. If I develop a desktop application, it’s with Objective-C and Cocoa.

Finally, as a Unix Systems Engineer, I’ve worked with many of the most popular Unix variants in production environments

  • FreeBSD based mail servers, web servers and MySQL servers.
  • Linux (Debian, Ubuntu, RedHat EL, Fedora Core) mail, web and database servers.
  • Solaris (5.6 to 10) running Oracle and bespoke applications in various languages.

I’ve also implemented EMC SANs, NetApp NASs, High Availability Clusters (on both Sun and Linux based servers), clustered filesystems, Cisco routers in a small site, Foundry Networks routers and switches in a large site. I’ve done Foundry’s Advanced Switch and Router course which covered RIP, OSPF, and BGP as well as Spanning Tree.