I hope you enjoy some of these articles – I've split them up into some categories and uncategorised stuff sits at the bottom.

Latest Posts

Please enjoy my three latest posts


If you only care about a particular subset of what I write about, you may enjoy digging into one or more of these categories.


If you just want a list of everything, here it is!

  1. Quick and Easy CSS Minification Using Atom
  2. Adding Author to Jekyll Posts
  3. Testing Absinthe with ExUnit
  4. How to add content grouping for Google Analytics in Jekyll
  5. How to change the column type with Rails migrate
  6. Jeremy Keith Interview
  7. JavaScript 30 Review
  8. Could charities open source their websites?
  9. Andy Croll Interview
  10. Live Dictation Review
  11. Orphans and Widows in CSS
  12. How to get spoken to at conferences
  13. Andreas Jung Interview
  14. Interview with Håkon Wium Lie
  15. When to include irb in Ruby 2.4.0
  16. The Settlers Packaging
  17. BuzzSumo Review
  18. How I Started a UK Business
  19. Working whenever you want is amazing and has some unique challenges
  20. ActiveJob Vs ApplicationJob
  21. Doubling Down on Recurring Revenue
  22. Some stats from frontend focus
  23. Removing Kadira from Meteor
  24. My first thoughts of Alexa
  25. What I’ve learned from looking through my old posts
  26. A guide to writing up conference talks
  27. Reducing Image Size for better page load times
  28. Eric Brantner Freelancing Interview
  29. Removing AMP pages from your Jekyll Sitemap
  30. Remote Interim CTO
  31. Ruby Contractor London
  32. Daniel Miller Freelancing Interview
  33. London Interim CTO
  34. Getting OS X to trust self-signed SSL certificates
  35. Banks Getting My Name Wrong
  36. Why Centralise Email Functionality
  37. Judson Lester Freelancing Interview
  38. Tom Hirst Freelancing Interview
  39. Conor O'Neill Freelancing Interview
  40. Najaf Ali Freelancing Interview
  41. Gina Charles Freelancing Interview
  42. Freelancer Interviews
  43. Owning the conversation about your company
  44. Going Freelance
  45. How I try and accelerate my learning
  46. Spring and Foreman complaining about secret_key not being set
  47. API
  48. What to do if your employee is worried about team culture and their depression
  49. Rust
  50. Slack Shortcuts
  51. LRUG July 2016
  52. Brighton Ruby 2016
  53. AWS Summit
  54. Lead Developer Conference Reading List
  55. Some notes on my last Out of Office message
  56. Captioning at Conferences
  57. Code Review
  58. Nginx Cache Busting Rewrite Rule
  59. List of Countries without a Postcode
  60. Fixing No Default Alternative Specified error in rails
  61. GitKraken Review
  62. Posting to Slack with PHP
  63. Quickly tidy up old git branches
  64. Tracking AdWords Conversions within JavaScript
  65. Fueling Hyper Growth – A Salesforce Event
  66. Close proximity leads to ideas being shared too soon
  67. Instagram Vintage Computing
  68. Complete list of custom icon properties for Bootstrap 3 Datepicker
  69. Getting access to Channel 13 on a Raspberry Pi 3
  70. My takeaways from the Productive Habits email course
  71. Basic intro to Reddit and Hacker News
  72. Open iTerm2 links in Vim
  73. Fix for OpenSSL::SSL::SSLError on RestForce / Faraday
  74. S3
  75. What to do when things go wrong
  76. The EU Cookie Law
  77. Using Slack as part of the GTD capture stage
  78. Recursion
  79. Introducing Simple CS
  80. CSS
  81. Stopping your wireless from turning off on your Raspberry PI
  82. Loading a specific file into Dotenv
  83. Now
  84. Steps for replacing an SSL certificate
  85. See what disk space is left on your Linux web server
  86. Review Pibow Zero
  87. The SSH Command
  88. Grep flags that I like
  89. How to overcome thinking that no one will find your posts useful
  90. Viewing what is running on the server
  91. How does Capistrano work?
  92. Debriefing Development Teams
  93. Art & Math & Science, Oh My!
  94. Setting up Moat and DFP
  95. Omnifocus Custom Columns
  96. Notes from LRUG
  97. Pictures from LRUG Nov ‘15
  98. Safari Extensions I am using
  99. What I have learned about roadmaps
  100. Speeding up accessing Safari’s URL bar on El Capitan
  101. Meteor @dev was not detected
  102. The steps I take before a large backup on the Mac
  103. Setting up the Windows 200 Wired keyboard on the Mac
  104. Udemy Fail
  105. Adding Alt tags to images using image_tag in Rails
  106. Breathing new life into an older Mac
  107. Finding new people on Chatter
  108. Review: BubbleSort – How do Calculators Even
  109. What is a Gemfile
  110. Finding the List ID for the Marketo API
  111. Adding skip_after_filter to Rails Admin
  112. 6 Months in and bowing out
  113. Checking for both versions of Google Analytics with JavaScript
  114. Tracking Ctrl+F events in Google Analytics
  115. Key code for Command on OS X
  116. Join the Anthony Nolan Register
  117. Uploading files with Capybara in Rspec tests
  118. An experiment in highlighting words
  119. The difference between Render and Redirect in Rails
  120. Quality of your Input and Output
  121. Mastering Your Tools
  122. Mac Productivity Workshop
  123. The iPhone is my main content creation computer
  124. A simple guide to how computers work for idiot redditors
  125. Lets talk vasectomies
  126. Mac Apps I use to say productive
  127. Some of my favourite mac shortcuts
  128. Up the tracking speed on your mouse
  129. Hiding the dock for fun and profit
  130. What is a Proc?
  131. Raspberry Pi for Secret Agents
  132. Getting HTTP Status Codes from the Command Line
  133. Custom Routing of Github emails
  134. HTTP Status Codes for SEO
  135. iTerm2 Tricks
  136. Deleting Attachments with rails_admin
  137. Scrutiny5
  138. You can’t use the webcam on OS X without having a Photo Booth Library?!?!
  139. Never assume your wage is safe.
  140. Adding Descriptions to Pages with Jekyll
  141. iPhone photos not freeing up space when deleted
  142. Speeding up the internet on OSx Yosemite
  143. Come play Codewars with me
  144. What a Developer can take away from SEO Now 2015
  145. I love programming
  146. My first screencast
  147. Good Habits for Student Developers – Documentation
  148. Lightening Talk on Schema
  149. A Pragmatic Approach to adding Schema
  150. Updating a Slug on a live Rails System
  151. Katrina Owen – Here be Dragons
  152. Robert Wint – Using Content to Improve the Customer Journey
  153. Patrick Jubb – Re-building the Marketing Department to be Fit for the Future
  154. Martin Trickey – Do we Tell Stories Differently Now?
  155. Mark Elkins – From Passion to Purchase
  156. Kerensa Samanidis – Breaking in to the online video market
  157. Chief Digital Officer Summit London - Day 1 Morning
  158. Ana Serrano – Digital Transformation & Continuous Innovation
  159. Amanda Neylon – The Importance of Focusing on Social Strategy
  160. Ruby’s Partition for Enumerables
  161. Getting Money out of Uganda
  162. First week at Innovation Enterprise
  163. POODIR On Testing
  164. Good habits for student developers – Time Keeping
  165. Creating an iOS application in 5 minutes using Meteor.
  166. What to do when refactoring a large codebase without tests
  167. What I would look for in a junior developer
  168. How the technical direction of a project can be influenced
  169. New Website
  170. Innovation Enterprise
  171. Squash br inside contenteditable
  172. Good Habits for Student Developers - Backups
  173. Facebook's Anonymous Login
  174. CSS last-of-type as a fix for last-child in Ember applications
  175. Rails Migrations for Beginners
  176. Using Monodraw for fun tweets
  177. CreepedIn
  178. A beginners guide to ARIA
  179. Getting Rid of Vintage Belfast – Do you want it?
  180. Set Intersection in Ruby
  181. Please don't actually use Retweet and Favourite for polls on Twitter
  182. Hearthstone APIs
  183. My thoughts on the latest TechHubTuesday Demo Night
  184. Some useful resources for generating content ideas
  185. Divs still have their place
  186. My time at Buffer wasn't great
  187. Making an app in just over an hour with Meteor and Heroku
  188. My highlights from On the Shortness of Life by Seneca
  189. The correct way to markup an image and caption in HTML
  190. View Markdown Files in your Terminal
  191. Some stumbling blocks I hit following my first Swift tutorial
  192. Quick Semantic Wins
  193. Accessibility and SEO are tightly linked
  194. How I am using Omnifocus
  195. My Birthday Haul
  196. What the header element can be used for
  197. Review: A Web for Everyone: Designing Accessible User Experiences
  198. Gender Neutral Swear Words
  199. Every developer makes mistakes all the time
  200. Backblaze is part of a great backup solution
  201. A rough guide I am going to try and follow for blog posts
  202. Imagine your RAM was erroring
  203. 365 Articles in 2015
  204. Backup of Making Your Website Pay for Itself
  205. My Wedding Speech
  206. Review: Abraham Lincoln: Presidential Fuck Machine
  207. Some notes and links on websockets with rails
  208. Great content has no shelf life
  209. Please stop using features by testing for browser
  210. Kill off any process on a particular port - An explaination
  211. Space Invaders
  212. Nokogiri won't install? Check that you have accepted Xcode's EULA
  213. WhiteHat Aviator Phoning Home?
  214. Converting numbers to hex using to_s in Ruby
  215. Backing up an s3 bucket to another s3 bucket
  216. Force a CSV download from a WordPress Plugin
  217. Nav Elements, not just ul wrappers
  218. Marketing is More Important than Your Code
  219. The ways I have made Sites Pay for Themselves
  220. How Much Does Your Website Cost You?
  221. Review: PiFace Control and Display
  222. Review: Raspberry Pi Camera Board
  223. Running VimR From the Command Line
  224. VimR - A first look
  225. Turning off the PiFace Control and Display
  226. I fucked up
  227. Derek Johnson talking about Modern Web Design
  228. Tools I Use When Blogging
  229. Review: HTML5 Game Development Hotshot
  230. How many people should be on my email list before I send the first email?
  231. Review: Node.js Blueprints
  232. Review: Penetration Testing with the Bash Shell
  233. Kali Linux 32 bit mini ISO getting stuck on samba
  234. Advertising in China
  235. Get the name of a Ruby class
  236. Belfast Bloggers 3rd Meetup
  237. My face - on a stamp!
  238. Review: Raspberry Pi Server Essentials
  239. Review: Raspberry Pi Robotic Projects
  240. Packt Publishing
  241. Why thinking small helps create software that lasts.
  242. Removing Protected and Private from WordPress posts
  243. Copy and Rename multiple files in Linux
  244. The worst thing you can do for your productivity
  245. Resources for making your website pay for itself.
  246. Not able to cd or ls into drive mounted by s3fs
  247. What App.reset() does in Ember
  248. Using Ember's App.reset() to kill off any local data
  249. The Tim Ferriss Show might be the most important podcast I listen to
  250. Quitting Postgres psql
  251. The safest way to track goal URLs in Google Analytics
  252. Research has shown a case for closing down Vim for a while.
  253. Setting to change to get notified of all interactions on Twitter
  254. Disable a button component with Ember
  255. Using JavaScript's debugger statement with Firefox
  256. Review: Raspberry Pi Projects for Kids
  257. Setting I changed to up my Chromebook's internet speed
  258. Review: Understanding the 4 Rules of Simple Design
  259. Programmatically finding out the size of the retry queue with Sidekiq
  260. Problems with Evergreen Content
  261. My Chromecast Setup
  262. Making Tech for the sake of Tech isn't always right, but it is necessary
  263. Using Ruby to get access to Google Keywords
  264. Font Faces for Dyslexic Folk
  265. David Stewart of Marketing Digital Solutions thinks it is OK to creep on females on LinkedIn
  266. Review: Backbone.js Patterns and Best Practice
  267. Generating migrations with couchrest_model
  268. CouchRest Rails Setup - Setting a blank username/password is not the same as not setting a username/password
  269. An introduction to Ruby/Rails/Git - Belfast Ruby
  270. When testing the datasift ruby gem locally be sure to turn SSL off
  271. Review: Work - How to find joy and meaning in each hour of the day
  272. Things I do not love
  273. What tools / technologies / ideas / principles / things I am most passionate about
  274. Who is Marvel's Mightiest Hero? (I will give you a clue - it is Beast)
  275. A case for writing unit tests for your blog posts
  276. Hacker News follow up post
  277. Some HipChat Tips and Tricks
  278. CodeIgniter - when to use get_instance()
  279. Resources for getting up to speed with Redis
  280. How to install the latest version of Redis on Ubuntu
  281. My first week at Buffer
  282. I get very ill if I mix Citalopram and Green Tea
  283. Newbie Programming Resources
  284. Open a file in Github from your command line
  285. Values returned to ActiveMerchant by SagePayGateway during 3d secure
  286. Soon I will be joining the Buffer team!
  287. Some Interview Tips for Junior Developers
  288. You should serve up assets without a protocol
  289. Review: Whitehat Aviator
  290. Things to remember to do before any video conference / online call
  291. Keep your CV fresh
  292. Looking for Bootstrap's popover-inner?
  293. Good things happen to those that blog
  294. GitGutter – A Sublime Text plugin for seeing changes in git
  295. Indenting Text using Vim
  296. Copy and Paste in Vim
  297. Belfast Ruby: Talks on Elixir, Tmux and Jekyll
  298. A quick post about depression and software development
  299. Interview with Trevor Orsztynowicz about Caliper
  300. Show off your Localhost with LocalTunnel
  301. Using Devise to verify an email address and password
  302. navigator.mozApps.installPackage will no longer work use navigator.mozApps.install
  303. Barry Gordon talks about Vagrant - Belfast Ruby
  304. Accessing Popover Data with Bootstrap 3
  305. Right clicking inside Linux on your Chromebook
  306. Getting Debian to recognise your UK Chromebook
  307. Automation is a lot like your windscreen wipers
  308. Upgrading from Bootstrap's Typeahead to Typeahead.js
  309. A fix for window.location.origin in Internet Explorer
  310. Transliteration with Typeahead.js
  311. Typeahead.js The Book!
  312. Setting a minimum length for your search in Typeahead.js
  313. Cheap Belfast PHP/WordPress Hosting
  314. Getting the flot-rails gem to play nicely with IE8
  315. Refreshing local data with typeahead.js
  316. Rspec's be_an_instance_of is pretty useful
  317. If someone does something really sucky, hit them in the Twitter
  318. Passing a day of the week into Ruby's Date.parse
  319. Some things I have learned about Ruby's fetch method
  320. Nobody Will Train You But You - A talk by Zach Briggs
  321. The quickest way to get from nothing to Ruby and Rails
  322. Getting rid of annoying text selection at the bottom of Sublime Text documents
  323. Some useful Github shortcuts
  324. Deploying a particular branch to Engine Yard from the command line
  325. Killing all instances of Ruby on Rails running on a certain port.
  326. Bad example of how to do unsubscribe pages.
  327. Using Loops in Jasmine
  328. Useful Chrome Extension for Backbone.js Debugging
  329. Insane Chown Posse
  330. Stacking the founder chips in your favour.
  331. Internet Explorer Version 999.1
  332. MySQLslap - A quickstart guide
  333. Unboxing the Firefox OS Developer Preview Phone
  334. Review: jQuery HotShot
  335. Location, Location, Location
  336. Web Developer Equipment
  337. BornInBlood
  338. Controlling a jQuery datepicker with Watir
  339. Using Dropdowns in Watir Webdriver
  340. Write simple rspec tests on one line for fun and profit
  341. Using Bootstrap's typeahead from inside a modal window
  342. Stack Exchange is winning the internet and this is not a good thing
  343. Adding Data Attributes using haml_tag
  344. Sublime Text reading SASS files as HAML
  345. Getting the rmagick 2.12.2 gem working on Mac OS X
  346. Safari on Windows doesn't like outline inside of :after
  347. Turn Off the built in apache on OSx
  348. Ruby Podcasts I have been recommended
  349. Review: Wunderlist
  350. My immediate impressions of the Samsung Chromebook
  351. Firefox honours !important in CSS animations, no one else seems to
  352. Speculation on why Google stopped blocking sites
  353. Review: Mastering Redmine
  354. Good Surge Protecting Power Blocks
  355. Open all your browsers at once in OSx
  356. Link Dump of everything that was in my Google Reader
  357. Validation Helpers
  358. Different ways to undo in Git
  359. Some Notes on SSL Certificates
  360. Big Wet Fish Get Marketing
  361. Some command line tips for the web developer
  362. Insert Gists without JavaScript
  363. How to turn on invisible characters in Sublime Text 2
  364. Update your Git install
  365. Installing PEAR for PHP on OSx
  366. Google Translate tracking in Analytics
  367. Quick Tip for Reddit and Imgur and multiple sub-sections
  368. A checklist of things you will need to learn to make Firefox OS applications
  369. Using Mozilla's Mortar and App stub for bootstrapping Firefox OS apps
  370. Getting Firefox OS on your Android phone.
  371. If you store WordPress code on Github think about your wp-config.php
  372. Secure your Redmine install by patching Ruby on Rails
  373. Added some non-js social share buttons
  374. Using Stack Exchange to be better at what you do.
  375. A pragmatic approach to dealing with interruptions whilst you are developing
  376. Replacing Social Media Share Buttons with non-JavaScript counterparts
  377. Quick email tip if you need to clear out your inbox
  378. Editing remote files locally in OSx
  379. Finding email to delete if you are over quota in mail.app on OSx
  380. Git branches seem to be case insensitive
  381. Barry Adams SEO Talk About the Future of SEO at DigiExNI
  382. People who give a shit will always get my business
  383. Shopify Workshop
  384. Nobody Puts Baby In The Corner - Except Me.
  385. Changing the font-style of placeholder text CSS
  386. Every time you write non-standard or invalid code
  387. This Charmander is adorable
  388. Setting up Redmine from a blank Ubuntu install
  389. Commit Driven Development
  390. Finding out what version of Apache and PHP a webserver is running when you have little access
  391. Entering your email at the inbox is a bad idea
  392. Setting up Apache on OSx Mountain Lion
  393. Things about learning to drive I wish I knew when I was learning to program
  394. The trigger that gets hit when you get a positive Twitter ratio.
  395. CakePHP and htaccess caching funtimes
  396. Facebook - The optimal size for posting an image to a page wall
  397. What is the RAILS_GEM_VERSION
  398. Styling Scroll Bars
  399. Google should minify their 404 page
  400. An interview with Umut Muhaddisoglu from Uptime Robot
  401. How to search PayPal transactions by email address or name
  402. How I use MindNode to help craft blog posts
  403. What would you like to see more of on the web - a follow up with Zoe Bogner
  404. The EU Cookie Law website
  405. Review: CodeLobster
  406. What Meteor does when you install it
  407. A case for going agile
  408. Interview with Stephen Kinkaid from Big Wet Fish
  409. Copying a CakePHP Project from Linux to Windows
  410. PHP - Turn UK Date into US Date
  411. Review: The CSS3 Anthology
  412. Interview with Derek Johnson
  413. Things to check for in your htaccess file
  414. Hit Tail
  415. Chrome's Lord of the Rings Easter Egg
  416. Useful WordPress Links
  417. Printing on the web
  418. Validation in CakePHP 1.3
  419. Permissions issue with Iomega Home Media Network Drive
  420. Deleting Magento Session Files
  421. Reducing Google Contacts storage on Android devices
  422. My scribbled thoughts on Belfast Ruby's first meet up.
  423. CakePHP 2.0 Read Recursive
  424. CSS Vendor Prefixes - A potential use case
  425. Canonical and Base URLs
  426. What can The Girl With The Dragon Tattoo teach us about web design.
  427. Having FTP in your IDE is part of a broken model
  428. Ruby Fizz Buzz Solution
  429. Useful Web Developer Bookmarklets
  430. Too many posts about the same thing on your Twitter timeline?
  431. Updating PHP5.2 to PHP5.3 using apt-get
  432. Ruby Testing and Documenting best practice
  433. The Importance of First Contact
  434. Interview with Patrick McKenzie and Keith Perhac about their podcast
  435. Get rid of var $name in CakePHP
  436. Keeping on top of my to-do list.
  437. BuildConf is still being awesome even after the event.
  438. Kalzumeus Podcast
  439. Open Proposal: Companies - get your employees to answer questions on Stack Exchange
  440. A recipe for creating a great workshop
  441. Interview with Shiela Dixon
  442. Managing a Facebook development project.
  443. Testing if your domain is accessible from China
  444. Checking if a password field is present in Selenium.
  445. My first doodle in about 7 years.
  446. An open letter to EUKHost
  447. Trying to get a designer into a meeting...
  448. Less Than Vs Less Than or Equal To - which is more efficient?
  449. Magento Auto Install
  450. Netbeans Private Key Authorisation Problem
  451. MySQLTuner - An excellent free MySQL tool
  452. Google+ Invites
  453. [notice] cannot use a full URL in a 401 ErrorDocument directive --- ignoring!
  454. Accessing PHP variables from within JavaScript under WordPress
  455. What I would change about the Computer Science degree course
  456. IsTwitterUp? Nope
  457. The W3C have released Web Application Privacy Best Practices - What do we do with it?
  458. My Feelings On Adobe Edge
  459. Disqus showing bullets.
  460. Changing upload permissions in vsftpd
  461. Getting Netbeans Working with OS X Lion
  462. Settings up Netbeans to develop Android applications
  463. Soon I will be in the market for a new laptop.
  464. The importance of using the ellipsis character.
  465. New Challenges
  466. Using Git to create an archive of changed files.
  467. Enabling telnet in Windows 7
  468. Interview: What is your take on the rise of e-learning sites over a more traditional text-book or course based approach
  469. IE7 td colspan width 'issue'
  470. Uninstalling Lotus Notes Traveler from your Android Device
  471. Git command to show files changed in a commit
  472. The importance of supporting OWASP
  473. Edit an option of a select menu using jQuery
  474. Interview: What would you like to see more of on the web
  475. Netbeans Redmine Integration Version 0.1 released.
  476. Netbeans and Redmine Integration.
  477. Explaining Version Control (Git) in Simple Terms
  478. Yum not installing 7zip.
  479. Location of bookmarks.nsf on the mac.
  480. Speed up Lotus Notes on a Mac
  481. Got an article printed in the IEEE software journal.
  482. Getting my Dublin Core on
  483. Two excellent talks on Git
  484. Howto: Email A Support Request
  485. Getting the most out of StackExchange
  486. Quick way to switch between folders in the terminal
  487. Importing a backup file from another MS SQL machine.
  488. Possible issue when using parseInt function.
  489. PHP Security - General PHP setup Gotchas
  490. Finding your SQL Server Version
  491. MySQL snippet - Selecting from table a items that aren't in table b.
  492. PHP - Quick Is Not Set Replace
  493. Internet Explorer Cannot Open The Internet Site - Operation Aborted
  494. Allowing your own From header with sSMTP
  495. What you actually do when you untar something.
  496. Find out which version of Ubuntu I am on.
  497. Useful Git Links
  498. Using Open Source - Some Legal Considerations
  499. Robin Christopherson - Accessibility in Web Design
  500. Eoghan McCabe and Des Traynor - Sexy or Meaningful
  501. Skipfish - No such file or directory.
  502. Owen DeLong - Content Providers must lead the way to IPv6
  503. Martha Rotter - Too Much Information [University Session]
  504. Renier Lemmens - The future of Mobile Apps
  505. Simon Wardley - What is the cloud?
  506. Raffi Krikorian - How to use Geolocation in your web app
  507. Replace ereg with preg_match
  508. Clean up your variables
  509. PHP_DEBUG a very handy little constant
  510. Uptime Robot
  511. Editing Git Repository Descriptions
  512. Switching between full screen modes in PuTTY
  513. YayQuery
  514. InFrame - Dynamic iFrame creation with jQuery
  515. Exploring Built In Functions
  516. Mapping the inside of buildings.
  517. JavaScript KeyCodes
  518. Refresh Belfast - The State of Typography on the Web
  519. Webmasters - Clean out your links!
  520. Acronym and Abbreviation Tags
  521. Internet Explorer 8 Checkbox Issues
  522. About Pages - Are they totally necessary?
  523. Out of the box design