programming

  • 15th October 2024

Speed up Python Github Actions

If you want to speed up your CI builds you can use this setup on your GitHub actions. Doing this from the previous method cut my build times from 2 minutes to 1 minute. …

Read more 
  • 31st January 2024

Treesitter Highlights for Jenkinsfile

Ever wanted syntax in neovim for Jenkinsfiles? Let's create an autocommand to do just that! …

Read more 
  • 24th January 2024

Python Logging

Just a very quick post/memo to myself about an awesome way to configure logging in python based on an excellent Github repo I stumbled across via a YouTube video. …

Read more 
  • 10th December 2023

2023 - A Tech Year in Review

2023 gave me the ability to experience a lot of different tools, languages, and technologies, many did not make the cut long-term but I would like to put together a list of the core tooling that I use day to day with an example or two along the way. …

Read more 
  • 20th November 2023

SQLAlchemy, OnUpdate & Datetime UTCNOW deprecation in 3.12

This is a quick post about migrating your utcnow() to now(tz=UTC) in SQLAlchemy for your onupdate function argument to your SQL Models. …

Read more 
  • 19th October 2023

Connecting to Internal VPC Through Bastion in One Hop

If you've ever wanted to load up your local database IDE to view a database that sits inside an internal VPC. You may be a bit puzzled on how to do it considering most tools like DBeaver, DataGrip, TablePlus allow you to connect via SSH, but that SSH connection is always to a bastion instance. How does one connect directly? …

Read more 
  • 4th October 2023

Big Uploads and Checksum Validation

Ever wanted to upload big files without storing them in memory as they are being written with FastAPI? …

Read more 
  • 4th October 2023

Git Signing and Authentication with SSH

This is a quick guide to set up git with SSH ed25519 keys not only for authenticating with GitHub or GitLab but also for signing commits without the need to install GPG/PGP which has some serious criticisms / flaws that has led me to move into a world without it. The new world isn't as straightforward as the old so I thought I'd just throw together a quick guide to help you out. …

Read more 
  • 2nd August 2023

Mocking the Post Method on an Async HTTPX Post Request

A quick snippet for mocking HTTP requests with an the async httpx context manager. async with httpx.AsyncClient() as client: signup_response = await client.post( f"https://{AUTH0_DOMAIN}/api/v2/users", data=signup_request_body, headers=signup_request_headers, timeout=30, ) …

Read more 
  • 10th March 2023

Tmux in Linux and Mac With Wezterm

After struggling to get tmux to run seamlessly between Mac (on ARM i.e. M1/M2) and linux due to the fact that brew installs packages to /opt/homebrew/bin/ and it isn't on the path before the shell loads, I have finally worked out how to get tmux to launch/attach to existing sessions when launching a new terminal both in linux and on MacOS. …

Read more 
  • 16th February 2023

Testing in the Terminal

Find yourself running a pytest command repeatedly trying to work out what a problem is and getting sick of clicking back on the terminal window where the output is and pressing arrow up to re-run the test? Or even running tests in an IDE and sick of re-running the test time after time with your mouse? …

Read more