If you have a quick look at that file you'll see that it includes that current status. For me this has…"},{"@type":"BlogPosting","headline":"An open source Python project CI pipeline","url":"https://brntn.me/blog/open-source-python-ci/","datePublished":"2023-01-16T07:58:00.000Z","abstract":"October 18th, 2023: I've updated the usage of ruff to use the new --output-format option. The existing --format option was deprecated in v0.0.291 and removed in v0.1.0 . Lately I've been iterating on a reusable set of open-source continuous integration (CI) tools for my Python projects. Here's an overview, along with a sample GitHub Actions workflow file that runs these checks. The checks below…"},{"@type":"BlogPosting","headline":"Deploying Django apps with Github Actions and Django Up","url":"https://brntn.me/blog/django-up-actions/","datePublished":"2022-12-29T09:50:52.000Z","abstract":"For the last few years I've been using Django Up to deploy my small Django side projects . It's implemented as a Django management command that under the hood uses Ansible to deploy to an Ubuntu 22.04 server. In the past, I've typically run deployments from my local machine. However, this year I've been encouraging more teams to focus on CI/CD practices, so I've decided to migrate a number of…"},{"@type":"BlogPosting","headline":"Jog to Tallangatta","url":"https://brntn.me/blog/8df8b51e-7119-498a-ae64-2b96e183c595/","datePublished":"2022-11-08T04:05:02.000Z","abstract":"On the weekend I ran a marathon. It was the third time I've managed to cover the full marathon distance (twice solo, once as part of the Wangaratta Marathon earlier this year). Running a completely solo marathon is an tough adventure. I felt amazing in the first half, listening to some music, smashing along the highway @ 4:30/km. Then, after refilling my water bottles at Ebden Reserve I just…"},{"@type":"BlogPosting","headline":"Git branching strategy diagrams","url":"https://brntn.me/blog/git-branching-strategy-diagrams/","datePublished":"2022-10-29T22:40:00.000Z","abstract":"As part of the work I'm doing for our early careers program I've recreated two common Git branching strategy diagrams. Here they are, released under a CC0 license and free to use (without credit) for any purpose. Both of these images can be downloaded and opened of diagrams.net for editing. Git Flow (click for larger version) This diagram is based the diagram in Vincent Driessen's original post…"},{"@type":"BlogPosting","headline":"Very Handy: screenshots.page for IPv6 testing","url":"https://brntn.me/blog/very-handy-screenshotspage-for-ipv6-testing/","datePublished":"2022-10-13T06:30:22.000Z","abstract":"Nifty little microsite at screenshots.page for grabbing screenshots of the IPv4 and IPv6 version of a page. Found via internet.nl which is a fantastic security focused page test service."},{"@type":"BlogPosting","headline":"NetNewsWire is my Favourite iOS App","url":"https://brntn.me/blog/netnewswire-is-my-favourite-ios-app/","datePublished":"2022-10-03T01:06:33.000Z","abstract":"NewNewsWire ( Hacker News ) It’s like podcasts — but for reading. NetNewsWire shows you articles from your favorite blogs and news sites and keeps track of what you’ve read. This means you can stop going from page to page in your browser looking for new articles to read. Do it the easy way instead: let NetNewsWire bring you the news. I use NetNewsWire for iOS daily to read a variety of RSS feeds…"},{"@type":"BlogPosting","headline":"Deep Dive into JWTs","url":"https://brntn.me/blog/deep-dive-into-jwts/","datePublished":"2022-09-22T02:00:00.000Z","abstract":"Have you had to use, validate, request or generate JWTs for authorisation in your application? Ever wondered what's going on inside that otherwise opaque-looking token? Let's go on a little journey together and deep dive into the wonderful world of JSON Web Tokens. Spotting and Decoding JWTs Once you know what to look for, you'll see JWTs in the wild all the time. The basic structure, as outlined…"}]}
This post serves as a simple reminder to myself that multiprocessing.Pool has map and starmap functions that are a quick and easy way to take a loop and parallelise it in Python. Imagine some code like this: urls = ["https://example.org",] def take_screenshot(url): # ... for url in urls: take_screenshot(url) To make this run across four separate processes, you can do this: pool =…
It feels a little no effort November, but I've seen this list pop up on a few blogs and figured I would add mine so I can compare next year. You can see a great list of these from the Hemispheric Views podcast listeners. Just my personal list (work is sometimes quite different) 📨 Mail Client: Fastmail web and iOS app 📮 Mail Server: Fastmail 📝 Notes: Apple Notes, Scratchpad ✅ To-Do: Reminders 📷…
HN500 is a tiny site that lists posts on Hacker News that receive over 500 points. Unfortunately, it was down for a few days this week. I migrated servers and had a mistake in the cronjob that fetches posts. Fixed now! The good news is that I think it's only really used by me (of course, there are no analytics, and I'm keeping it up for me , so I don't mind not knowing). There are two features…
This is an edited transcript of a talk I gave at GoodHuman about the OWASP Top 10. The talk is available in my quick-presentations repository. The transcript was created OpenAI's Whisper API, then edited by myself and Claude2 using a similar strategy to Simon Willison . Screenshots were created using shot-scraper . EDIT 2024-02-26: GoodHuman owes me pay from June/July 2023, so I've updated these…
This is just a quick post to share a few code snippets that I find useful when dealing with Django's messages framework . Have you noticed that when you start a new Django project django.contrib.messages is included in your INSTALLED_APPS? This is Django's lightweight framework for showing one-time notifications to users. "One-time" describes one off the messages framework's key features: once a…
I found myself writing code to fetch RSS (and JSON ) feeds, and was immediately reminded of Rachel By The Bay 's posts about feed reader behaviour [ 1 , 2 , 3 ]. Those posts go into detail about their expectations for feed readers. This post will show you how to satisfy those requirements and a few others that I'm going to add. Feeds, updates, 200s, 304s, and now 429s can be summarised as…
This post discusses practices promoted by checks in ready , a tool that I've made to help developers check for security best practices in their websites. If you're working on a team that's building something served over HTTP you should check it out! Table of Contents This table of contents also serves a quick guide / checklist. Redirect HTTP traffic to HTTPS Cookies should be set securely HSTS…
Static Application Security Testing (SAST) is one of the most complex types of test for your application, but also one of the simplest to implement. SAST tooling examines your source code looking for security weaknesses. It will report on those weaknesses and suggest improvements. The purpose of this type of test is to find and prevent you from integrating potentially risky code. Think of it a bit…
Kanboard made the Hacker News front page a few weeks which reminded me that I'd been meaning to experiment with it. Here's the end to end for deploying it to a fresh Debian 12 VPS. If you choose to follow along and deploy to Vultr, you can use my referral link to receive $100 credit to experiment with. Spin up a new VPS and point your domain name to it's IP address. We'll use <your-domain> in the…
Integration tests traverse multiple components or layers of your application during execution. With modern tooling they allow us to efficiently test large parts of our codebase to verify it's behaviour. Write Tests. Not too many. Mostly integration Guillermo Rauch The term integration testing covers a broad range of tests. The best definition is probably a recursive one: larger than a unit test ,…
The most traditional of all tests, unit tests execute a single "unit" of code and assert on the expected result. Unit tests can be used to verify that your code does what you expect, to test the boundaries and behaviour on the edges, and to help you write better code. The breadth of a unit test is difficult to define . A single unit tests may span across multiple classes, functions or areas of…
I wanted to generate a quick and dirty entity-relationship diagram for a database that's new to me and went looking for tools to help. There's a heap out there! I stumbled upon eralchemy and figured I'd use this opportunity to try something different. Getting it working on MacOS was a little bit of a struggle, so here's a quick TIL. First, let's get the dependencies installed. This means…
Keen to embrace the fun that is omg.lol and play with more of these 2023 Indie Web vibes, I wanted to get my Status.lol status onto my homepage. Luckily, Status.lol lets you embed your status with a unique Javascript file for each user. <script src="https://status.lol/brenton.js" async></script> If you have a quick look at that file you'll see that it includes that current status. For me this has…
October 18th, 2023: I've updated the usage of ruff to use the new --output-format option. The existing --format option was deprecated in v0.0.291 and removed in v0.1.0 . Lately I've been iterating on a reusable set of open-source continuous integration (CI) tools for my Python projects. Here's an overview, along with a sample GitHub Actions workflow file that runs these checks. The checks below…
For the last few years I've been using Django Up to deploy my small Django side projects . It's implemented as a Django management command that under the hood uses Ansible to deploy to an Ubuntu 22.04 server. In the past, I've typically run deployments from my local machine. However, this year I've been encouraging more teams to focus on CI/CD practices, so I've decided to migrate a number of…
On the weekend I ran a marathon. It was the third time I've managed to cover the full marathon distance (twice solo, once as part of the Wangaratta Marathon earlier this year). Running a completely solo marathon is an tough adventure. I felt amazing in the first half, listening to some music, smashing along the highway @ 4:30/km. Then, after refilling my water bottles at Ebden Reserve I just…
As part of the work I'm doing for our early careers program I've recreated two common Git branching strategy diagrams. Here they are, released under a CC0 license and free to use (without credit) for any purpose. Both of these images can be downloaded and opened of diagrams.net for editing. Git Flow (click for larger version) This diagram is based the diagram in Vincent Driessen's original post…
Nifty little microsite at screenshots.page for grabbing screenshots of the IPv4 and IPv6 version of a page. Found via internet.nl which is a fantastic security focused page test service.
NewNewsWire ( Hacker News ) It’s like podcasts — but for reading. NetNewsWire shows you articles from your favorite blogs and news sites and keeps track of what you’ve read. This means you can stop going from page to page in your browser looking for new articles to read. Do it the easy way instead: let NetNewsWire bring you the news. I use NetNewsWire for iOS daily to read a variety of RSS feeds…
Have you had to use, validate, request or generate JWTs for authorisation in your application? Ever wondered what's going on inside that otherwise opaque-looking token? Let's go on a little journey together and deep dive into the wonderful world of JSON Web Tokens. Spotting and Decoding JWTs Once you know what to look for, you'll see JWTs in the wild all the time. The basic structure, as outlined…