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.
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.
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.
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.
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 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 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.
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.