All posts
Modern Python in Practice #5: Async and Background Tasks
Where async routes fit, post-response processing with BackgroundTasks, the boundary where external queues (Celery, ARQ) become necessary, and how to safely mix sync libraries.
RHEL in Practice #3: Container Workloads — Podman, systemd (quadlet)
The third post in the RHEL in Practice track. Putting the web and DB we stood up by hand in #1 and #2 back up as containers, we organize the operational flow of Podman, RHEL's standard container engine. Image pull and run, volumes and port mapping, rootless containers, and integrating containers as systemd services with quadlet for automatic startup at boot — all in one cycle.
Testing #5 — User Events and Form Tests: Where userEvent Belongs
All about user input and form submission. The difference between userEvent and fireEvent, the patterns of type/clear/click/keyboard/upload, form tests on top of React Hook Form, validation error scenarios, and what a form test should really verify.
What the Padlock in Your Address Bar Protects — HTTPS and Encryption
This post explains, without any code, what the padlock icon and HTTPS actually protect. It covers how communication is encrypted, why services do not store your password as is, and how two-factor authentication helps, all at a non-developer's level.
Angular in Practice #2: Authentication and HTTP Interceptor
Filling the dashboard skeleton with an auth flow. Reactive Forms login, an AuthService that holds the token in a signal, a functional Auth Guard, and an HTTP Interceptor that automatically attaches the token to every request — a full lap around auth in modern Angular.
AWS Certified Cloud Practitioner (CLF-C02) #4 Domain 2-1 Security — Shared Responsibility Model and IAM Basics
The first half of Domain 2 (30%), the largest-weighted domain of the CLF-C02 exam. Where the responsibility line falls between AWS and the customer (and how that shifts with the service model), the four IAM essentials — users, groups, roles, and policies — and how they differ, operating principles for MFA and access keys, and a root user guide that often appears as an exam trap. The next post #5 continues with compliance certifications, AWS Artifact, and encryption.
AWS in Practice #3: CI/CD — GitHub Actions + ECR + ECS
GitHub Actions without access keys via OIDC, ECR push, automatic Task Definition updates, ECS Service rolling deployments, deployment circuit breakers and auto-rollback, and a touch of CodeDeploy blue/green — a deployment flow that ends with a single git push.
Django DRF #2: Authentication/Permissions — Token, JWT, custom permission
DRF authentication backends (Session/Token/JWT), permission classes, and object-level custom permissions like IsOwner — all in one place.
K8s Advanced #6: GitOps — ArgoCD / Flux
The last post in the K8s Advanced series. GitOps — the operational model where the source of truth for manifests lives in git and a controller inside the cluster watches git to sync automatically. Covers the difference between push and pull models, ArgoCD's Application CRD and sync wave, Flux's Source / Kustomization / HelmRelease, directory structure patterns, and how to safely store secrets in git via Sealed Secrets / External Secrets. Also includes a 6-post K8s Advanced retrospective and a preview of the next track, K8s Practice.
Modern Python in Practice #4: Authentication — OAuth2 Password Flow + JWT
Password hashing (argon2/bcrypt), the OAuth2 password flow, JWT issuance/verification, and a clean current_user dependency for authenticated routes.
RHEL in Practice #2: Database Operations — PostgreSQL on RHEL
The second post in the RHEL in Practice track. Having stood up the web tier, we move to the data tier behind it: installing and initializing PostgreSQL via RHEL's AppStream modules. We cover the data directory and SELinux context, postgresql.conf / pg_hba.conf settings and the firewalld opening for remote access, and everything from creating users and databases to backup, recovery, and diagnosis when you get stuck — all from a real operations perspective.
Testing #4 — Async and Network Mocking with MSW
The post for components that fetch data. When to use findBy and waitFor, why we intercept the network layer with MSW instead of mocking fetch directly, writing handlers and happy-path / error-path scenarios, and the common async pitfalls.