All posts

Docker in Practice #4: Building Images in CI — GitHub Actions and BuildKit Cache
8 min read

Docker in Practice #4: Building Images in CI — GitHub Actions and BuildKit Cache

The standard for building and pushing Docker images in GitHub Actions. docker/build-push-action, BuildKit GHA cache (type=gha), multi-arch (amd64+arm64) builds, build-time secrets, and build-time optimization — all in a single workflow.

How LLMs Predict the Next Word — AI Explained for Non-Engineers
7 min read

How LLMs Predict the Next Word — AI Explained for Non-Engineers

Learn how large language models like ChatGPT do not understand text but instead predict the next word by probability, explained so that anyone without a technical background can follow.

K8s Intermediate #7: RBAC / NetworkPolicy / ResourceQuota — Security and Resource Policy
22 min read

K8s Intermediate #7: RBAC / NetworkPolicy / ResourceQuota — Security and Resource Policy

The final post in the K8s Intermediate series. Through [#6](/en/posts/k8s-intermediate-6) we covered the workload operations model — controllers, persistent data, external entry points, resource model, health checks, autoscaling. This post covers the three objects `RBAC`, `NetworkPolicy`, and `ResourceQuota` that fill the last gap of multi-tenant operation, where multiple teams and environments share one cluster. The three dimensions of who can create objects, what traffic flows, and how much can be made are all bundled as namespace-level policy, and the real value of Namespace briefly noted in [Basics #7](/en/posts/k8s-basics-7) is unfolded by these three objects. Since this is the last post in the series, a 7-post retrospective and a preview of the next track (K8s Advanced) is also included.

Modern Python Advanced #5: GIL and concurrency — threading vs multiprocessing vs asyncio
7 min read

Modern Python Advanced #5: GIL and concurrency — threading vs multiprocessing vs asyncio

What the GIL is, the role of threading/multiprocessing/asyncio, and the free-threaded build of Python 3.13–3.14 (PEP 703/779) — all in one place.

RHEL Advanced #3: Performance Analysis — sar, top/htop, iostat, vmstat, perf
11 min read

RHEL Advanced #3: Performance Analysis — sar, top/htop, iostat, vmstat, perf

Where to look first when a RHEL machine becomes slow. Get the first picture with top/htop, see CPU/memory/IO at once with vmstat, drill into disks with iostat, follow time with sar, and find CPU hotspots with perf — all framed by the USE (Utilization, Saturation, Errors) methodology in one cycle.

TypeScript Advanced #1: keyof and typeof
3 min read

TypeScript Advanced #1: keyof and typeof

The two most fundamental tools for building types — using keyof to gather keys, typeof to derive types from values, and the patterns that become possible when they meet.

Angular Advanced #2 Signals in depth — computed, effect, model
10 min read

Angular Advanced #2 Signals in depth — computed, effect, model

A deep dive into Signals, Angular's new reactive model. We bring computed, effect, input/output/model, linkedSignal, and the cooperation with RxJS together in one place.

AWS Advanced #3: Lambda Basics
10 min read

AWS Advanced #3: Lambda Basics

Where Lambda fits (vs ECS / EC2), runtime / handler / event / context, sync vs async invocation, cold start and Provisioned Concurrency, concurrency / limits, logging and monitoring — your first AWS serverless building block.

Django Advanced #2: Custom management commands
8 min read

Django Advanced #2: Custom management commands

From what manage.py actually is, to BaseCommand subclassing, argument parsing, cron integration, call_command, and testing — the full picture of custom commands as one axis of Django operations.

Docker in Practice #3: React/Next.js Build Containers — standalone and the NEXT_PUBLIC Place
8 min read

Docker in Practice #3: React/Next.js Build Containers — standalone and the NEXT_PUBLIC Place

Wrapping a Next.js app into a container. The deps → build → runner three-stage pattern with standalone output, the build-time-baking issue with NEXT_PUBLIC env vars, the static-export option, and hosting a Vite SPA with nginx.

K8s Intermediate #6: Autoscaling — HPA / VPA / Cluster Autoscaler
22 min read

K8s Intermediate #6: Autoscaling — HPA / VPA / Cluster Autoscaler

The model covered through [#5](/en/posts/k8s-intermediate-5) was at the dimension of a single Pod's resources and health signals. But operational load swings with time, user patterns, and events, and having a person manually adjust `replicas` each time quickly hits a wall. This post walks through the three dimensions of autoscaling that fill that gap — `HPA` which auto-scales Pod count, `VPA` which auto-recommends and adjusts a Pod's resource requests/limits, and `Cluster Autoscaler` which auto-adds and removes nodes themselves — in one cycle. The metrics-server precondition, HPA's `autoscaling/v2` manifest and algorithm, the asymmetric `behavior` of scale up/down, custom metrics and KEDA, VPA's three components, HPA/VPA conflict, Karpenter — all included.

Modern Python Advanced #4: Async in depth — event loop, gather/wait, async generator
4 min read

Modern Python Advanced #4: Async in depth — event loop, gather/wait, async generator

The next step from intermediate intro — how the event loop actually works, the difference between Future and Task, gather vs wait, async generator, and async iteration.