All Posts

The Modern CTO podcast

September 17, 2020

Is training a neural network like forming a habit?

July 05, 2020

A referendum on metrics we care about as a society

June 22, 2020

Being fixated on planning at the moment, the truism of how important it is to carefully pick the metrics by which you define success lingers in the back of my mind. You get what you measure It strikes me that the only measurable metric which we can be assured will be discussed, extrapolated, and prioritised during every election cycle is that of economic growth: normally – but not always…
Keep Reading →

Are roadmaps useful any more?

June 21, 2020

Does anyone actually do product roadmaps any more? If so: how? And why? At university, we discussed the launch of a space shuttle as a classic example of where iterative software development wouldn't work, and waterfall reigned supreme: there's no such thing as an MVP and you don't really get to do a bug fix update if your V1 didn't work. But today, even NASA is doing Agile. What should a medium…
Keep Reading →

Atomic Habits for organisations

June 18, 2020

As described in an earlier post, I've been using James Clear's Atomic Habits as a tool over the last few months. The focus on process and incremental gains has been useful, and leaves one with a fairly clear set of steps to work through – unlike many self-improvement books. It got me to thinking, though, how could the same approach be applied to a team or company? The core principles of the book…
Keep Reading →

Overcorrection is OK when righting historical wrongs

June 14, 2020

Deploying a Gatsby site to GitHub Pages using Actions and Cloudflare

June 01, 2020

I recently converted this site to be built using Gatsby rather than Hugo. I'll write about that conversion process separately: this post only concerns the deployment and delivery of the built site. These phases can be basically identical between Hugo, Gatsby, or any other static site generator: at the most basic level it boils down to making a folder of HTML, CSS, and JS available at a URL, 199…
Keep Reading →

Using Athena, S3, and Tableau to quickly extract and visualise inaccessible data

May 28, 2020

We use Fivetran and Snowflake for our ETL system and data warehouse at Teespring. They work well for the vast majority of our use cases, but we recently ran into an urgent problem where those tools couldn't help. This is the story of how we solved the issue with Athena and S3. Telemetry data in our production facilities We gather a large amount of data about the flow of work through our production…
Keep Reading →

Diversity as a superpower, and the madness of monocultures

May 10, 2020

Atomic Habits: what habits do you actually want?

May 08, 2020

Atomic Habits is chock-full of stories of people making transformative changes through the purposeful adoption of new habits: losing weight, professional success, creative output. After reading the book, I was sold: the approach uses what we know about behaviour patterns to hack our brains, aligning the basic urges of our Id with the lofty goals of our Superego. However, what wasn't obvious was…
Keep Reading →

ynabadell: connect your Sabadell bank account with YNAB

February 04, 2019

We've recently started using You Need A Budget (YNAB) to plan our finances. Unfortunately, like most finance apps it's focussed squarely on the north american market: its automatic transaction importing only works for some US and Canadian banks – and we live and bank in Spain… YNAB does support a manual process, where you upload QFX or OFX files – or CSVs (in their required format). However, our…
Keep Reading →

Enabling automatic "skip-to-next-scene" in videos

December 06, 2018

Don't video player controls seem dumb? Desktop and web-based players alike allow the user to jump forwards or backwards by 5 or 10 seconds, or possibly speed up and slow down playback. These controls operate identically no matter what the user is watching – there's no connection between the content of the video, and the controls. DVDs were the first format I know of that allowed you to skip via…
Keep Reading →

InnoDB and Table-level Locking

March 29, 2018

One of the main reasons InnoDB is the go-to choice for our MySQL tables is that it supports row-level locking. This means that as we're reading from and writing to a table, we don't need to wait for all the other processes to finish up their work before we can get access to that table. For larger tables, this ability to have multiple processes working on the same table at the same time is almost…
Keep Reading →

Elixir on Google Cloud Platform: hot code reloading?

February 04, 2018

I stepped through this guide for a Hello World app running on Google Cloud Platform. How quickly can you get something working, and how convenient would it be to use longer-term? In doing so, I confirmed GCP doesn't make use of Erlang's hot code reloading when re-deploying apps, but how important is that? How long does it take to get started? Starting point: OS X machine with Python installed…
Keep Reading →

Life coaches hate this one crazy trick to stave off burn-out and increase motivation!

February 02, 2018

I'm fortunate to enjoy my job. I hope you do too. Figuring out clever solutions to difficult problems is innately satisfying. However, I've always felt a yearning for various hobbies and side projects to augment the gratification I get from my work. I recently gained some clarity about this yearning: what it is we are looking for, and why it's important. Hopefully there's something here that…
Keep Reading →

Take Home Tests

January 24, 2018

I recently came across a discussion on Reddit concerning take-home tests as part of an interview process. It basically boiled down to: Is it acceptable for companies to ask candidates to work on a problem in their own time, so that their submitted solution helps decide whether to move forwards to an on-site interview? The level of antipathy towards take-home tests in that discussion was an…
Keep Reading →

It it possible to guess Catalan words?

August 25, 2017

I'm currently learning Catalan and Spanish, and am reminded every day of the languages' shared ancestor by how often they share similar (or identical) words. For example, it's easy to deduce that introducción (in Spanish) means the same as introducció (in Catalan), or that respuesta and resposta are the same thing. In fact, when you look at the Spanish and Catalan words next to each other, it…
Keep Reading →

Swamp cooler: experimenting with airflow

August 19, 2017

The first step of my swamp cooler project is to figure out the construction of the evaporative cooling vessel. I'd like to use an upturned terracotta pot for the vessel itself, with air entering at the bottom, passing up the inside and out the drainage hole at the top. Unlike the Cold Pot – which pushes air through a dry aluminium sleeve – I'm trying to maximise the surface area of wet terracotta…
Keep Reading →

Injecting into transient FactoryBot attributes

August 01, 2017

I was just writing some code which parses a URL in order to extract a piece of the path. When working correctly, the code under test takes a URL something like this: ... and returns just the hash-like part of the path: . Creating factories to effectively test it was surprisingly fiddly! Here are the options I considered and what worked for me – in the hope it's of some use to you. Static value The…
Keep Reading →

Swamp coolers for the house?

August 01, 2017

It has been hot here recently in Catalunya. Like 40°C and forest-fires-covering-our-patio-in-ash hot. Luckily, the house is traditionally constructed with extremely thick, solid stone walls which means the worst of the heat doesn't make it inside – so long as we remember to shut the windows. Even so, a little extra help to keep the temperature down during the day would be very welcome. Why not air…
Keep Reading →

Deploying a static site to Github Pages using Travis and Cloudflare

July 12, 2017

Update June 2020: I am no longer using this infrastructure for my site. See Deploying a Gatsby site to GitHub Pages using Actions and Cloudflare. A quick and easy way to use these 3rd party services to deliver your site: Cloudflare speeds up your site and gives you HTTPS for free. Github Pages is basically zero-configuration, free hosting. Travis CI glues the pieces together. And it's free. The…
Keep Reading →

Queues, Culture, and Computer Science

December 19, 2016

Much has been written about the deep cultural significance that orderly queueing holds for the Briton. The opportunities it offers to display impeccable manners – and scowl at interlopers – are so rich that I've lost count of the number of serious, extended conversations I've had about the do's and don'ts, the Ps and Qs, of waiting for service. As a programmer, though, it's also interesting that…
Keep Reading →

Are dotfiles meant to be forked?

September 18, 2016

Tl;dr: I don't think so, so I created Full Stop as a way for us to share dotfile tooling while staying agnostic about the content. In "Dotfiles Are Meant to Be Forked", Zach Holman points out that we all benefit through sharing the efficiency-boosting tips, tricks, and tools many of us have in our dotfiles, and I completely agree. However, I think it's important to draw a distinction between the…
Keep Reading →

Prototype: Virtual Reality e-commerce

June 06, 2015

At Teespring we have quarterly hackathons. We all throw suggestions into a melting-pot of ideas in the run-up to the event, with the most promising, most interesting, and most popular suggestions graduating to be hacked upon by a small team for a couple of days. A friend of mine at DODOcase had given me a couple of Google Cardboard-based virtual reality viewers that I hadn't gotten around to…
Keep Reading →

Why exploding job offers don't work for senior hires

February 11, 2015

At the moment – and for the foreseeable future – the power balance of hiring negotiations favours the engineering candidates rather than with the hiring company. One consequence of this is that any attempt to hurry, strong-arm, or manipulate candidates will likely be ineffective, and could potentially backfire horribly. This is how I became one such backfire. The offer I had been lucky enough to…
Keep Reading →

Google Bollocks: their seminal new product

January 16, 2015

Spectacles, Testicles, Wallet and Watch. We think of it as the tongue-in-cheek mnemonic for recalling the sign of the cross. But is this all that it signifies? I think not. It's become clear to me that infamous technophile, Pope Francis, has leveraged his position as head of the Catholic church to inflect the product roadmap of everyone's favourite search behemoth: Google. Let's look at news…
Keep Reading →

The worst project I ever worked on

July 05, 2013

I was recently asked: what's the worst project you ever worked on? After a quick scan through my mental graveyard of half-finished, half-assed ideas too embarrassing for me to dignify with a link here, I settled upon my first job out of university. The company I was hired as a Software Engineer by IBM, to work out of their main UK development laboratory, Hursley Park, home of the mighty CICS…
Keep Reading →

Home-made present: how to make a punch box

March 17, 2013

I was always told to prize gifts that people had put time and effort into. Hoping my SO shared the same view, I decided to make her a little something for her birthday. Being creatively barren, I attempted plagiarism. I remembered seeing this Kickstarter project ages ago. It's based on an old parlour game: the idea is to conceal little messages inside a nice-looking block, to be popped out with a…
Keep Reading →