<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on Hanh Pham's Blog</title><link>https://hanhpham.vercel.app/posts/</link><description>Recent content in Posts on Hanh Pham's Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 02 Oct 2026 16:00:00 +0700</lastBuildDate><atom:link href="https://hanhpham.vercel.app/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>The Oldest Light: How We Measure 13.8 Billion Years Without a Stopwatch</title><link>https://hanhpham.vercel.app/posts/the-oldest-light/</link><pubDate>Fri, 02 Oct 2026 16:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/the-oldest-light/</guid><description>We cannot time the universe with a stopwatch. Here is how astrophysicists measure the 13.8-billion-year age of the cosmos using the Cosmic Microwave Background, atomic recombination, and three independent clocks.</description></item><item><title>Meta-Learning and the Meta-Human: Building Your Personal AI Cognitive Scaffold</title><link>https://hanhpham.vercel.app/posts/meta-learning-and-meta-cognition-for-engineers/</link><pubDate>Fri, 02 Oct 2026 14:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/meta-learning-and-meta-cognition-for-engineers/</guid><description>We will all soon have AI companions integrated into daily life, but passive users risk severe cognitive atrophy. By grounding our workflow in metacognition, the extended mind, and dynamic scaffolding, meta-humans turn personal AI into a high-leverage learning engine.</description></item><item><title>The Renaissance Developer: Why AI Makes Systems Thinking the Ultimate Moat</title><link>https://hanhpham.vercel.app/posts/the-renaissance-developer/</link><pubDate>Fri, 02 Oct 2026 10:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/the-renaissance-developer/</guid><description>When generative AI commoditizes syntax into zero-cost token emissions, the developer&amp;rsquo;s moat shifts from typing code to systems synthesis: understanding how a single concurrent change ripples across database row locks, cache lines, and cloud bills.</description></item><item><title>Docker BuildKit in CI: The Economics of Network I/O vs CPU Compilation</title><link>https://hanhpham.vercel.app/posts/docker-buildkit-caching-economics-in-ci/</link><pubDate>Fri, 02 Oct 2026 09:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/docker-buildkit-caching-economics-in-ci/</guid><description>Enabling remote layer caching in CI often slows builds down instead of speeding them up. Here is how network transit limits, cache thrashing, and local NVMe runners dictate the real economics of container builds.</description></item><item><title>The ISA Is a Contract, Not a Benchmark: What the Instruction Set Still Costs You in 2026</title><link>https://hanhpham.vercel.app/posts/isa-as-a-contract-risc-vs-cisc/</link><pubDate>Thu, 01 Oct 2026 10:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/isa-as-a-contract-risc-vs-cisc/</guid><description>Four decades of micro-op convergence absorbed the classic textbook differences between RISC and CISC, but the instruction set still bills you in three places you cannot optimize away: memory ordering contracts, frontend silicon budgets, and ecosystem sovereignty.</description></item><item><title>Can Every Problem Be Solved by an Algorithm? Alan Turing's 1936 Proof</title><link>https://hanhpham.vercel.app/posts/alan-turing-computable-numbers-entscheidungsproblem/</link><pubDate>Wed, 30 Sep 2026 16:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/alan-turing-computable-numbers-entscheidungsproblem/</guid><description>A step-by-step deconstruction of Alan Turing&amp;rsquo;s 1936 paper: how formalizing the mechanical computer and adapting Cantor&amp;rsquo;s diagonal argument proved that algorithmic omniscience is mathematically impossible.</description></item><item><title>GitOps Reality with ArgoCD: When Declarative State Fights the Database</title><link>https://hanhpham.vercel.app/posts/gitops-argocd-database-migration-reality/</link><pubDate>Wed, 30 Sep 2026 09:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/gitops-argocd-database-migration-reality/</guid><description>GitOps treats application deployments as stateless Git diffs, but production backends run on stateful databases. Here is why automated Git rollbacks break under schema migrations, and how to decouple delivery safely.</description></item><item><title>CFS Quota Throttling &amp; Silent OOMKills: The Fallacy of Kubernetes CPU Limits</title><link>https://hanhpham.vercel.app/posts/kubernetes-cfs-cpu-throttling-and-resource-limits/</link><pubDate>Mon, 28 Sep 2026 09:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/kubernetes-cfs-cpu-throttling-and-resource-limits/</guid><description>Setting hard CPU limits on latency-sensitive microservices destroys p99 response times while average utilization appears deceptively low. Here is how Linux CFS quotas, Go GOMAXPROCS, and GOMEMLIMIT actually behave under load.</description></item><item><title>Zero-Downtime Kubernetes: Why preStop Sleep 5 Is an Architectural Anti-Pattern</title><link>https://hanhpham.vercel.app/posts/kubernetes-rolling-updates-and-connection-draining/</link><pubDate>Sat, 26 Sep 2026 09:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/kubernetes-rolling-updates-and-connection-draining/</guid><description>Slapping a five-second sleep into your container lifecycle masks a distributed control plane race condition. Here is how packet routing, EndpointSlice propagation, and application connection draining actually fit together.</description></item><item><title>Terraform State Decomposition: Blast Radius vs The Integration Tax</title><link>https://hanhpham.vercel.app/posts/terraform-blast-radius-and-state-decomposition/</link><pubDate>Thu, 24 Sep 2026 09:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/terraform-blast-radius-and-state-decomposition/</guid><description>Splitting a monolithic terraform.tfstate into fifty micro-states speeds up plans, but introduces cross-stack read locks, secret leakage, and brittle dependencies. Here is how to structure state boundaries without the integration tax.</description></item><item><title>Deleting Language from the LLM: Inside TypeSafe's Jev and Decision Models</title><link>https://hanhpham.vercel.app/posts/typesafe-jev-decision-models/</link><pubDate>Tue, 22 Sep 2026 09:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/typesafe-jev-decision-models/</guid><description>When you force a 70-billion-parameter language model to output &amp;rsquo;true&amp;rsquo; or &amp;lsquo;false&amp;rsquo;, you pay for sequential token decoding, uncalibrated probabilities, and broken JSON. Here is why TypeSafe stripped natural language out of the loop.</description></item><item><title>The Four-Layer AI Coding Stack: Why Your Assistant Fails (and It's Not the Model)</title><link>https://hanhpham.vercel.app/posts/the-four-layer-ai-coding-stack/</link><pubDate>Sat, 19 Sep 2026 09:30:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/the-four-layer-ai-coding-stack/</guid><description>Most developer frustration with AI coding assistants comes from conflating the editor, the agent loop, the gateway, and the model. Here is how the four layers actually fit together, where failures originate, and how to build a setup that survives production work.</description></item><item><title>WSL2 and tmux: Clean Clipboard Integration Without the Latency or Garbage Characters</title><link>https://hanhpham.vercel.app/posts/tmux-wsl-clipboard-integration/</link><pubDate>Sat, 12 Sep 2026 10:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/tmux-wsl-clipboard-integration/</guid><description>Piping tmux selections directly to clip.exe leaves trailing pane padding, broken prompt glyphs, and line ending mismatches in your clipboard. Here is a fast, sanitized copy-paste pipeline built for WSL2.</description></item><item><title>Apple M4 vs Huawei Ascend 950: Two Theories of the AI Chip</title><link>https://hanhpham.vercel.app/posts/m4-vs-ascend-950/</link><pubDate>Wed, 09 Sep 2026 09:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/m4-vs-ascend-950/</guid><description>One is a fixed-function FP16 block hidden inside a laptop chip Apple won&amp;rsquo;t document. The other is a programmable FP4 datacenter engine Huawei ships in 8,192-chip fabrics. Same goal, opposite theses: here&amp;rsquo;s what the M4 family actually is, and what the numbers do and don&amp;rsquo;t mean against the Ascend 950.</description></item><item><title>tmux Panes &amp; Windows: The Bindings That Actually Matter</title><link>https://hanhpham.vercel.app/posts/tmux-pane-window-management/</link><pubDate>Tue, 08 Sep 2026 09:30:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/tmux-pane-window-management/</guid><description>Most tmux guides dump the whole key table on you. These are the pane and window bindings that survive contact with a real workday: splits, navigation, layout, and the marked-pane tricks tmux never bound for you.</description></item><item><title>Huawei's Ascend 950 &amp; DaVinci v3: How China Built a Competitive AI Chip Without EUV</title><link>https://hanhpham.vercel.app/posts/huawei-ascend-950-davinci-v3/</link><pubDate>Mon, 07 Sep 2026 09:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/huawei-ascend-950-davinci-v3/</guid><description>DeepSeek just ordered 160,000 Huawei Ascend 950DT chips: a chip built on a DUV-only process, with self-developed HBM and a homegrown interconnect, because export controls left no other choice. Here&amp;rsquo;s how the thing actually works, and where it still falls short.</description></item><item><title>Making a Multi-Step SQL Server Script's Rollback Actually Trustworthy</title><link>https://hanhpham.vercel.app/posts/sql-server-trustworthy-rollback-xact-abort/</link><pubDate>Sun, 06 Sep 2026 11:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/sql-server-trustworthy-rollback-xact-abort/</guid><description>When one step in a multi-step SQL Server script fails, what actually happens to your data depends entirely on how you&amp;rsquo;ve wired up error handling, and the default is not what most people assume. Three scenarios, measured with real ledger output.</description></item><item><title>When a Wildcard Join Multiplies Your Data (and How to Actually Fix It)</title><link>https://hanhpham.vercel.app/posts/sql-server-wildcard-joins-and-unpivot/</link><pubDate>Sat, 05 Sep 2026 10:30:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/sql-server-wildcard-joins-and-unpivot/</guid><description>A join rule that matches &amp;lsquo;anything&amp;rsquo; looks like an ordinary filter, until it quietly multiplies your row count. Measured, not estimated: what a wildcard join actually costs, why a CREATE INDEX line doesn&amp;rsquo;t always buy you a seek, and why UNPIVOT beats a ten-way OR chain.</description></item><item><title>Go 1.27 Is Quietly Load-Bearing</title><link>https://hanhpham.vercel.app/posts/go-1-27-is-quietly-load-bearing/</link><pubDate>Fri, 04 Sep 2026 10:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/go-1-27-is-quietly-load-bearing/</guid><description>Generic methods finally landed, json/v2 is already running underneath your code, and the allocator got faster while you weren&amp;rsquo;t looking. Six of this release&amp;rsquo;s changes take effect without you opting in; here&amp;rsquo;s which ones will cost you an afternoon.</description></item><item><title>Designing an Order Workflow: Putting the Patterns Together</title><link>https://hanhpham.vercel.app/posts/microservices-designing-an-order-workflow/</link><pubDate>Thu, 03 Sep 2026 09:30:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/microservices-designing-an-order-workflow/</guid><description>Boundaries, communication styles, technology, and sagas all sound reasonable in isolation. Here&amp;rsquo;s what it looks like to actually apply all four decisions to one real workflow, in order.</description></item><item><title>Agentic Coding Assistants, and Why I Don't Let Them Grade Their Own Work</title><link>https://hanhpham.vercel.app/posts/how-ai-actually-fits-into-my-dev-workflow/</link><pubDate>Wed, 02 Sep 2026 10:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/how-ai-actually-fits-into-my-dev-workflow/</guid><description>&amp;ldquo;Agentic&amp;rdquo; gets thrown around loosely, but it means something specific: an assistant that decides its own next step instead of waiting for yours. That&amp;rsquo;s also exactly why you can&amp;rsquo;t trust it to tell you when it&amp;rsquo;s done a good job; here&amp;rsquo;s the verification habit that fixes that.</description></item><item><title>When Two-Phase Commit Isn't the Answer: Sagas for Microservice Transactions</title><link>https://hanhpham.vercel.app/posts/microservices-sagas-vs-two-phase-commit/</link><pubDate>Tue, 01 Sep 2026 10:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/microservices-sagas-vs-two-phase-commit/</guid><description>Splitting a monolith means splitting its database transactions too. The instinct is to reach for a distributed transaction. Here&amp;rsquo;s why that instinct is usually wrong, and what to do instead.</description></item><item><title>How I Started Learning Reverse Engineering (and What I Wish I Knew First)</title><link>https://hanhpham.vercel.app/posts/how-i-started-learning-reverse-engineering/</link><pubDate>Sat, 29 Aug 2026 15:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/how-i-started-learning-reverse-engineering/</guid><description>I spent my first month with Ghidra staring at assembly I didn&amp;rsquo;t understand, convinced I was too stupid for this. Here&amp;rsquo;s the honest version of how I got from &amp;lsquo;what is a register&amp;rsquo; to solving CTF reversing challenges, and the mistakes that cost me weeks.</description></item><item><title>Anti-Debugging Tricks: When the Binary Fights Back</title><link>https://hanhpham.vercel.app/posts/anti-debugging-tricks/</link><pubDate>Thu, 27 Aug 2026 11:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/anti-debugging-tricks/</guid><description>Some binaries detect that you&amp;rsquo;re debugging them and crash, change behavior, or hide the flag. This post covers the common anti-debugging techniques and how to bypass them.</description></item><item><title>Custom VMs in CTF: When the Binary Speaks Its Own Language</title><link>https://hanhpham.vercel.app/posts/custom-vms-in-ctf/</link><pubDate>Tue, 25 Aug 2026 10:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/custom-vms-in-ctf/</guid><description>Some CTF reversing challenges hide the flag behind a custom virtual machine: a program that interprets its own bytecode. This post shows you how to spot them, reverse the instruction set, and write a solver.</description></item><item><title>Your First Crackme: A Walkthrough from strings to Flag</title><link>https://hanhpham.vercel.app/posts/your-first-crackme-walkthrough/</link><pubDate>Sat, 22 Aug 2026 14:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/your-first-crackme-walkthrough/</guid><description>A crackme is a small binary that asks for a password and checks your input. This post walks through solving one, from downloading the binary to extracting the flag, with every tool click explained so you can follow along.</description></item><item><title>REST, gRPC, GraphQL, or a Broker: Picking Your Communication Tech</title><link>https://hanhpham.vercel.app/posts/microservices-picking-communication-tech/</link><pubDate>Thu, 20 Aug 2026 09:30:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/microservices-picking-communication-tech/</guid><description>The communication style (sync/async, request-response/event-driven) narrows the field. Here&amp;rsquo;s how the actual technologies stack up once you&amp;rsquo;re choosing among them.</description></item><item><title>Ghidra in 30 Minutes: Reading Assembly Without Hating It</title><link>https://hanhpham.vercel.app/posts/ghidra-in-30-minutes/</link><pubDate>Tue, 18 Aug 2026 11:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/ghidra-in-30-minutes/</guid><description>Ghidra&amp;rsquo;s decompiler turns machine code into something that looks like C. But the output is full of strange variable names, weird casts, and functions that look nothing like what you&amp;rsquo;d write. Here&amp;rsquo;s how to read it anyway.</description></item><item><title>Debugging Microservices: Where Did That Request Go?</title><link>https://hanhpham.vercel.app/posts/debugging-microservices-where-did-that-request-go/</link><pubDate>Sat, 15 Aug 2026 10:30:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/debugging-microservices-where-did-that-request-go/</guid><description>In a monolith, a stack trace tells you what went wrong. In microservices, you&amp;rsquo;re grepping across three services&amp;rsquo; logs at 2 AM trying to figure out which one lost the request. Here&amp;rsquo;s how to make that possible instead of painful.</description></item><item><title>Versioning Microservices Without Breaking Everyone</title><link>https://hanhpham.vercel.app/posts/microservices-versioning-without-breaking-everyone/</link><pubDate>Thu, 13 Aug 2026 15:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/microservices-versioning-without-breaking-everyone/</guid><description>In a monolith, renaming a field means updating all callers in one commit. In microservices, consumers upgrade on their own schedule, so your API has to evolve without breaking the ones that haven&amp;rsquo;t upgraded yet. Here&amp;rsquo;s how.</description></item><item><title>Running Microservices Locally Without Docker Compose Hell</title><link>https://hanhpham.vercel.app/posts/microservices-local-dev-without-docker-compose-hell/</link><pubDate>Tue, 11 Aug 2026 10:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/microservices-local-dev-without-docker-compose-hell/</guid><description>You split the monolith into twelve services. Now a new developer&amp;rsquo;s first week is spent getting Docker Compose to run all twelve on their laptop, and half of them crash because of a port conflict. Here&amp;rsquo;s how to make local development work without the pain.</description></item><item><title>Deploying Microservices Without the Fear</title><link>https://hanhpham.vercel.app/posts/microservices-deploying-without-the-fear/</link><pubDate>Sat, 08 Aug 2026 14:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/microservices-deploying-without-the-fear/</guid><description>In a monolith, deploy means pushing one thing. In microservices, every service deploys independently, which is the whole point, until you realize that &amp;lsquo;independently&amp;rsquo; also means &amp;lsquo;without knowing what the other services are doing right now.&amp;rsquo;</description></item><item><title>Database Per Service: The Pattern That's Harder Than It Sounds</title><link>https://hanhpham.vercel.app/posts/microservices-database-per-service/</link><pubDate>Thu, 06 Aug 2026 09:30:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/microservices-database-per-service/</guid><description>Each service owns its database. That&amp;rsquo;s the rule. But when a report needs data from four services, or a customer wants to see their complete order history, you&amp;rsquo;ve got a query problem that a single SELECT can&amp;rsquo;t solve. Here&amp;rsquo;s how to handle it.</description></item><item><title>Service Mesh: When You Actually Need One (and When You Don't)</title><link>https://hanhpham.vercel.app/posts/microservices-service-mesh-when-you-actually-need-one/</link><pubDate>Tue, 04 Aug 2026 11:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/microservices-service-mesh-when-you-actually-need-one/</guid><description>A service mesh gives you mTLS, traffic management, and observability without changing application code. It also gives you another piece of infrastructure to operate, debug, and explain to new hires. Here&amp;rsquo;s how to tell whether the trade-off is worth it.</description></item><item><title>Go Performance Profiling with pprof: Finding the Slow Part</title><link>https://hanhpham.vercel.app/posts/go-performance-profiling-with-pprof/</link><pubDate>Sat, 01 Aug 2026 10:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/go-performance-profiling-with-pprof/</guid><description>Your Go service is slow, but you don&amp;rsquo;t know where. Guessing is not a strategy. pprof tells you exactly where your program spends its time, memory, and CPU; here&amp;rsquo;s how to use it.</description></item><item><title>The Five Ways Microservices Talk to Each Other</title><link>https://hanhpham.vercel.app/posts/microservices-five-ways-to-talk/</link><pubDate>Thu, 30 Jul 2026 10:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/microservices-five-ways-to-talk/</guid><description>Before picking REST, gRPC, or Kafka, you need to answer a more basic question: does this interaction block, and does the caller expect an answer? Get that wrong and no technology choice saves you.</description></item><item><title>What Actually Makes a Good Microservice Boundary</title><link>https://hanhpham.vercel.app/posts/microservices-boundaries-coupling-cohesion/</link><pubDate>Tue, 28 Jul 2026 10:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/microservices-boundaries-coupling-cohesion/</guid><description>Before you draw a single service boundary, you need a vocabulary for why some splits age well and others turn into a distributed monolith. Coupling and cohesion are that vocabulary.</description></item><item><title>Should You Even Use Microservices?</title><link>https://hanhpham.vercel.app/posts/should-you-even-use-microservices/</link><pubDate>Sat, 25 Jul 2026 10:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/should-you-even-use-microservices/</guid><description>Microservices are a solution to organizational scaling problems, not a technology choice. Here&amp;rsquo;s how to tell whether you actually have the problem they solve, before you pay the cost.</description></item><item><title>Caching Geospatial Queries Without a Specialized Geo Database</title><link>https://hanhpham.vercel.app/posts/caching-geospatial-queries-without-a-geo-database/</link><pubDate>Thu, 23 Jul 2026 15:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/caching-geospatial-queries-without-a-geo-database/</guid><description>You don&amp;rsquo;t need PostGIS or a geohash library to cache repeat road-distance lookups: rounding coordinates and a unique index gets you most of the win.</description></item><item><title>Self-Hosting a Routing Engine Instead of Paying Per API Call</title><link>https://hanhpham.vercel.app/posts/self-hosting-a-routing-engine/</link><pubDate>Tue, 21 Jul 2026 14:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/self-hosting-a-routing-engine/</guid><description>Road distance, not straight-line distance, is what travel expense claims and delivery pricing actually need, here&amp;rsquo;s how to get it without a metered maps API.</description></item><item><title>Page Bundles, Images, and Shortcodes</title><link>https://hanhpham.vercel.app/posts/using-images-and-shortcodes/</link><pubDate>Sat, 18 Jul 2026 11:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/using-images-and-shortcodes/</guid><description>Keeping a post and its images together with Hugo page bundles, plus the built-in figure shortcode.</description></item><item><title>Syntax Highlighting with Hugo</title><link>https://hanhpham.vercel.app/posts/hugo-code-blocks-demo/</link><pubDate>Thu, 16 Jul 2026 10:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/hugo-code-blocks-demo/</guid><description>Hugo ships with built-in syntax highlighting via Chroma, no plugins required.</description></item><item><title>Welcome to My Blog</title><link>https://hanhpham.vercel.app/posts/welcome-to-my-blog/</link><pubDate>Tue, 14 Jul 2026 09:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/welcome-to-my-blog/</guid><description>A quick hello and a look at how this site is put together.</description></item></channel></rss>