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