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