Fighting the Urge to Block your Delivery

Fighting the Urge to Block your Delivery

I'm by no means the first person to talk about this problem within our industry. But in the past year I've seen it happen more and more. Imagine this scenario, A company is working on releasing some software, and upon release the user finds a bug. The manager comes back and says: "We can't have any bugs in our software, what can we do to avoid this happening again?" So the team gets together and says: "We can reduce the number of bugs in the software by making sure all our changes are QA'd before going into…

Read More

Learning Ops Tooling, Part Four - Pulling and running the blog

Learning Ops Tooling, Part Four - Pulling and running the blog

Learning Ops Tooling, Part One - Vagrant Learning Ops Tooling, Part Two - Starting with Ansible Learning Ops Tooling, Part Three - More Ansible Learning Ops Tooling, Part Four - Pulling and running the blog Last time we looked at using Ansible to install the dependencies for the ghost blog engine. This time we are going to extend the playbook to install the actual engine. Pulling down the ghost and installing it You can get the lastest version of ghost as a zip file from the following location: https://ghost.org/zip/ghost-latest.zip And we can create an Ansible…

Read More

Destroying all your Vagrant Boxes

Destroying all your Vagrant Boxes

TLDR; for vb in `vagrant global-status | grep virtualbox | awk '{ print $1 }'` ; do vagrant destroy $vb ; done I've been playing around with Vagrant a lot recently and in doing so I've ended up with lots of unused vagrant boxes on my machine. I could go and delete them all individually but it seemed a good oppertunity to learn some scripting. Stage One - Finding all the Vagrant Boxes Vagrant has a command that allows you to list all the vagrant machines currently on your computer, vagrant global-status: $ vagrant global-status id name provider state directory ------------------------------------------------------------------------------- 1e4d043 acs virtualbox running…

Read More

Learning Ops Tooling, Part Three - More Ansible

Learning Ops Tooling, Part Three - More Ansible

Learning Ops Tooling, Part One - Vagrant Learning Ops Tooling, Part Two - Starting with Ansible Learning Ops Tooling, Part Three - More Ansible Learning Ops Tooling, Part Four - Pulling and running the blog In the last part we looked at setting up an Ansible inventory file and running a simple module against it using the command line. In this post I want to take things a bit further and define a playbook that will install all the pre-requisites for my blog engine, which by the way is Ghost. Defining a playbook file A playbook is Ansible's way of…

Read More

Learning Ops Tooling, Part Two - Starting with Ansible

Learning Ops Tooling, Part Two - Starting with Ansible

Learning Ops Tooling, Part One - Vagrant Learning Ops Tooling, Part Two - Starting with Ansible Learning Ops Tooling, Part Three - More Ansible Learning Ops Tooling, Part Four - Pulling and running the blog In my last post I talked about setting up a Vagrant script to create a VM in which to host my blog. The next step I want to discuss is how to install Ansible and, in turn, use that to pull down all the dependencies required to run the blog engine. Ansible is another tool from Hashicorp that is designed to let you automate the…

Read More

Learning Ops Tooling, Part One - Vagrant

Learning Ops Tooling, Part One - Vagrant

Learning Ops Tooling, Part One - Vagrant Learning Ops Tooling, Part Two - Starting with Ansible Learning Ops Tooling, Part Three - More Ansible Learning Ops Tooling, Part Four - Pulling and running the blog I've been wanting to explore the world of "infrastructure as code", or IaC, for a while now but for one reason or another I just haven't had time (probably due to having a child to look after). Not wanting to let this go on any longer I've decided I need to make time to look into what tools are available and how to…

Read More

Command Handlers

The command pattern is one of the patterns defined in the gang of four's behavioural patterns but I rarely see it get much use. The idea behind the pattern is to encapsulate all of the information required to execute an action within a single object or class: public interface ICommand { void Execute(); } public class AdmitPatient : ICommand { string firstname; string surname; public AdmitPatient(string firstname, string surname) { this.firstname = firstname; this.surname = surname; } public void Execute() { // do something here } } Now the reason I want to highlight this pattern is because of something I've been seeing in a lot software projects. That's…

Read More

Escaping the Big Ball of Mud Talk

Earlier this year I was invited to give a talk at NDC Oslo. My chosen subject was the "the big ball of mud" where I go into a number of ideas and patterns to help keep your code base clean and free for extension. Here it is Escaping the Big Ball of Mud - Mathew McLoughlin from NDC Conferences on Vimeo.…

Read More