A Shed Base Doesn't Have a Retro
I spent two days pouring a concrete shed base and felt more accomplished than months of software work. Turns out completion hits different when you can stand on it.
Software engineer writing about web development, databases, and technology.
I spent two days pouring a concrete shed base and felt more accomplished than months of software work. Turns out completion hits different when you can stand on it.
Why I built my blog with Fastify, SQLite, and server-rendered templates instead of Next.js and Postgres. The stack, the trade-offs, and why boring tech won.
Who would you invite to your dream dinner party? Seat anyone in history and let the world vote on your lineup. Build yours free at Dream Dinner Party.
How to configure 1Password to manage SSH keys and prompt you to approve SSH connections on macOS.
A personal coffee journey that began in 2012, from Aeropress to espresso, and why making coffee at home now beats cafes almost every time.
Tailwind CSS is a huge open source success, but its business model has limits. A look at layoffs, AI, and why adoption does not equal leverage.
A short review of the FlexiSpot E7 Pro standing desk, covering its sturdy C-frame design, built-in USB-C port, effective cable management, and clear, well-designed assembly instructions.
I built a Home Assistant card that pulls in my local bin collection schedule so I always know which bin needs to go out each week.
Learn how the HTML5 form attribute lets inputs and buttons work outside a element, with clear examples and use cases.
A practical breakdown of creating a Pinterest-style grid layout using a greedy algorithm, with real implementation details.
An introduction to Hugo, the fast static site generator, including setup, concepts, and when it’s a good choice.
Why I avoid a particular React pattern, what the "noop anti-pattern" is, and how to simplify component logic.
A simple Git alias that helps you list and switch to recent branches faster, with setup instructions.
Key principles and practices for creating form validation that’s both user-friendly and robust.
Reflections on goal setting, running a marathon, and staying consistent with learning and personal projects.
Notes and tips from my talk on improving form usability and developer experience.
Practical examples and tips for using reduce effectively in JavaScript.
A simple Git stash workflow that keeps your changes safe and easy to restore.
A roundup of useful Chrome DevTools features and shortcuts for frontend developers.
Why clear communication and empathy matter in software teams — beyond just writing code.
My take on common myths about working from home and what really matters for productivity.
A quick Bash example for batch renaming files across nested directories.
Practical advice on crafting a well-rounded CV for frontend developer job applications.
How to export Rails routes into JavaScript to simplify URL handling client-side.
A list of books I read in 2016 with brief thoughts and recommendations.
My personal picks for the best books I read in 2015 and why they stood out.
Tips for stubbing AngularJS $window in tests to make them more reliable.
A look at why tech conferences often prioritise inspirational talks over practical content, and what attendees actually want to learn.
My renewed thoughts on CoffeeScript, its pros and cons, and whether it’s worth learning.
Notes and takeaways from attending the Scotland.js conference.
My first thoughts and early impressions after switching from iOS to Android.
A recap of attending JavaScript North East and what I learned there.
Highlights and insights from the jQuery UK conference I attended.
A small Bash script that reads image dimensions with ImageMagick and outputs ready-to-paste CSS background shorthand to the clipboard.
Exploring a jQuery API inconsistency where pseudo-selectors like :search throw errors but attribute selectors work perfectly fine.
How I built a Ruby gem around an HTML5 validation service to automate HTML checking.
A pure CSS3 iPhone-style toggle checkbox using the :checked pseudo-selector and sprite transitions — no JavaScript required.
My experience with CoffeeScript and when (or if) it makes sense to use it.
Building my first Ruby gem — a simple wrapper around the Cineworld API for retrieving cinema listings, films, and showtimes.
Why I prefer Haml templating in Rails and how it improves clarity and productivity.
Open-sourcing the Nearest Cineworld web app — built with a custom Ruby gem, HAML templates, the 960gs grid, and Rake-driven cron tasks.
A web app using HTML5 geolocation and the Cineworld API to find your closest cinema and browse showtimes with TMDb film data.
A curated list of ten essential Ruby gems for web development, from Devise and CanCan to Formtastic and Thinking Sphinx.
A quick bash prompt tweak that displays your current Git branch, helping you avoid committing and pushing from the wrong branch.
A date parsing gotcha between Ruby 1.8.7 and 1.9.2 where the same date string is interpreted with swapped month and day values.
A critical look at Gowalla after months of use — questioning whether location-based social services offer any real value in return.
Fixing a ym4r plugin bug in Rails where multiple domain configs caused Google Maps API key lookups to fail on deployment.
A simple Nginx config snippet to redirect www to non-www domain.
Using jQuery's queue function to run AJAX requests sequentially without blocking the browser, a better alternative to async false.
A short reminder that excitement about new tools is a poor indicator of their production readiness — experiment and ship are different things.