2012: The Year The World Would End

Despite my growing cynicism towards anything even remotely joyous and celebratory, 2012 has been the best year of my life so far. I married my wonderful wife; celebrated 30 years on the Earth; visited a number of historic landmarks and cities in the UK; spent August travelling through nine American states, sampling a vast array of cuisine and witnessing some amazing sights; and dug my teeth in to a lot of patterns and technology that's really interested me. I've also started on the path to clearing out all of the junk I've accumulated over the past 15 years, which has turned out to be an extremely liberating experience, even if it means I had to bite the bullet and chuck out a vast number of things that "I might use before I die".

Fig 1. A shit tip

I could prattle on about how awesome married life is, or regale you with my adventures across land and sea, but this isn't one of those god-awful social networking sites where all but the most discerning have an ultrasound as their profile picture, and I'm pretty sure that the few subscribers I do have are more interested in development tech than how many inches my beard grew this year, or how I just spilled avocado soup on my crotch. So instead I'm choosing to highlight some of the interesting projects I've worked on, the tech I've managed to pick up, and some lessons I've learned.

Intermediary Code


2012 was a very productive year for me. I started out finishing up a contract with Paymentshield Ltd, an insurance broker that were undergoing a complete overhaul of their internal and external systems. I ended up doing quite a lot of different things while I was there, but my main task was designing and implementing a completely bespoke, role-based security system that could be used in other developers' systems, and by 3rd parties such as clients, brokers and insurance companies. It also needed to integrate in to their existing legacy core system seamlessly, which is where the main challenge presented itself. The experience fully exposed me to the wonderful world of WCF and SOA, and I really got my hands dirty with SSIS, writing some pretty complex packages that transfer heaps of data between their systems in a matter of minutes. I also put together a custom CMS for their new intermediary website in ASP.Net Web Forms, including the functional public facing pages, the CMS administration panel, and the vast majority of the control panel for their intermediaries.

The Paymentshield Intermediary website

Whilst at Paymentshield I met a couple of developers that I got along with pretty well. One in particular - a guy called Stephen - inspired me to really push myself technically; we had plenty of geeky discussions around bleeding-edge tech, built up a bit of a rapport (mainly surrounding his disgust in my placement of curly brackets in code :\), and I learned a hell of a lot from him. Anyway, man-crush aside, and not wishing to do myself out of a potential job, if you're looking for a particularly gifted and knowledgeable Microsoft / web developer, you can get hold of him through his website / blog.

As to what I learned; dare I admit that I'd never even heard of Dependency Injection and Inversion of Control before I started at Paymentshield, and although I'd touched upon it, WCF was still a bit of a mystery to me. I came away with a good, rounded knowledge of everything I worked on, and I've been consistently using and improving those skills ever since - in fact, I often advocate the use of DI / IoC, SOA, and a number of design patterns; I can't see how I managed without them!

Love Code


In May, I took on a project at webuyanycar.com, architecting and developing a new website they had in the pipeline. Even though I've put together a few smaller MVC apps over the years, this was my first commercial MVC focused role - and it's something I've been interested in for quite some time. Prior to this I'd been developing with MVC3 almost every day since it was released in January 2011 - spending hours per night on one of my personal projects. I'd been doing some pretty complex stuff too... so when I actually got down to the nitty gritty for the client's project, I realised that my knowledge was actually quite advanced and current. Suffice to say that I pumped out another bespoke CMS in just 3 months, that integrated in to their existing SOA architecture and CRM system.

www.weloveanycar.com

My contract ended a few weeks before the site was supposed to go live, as I took off to get married and spend a month on honeymoon in the States. The website has since launched, though it's not seeing much activity at the moment; a little birdy has told me they're in the process of redeveloping it as the focus has changed since I was there, so it looks like the fruit of my labour might not be there too long.

There were two of us developing the site; the second contractor was in charge of everything front-end, which helped to speed up my back-end development considerably. While I was there I managed to pick up a few things I'd not spent too much time on before; JS / CSS minification and bundling, a little bit of Test Driven Development, mocking, search engine optimisation, and software build management.

Rusty Code


Whilst at webuyanycar (in my free time, of course), I finally managed to launch my pet project rustyshark.com. I'd spent a couple of years developing it on and off, and at the beginning of 2012 I made a concerted effort to get it up to a point that I could launch a beta version. Since then, I've been feverishly adding features and fixing bugs, tacking spammers, writing as many reviews as I've been able to (considering my time invested elsewhere), and trying to optimise it for the search engines. I can't say it's been easy, but I finally feel as if I've put something together I can be proud of. When I've got a few more of the public facing pages completed (such as the search and the news filtering) I'll be happy to call it a "release".

Fig 2. Better looking than your girlfriend.

I did have high hopes for the website; it was never going to be able to compete with the likes of IGN or GameSpot, but I wanted it to be somewhere that me and my geeky friends could shoot the shit about games and films, whilst also serving to teach me a new technology that I've been meaning to learn for a while. Whilst the later was extremely successful (and then some), the former suffered due to a number of reasons. The friend I conceived the website with let me down more than a few times, and just couldn't commit to the project due to personal reasons, and the people who said they'd help out with the odd review here and there all have their own things going on. Whilst I can't complain (I totally appreciate everything I've received from people), unfortunately I can't do everything myself, meaning there isn't anywhere near as much content as I'd like there to be. I'm still posting reviews when I can (I've got two on the go at the moment), and hopefully it'll pick up again at some point in the near future.

I've managed to apply almost all of the skills and techniques I've learned over the last year to the website; only a few weeks ago I updated it to use .Net 4.5, EntityFramework 5.0 (turning off lazy-loading at the same time, which meant I had to test absolutely everything on the website thoroughly for missing data), AutoMapper 2.2.1-ci9000 (pre-release), MVC4, and added RSS feeds and a comment approval system. I'll continue to update the site, whether I'm posting reviews on there or not, as I enjoy the challenge, and it serves as a good test bed for new technology. One thing I'm very keen on doing is adding a lot of unit and integration tests to my service factories, as my most recent contract has exposed me to the vast benefits of TDD and mocking.

Independent Code


I just finished at Independent Group, a claims management company that are in the process of upgrading all of the hardware and software across the entire group; a vast undertaking that's being carried out in carefully planned steps. They've got a lot of legacy software, which requires staged replacement, and I was tasked with designing and implemented an SOA system that pulls information from various internal sources, and provides it to their suppliers. I got to flex my SSIS, WCF and MVC skills again, but also did a lot of infrastructure; setting up IIS and SQL servers, configuring DNS, installing certificates, and setting up builds and deployment. I've not really done much infrastructure for the past few years, as most of my clients have had departments that deal with it, so it was actually quite refreshing to get to grips with IIS7 and Windows Server for a change.

I'm quite proud of the work I've done at Independent - everything has been TDD from day one (last time I looked, I was at 89% code coverage), and all components are fully documented. I can't say I've learned all that much while I was there, but I did get a good grip on mocking, and had another opportunity to analyse and design a loosely-coupled, enterprise level piece of software.

My Code


Looking back over the year, I really feel like I've come a long way. I've been learning how to develop for around 16 years, in which time I've worked with clients of all shapes and sizes, and designed and developed software from simple web sites to massive, scalable enterprise solutions.

My aim this year it to look in to mobile app development; whether it's games or tablet apps. Even if I do despair every time I see a 14 year old with their face permanently glued to Angry Birds, it's the future, and if I don't start looking in to it soon, I'm gonna be left behind!

Popular posts from this blog

Handling uploads with MVC4, JQuery, Plupload and CKEditor

Generating a self-signed SSL certificate for my QNAP NAS

TDD and Unit Testing with Moq