RSS Amplifier

Blog

JDHeyburn

Recent content on JDHeyburn

jdheyburn.co.ukRSS feed ↗33 posts

Latest posts

Reorganising Obsidian Journal Notes

I finished off my previous post on journalling in Obsidian with a couple of wish lists: I do have some improvements I wish to make such as moving notes away from their respective flat directories. i.e.: Daily notes move from planner/daily to be grouped by year and month: planner/daily/YYYY/MM Weekly notes move from planner/weekly to planner/weekly/YYYY Monthly notes move from planner/monthly to…

Adding aria2 download manager to my NixOS homelab

In this blog post I talk about how I host aria2 on a NixOS server. If you’re coming here for the first time you can see other posts related to nix . aria2 introduction aria2 is command-line download tool that can support a wide variety of protocols - that can be ran as a server to allow remote invocation of downloads. Their home page describes it as: aria2 is a lightweight multi-protocol &…

I'm going to KubeConEU 2024

I was lucky enough to win a DragonflyDB competition for a free ticket to KubeCon Europe 2024 in Paris! Feel free to reach out if you fancy meeting up for a chat about everything and anything! I’m more than happy to chat the below, with some good starting points. Kubernetes Sample installation of third-party agents on nodes Redis Backups with Velero Migrating data into Kubernetes…

Simplifying Caddy configs in NixOS

tl;dr My Caddy configs before were bloody awfully complicated I scrapped that way of doing it and made it simpler in this pull request A gentle reminder I’ve written before about how I use Caddy to reverse proxy my internal services. Since then I’ve migrated to NixOS and am using that to automatically generate the Caddy config. However the approach I used was extremely over-engineered…

How I use Obsidian to journal

Edits 2025-03-26 Periodic Notes are now grouped in directories by their year (and if applicable, month) See blog post: Reorganising Obsidian Journal Notes 2025-01-26 Updated moment locale from gb to en-gb Sundays were incorrectly being templated as the first day of the week, instead of last tl;dr I use Obsidian for journalling You can view the templates I use for creating my daily, weekly,…

Automating service configurations with NixOS

In my last post I mentioned that I use a “service catalog” as a source of truth for what is deployed where and how it should be configured. This catalog is read by a number of services to determine the locations of those services so that can be referred back to. NixOS makes it easy to get services up and running with sensible defaults. But once those services are online we need a means…

Nix Cheat Sheet

The world of Nix has a bit of a steep learning curve. As I write blog posts on the subject, I’ll refer to some of the tips and tricks from the cheat sheet here. Documentation A list of Nix documentation I refer to, along with some getting started pages: Nixpkgs manual NixOS manual nix.dev Nix Pills Zero to Nix Resources Here are a list of resources I use to search for Nix options, services,…

Converting to the Church of Nix

I’ve written in the past about some services I host at home which were running on a Raspberry Pi 3 with Raspbian. Making changes to the host was done ad-hoc with no configuration management tool like Ansible, so should anything happen to the host and it dies, I won’t have a way to reproduce what I had working before. Naturally last December, the Pi SD card got corrupted and lost…

Alerting on NHS Coronavirus Vaccine Updates With Huginn

UPDATE 2021-06-06 A few days after publishing this I came across a bug where agent jobs would be stuck in pending state. I’ve since fixed this and documented some additional changes I’ve made at the end of the post . The UK’s coronavirus vaccine strategy has been to target those most vulnerable first, and then trickle down towards the healthier population. Since that age is…

Backup to Backblaze B2 using restic and rclone

Over the last UK lockdown I spent some time making sure I had backups of my music collection after I had organised them using beets . I used this as a good opportunity to ensure I had other backups in place for some other critical files at home too. Backup tools Restic is a backup snapshot tool that given a set of directories, it will split the data into chunks and de-duplicate these chunks to a…

How to automate zero downtime maintenance with AWS SSM & ALBs

Welcome to the last post in this series where we’ve been exploring SSM Documents, so far we’ve covered: How Command Documents can help to execute commands on EC2 Instances Automating these Command Documents through Maintenance Windows Safely chaining Command Documents through Automation Documents , and aborting for any failures This post will now look into how we can use Automation…

Who Goes Blogging 7: Hugo Minify RSS Code Indentation Fix

UPDATE 2021-12-15 The minify config was incorrect at time of publication, and so it’s been corrected so that minification does happen while not impacting XML files. Thanks to Andrea for pointing this out to me! It’s certainly been a while since the previous post in this series, which has become the home of any updates I make to my Hugo website. This post is a quick one but it’s…

Automate Instance Hygiene with AWS SSM: Automation Documents

In part two of this series we looked at how we can automate SSM command documents using SSM Maintenance Windows. This part will now explore another type of SSM Document; Automation. tl;dr Automation documents can allow us to combine command documents together With this, we can utilise maintenance window error thresholds to stop further invocations Dynamic invocation of command documents can also…

Automate Instance Hygiene with AWS SSM: Maintenance Windows

Last time we looked at writing our own SSM Command Document for the purpose of executing a healthcheck script on a set of EC2 instances across multiple platforms. In this post we’ll be exploring how we can automate this using maintenance windows - also within the SSM suite. This is something I’ve covered before , but want to extend on that to show how its done. tl;dr We can use SSM…

Automate Instance Hygiene with AWS SSM: Command Documents

It’s been a while since my last post … which could be down to me trying to salvage something out of summer! 😅 In this post I want to talk a little bit more about AWS SSM . This was something I touched on when discussing patch baselines in a previous post , and within there is another service known as Automation . On first glance it may look pretty dull, but once you scratch…

Assertions in gotests Test Generation

I’ve been doing some programming in Go for a side project again, and I’m back using gotests to generate unit tests for functions. For this I’ve been referencing a post I’ve previously written in order to help me get them set up. If you’d like more context on the background I’d recommend reading there first. Today I’ll be talking about a small enhancement…

Using Terraform to Manage AWS Patch Baselines at Enterprise Scale

If you’re new to AWS and patching principles then continue reading, else you can skip to juicy stuff below . AWS Primer ☁️ EC2 Amazon Web Services (AWS) provides Cloud resources to those that require it, for a cost mind you. One resource in particular is a box-standard server known on AWS as EC2 Instances which you can secure shell ( SSH ) into and do whatever you like with it - the…

Reverse Proxy Multiple Domains Using Caddy 2

During lockdown, I’ve spent a bit of time improving our home network. The bigger picture of which I’ll write about in a future post. But for now, I came across some challenges with running Caddy 2 as a reverse proxy for multiple domains used internally. If you’ve stumbled across this looking for the end config file for Caddy, then you can skip there . Background A few months back…

Who Goes Blogging 6: Three Steps to Improve Hugo's RSS Feeds

I “fixed” the default RSS template used by Hugo to show the full article content, along with images, and also talk about how to have social media cards appear in the RSS items too. I uploaded my completed RSS file to GitHub Gist 🚀 What is RSS? RSS is a great way to “subscribe” to websites to ensure that you don’t miss content from them. The standard for how it…

Who Goes Blogging 5: Updates Galore!

In this article we’re going to continue making some improvements to our Hugo website. Some of the things going to be covered are: Upgrading our Hugo theme Upgrading the Hugo version Adding table of contents Adding support for title emojis So far since this website has launched we haven’t upgraded either the Hugo version used to build our website, alongside the theme being used. Hugo is…

Who Goes Blogging 4: Content Structure & Refactoring

So far in this series we’ve been looking at the infrastructure behind the Hugo website, but I haven’t looked into improving the content layout of the site. Some of the improvements I want to make are: Moving content articles from a flat structure to a leaf bundle Rename content section to blog from posts Upgrading hugo-coder theme and hugo version Adding a table of contents to the…

Who Goes Blogging 3.2: Deployment Methods - GitHub Actions

From TravisCI to GitHub Actions In the previous post we looked at moving to a CI/CD model by moving from the deploy.sh script to TravisCI. In this post we will look at how we can migrate from TravisCI to GitHub Actions , GitHub’s own CI/CD tool. This post will also be useful if you are looking to onboard GitHub Actions as your CI/CD pipeline! 🚀 Benefits ✅ Let’s talk…

Who Goes Blogging 3.1: Deployment Methods - TravisCI

Recap Since part 1 , we have been using a simple bash script called deploy.sh to build our Hugo website and upload it to our GitHub Pages repo. In part 2 we modified it slightly to include the CNAME file post-build to ensure GitHub Pages uses the custom domain we set up in that same part. For this part, I will tell you about how I migrated from deploying via a script, to a CI/CD tool - namely…

On Becoming An Open Source Software Contributor

This is going to be a relatively shorter post that’ll be in two parts since it’s more of a self-promotion… But as of this Friday just gone, I finally had a pull request approved to be merged to terraform–provider-aws ! Okay so it’s only a small piece of documentation, I’ve actually got another larger PR waiting to be merged in to the same project with new added…

Who Goes Blogging 2: Custom Domain

In the previous post , we got ourselves up and running with a website generated by Hugo, deployed to GitHub, and hosted by GitHub Pages. Now, we&rsquo;re going to add a custom domain to our website so that we hide the <username>.github.io domain that GitHub Pages is kindly hosting for us for free. At the same time, we&rsquo;re going to make our website blazingly fast for users by adding a caching…

Who Goes Blogging 1: Getting Started

I&rsquo;ve done a lot of talking about how this website is currently, but let&rsquo;s talk about how you can get set up with the same as I have done here. Let&rsquo;s recap exactly what that is: A GitHub repo with the site source code Another GitHub project with the rendered site Hosted on GitHub Pages Fronted by a custom domain Globally cached by a CDN Redirecting multiple domains We&rsquo;ll…

Who Goes Blogging 0: Applying Cartography

Applying Cartography With my academic background focused in infrastructure, I love seeing diagrams of topologies - they&rsquo;re a pretty damn useful way of understanding architecture of an application flow amongst other things. Let&rsquo;s take a look at how my portfolio site is architected out. As I mentioned in my first blog post - I&rsquo;ve got several ideas on how I can improve on the…

Three Ways To Spice Up Your Python Code

Spice Up Your Life Python &#x1f40d; I&rsquo;m currently working on a side project that I&rsquo;ve written in Python. Now I&rsquo;ve have a lot of experience with Python before, I used it primarily to write a load of scripts for automating processes for when Bash didn&rsquo;t quite cut it. Don&rsquo;t get me wrong Bash is great, but like for every other language out there, each has its purpose in…

Extending Gotests for Strict Error Tests

UPDATE 2020-07-17 I wrote a follow up post to this one using the assert package instead. Awesome - take me there ! Strict Error Tests in Java I love confirming the stability of my code through writing tests and practicing Test-driven development (TDD). For Java, JUnit was my preferred testing framework of choice. When writing tests to confirm an exception had been thrown, I used the optional…

Blog Bootstrap

Howdy! &#x1f44b; This site will be an area for me to braindump everything and anything that comes across my mind - although I&rsquo;ll try my best to keep it tech-focused! The blog platform itself is pretty basic. It is built using Hugo , hosted using GitHub Pages , while served over a custom domain via CloudFlare. While this isn&rsquo;t exactly anything to brag about, it is only meant to be a…

:file_folder: Projects

Portfolio Website jdheyburn.co.uk is my portfolio website - how you are reading this content! It is based the JAMstack framework Hugo Hosted on GitHub Pages and built & deployed via GitHub Actions Globally distributed via Cloudflare CDN OSS Contributions terraform-aws-provider Add data source for aws_ssm_patch_baseline Adding a data source component to aws_ssm_patch_baseline enables retrieval of…

:mailbox: Contact

You can get in contact with me via any of the below: &#x1f418; Mastodon &#x1f424; Twitter &#x1f4e7; jdheyburn [at] gmail [dot] com

:wave: Hey Joe!

Hi there! &#x1f44b; I&rsquo;m a technology enthusiast based in London, UK &#x1f482;&zwj;&#x2642;&#xfe0f; &#x1f1ec;&#x1f1e7; with experience across software development, DevOps, and Cloud Engineering. I mainly blog about stuff I&rsquo;ve been working on - documenting my methodology throughout the way, along with writing up about any cool stuff I&rsquo;ve built or contributed to . If you&rsquo;re…