DigitalOcean Spaces doesn't support HTTP/2

Earlier today I was looking at a couple of sites to see why they were much slower than I expected. I ran them through GTmetrix and saw the following in the waterfall tab. Straightaway I could see that this is the classic pattern produced by trying to load a bunch…

Flamegraphs for Ruby 2.6

I recently added support for Ruby 2.5.4, 2.5.5 and 2.6.0-2.6.3 to rbspy, the sampling profiler written in Rust. I have replaced the original Flamegraph library by Brendan Gregg with Inferno, a Rust port. I also updated and merged a PR for handling…

Linode corrupted our server and how I got it back up

A few days ago, the server running Nomad List and Remote OK randomly went down. This is the timeline of what happened and how I fixed it. All times are in  Korean Standard Time. 21:05Pieter starts messaging me on Telegram and I receive notifications from our uptime service. All…

What benefits do I offer my clients?

I work with clients to improve the performance of their website. So - what benefits do I offer to them? 1. More timeServer maintenance and website optimization are important but time-consuming processes. They are often ignored in order to prioritise other activities but are some of the simplest ways you…

Buying a new laptop

My old laptop was a Lenovo G505s, which I bought in 2014 before starting university. It served me well and got me through a Master's degree & 6 months of work/travelling. However, there were a few things that started to grind on me. The original battery life was horrendous…

Running a business: 3 months in

Last year I finished as a sole trader and set up a limited company. It was something I had been meaning to do for a while but it would incur several complexities that I was not ready for at the time. When business picked up at the end of the…

Caching static HTML with Cloudflare

By default, Cloudflare does not cache static HTML. It's nice when you're constantly pushing updates because the changes are immediately shown. But it does mean that you still have that short delay whilst Cloudflare gets the latest version of your page. If you have a completely static site, like I…

Rewriting stackcollapse-xdebug in Rust

A week or so ago, I saw the inferno project mentioned on the Rust subreddit. It was a rewrite of the great FlameGraph library into Rust. All of the work was being livestreamed by Jon Gjengset. I ended up watching some of the livestreams and had the idea of porting…

Red flags in website performance

When a client asks me to take a look at their site, I start off by throwing it into a bunch of services to analyze the performance. One of my favorites is GTmetrix because it has a lot of useful metrics and visualizations. The most useful one that I use…

Project: Cron Heatmap

Towards the end of last year I made Cron Heatmap, a website to visualize your cron jobs and help you find hotspots. The motivation from the project comes from my work over at Nomad List and Remote OK. There are over 70 cron jobs configured to run throughout the day.…

How a software upgrade can make you more money

My work involves clients coming to me looking for a server tune-up. One of the things I can do is to look at the software they're currently running and look at upgrading it to the latest version. A common example here is PHP. I often see people still running 5.…

First impressions of Bose QC35 II

I have been considering a pair of Bose QC35 II for quite some time and decided to start looking for some when I was in Chiang Mai. I often work from cafés and they can get overwhelmingly loud and distracting. I've been using normal earbuds up until now but they…

Day one in Kuala Lumpur

After arriving in KL, I spent the rest of the day wandering around trying to get some bearings. I had randomly booked a hotel 5 minutes away from KL Sentral, the train station you arrive at when you come from the airport. The Fajr prayer call just before 6 a.…

New Year's Eve 2018

NYE is normally a quiet time for me. This year I went for dinner with a friend in Chiang Mai and then proceeded to head home. A couple of hours later, another friend said they were all heading out to Tha Phae on the east side of Old City to…

Flying to Kuala Lumpur

After 2 months in Thailand, my visa was up so I had to move on to another country. I was originally looking at going to Bali, Indonesia but the recent tsunami on a neighbouring island, and their general lack of a tsunami warning system made me a little hesitant to…

Back in Chiang Mai

After running my 5km race in Phuket and flying to Bangkok to meet Jet, I took the train to Chiang Mai for the second time. I tried to fix some of the issues with the journey I experienced last time but I still ended up having a pretty restless night.…

Quickly debugging server issues

Part of my job as a server consultant is maintaining servers and quickly responding to issues as they arise. Yesterday, I unlocked my phone to find a message from a client. He said Apache was getting railed and the server load was over 80. I quickly opened my laptop and…

Exercise cured my asthma

I lived with asthma for most of my life but when I started exercising, I was cured. Note: I am not a medical professional. Don't do anything stupid. I was diagnosed with asthma at 18 months old. I'm not quite sure of the details but apparently I was wheezing a…

Hiking into 2562

Happy New Year from Thailand! To kick off the New Year, the Chiang Mai WIP gang hiked up to Wat Phra That Doi Suthep. I suggested going up Pilgrim's Trail -- having only completed around half of it on my last trip here. We started around 0900. There isn't much…

Running 250km in a month

At some point after I publish this blog post, I'm going to go out for a run and tick over 250km for the month. This is the most I've ever ran and it's not a lot, but it's a good step to training for my ultramarathons. Before December, the most…