Notes on code, automation & the web
Writing
Notes on code, automation systems, and things I've learned shipping software — 88 articles kept in one place.
All articles
Getting Started with Multipass: Launch Ubuntu VMs Instantly
Linux
Ubuntu CLI cheatsheet 2025
Programming
Docker Swarm Stack Deployment Guide
Deploy multi-container applications to Docker Swarm using stacks. Covers Swarm init, docker context for remote deployment, secrets, scaling, rollbacks, and secure deploy user setup.
Docker
VPS setup guide
A comprehensive guide to setting up a vps server
Linux
A Comprehensive Guide to Basic Git Usage
A practical Git reference covering setup, commits, branches, remotes, stash, rebase, cherry-pick, and the most important commands for everyday development.
Git
Accessing Files from a Zip Archive with Python Package Resources
Learn how to read bundled data files (images, configs, templates) from a Python package stored as a ZIP archive, using both pkg_resources and the modern importlib.resources API.
Python
Embedding a Google Apps Script Web App on Your Website
Google Apps Script web apps have long, opaque URLs. Learn how to embed your script app in your own website using an iframe with the ALLOWALL X-Frame-Options mode.
Tools
An Introduction to Python Operators
Explore the various types of operators in Python programming.
Python
Automate Email Sending from Google Sheets Using App Script
A comprehensive guide to automate email sending directly from Google Sheets using Google Apps Script.
Tools
Building a Basic Django REST API
Learn to build a REST API with Django REST Framework: models, serializers, ViewSets, and URL routing — using a TodoList app as the working example.
Django
Caching Responses in Python Without External Libraries
Use Python's built-in functools.lru_cache to cache expensive function results in memory, with optional TTL expiry — no external libraries needed.
Python
Capturing HTTP Requests on a Non-Rooted Android Device
A comprehensive guide to capturing HTTP and HTTPS requests using a non-rooted Android device with Charles Proxy.
Tools
Comprehensive Bash Programming Guide
A practical Bash scripting reference covering variables, conditionals, loops, functions, arrays, string operations, error handling, and script structure with working examples.
Linux
Comprehensive Docker Reference Guide
Essential Docker commands and tips compiled in a handy cheatsheet.
Docker
Comprehensive Guide to Compiling Python to Executable with Nuitka
An in-depth tutorial on using Nuitka to compile Python scripts into executables.
Python
Comprehensive Guide to Crontab on Linux
Explore the basics of crontab on Linux OS, including scheduling tasks and troubleshooting common issues.
Linux
Comprehensive Guide to Deploying Django on a VPS
Step-by-step instructions for deploying a Django application on a VPS using Ubuntu 18.04, including security, software setup, and domain configuration.
Django
Comprehensive Guide to Python Strings
Learn about strings in Python, covering everything from basic syntax to advanced operations.
Python
Comprehensive npm Guide: Managing Packages Effectively
A practical npm reference covering package installation, versioning, scripts, security auditing, global vs local packages, and modern npm features like npx and workspaces.
Web Development
Comprehensive SSH Guide
A practical SSH reference covering connections, key-based auth, SCP file transfer, SSH config file, agent forwarding, security hardening, and GitHub integration.
Linux
Comprehensive Visual Studio Code (VSCode) Cheatsheet
A complete VSCode reference: essential keyboard shortcuts for macOS and Windows/Linux, must-have extensions, settings, multi-cursor editing, and the integrated terminal.
Tools
Configuring HTTPS Redirect on MikroTik Hotspot
Learn how to configure HTTPS redirect on a MikroTik Hotspot to ensure secure and seamless client redirection.
Networking
Configuring OpenVPN on Raspberry Pi: A Comprehensive Guide
Set up your Raspberry Pi as an OpenVPN client that routes all connected devices through a VPN tunnel, with persistent iptables rules and NAT configuration.
Raspberry Pi
Creating a Cron Job with GitHub Actions
Learn how to schedule tasks using GitHub Actions with cron jobs.
Git
Creating a Jekyll Theme: A Comprehensive Guide
Learn how to create and publish your own Jekyll theme with this step-by-step guide, covering installation, development, testing, and going live.
Programming
Creating Your Own Programming Language Using Python
Learn how to build your own programming language with Python using SLY for lexical analysis and parsing.
Python
Deploying a Django App on Heroku with PostgreSQL
A step-by-step guide to deploying a Django application on Heroku with a PostgreSQL database, including production settings, static files, and environment variable configuration.
Django
Effortless Wordpress Setup with Docker
Learn how to set up Wordpress, MySQL, and phpMyAdmin using Docker with a single command.
Docker
ESP32 & ESP8266 MicroPython OTA Updates Using Python Server
Implement over-the-air (OTA) firmware updates for ESP32/ESP8266 running MicroPython using a Flask server. Covers the server setup, device-side update script, and applying the new firmware.
MicroPython
Essential Django Commands Cheat Sheet
A practical reference for the Django manage.py commands you use every day: runserver, migrations, shell, testing, static files, and more.
Django
Essential .htaccess Tips and Tricks
Explore crucial .htaccess tips including URL rewriting, SEO optimization, security enhancements, and more.
Web Development
Exploring Generators in Python
Learn about Python generators, their functionality, and usage with examples.
Python
Exploring Tkinter: Custom Title Bar and Network Progress
Learn how to customize a Tkinter window title bar and show a progress bar while downloading a file.
Python
Exploring Variables in Python: A Deep Dive into Object-Oriented Concepts
An in-depth guide to understanding variables and object-oriented programming terminology in Python.
Python
Fixing Time Issues in Windows and Linux Dual Boot
Learn how to resolve time synchronization issues when dual booting between Windows and Linux.
Linux
Getting Started with Linux Containers (LXD/LXC)
LXD provides lightweight Linux containers that behave like full VMs but share the host kernel. Learn to install, configure, launch, manage, and snapshot containers with LXD.
Linux
Getting Started with MicroPython on ESP8266
A comprehensive guide to programming the ESP8266 using MicroPython.
MicroPython
Getting Started with Python Programming: A Comprehensive Guide
An in-depth guide to beginning your journey with Python programming, covering history, key features, comparisons between Python 2 and 3, and installation processes.
Python
Getting Started with Selenium in Python: A Comprehensive Guide
Learn to automate browsers with Selenium 4 in Python: setup, locating elements with the modern By syntax, waiting strategies, handling dropdowns, iframes, cookies, and mobile emulation.
Python
Guide to Multibooting Raspberry Pi with BerryBoot
BerryBoot lets you run multiple operating systems from a single SD card on your Raspberry Pi. This guide covers standard and headless installation, and setting up a local OS repository.
Raspberry Pi
Handy C# Code Snippets for Developers
Practical C# snippets for WinForms rounded windows, ZIP file handling, file I/O, async HTTP requests, string operations, and LINQ — ready to copy into your projects.
Programming
How to Activate Python Virtual Environment Programmatically
Three practical approaches to activating a Python virtual environment without user interaction: shebang lines, bash wrappers, and subprocess calls.
Python
How to Add 'Publish to GitHub' to Windows Context Menu
Add a right-click 'Publish to GitHub' option to Windows Explorer. When you right-click a folder, a Python script initializes a Git repo and pushes it to a new GitHub repo via SSH.
Tools
How to Automatically Start a Script on Linux
A comprehensive guide to setting up a script or program to run automatically on system startup.
Linux
How to Create an SSH Key Pair on Raspberry Pi with Ubuntu
A step-by-step guide to generating and using SSH key pairs on Raspberry Pi running Ubuntu.
Raspberry Pi
How to Create Temporary Directories and Files in Python
Python's tempfile module creates temporary files and directories that clean up automatically. Learn TemporaryDirectory, NamedTemporaryFile, mkstemp, and when to use each.
Python
How to Manage Your Raspberry Pi with Webmin
Webmin is a web-based control panel for Linux administration. Learn how to install it on Raspberry Pi running Ubuntu and access it securely from your browser.
Raspberry Pi
How to Protect Python Code with PyArmor
Learn how to obfuscate Python source code using PyArmor for code protection and licensing.
Python
How to Reset iptables Rules: A Comprehensive Guide
Learn how to safely reset iptables to a permissive default state, flush specific chains, save and restore rules, and understand when to use nftables or UFW instead.
Linux
How to Send Emails Using Python and Gmail: A Comprehensive Guide
Learn how to send emails with Python through Gmail, covering authentication and SMTP setup.
Python
How to Set Up Home Assistant Using Docker
Run Home Assistant in Docker using Docker Compose. Covers the Compose file, host networking requirement, persistent config volumes, and accessing the dashboard.
Docker
How to Set Up Nginx on Raspberry Pi with Ubuntu
A comprehensive guide on installing and configuring Nginx on a Raspberry Pi running Ubuntu.
Raspberry Pi
How to Set Up Python's Embeddable Distribution on Windows
Learn how to configure the Python embeddable distribution on Windows with this step-by-step guide.
Python
Installing Nextcloud on Raspberry Pi: A Comprehensive Guide
Set up your own private cloud storage with Nextcloud on a Raspberry Pi using Docker. Covers quick start, persistent volumes, PostgreSQL backend, and Docker Compose setup.
Raspberry Pi
Introduction to Basic Python Syntax
Explore the basic syntax of Python programming, including execution modes, print function, identifiers, and more.
Python
Mastering Decision Making in Python: if, else, and elif
A complete guide to Python's conditional statements: if, elif, else, ternary expressions, truthy/falsy values, chained comparisons, and pattern matching with match/case.
Python
Mastering GitHub: A Comprehensive Guide
A practical GitHub guide covering repositories, pull requests, code review, branch protection, GitHub Actions CI/CD, GitHub Pages, and collaboration best practices.
Git
Mastering Logging in Python
A comprehensive guide to effectively using the logging module in Python for error tracking and analysis.
Python
Mastering Markdown Syntax: A Comprehensive Guide
Explore the essential Markdown syntax and discover how it integrates with HTML elements in Hugo.
Tools
Mastering Python Virtual Environments with Pipenv
Pipenv combines pip and virtualenv into a single workflow. Learn how to manage Python project dependencies, lock files, dev packages, and virtual environments with Pipenv.
Python
Mastering SSH Tunneling: Options and Configurations
A detailed guide on SSH tunneling options and configurations for efficient port forwarding.
Linux
Mastering SSH Tunneling with AutoSSH
A comprehensive guide to using SSH tunneling with AutoSSH for robust and persistent connections.
Linux
Mastering the Linux Screen Command
A comprehensive guide to effectively using the screen command in Linux terminals.
Linux
Mastering the Python ZipApp Module
Python's zipapp module bundles a directory of Python code into a single executable .pyz file. Learn how to create, run, and distribute Python apps without a full installer.
Python
Network-Wide Ad Blocking with Pi-hole on Raspberry Pi
A comprehensive guide to setting up ad blocking across your network using Pi-hole on a Raspberry Pi.
Raspberry Pi
Optimizing MicroPython Code: Strategies for Enhanced Performance
Practical MicroPython optimization techniques: profiling with timed decorators, const(), local variable caching, .mpy bytecode, frozen modules, avoiding allocations, and using native/viper code emitters.
MicroPython
Running Docker on Raspberry Pi: A Comprehensive Guide
Learn how to set up and manage Docker on a Raspberry Pi, including installation, Docker Compose, and popular Docker projects.
Raspberry Pi
Running Linux CLI and GUI Applications on Windows Using WSL 2
Learn how to run Linux GUI apps on Windows 10 using Windows Subsystem for Linux 2 with a shortcut.
Linux
Setting Up a DNS Server on Raspberry Pi with DNSmasq
A comprehensive guide to setting up a DNS server on Raspberry Pi using DNSmasq for improved network performance.
Raspberry Pi
Setting Up a RADIUS Server on Linux
Install FreeRADIUS on Linux to provide centralized network authentication. Configure a client (router/access point), add users, test with radtest, and harden for production use.
Linux
Setting Up LAMP on Raspberry Pi Ubuntu: Apache, MySQL (MariaDB), and PHP
Install a full LAMP stack (Linux, Apache, MariaDB, PHP) on a Raspberry Pi running Ubuntu, then deploy WordPress — step by step from package installation to a working site.
Raspberry Pi
Setting Up Nginx in a Docker Container as a Load Balancer
Learn how to configure an Nginx Docker container to balance load across multiple application instances.
Docker
Setting Up Raspberry Pi with Cockpit and File Sharing via Samba
Set up Cockpit for web-based Raspberry Pi management and Samba for network file sharing. Includes proper Samba user authentication and access from Windows, macOS, and Linux.
Raspberry Pi
Setting Up Reverse SSH Tunnel with Port Forwarding on Apache Linux
Learn how to create a secure and reliable reverse SSH tunnel with port forwarding, offering an alternative to ngrok.
Linux
Setting Up SSH Access via Cloudflare Tunnel on Raspberry Pi
A step-by-step guide to configuring Cloudflare Tunnel for SSH access on a Raspberry Pi.
Raspberry Pi
Setting Up VNC Server on Raspberry Pi: A Comprehensive Guide
Install TightVNC on a Raspberry Pi running Ubuntu, configure a GNOME desktop session, run VNC as a systemd service, and connect securely over an SSH tunnel.
Raspberry Pi
Understanding Exception Handling in Python
Learn about exception handling in Python, including try, except, else, and finally blocks.
Python
Understanding functools.reduce in Python
functools.reduce applies a two-argument function cumulatively to reduce a sequence to a single value. Learn how it works, when to use it, and when to reach for simpler alternatives.
Python
Understanding Iterators in Python
Explore how iterators and the iter() function work in Python with examples and explanations.
Python
Understanding Python Data Types
An overview of data types in Python, including scalar, sequence, mapping, and set types.
Python
Understanding Python Magic Methods
Dive into Python's magic methods with examples and explanations.
Python
Understanding Python Numbers: A Comprehensive Guide
Dive into the world of numbers in Python, including integer, float, and complex types.
Python
Understanding Python's contextlib for Context Management
Python's contextlib module provides utilities for creating and working with context managers: @contextmanager, closing(), suppress(), redirect_stdout, and ExitStack.
Python
Understanding Python's Filter Function
Exploring the filter() function in Python with examples.
Python
Understanding Recursion in Python
Explore the concept of recursion in Python with examples, including the calculation of factorials.
Python
Understanding Standard JSON API Response Formats
Consistent JSON API response formats make integration easier. Learn the JSend convention, HTTP status code mapping, pagination patterns, and structured error objects used in production APIs.
Web Development
Understanding the Python Map Function
A comprehensive guide to using the map() function in Python with examples.
Python
Windows Hidden Tricks Every Developer Should Know
A practical guide to lesser-known Windows tricks: hiding files inside images, running batch scripts silently, managing startup folders, bulk renaming files from CMD, creating undeletable folders using reserved names, and leveraging NTFS Alternate Data Streams.
Programming