RSSAmplifier

Blog

Hello. I'm Dean Clatworthy

Recent content on Hello. I'm Dean Clatworthy

deanclatworthy.comRSS feed ↗49 posts

Latest posts

Things I love: sauna

A few weeks ago, in the middle of a difficult week, I realised I needed to step away for a while. I felt tense and had too much on my mind, so I set aside a couple of hours and went alone to a public sauna in Kallio. For the next two hours, I moved between the heat and the street outside. I would sit in the sauna, cool down, then return for another round, until something in me had settled. I had…

Things I love: coffee

I started drinking coffee because, one warm morning, I wanted to feel like someone who drank coffee. It was early summer in 2020. I was sitting on the balcony of our apartment in Helsinki, looking out at the trees. The morning was warm and unhurried, and for a moment I could have been on holiday. In my head, coffee belonged to that scene. I imagined a person sitting outside an apartment in Paris,…

About me

I’m Dean Clatworthy, a software architect and engineer based in Helsinki, Finland. I grew up in England and studied Computer Science, but most of what I know has come from the years spent designing, shipping and looking after real systems. I’ve been building for the web for more than two decades. My work stretches from cloud architecture and back-end services to the details of a front-end…

Integration isn't an evening class

I have lived in Finland for 16 years. When I arrived, I failed hard at learning the language. Classes were only available in the evenings. I would go from work straight to class, sacrificing the very things that make integration possible: friendships, hobbies, community. I was spending all my time learning a language in order to integrate, without having any time to actually integrate. There was…

The Joy of Programming

It’s 2026, and I’m writing this post without AI. That already feels like a confession. In the span of a year, AI has fundamentally changed how I work as a software engineer, architect, and consultant. We’ve gone from hallucination-prone Q&A toys to agents that can plan, debug, and implement features - largely on their own. This shift has led to many outcomes. I spend most of my time: Thinking…

Stream live BBC channels in HD using streamlink

Been trying to watch a live event on iPlayer in your browser only to have low quality streaming? It seems that the BBC iPlayer browser client doesn’t support above 480p. Fortunately there’s a solution. Install streamlink @ https://streamlink.github.io/install.html Install VLC player @ https://videolan.org Create an account on the BBC website and take note of your credentials. Create…

Running Crashplan on Ubuntu 18.10

Crashplan for Small Business is not supported (as of the time of writing) on any other Ubuntu version than 18.04 LTS. This appears to be related to an Electron/glibc issue which has long been fixed. Unfortunately Crashplan seem unwilling to upgrade their client.

Migrating Jekyll to Hugo - my experience

For those that haven’t yet heard about it Hugo is a lightning-fast, and powerful static generator built using golang. For the last couple of years I’ve used Jekyll to build this site, but even with this few pages & posts Jekyll takes between 5-10 seconds to generate my tiny site.

Contact

To get in touch, fill in the form below and I’ll get back to you. --> Your Email: Subject: Message: Submit Elsewhere Connect with me online. LinkedIn Professional profile ↗ X @deanclatworthy ↗

My Skills

On this page I’ll detail my areas of expertise. ☁️ Cloud I am an AWS Certified Solutions Architect - Associate and AWS Certified Cloud Practioner . 🤖 AI & agentic development I have hands-on experience using large language models (LLMs) through agent harnesses, with a comprehensive understanding of how to design and build effective, reusable agent skills and workflows. 🗄️ Back-end Node.js…

My writings

Portfolio of Dean Clatworthy

I have been developing websites now for over twenty years and had the pleasure of working with some wonderful people over the course of my career so far. I have worked with small businesses & large corporations on their online presence and helped them become more successful as an online entity. I have won numerous awards for my work and will try to highlight them below. Below are some of my most…

How to use native Symfony Validator translations in a Silex application

One of the problems I’ve encountered using the Symfony Translation component in Silex is that when using a fully qualified locale (e.g. en_GB vs en ) it doesn’t use the translations that come shipped with the Validation component.

How to set up Apache vhosts correctly on Debian Jessie 8

After spinning up a new server today at DigitalOcean and trying to set up a new vhost, I could not get the default Apache page to go away and load my vhost’s content.

OSX Yosemite upgrade guide for PHP developers

Yosemite upgrade guide v1.0 Apache Apache will break as it’s upgraded from v2.2 to v2.4. It will revert the /etc/apache/httpd.conf file. In this file you need to do a few things: Search for vhosts and uncomment the line: Include /private/etc/apache2/extra/httpd-vhosts.conf Also find the <Directory /> block and make sure it reads as follows: <Directory / > AllowOverride All Require all granted…

Using a self signed certificate with Cloudflare's Full SSL on nginx

Overview Cloudflare recently launched the biggest deployment of SSL in the history of the internet , and better yet they made it free. For users, it&rsquo;s as simple as flicking a switch, but there a few steps you should take to make it more secure. Cloudflare offers two levels of SSL on their free package: Flexible SSL - When a visitor visits your site the connection between them goes first…

Stopping mass-login attempts to WordPress using nginx

Rather than rehash all the information, let me point you in the direction of this great blog post: http://ethitter.com/2013/04/protecting-wp-login-in-nginx/ If you have problems with wp-login.php being downloaded to the user then your PHP configuration using this tutorial is wrong. See this article I wrote about it:…

Getting a twitter user's latest posts using API v1.1 and Guzzle (PHP)

I&rsquo;ll keep this brief. Install Guzzle however you wish, but I recommend using composer: { 'require' : { 'guzzle/guzzle' : '~3.1.1' } } Then use the following code: $twitter_client = new \Guzzle\Http\Client ( 'https://api.twitter.com/{version}' , array ( 'version' => '1.1' )); $twitter_client -> addSubscriber ( new \Guzzle\Plugin\Oauth\OauthPlugin ( array ( 'consumer_key' =>…

Facebook: The new giant of advertising?

Last week Facebook rolled out a new update that lets people tag what they&rsquo;re doing in their post or say how they are feeling. Users can say they are watching a movie or reading a book – amongst other things. What makes this different from before is that your status update is providing more structured data to Facebook about your activity.

Web fonts not loading in Firefox

I encountered a peculiar issue today regarding web fonts on firefox. On all browsers except Firefox the web fonts were loading correctly. I found multiple references suggesting that Firefox was picky with using quotes when referencing where the font file is hosted. However my findings were more interesting: Firefox does not support embedding webfont files from a different domain The good news is…

Ensuring facebook canvas applications work in IE8 / IE9 / IE10

Last week I deployed a new Facebook application into a production environment. Everything seemed to be working perfectly, but then I received a report that the application wasn&rsquo;t working correctly in IE8+. I narrowed down the problem, and then realised that sessions weren&rsquo;t working. It turns out IE8+ has a security policy that prevents iframes from setting cookies if the parent domain…

How to install different locales on a fresh debian installation

Simples: sudo dpkg-reconfigure locale This will load a GUI where you should select the new locales to install, then follow the onscreen instructions.

Silex Tip #1: How to quickly invalidate a form field in your controller

You should be using custom constraints to validate your form fields, however there are some use-cases where you need to quickly invalidate in a controller. To do this it&rsquo;s quite easy: $form -> get ( 'username' ) -> addError ( new \Symfony\Component\Form\FormError ( 'This email is already in use' ));

Crawling UTF-8 pages using the Symfony2 DomCrawler component

Just a small gotcha for anyone using Symfony2&rsquo;s DomCrawler component. The standard behaviour of the class (from the current docs) is: $crawler = new Crawler ( $html ); foreach ( $crawler as $domElement ) { print $domElement -> nodeName ; } However, this will assume the document is ISO-8859-1. If you want to crawl a UTF-8 page correctly do it like so: $crawler = new Crawler ; $crawler ->…

Intel X25-M SSD's don't work with Mac OSX 10.8.3

I&rsquo;m writing this informative post to try and help anyone who had the same problem as me. I upgraded to OSX 10.8.3, and after it restarted the machine the Apple logo and spinner was on screen for about a minute followed by a stop/forbidden/no entry symbol that looks like this:

Migrating from apache to nginx (wordpress edition)

Today I migrated my whole site from apache to nginx. The main reason for this being that nginx seems to handle load and use less memory on smaller boxes. It&rsquo;s also an opportunity for me to try something new. I&rsquo;ll cut straight to the chase. There&rsquo;s some great information already available . At the time of this writing though, both sets of instructions didn&rsquo;t work for me.…

Browse safely, and avoid drive-by attacks in Google Chrome

With the increased number of drive-by attacks happening lately, I decided to investigate how these attacks work and what can be done to prevent them.

How to avoid relying on github: mirror your repository

One of the things that recent github outages have highlighted is that although git is designed to be decentralized version control system, many people are not treating it that way. Rather than having multiple remotes, people push to the same place and generally rely too much on github. I&rsquo;ve seen people build their whole infrastructure around github, including deploy scripts for their sites…

Stop OSX saving SSH private key password

When logging in to a server via SSH using a private key with a password, OSX saves your password. The next time you try to login it will not prompt you for your password. To disable this behaviour simply run this command: launchctl unload -w /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist Hat tip to mr_dbr on reddit for this.

A bash alias to export a git repository to a zip file

I&rsquo;ll keep this short and sweet. This bash alias will allow you to export your git repo&rsquo;s master branch to a zip file. To use it: Make sure that your work is committed. Make sure you are in the root directory of your project. To make this script work run the following commands: echo alias gitpack = \' git archive --format zip --output download_ $( date +%d-%m-%Y-%H.%M ) .zip master \'…

A Photoshop PSD template for Twitter Bootstrap's responsive grid

Edit: This article is a little out-dated now, as Bootstrap is on version 3 featuring a completely different and fluid grid. It&rsquo;s still applicable if you are working with the older Bootstrap (up to version 2.3.2) One of the challenges I have faced when doing my front-end work is trying to communicate to designers who have not done too much responsive work with Bootstrap, how the grid works.…

How to remove WordPress admin & other pointless WordPress things from your Google Analytics

I have spent the last few hours taking a look at the Google Analytics for my blog and whilst doing so I realised that it&rsquo;s logging a lot of stuff that I don&rsquo;t need. This tutorial will allow you to exclude any traffic to your wordpress admin, or login script (that which you see before landing on the admin page) from your Google Analytics. Log into Google Analytics Click…

How to speed up your WordPress site by 200% in less than 5 minutes and save bandwidth

I&rsquo;ve been meaning to tweak my WordPress install for a while now. I&rsquo;ve been using the WP Super Cache plugin for about half a year, but I&rsquo;ve been unimpressed by the performance. Anyone who has spent time optimising a site will already know the basic following checklist (plenty of things left out): Minify and join CSS & Javascript files Load JS asynchronously at the bottom of the…

How to fix hanging gem install on a fresh OSX Lion install

I&rsquo;ve now tried to use gem install <package> on two fresh installs of OSX Lion on a Macbook Pro 13" 2011 and Macbook Pro 15" 2012. Both have suffered from the same issue of the gem installer hanging. This was my symptom. $ gem install cocoapods ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions into the /Library/Ruby/Gems/1.8 directory.</pre> The…

How to run Internet Explorer on a Mac (IE6, IE7, IE8, IE9, IE10, IE11)

Just a quick tip for anyone doing web development on macs, it&rsquo;s quite easy to get internet explorer running now with a brilliant tool created by Greg Thornton over at github. This essential automates the creation of the free Microsoft testing virtual machines for IE and builds them in to virtualbox. Make sure you install virtualbox first and then follow the instructions over at github:…

How to use responsive twitter bootstrap & masonry together

Getting twitter bootstrap&rsquo;s responsive layout and masonry to play alongside each other is pretty simple. Assuming you are not using the fluid container (container-fluid) here&rsquo;s the code: Javascript: $ ( document ). ready ( function () { $ ( '#posts' ). masonry ({ itemSelector : '.post' , isAnimated : true , columnWidth : function ( containerWidth ) { // do nothing for browsers with no…

Theming/styling error messages in Symfony 2

I spent a large portion of my day today trying to customize the HTML produced by Symfony 2 for form errors. The documentation has a section on how to do this, but for the life of me, I could not make it work. Here is a working, re-usable solution, with a brief explanation of the mistake I made at the end. In your SF2 bundle create a new file /Resources/views/Form/field_errors.html.twig :

Unique filenames when uploading using Zend_Filter_File_Rename (Zend Framework)

I came across a scenario today where I needed to ensure that files uploaded always had a unique name and wouldn&rsquo;t over-write a file which has the same name. ZF provides this facility but it&rsquo;s not particularly well documented and I had some troubles using a couple of examples I found across the web. Alas, here is the solution.

How to rip music from the hype machine

Occasionally on the Hype Machine , a song is linked to in an external blog that no longer exists or the path has changed. If the song works when clicking play on HM then there&rsquo;s a simple way to find out the URL and download it using Google Chrome as your browser.

A chrome extension to revert to the old-style facebook chat

Let it be known, that I&rsquo;m not a big fan of Facebook. I&rsquo;ve not put out a status update or uploaded a photo in over 6 months, but the value in the service lies with being able to message friends and family in a country that I no longer live. It&rsquo;s a great way of keeping in touch. I occasionally log on to the Facebook Chat to have conversations with friends, but recently to my…

Bad character encoding causing MySQL errors in PHP

Today at work I encountered a peculiar problem when working with some translations. I developed a system whereby we can send out translations to our translators and they&rsquo;ll fill in the blanks and send it back to use which is then imported. Part of this project involved coding a parser for a custom file format to send out to our translators. The benefit of this is it allowed me to validate…

Dynamic/Random Javascript values in Selenium IDE

One of the common questions I see from new users to Selenium is how to insert random values into a form. Well it turns out this is quite easy. Simply change your value to some javascript surrounded by some special syntax:

Useful GIT commands

I&rsquo;ll use this post as a personal reference for useful GIT commands as I find them. Hopefully they&rsquo;ll help you also. Scenario #1 You have accidentally made a few commits to a branch and you wish to undo them so they are identical to the origin. You&rsquo;ll probably see something like this when you run git status # On branch devel # Your branch is ahead of origin/devel by 2 commits.…

WordPress plugin deployment script (GIT to SVN)

Short Version: This script will allow you to manage your wordpress plugins in git, and deploy them to wordpress.org SVN. Long Version: Recently at work I was required to build a wordpress plugin. After trawling through the documentation to figure out what I needed to do, it became apparent that to get my plugin listed in the WordPress plugins directory I would be required to host the code in their…

Facebook privacy issue with tagged photos

Facebook has garnered a rather bad reputation over its privacy controls in recent months, but things are now beginning to stabilise. You can control the privacy of: Individual wall posts Almost all aspects of your profile (location, interests etc.) Individual photo albums Individual videos With the addition of friend lists it makes it fairly simple to filter content to certain people, as long as…

Jump In Camp video

Yuri just posted up the final video on twitter from the camp. Hopefully the pixelating issue will be fixed soon:

CSS grid layouts using HashGrid

Just a heads up to anyone who&rsquo;s planning on designing their next project using a grid. The folks over at Analog have created a nifty little tool called Hashgrid to overlay a grid over your web page like so: Installation is pretty simple but I ran into a couple of minor issues which hopefully can be remedied in a future version:

Hello world!

Welcome to my blog. Over the next few weeks, months, years (perhaps) I&rsquo;ll be posting useful articles on the subjects that interest me and will hopefully interest others. I may even post random musings or rants ;-)

Jump In Camp

(Thanks to Derick Rethans for the picture) Introductions I was lucky enough to be given the opportunity last week to attend JumpInCamp , a developers conference/workshop ran by Microsoft in the beautiful setting of Zurich. The brief was as follows As a participant you will spend four unforgettable and instructive days in the Panorama Resort & Spa Feusisberg , Switzerland – all-inclusive, for free.…