[{"content":"Most personal blogs die in their first six months. I know this because I\u0026rsquo;ve killed two of mine. So why start another?\nThree reasons.\n1. A place that\u0026rsquo;s mine Twitter, Substack, Medium — they all decide what your writing looks like, who sees it, and whether it stays online. A static site on a $5 VPS is the closest thing to owning your words on the modern web. The whole stack here is Hugo generating HTML, Nginx serving files, and a Let\u0026rsquo;s Encrypt cert. If any of those shut down tomorrow, the content is still a folder of Markdown on my laptop.\n2. Writing helps me think I have a recurring pattern: I think I understand something, I sit down to write about it, I realize I don\u0026rsquo;t, I go re-read the docs, I figure it out properly, then the post comes out. The post is a side effect. The thinking is the point.\n3. Future me will thank me The TIL posts I plan to write are mostly for me, six months from now, when I\u0026rsquo;ve forgotten how EXPLAIN (ANALYZE, BUFFERS) works. If two other people benefit, that\u0026rsquo;s bonus.\nTopics will mostly be:\nEngineering — backend, databases, distributed systems, the occasional Rust deep-dive TIL — short notes on things I just learned Reading — books and papers Life — occasional, low effort Comments below run on Giscus — sign in with GitHub if you want to leave one.\nSee you around.\n","permalink":"https://czs007.com/posts/hello-world/","summary":"Why I\u0026rsquo;m starting another blog in 2026.","title":"Hello, world"},{"content":"I built this whole site in one weekend for $70/year. Here\u0026rsquo;s the stack and the reasoning behind each piece.\nThe stack Layer Choice Cost Domain czs007.com via Cloudflare Registrar $10/yr VPS Vultr Tokyo, 1 vCPU / 1 GB RAM $60/yr DNS Cloudflare (DNS-only) Free TLS Let\u0026rsquo;s Encrypt Free Web server Nginx Free Site generator Hugo + PaperMod Free Comments Giscus (GitHub Discussions backed) Free Total: ~$70/year.\nWhy each choice Hugo over WordPress / Ghost / Notion Static files have one nice property: there\u0026rsquo;s no backend to hack, no database to back up, and they can serve themselves on any web server forever. I write in Markdown, run hugo, and end up with a folder of HTML.\nPaperMod over fancier themes PaperMod is the most popular Hugo theme for a reason: it\u0026rsquo;s clean, supports dark mode out of the box, includes search, has built-in Giscus integration, and the maintainer is responsive.\nVultr over AWS / DigitalOcean I needed a VPS in Tokyo (lower latency to Asia) at the cheapest price tier that still has IPv4. AWS Lightsail is similar but Vultr\u0026rsquo;s hourly billing makes IP rotation free if you ever need it.\nCloudflare for everything domain-related Cloudflare Registrar sells .com at cost (~$10/yr vs $20+ at GoDaddy). I\u0026rsquo;m using DNS-only (no proxy), but their nameservers are fast and the dashboard is the cleanest in the industry.\nGiscus over Disqus Disqus has ads, slow loads, tracking, and is blocked in China. Giscus stores comments in your repo\u0026rsquo;s GitHub Discussions — every commenter signs in with GitHub, which on a tech blog is basically 100% of readers.\nWhat I\u0026rsquo;d do differently If I were starting over and didn\u0026rsquo;t care about latency to Asia, I\u0026rsquo;d put the VPS in US East and turn on Cloudflare proxy (orange cloud) for the CDN. This trades flexibility (no end-to-end TLS) for performance.\nBut I do want a friend in China to be able to read this without going through GFW, so DNS-only it is.\nWhat\u0026rsquo;s next Now that the infrastructure is in place, the hard part begins: actually writing.\n","permalink":"https://czs007.com/posts/setting-up-this-blog/","summary":"$70 a year, one weekend, fully owned.","title":"Setting up this blog: Hugo + Vultr + Cloudflare"},{"content":"I\u0026rsquo;ve used EXPLAIN ANALYZE for years without realizing how much I was missing by not adding BUFFERS.\nEXPLAIN (ANALYZE, BUFFERS) SELECT * FROM orders WHERE user_id = 12345; The output now includes lines like:\nBuffers: shared hit=1 read=247 shared hit=1 → 1 page came from Postgres\u0026rsquo; shared buffer cache read=247 → 247 pages had to be fetched (from OS cache or disk) This matters because the same query can take 0.3 ms or 30 ms depending on whether the data is hot. If you\u0026rsquo;re chasing tail latency, EXPLAIN ANALYZE alone will lie to you on a warm cache.\nThe takeaway When debugging slow queries, always use BUFFERS. Run the query twice:\nFirst run shows the cold-cache cost (read is high) Second run shows the warm-cache cost (shared hit is high) The gap between them is your storage I/O dependency. Big gap = your query is disk-bound under cold cache, which means latency spikes after restarts or cache evictions.\nAnnoyingly, EXPLAIN ANALYZE executes the query, so don\u0026rsquo;t run it on DELETE / UPDATE in production unless you wrap it in a transaction and roll back.\n","permalink":"https://czs007.com/posts/til-explain-buffers/","summary":"BUFFERS tells you whether your query hit cache or disk.","title":"TIL: EXPLAIN ANALYZE vs EXPLAIN (ANALYZE, BUFFERS)"},{"content":"I\u0026rsquo;m Zack Cao (Cao Zhenshan / 曹振山). I\u0026rsquo;m a backend engineer based in the United States, working on distributed systems and databases.\nThis site is where I keep notes on engineering, occasional reading lists, and small bits of personal life I want to remember. Most posts are written for my future self — if you find them useful, that\u0026rsquo;s a bonus.\nYou can also find me at:\nGitHub: github.com/czs007 Email: hi at this domain (will set up later) The site is built with Hugo and the PaperMod theme. Source is on GitHub. No tracking, no ads.\n","permalink":"https://czs007.com/about/","summary":"About Zack Cao","title":"About"},{"content":" A /now page is what I\u0026rsquo;d tell a friend who I hadn\u0026rsquo;t seen in a year.\nLast updated: May 2026\nWorking on Day job: backend / distributed systems stuff Side: setting up this blog (you\u0026rsquo;re reading the result) Reading Designing Data-Intensive Applications — slowly, the second time Learning More Rust async internals Vector search and on-device LLM inference Life In the United States for now Trying to write here at least once a month ","permalink":"https://czs007.com/now/","summary":"What I\u0026rsquo;m doing now","title":"Now"}]