Writing
All articles
88 postsNotes on code, design, automation systems, and things I've learned shipping software in the real world.
Getting Started with Multipass: Launch Ubuntu VMs Instantly
Ubuntu CLI cheatsheet 2025
Ubuntu cli cheatsheet 2025
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.
VPS setup guide
A comprehensive guide to setting up a vps server
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.
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.
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.
An Introduction to Python Operators
Explore the various types of operators in Python programming.
Automate Email Sending from Google Sheets Using App Script
A comprehensive guide to automate email sending directly from Google Sheets using Google Apps Script.
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.
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.
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.
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.
Comprehensive Docker Reference Guide
Essential Docker commands and tips compiled in a handy cheatsheet.
Comprehensive Guide to Compiling Python to Executable with Nuitka
An in-depth tutorial on using Nuitka to compile Python scripts into executables.
Comprehensive Guide to Crontab on Linux
Explore the basics of crontab on Linux OS, including scheduling tasks and troubleshooting common issues.
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.
Comprehensive Guide to Python Strings
Learn about strings in Python, covering everything from basic syntax to advanced operations.
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.
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.
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.
Configuring HTTPS Redirect on MikroTik Hotspot
Learn how to configure HTTPS redirect on a MikroTik Hotspot to ensure secure and seamless client redirection.
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.
Creating a Cron Job with GitHub Actions
Learn how to schedule tasks using GitHub Actions with cron jobs.
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.
Creating Your Own Programming Language Using Python
Learn how to build your own programming language with Python using SLY for lexical analysis and parsing.
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.
Effortless Wordpress Setup with Docker
Learn how to set up Wordpress, MySQL, and phpMyAdmin using Docker with a single command.
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.
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.
Essential .htaccess Tips and Tricks
Explore crucial .htaccess tips including URL rewriting, SEO optimization, security enhancements, and more.
Exploring Generators in Python
Learn about Python generators, their functionality, and usage with examples.
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.
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.
Fixing Time Issues in Windows and Linux Dual Boot
Learn how to resolve time synchronization issues when dual booting between Windows and 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.
Getting Started with MicroPython on ESP8266
A comprehensive guide to programming the ESP8266 using 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.
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.
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.
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.
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.
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.
How to Automatically Start a Script on Linux
A comprehensive guide to setting up a script or program to run automatically on system startup.
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.
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.
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.
How to Protect Python Code with PyArmor
Learn how to obfuscate Python source code using PyArmor for code protection and licensing.
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.
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.
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.
How to Set Up Nginx on Raspberry Pi with Ubuntu
A comprehensive guide on installing and configuring Nginx on a Raspberry Pi running Ubuntu.
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.
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.
Introduction to Basic Python Syntax
Explore the basic syntax of Python programming, including execution modes, print function, identifiers, and more.
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.
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.
Mastering Logging in Python
A comprehensive guide to effectively using the logging module in Python for error tracking and analysis.
Mastering Markdown Syntax: A Comprehensive Guide
Explore the essential Markdown syntax and discover how it integrates with HTML elements in Hugo.
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.
Mastering SSH Tunneling: Options and Configurations
A detailed guide on SSH tunneling options and configurations for efficient port forwarding.
Mastering SSH Tunneling with AutoSSH
A comprehensive guide to using SSH tunneling with AutoSSH for robust and persistent connections.
Mastering the Linux Screen Command
A comprehensive guide to effectively using the screen command in Linux terminals.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Understanding Exception Handling in Python
Learn about exception handling in Python, including try, except, else, and finally blocks.
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.
Understanding Iterators in Python
Explore how iterators and the iter() function work in Python with examples and explanations.
Understanding Python Data Types
An overview of data types in Python, including scalar, sequence, mapping, and set types.
Understanding Python Magic Methods
Dive into Python's magic methods with examples and explanations.
Understanding Python Numbers: A Comprehensive Guide
Dive into the world of numbers in Python, including integer, float, and complex types.
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.
Understanding Python's Filter Function
Exploring the filter() function in Python with examples.
Understanding Recursion in Python
Explore the concept of recursion in Python with examples, including the calculation of factorials.
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.
Understanding the Python Map Function
A comprehensive guide to using the map() function in Python with examples.
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.