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