All posts

Docker Basics #6: .dockerignore and the Build Context — Using the Cache Well
8 min read

Docker Basics #6: .dockerignore and the Build Context — Using the Cache Well

The most common reason builds get slow or images get bloated is mishandling the build context. What it is, how to trim it with .dockerignore, and how to find where the layer cache breaks so you can order your instructions well. Wrap-up for Docker Basics.

Modern Python Basics #3: Control flow — if, while, for, match-case
4 min read

Modern Python Basics #3: Control flow — if, while, for, match-case

Indentation-based blocks, range/enumerate/zip, and match-case pattern matching that has a different feel from switch.

RHEL Basics #4: Intro to systemd — Services, Targets, journalctl
11 min read

RHEL Basics #4: Intro to systemd — Services, Targets, journalctl

systemd is RHEL's PID 1. Starting and stopping services with systemctl, enabling auto-start on boot, selecting the system's mode via targets, writing your first .service unit by hand, and reading every log in one place with journalctl.

AWS Basics #1: Account, Region, and Availability Zone
11 min read

AWS Basics #1: Account, Region, and Availability Zone

Where the cloud and AWS sit, the account and root user, regions and Availability Zones (AZ) around the world, and the difference between global and regional services — the map you need before putting anything on AWS.

Build a Blog with Next.js #2: Post List and Detail Page
8 min read

Build a Blog with Next.js #2: Post List and Detail Page

Read MDX files directly with fs in a Server Component, compile the body in a dynamic route, and render it on the screen — the core flow.

Docker Basics #5: Registries — Docker Hub, GHCR, push/pull
7 min read

Docker Basics #5: Registries — Docker Hub, GHCR, push/pull

To use an image you built on a different machine, you push it to a registry. The structure of an image name, logging into Docker Hub and GHCR, the tag/push/pull flow, and pinning images precisely with digests.

Modern Python Basics #2: Variables, basic types, and type hints
4 min read

Modern Python Basics #2: Variables, basic types, and type hints

Python is a dynamic language, but modern Python writes types from the start. int/str/bool/None and built-in generics, the int | None shortcut, and mypy/pyright.

RHEL Basics #3: dnf and Package Management — repo, modules, AppStream
12 min read

RHEL Basics #3: dnf and Package Management — repo, modules, AppStream

Package management on RHEL is unified under one command: dnf. From everyday commands like install / remove / search / info / history, to why BaseOS and AppStream are split apart, to picking a specific version of a package via modules, to safely attaching external repos like EPEL — all in one post.

Build a Blog with Next.js #1: Getting Started and Design
7 min read

Build a Blog with Next.js #1: Getting Started and Design

Apply Server Components and Server Actions from the Modern React series to a real project. The first post covers requirements, data model, folder structure, and MDX setup.

Docker Basics #4: Volumes and Networks — Data and Communication
9 min read

Docker Basics #4: Volumes and Networks — Data and Communication

Keeping data alive after a container dies, and getting containers to talk to each other by name. The difference between bind mount and named volume, the bridge / host / none network modes, and -p port mapping — all in one place.

IT Literacy for Non-Developers #4: Bugs, Hotfixes, and Rollbacks — How Developers Respond to Incidents
6 min read

IT Literacy for Non-Developers #4: Bugs, Hotfixes, and Rollbacks — How Developers Respond to Incidents

This post explains what developers mean by bug, hotfix, and rollback when something breaks - without any code. It walks through how a dev team responds when a problem hits, and what changes once a non-developer understands that flow.

Modern Python Basics #1: Getting Started and uv Setup
6 min read

Modern Python Basics #1: Getting Started and uv Setup

Why Python again — what changed in 3.14 since the 2017 tutorial, and building a first project with uv that replaces pip + venv + pyenv all at once.