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