Rails surprisingly executes DELETE on build_association

It was all the seemingly innocuous build_#{name}

Searching Discontinuous Dates in Elasticsearch using Lucene Expression Script

Elasticsearch is powerful, but very different to SQL and its scripting capabilities are limited in cloud hosting environments. This makes it appear impossible to use for certain sum of script and threshold queries—for example on discontinuous date ranges—but with some clever query structuring this can be done.

Designing a Font with Code

Years ago I started using a very simple SG made up of lines as my "logo". I evolved this over time and thought it would be even better if I had a whole font in the style of it. So here's how I created my personal font with code and refined my logo in the process.

why Ruby Symbol​#to_proc works, and more.()

Lets embark on a _why themed quest through Ruby's magical Symbol#to_proc. We will slay syntax dragons by deflating politicians, battle understanding with chrysanthemums, and journey further to cook up some funky fresh fish.

Case Insensitive Usernames with PostgreSQL citext

It's polite to refer to people by capitalising the first letter of their name (Joe Blogs). I think web apps should allow capitals in their usernames (JoeBlogs) too.

Enhancing Web UX Design Consistency with Sniffux

Which sides should I put my Cancel and OK buttons on? This is a question of the honourable subject, USER EXPERIENCE. Read on to find out that the answer is neither and both!

Web Summit London 2013

A few days before the actual event, I heard about London Web Summit (LWS) and a student ticket giveaway they were running. I applied for a free ticket – giving a brief reason for why I wanted one – and a day or so later I got an email saying I'd been selected for one. I was pretty ecstatic, especially considering the usual price of tickets, and the size & reach of the event.

Houston we Have a Blog

I really hate these "first post" posts, yet here I am writing one. So without further ado, I decided to start a blog, and this is my first post. Lets get it over with…