Blog

Analysing email headers with Python: a hands-on CSIRT lab

Every phishing email that lands in someone's inbox leaves a paper trail.

CloudTrail: your AWS audit log foundation

AWS gives you an enormous amount of power over infrastructure — and without audit logging, you have...

The Maths Behind the Machine Without the Notation

My notes from working through the mathematical intuition behind how ML models learn. I skipped forma...

Python for AI - First Steps with Data

My notes from getting comfortable with the Python data stack. The goal wasn't to memorise the API su...

What Is AI, Really? Notes on Getting the Vocabulary Straight

These are my notes from working through the fundamentals of AI cleaned up enough to be readable, bu...

Node.js Fundamentals

Definition: Node.js is a JavaScript runtime built on Chrome's V8 engine that allows you to run Java...

AWS S3 Security Lab 3: The Credentialed User

This is the third lab in the AWS S3 Security series. It focuses on the most secure pattern: granting...

Building My First Pwnagotchi: A Beginner's Journey into Wireless Security

Pwnagotchi is an AI-powered device inspired by the 1990s Tamagotchi digital pet. However, instead of...

Why Understanding Threat Intelligence is Key to Cyber Security

In our increasingly connected world, cybersecurity is no longer just about firewalls and antivirus s...

AWS S3 Security Lab: Exploiting and Fixing Bucket Misconfigurations

These are my notes from an AWS S3 Security Lab that simulates a common cloud misconfiguration. The l...