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