Writing on software engineering, technology, and random errata.

An erratic grab-bag of articles, code samples, and random things which caught my attention.

Serverless caching and proxying with Cloudflare Workers

Using Cloudflare Workers we can quickly build an effective API proxy, without spinning up any additional hardware. Whether its needing a CORS proxy, speeding up slow APIs via caching, or rate limit management on stingy APIs, this serverless tech is as easy to set up as it is powerful.

Using Google Sheets as a RESTful JSON API

Save time by not building backends for simple CRUD apps. Use Google Sheets as both a free backend and JSON API endpoint!

International PHP Conference, Munich 2024

In November 2024, I spoke at IPC Munich about how backend developers can improve front end speed. There were fantastic talks at the conference, in a wonderful city worth a visit!

Persistent WiFi failure on Ubuntu 24.04

Updates to Ubuntu 24.04 led to regular loss of wifi connection, often requiring a hard reboot. As ever with Ubuntu, there are about 3,928 possible solutions to any given problem. Here's the path which ultimately worked for me!

PHPers Summit 2024

In June 2024, I had the pleasure of speaking at the PHPers Summit, in Poznan, Poland. My talk was about the quick wins available for backend developers who need to improve front end page speed.

Slack Mobile Problems After Enabling 2FA

Two Factor Authentication is an important method for ensuring account security. When I added it to my work Slack account, the mobile app refused to let me back into my workspace. Fortunately, there's a fix, though it does involve jumping through a few hoops!

Idempotency - what is it, and how can it help our Laravel APIs?

Idempotency is a critical concept to be aware of when building robust APIs, and is baked into the SDKs of companies like Stripe, Paypal, Shopify, and Amazon. But what exactly is idempotency? And how can we easily add support for it to our Laravel APIs?

Navigating the Shift from Developer to Leader - Decrypt Podcast Round-up

I recently appeared on Evervault's Decrypt podcast, and had a great time! We talked about the importance of developing empathy for users, product roadmap challenges, issues adding AI to dev workflows, and managing the transition from a development role to a leadership one.

A/B testing your content on social media

Discover how to effectively A/B test content on social media, even with the challenge of link preview caching. Boost engagement with the right headline and image combinations.

Calculating rolling averages with Laravel Collections

Rolling averages are perfect for smoothing out time-series data, helping you to gain insight from noisy graphs and tables. This new package adds first-class support to Laravel Collections for rolling average calculation.

Lazy loading background images to improve load time performance

Lazy loading of images helps to radically speed up initial page load. Rich site designs often call for background images, which can't be lazily loaded in the same way. How can we keep our designs, while optimising for a fast initial load?

Attack of the clones - removing copied websites from the internet

It's an increasingly-common experience for online publishers to discover that their content has been stolen wholesale, and posted on a different domain without permission. What can you do if this happens to your site?

Embedding Google Drive videos

Google drive is a handy place to store videos. Often those videos need to be shared and embedded elsewhere, but finding the embed code for these videos isn't nearly as simple as with Youtube or Vimeo!

Font Subsetting - shrink down font files to speed up page loads

Fonts are one of the largest resources on any page after images, and can have a big impact on CLS when they vary in size from the underlying system font. Font subsetting allows us to radically shrink font file sizes, speed up initial page loads, and improve our page speed scores.

First World Cup - Celebrations Cut Short

Back in 1990, Ireland qualified for the men's football World Cup for the first time. It was a very exciting time for the whole country, though as an eight year old I wasn't quite up to speed on the finer details of why...

Minimising Cumulative Layout Shift (CLS) When Loading Responsive Ads

Responsive ads are a great way to maximise publisher revenue from display ads. Not knowing the size of the ad to be served in advance can have a big impact on Cumulative Layout Shift (CLS), and, ultimately, Google rankings. How do we maximise revenue while minimising CLS impact?

Avoiding The Google Ads Two-Click Penalty

Google's Two-Click Penalty is intended to protect users and advertisers from accidental clicks on ads. When does Google apply the penalty, and how can we avoid it impacting our sites?

Improving Page Speed - Optimising for Core Web Vitals

Core Web Vitals are a series of metrics which attempt to put an objective measure on web page performance. They cover the speed of site loading, the way the page jumps around while loading assets, and how quickly a page can be used by a visitor. In short, they attempt to quantify how fast a page "feels". These metrics will be used in the Google rankings for a page, so what are the common optimisations we can make to ensure our pages score well?

Toolbar colour customisation in Chrome with theme-color

With the release of Android Lollipop, the way that Chrome manages tabs was changed. When the task switcher is activated, each tab shows separately, almost like a new app. How do you ensure your website stands out here? Fortunately with the release of Chrome 39, there is a way – you can now customise the toolbar colour with just one line of HTML, the theme-color meta tag!

Internet connection problems with eircom efibre fixed

Eircom's eFibre product is their fastest home broadband offering, promising speeds of up to 100mb. The connection speeds are generally quite good, being capable of handling TV, Netflix and a handful of other connected devices all at once without any real issue on the speed. However the one black mark against the service would be the intermittent issues with the eircom DNS servers. This can often cause internet connection problems, where the net connection shows as active but nothing loads. Frustrating!

Jumping off the waterfall - lessons learned from an agile transition

At the Dublin leg of the 2014 Agile Tour, I gave a talk based on my experience leading a team's agile transition from a classic waterfall approach. When preparing our move to agile, I found it fairly easy to find the success stories from other company's transitions. However, during our transition, we hit some rocky patches along the way, often making us question the whole transition. So for my talk I focused a little more on the things that went awry for us along the journey – what can happen when a number of smart people make what look like sensible, low-risk calls which turn out to be neither!

Picture perfect – useful code visualisation tools

One of the nice things about using git for version control is the amount of data it stores during development. Git log is a powerful tool for finding out what’s been going on in your project, all via a simple text-based interface. But if Jack Nicholson has taught us nothing else, it’s that all work and no play makes Jack a dull boy. So we took a look at some of the more fun and interesting ways of generating code visualisations – GwitLog, Gource and Christmas Commits.

Mailcatcher, Vagrant & Laravel: Email testing made easy

When doing any sort of non-trivial development, sooner or later you’ll likely end up having to send emails from your application. Email is a key part of many application for things like event notifications or user account verification. Testing that the right mails get sent at the right times can often be more hassle than it really should be. Fortunately, a tool called Mailcatcher exists to make this process much easier.

Encoding a euro symbol in email subject lines

Character encoding in PHP can be fun at the best of times. Trying to send a non-ASCII character in a html email – a euro symbol, for example – can be just such one of those times.

Mysqldump syntax error fixed

Recently I needed to move a database I had running in RDS to a machine on a new digitalocean account. Usually a fairly simple process, the first step of which is to export the database using mysqldump. But when I ran the command locally, I got an unusual error - "Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1':You have an error in your SQL syntax"

CSS & Javascript truncated by nginx

On several recent projects I’ve been using VirtualBox and Vagrant to spin up new development machines. My code was mounted from a windows host, and initially all was going well. Then suddenly my app started spitting out javascript errors. Digging in to chrome’s error console, it looked like the last 40 or 50 bytes of the file were missing. Same for the CSS files. A frustrating investigation had begun...

Symlink shenanigans - node.js, npm, express and vagrant

Recently I was working on a new project on a virtual box set up through vagrant. For those of you who haven't used it, vagrant is an amazing tool that makes it crazy-easy to set up and deploy uniform development environments on virtual servers. However, I ran in to a very frustrating issue when trying to install the node.js framework express through npm.

Share and share alike – Facebook Tags and Twitter Cards

Topical pages like the Property Tax Calculator tend to get shared more often on social networks, so we took a few small steps to ensure that the page looked it’s best when it shows up in a twitter timeline or Facebook feed

The Daft.ie Property Tax Calculator – how does it work?

Last week we launched a Property Tax Calculator on Daft.ie. This calculates the Local Property Tax (LPT) due to be paid when the new tax scheme starts in July 2013. So, where did the idea come from, and how does it work?

Will valid markup now help your Google ranking?

Google recently published a list of 30 updates made to search over the tail end of 2011. Tucked away in the middle of the list is mention of improved support for rich snippets. However it looks like google has also been testing out ways of extracting structured data from pages which have no defined snippet and contain multiple items – starting with real estate classifieds. What’s equally interesting here is that it seems having clear and valid markup may have an extra impact on your site’s appearance in the Google results and number of visitors clicking through!

Geeks on the run

We’ve decided that in running the half marathon that we’d like to try and raise money for the Mark Pollock Trust, which is where you hopefully come in…

What's the best time to renew an ad on Daft.ie?

Daft.ie is Ireland's largest property portal. After listing an advertisement, it can be "renewed", confirming continued availability, and pushing the ad back towards the top of the rankings. As ads can only be renewed once a day, a question we often get asked is "what's the best time to renew my ad in order to get maximum exposure?" Great question! Let's figure it out by taking a look at the time ad replies are sent through the site.

Bookmarklets – a quick introduction!

Bookmarklets allow us as a user to add some basic functionality to a web site from our browser, without needing to have access to that site’s server. Once the bookmarklet is clicked, whatever javascript it contains will execute on the current page.

DeCluttering Twitter, Part Deux

Twitter recently launched “Hovercards” on the web interface. Whenever I move my mouse up, down or across my timeline, these hovercards are springing up and obscuring other tweets in the timeline. Personally, I’ve been finding this feature far more annoying than useful, so would like to turn it off. Let's try this with a bookmarklet.

DeClutter Twitter

DeClutter is a javascript bookmarklet which will remove from your timeline any tweets which match a “blacklist” of keywords you’ve defined.