About Me


I live in Bedfordshire in the UK, I am interested in watersports and most things tech related, primarily software, electronics, cars / automotive technology.

To keep things in balance I enjoy family time and keeping fit by swimming regularly and cross country running. For thrills I like to go surfing when I get the chance and compete in open water swimming events. Snowboarding, climbing and track days are other favourite but much less frequently practised activities.

My professional background has always been in the field of IT, having graduated university with an electronics degree I ended up working in IT as I had always been interested in computers and there was an opportunity available at the time. For my university final year project I designed and built an ECU for my car using an 8052 microcontroller and wrote the software in assembly language. The ECU ran my car's engine for years after until I eventually removed it and sold the car.

During my 22 year IT career I have progressed from building and supporting desktops, then to servers, networking / infrastructure then moved over to software development after finding that I was spending most of my time writing scripts and small apps to automate manual processes. During my last 14 years dedicated to software development I have used a wide range of languages including VB, C#, Objective-C, JavaScript and TypeScript. More recently I have been getting back into good old C/C++ while writing some Arduino code.

IT Opinions

Microsoft / Apple

I have always liked the Microsoft .NET framework having used it extensively in the past to build web and mobile apps, the only downside was the requirement to run a Windows machine. In late 2011 I entered the world of Apple and the Cocoa Framework by starting work on an iPad app. I had never been a fan of Apple kit for the usual reasons, however after 6 months of using a new MacBook Pro I have to admit that I had been fully converted. Of course I still needed to to run Windows for .NET work, so I used VMware for that.

Databases

For database work I have always used Microsoft SQL Server in the past for it's ease of use with .NET, but have also used PostgreSQL for GIS related work. More recently I have had a go with MongoDB and also been getting back into PostgreSQL but this time for use with .Net Core on Linux. A while back I stumbled upon an interesting project called RethinkDB as an alternative to MongoDB, it looked promising but the company behind it shut down in 2016. RethinkDB has since been resurrected as a community driven project so it's worth taking another look.

Frameworks

Being a long time .NET developer who also likes Linux, I had been keeping a keen eye on the development of the cross platform .NET Core framework and have been using it since it was first released, it is now my goto framework for backend / API development. I have also recently used Node.js/Express with MongoDB to build a Web API, despite a long standing dislike of the concept of using JavaScript on the back-end (being able to use TypeScript provided some comfort). I have also worked on an existing web app that utilized Node/Express and MongoDB with the Pug templating engine.

Hosting

I much prefer Linux for hosting web apps, so the availability of true cross platform .NET is pretty exciting and opens up a lot of options being no longer tied to a Windows server. Instead of SQL Server You can use the excellent PostgreSQL as the relational database which is well supported in .NET Core. For a document database there is MongoDB support, or you could just use the enhanced JSON storage capabilities of the latest PostgreSQL releases. Docker has made deployments much easier and faster than ever before, it one of the first things that i install on a new linux host after configuring the firewall and hardening it.

Web Apps

For Web application development, where possible I prefer to write an SPA using TypeScript and a JavaScript MVVM framework, the back-end choice would be either C# .NET / .NET Core or Node/Express in TypeScript. Having looked into the various options when AngularJS first started to become popular, for various reasons I decided upon the Aurelia framework for an internal web app. At the time, Angular2 was still in beta, now that Angular 4 and 5 have been released I will need to re-evaluate my position as much has changed.

Mobile Apps

For Mobile application development, Xamarin has come along way since the days of Mono for Android, especially since it was bought by Microsoft. I think for most requirements that need both an iOS and Android app, Xamarin will be the way to go, that is an opinion that I did not hold a few years ago.

Docker

Docker has completely changed the way i deploy apps, it provides a much more attractive way of hosting applications rather than having to configure and often dedicate a complete virtual or physical host to run the intended app. I currently use Docker for development, testing and deployment using Azure, AWS or a custom built VPS. Docker is great for setting up test environments on your local machine without the difficulties of managing any of the conflicting dependencies for various projects you may be working on.

IT Security

IT Security has always been a compromise between cost, time, expertise and equipment against the perceived level of security required. It is not possible to make anything completely secure, there are too many factors involved, the human factor being the most unpredictable. Application security is often an afterthought, to have a chance of getting it right, the requirements need to be considered in the initial design and should help decide what technologies to use and how to structure the app. I like to use the information available on the OWASP website to help check the design, the OWASP "Top Ten" being a good place to start.

IT Project Management

Having experience in a wide range of IT disciplines provides a good insight into how things work and what tends to go wrong. I have always believed that a poor understanding of project goals, changes in business requirements and scope creep are biggest cause of issues or failures in the delivery of IT projects. The bigger the project the higher the chance and the greater the potential cost of any issues.

The best way to mitigate against this is to make sure that the project goals are fully communicated and understood and then break the project down into smaller more manageable parts which can be delivered as prototypes with agreed functionality. These prototypes must be tested by all stakeholders and any required changes be incorporated into the project plan to update any expected deadlines.

This approach keeps everyone involved and avoids many of the surprises that usually occur when a project team disappears for several months and then either reports delays or presents the work for testing only to find that the business requirements have changed. These methods generally falls under the umbrella term "Agile" and can deliver many benefits. You don't have to strictly follow any one particular Agile methodology to realise the gains, the processes used should be agreed within the development team and adapted for the particular business.

There are many other subjects that I could talk about here but I will leave that to my blog posts.