kevin.break_ice! # =>

Hi, I'm Kevin McKelvin

I'm a software developer, gamer, speaker, blogger and open source contributor. I'm CTO with the talented team at Resource Guru in London, UK where we build the best team scheduling tool on the web :)



I enjoy sharing knowledge through my writing. Often it's about software and development. Sometimes it's about gaming. Other times it's just my opinion on things. Here are some of my most recent entries:

ActiveRecord Callbacks and the Single Responsibility Principle

I've often toyed with the idea of writing a post titled "ActiveRecord callbacks considered harmful", but always catch myself when I consider that the ActiveRecord default that sets the `created_at` and `updated_at` fields on a row before saving it is incredibly useful. It fascinates me that the same tool that allows us to intuitively trust that our timestamps are correct can also cause some of the most frustrating and time wasting debugging sessions a Ruby developer will ever encounter.


Go 1.6 Released!

Coming in at around 6 months after Go 1.5’s release, Go 1.6 is an incremental release that mostly brings updates to the core library. It brings a few updates to the Cgo toolchain and some improvements to the parity between the GCC and Cgo tools. The good news is that the release maintains Go 1 compatibility so your code _should_ just compile right away with Go 1.6’s goodness.

The highlight of the release has to be the out-of-the-box automatic support for HTTP/2 servers and clients. If you’re communicating over HTTPS, then Go’s standard library HTTP servers and clients will automatically connect over HTTP/2 if it’s appropriate.


Rubyfuza 2016

The 2016 installation of the Rubyfuza conference ran over 4-5 February 2016 at the President Hotel in Cape Town. Rubyfuza is Africa’s premier Ruby conference and is always one of the highlights of my year.

The President Hotel is the second venue change in as many years. It was a fantastic venue for a conference with the Truth Coffee stand (thanks Hetzner!) and hotel restaurant & pool being in really close proximity. It’s also the first year I’ve booked in at the conference hotel and it really makes logistics a heck of a lot easier. There’s a pro-tip in there!


ActiveRecord and Uniqueness

The uniqueness validation in ActiveRecord is a lie as soon as you have more than one app
server process (or thread) running.

It performs a SQL select to ensure that no other records with the same value appear
in the database before marking the record as valid. However...


Recurring Tasks with Sidetiq

Software often relies on recurring scheduled tasks in order to function. From status checks, to billing runs, the UNIX cron daemon has regularly been trusted with this responsibility for decades now. Cron has performed the job admirably and we've managed to build some really interesting tools to manage our crontabs. Whenever is a really good example of building a Ruby DSL over cron.

Sidetiq is an addon to Sidekiq that allows for recurring jobs to be declared.



I was introduced to a Chrome extension yesterday by Kenneth Kalmer that's completely changed my Github experience. Introducing Octotree, a sidebar for Github that shows a repository's code in a tree structure.

You can download the extension by going to Octotree on the Chrome Web Store


Renaming items in a Ruby Hash

This is a pretty neat snippet of Ruby that I found to rename a key in a Ruby hash.

hash[:new_key] = hash.delete(:old_key)


Configuration in the environment with dotenv

Security's one of the most easily overlooked risks when developing software. The Rails community has recently had another dispute about the best way of storing access credentials to 3rd party services. According to the 12Factor app manifesto, configuration should be stored in the environment. This is where the dotenv gem becomes useful.



I tend to tinker with code pretty regularly. A lot of my code is open source and available on Github. Here's the highlights reel:


An extension for Entity Framework that allows Rails ActiveRecord style hooks to be applied to Entity Framework in a strongly typed manner.


The Rails app that powers this site

I'm a regular panelist on the weekly ZADevChat Podcast where we discuss software development related topics with the South African developer community.



I have no upcoming speaking engagements.

Past Presentations
To Ruby and beyond, the journey of a polyglot developer - DeveloperUG PTA (16 Mar 2016)
Going Native - C and Rust interop with Ruby - Rubyfuza 2016 (5 Feb 2016)
Ambitious Web Apps with Ember.js - JSinSA 2014 (31 May 2014)
Clean Code: Applying Object Oriented Practices - Rubyfuza 2014 (7 Feb 2014)
Resource Guru - Backbone.js Edition - JSinSA 2013 (29 Jun 2013)
Designing for Testability - Ruby on Beer Johannesburg (3 Apr 2013)
Applying RSpec Best Practices - Rubyfuza 2013 (7 Feb 2013)
jQuery PJAX - Devs4Devs Jo'burg (13 Aug 2011)
Introducing NHibernate 3 - Devs4Devs Jo'burg (4 Sep 2010)