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