<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Léon Zhang</title>
    <link>https://www.pohvii.cloud</link>
    <description>Latest blog posts from Léon Zhang.</description>
    <language>en-US</language>
    <atom:link href="https://www.pohvii.cloud/rss.xml" rel="self" type="application/rss+xml" />
    <lastBuildDate>Fri, 08 May 2026 00:00:00 GMT</lastBuildDate>

      <item>
        <title>File Upload Architecture: Control in the App, Bytes in Object Storage</title>
        <link>https://www.pohvii.cloud/en/blog/file-upload-architecture-control-in-the-app-bytes-in-object-storage-97edd890</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/file-upload-architecture-control-in-the-app-bytes-in-object-storage-97edd890</guid>
        <pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate>
        <description>A production file upload architecture that keeps authorization, policy, and metadata in the application while sending large file bytes directly to object storage.</description>
        <category>File Uploads</category><category>Object Storage</category><category>Security</category><category>Architecture</category><category>Web Development</category><category>Kubernetes</category>
      </item>
      <item>
        <title>Fail2Ban on k3s: Watching Pod Logs and Blocking Before NAT</title>
        <link>https://www.pohvii.cloud/en/blog/fail2ban-on-k3s-watching-pod-logs-and-blocking-before-nat-2b6f2b46</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/fail2ban-on-k3s-watching-pod-logs-and-blocking-before-nat-2b6f2b46</guid>
        <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
        <description>A practical guide to using Fail2Ban with Kubernetes or k3s logs, preserving client IPs through Traefik, and blocking pod traffic in the raw table PREROUTING chain before Kubernetes service NAT rewrites the packet path.</description>
        <category>Fail2Ban</category><category>Kubernetes</category><category>k3s</category><category>Traefik</category><category>iptables</category><category>Security</category><category>DevOps</category>
      </item>
      <item>
        <title>Do Not Run a Database in a Container Unless You Pin It</title>
        <link>https://www.pohvii.cloud/en/blog/do-not-run-a-database-in-a-container-unless-you-pin-it-e2f09335</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/do-not-run-a-database-in-a-container-unless-you-pin-it-e2f09335</guid>
        <pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate>
        <description>Running MySQL or PostgreSQL in Docker is fine. The real risk is blindly updating mutable image tags instead of pinning versions, testing upgrades, and planning rollback.</description>
        <category>Docker</category><category>MySQL</category><category>PostgreSQL</category><category>Databases</category><category>Containers</category><category>DevOps</category>
      </item>
      <item>
        <title>Installing Windows on Proxmox VE (PVE)</title>
        <link>https://www.pohvii.cloud/en/blog/installing-windows-on-proxmox-ve-pve-9a943890</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/installing-windows-on-proxmox-ve-pve-9a943890</guid>
        <pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate>
        <description>Step-by-step guide for installing Windows 11 on Proxmox with VirtIO drivers, recommended VM settings, and troubleshooting.</description>
        <category>Proxmox</category><category>Windows</category><category>VirtIO</category><category>Virtualization</category>
      </item>
      <item>
        <title>Fix `brew upgrade codex` When Homebrew Says the Latest Version Is Already Installed</title>
        <link>https://www.pohvii.cloud/en/blog/fix-brew-upgrade-codex-when-homebrew-says-the-latest-version-is-already-installed-1a6031a8</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/fix-brew-upgrade-codex-when-homebrew-says-the-latest-version-is-already-installed-1a6031a8</guid>
        <pubDate>Fri, 27 Mar 2026 00:00:00 GMT</pubDate>
        <description>If Homebrew says Codex is already up to date even though the upstream cask is newer, the usual cause is a stale Homebrew API cache or a lagging mirror. Here is the exact fix and why it works.</description>
        <category>Homebrew</category><category>Codex</category><category>macOS</category><category>Package Management</category><category>Caching</category><category>CLI</category>
      </item>
      <item>
        <title>How to Implement Lenis in Next.js App Router</title>
        <link>https://www.pohvii.cloud/en/blog/how-to-implement-lenis-in-nextjs-app-router-1750f15b</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/how-to-implement-lenis-in-nextjs-app-router-1750f15b</guid>
        <pubDate>Fri, 27 Mar 2026 00:00:00 GMT</pubDate>
        <description>A practical guide to setting up Lenis in a fresh Next.js App Router project with TypeScript, including provider wiring, anchor links, sticky-header-safe section navigation, and programmatic scrolling with lenis/react.</description>
        <category>Next.js</category><category>Lenis</category><category>React</category><category>TypeScript</category><category>App Router</category><category>Smooth Scrolling</category>
      </item>
      <item>
        <title>How to Merge GitHub Actions Pull Requests Automatically</title>
        <link>https://www.pohvii.cloud/en/blog/how-to-merge-github-actions-pull-requests-automatically-e38e563a</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/how-to-merge-github-actions-pull-requests-automatically-e38e563a</guid>
        <pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate>
        <description>A concise setup guide for GitHub Actions workflows that open pull requests and merge them automatically, including when to use GitHub auto-merge and when to merge the pull request immediately.</description>
        <category>GitHub Actions</category><category>Pull Requests</category><category>Auto Merge</category><category>Automation</category><category>CI/CD</category><category>GitHub</category>
      </item>
      <item>
        <title>Kubernetes ConfigMap Refresh Under FluxCD: What Actually Updates</title>
        <link>https://www.pohvii.cloud/en/blog/kubernetes-configmap-refresh-under-fluxcd-what-actually-updates-bdbadd86</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/kubernetes-configmap-refresh-under-fluxcd-what-actually-updates-bdbadd86</guid>
        <pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate>
        <description>A practical guide to how ConfigMap updates behave under FluxCD, including the difference between mounted files and environment variables, why some changes do not restart pods, and the rollout patterns that work best in GitOps.</description>
        <category>Kubernetes</category><category>FluxCD</category><category>ConfigMap</category><category>GitOps</category><category>DevOps</category><category>Nginx</category>
      </item>
      <item>
        <title>Add Some Fun While Vibe Coding (Because Codex Is Too Slow)</title>
        <link>https://www.pohvii.cloud/en/blog/add-some-fun-while-vibe-coding-because-codex-is-too-slow-40318781</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/add-some-fun-while-vibe-coding-because-codex-is-too-slow-40318781</guid>
        <pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate>
        <description>Waiting for code generation can feel slow. Here is a quick way to make vibe coding more fun with PeonPing, plus a Dota 2 Axe voice pack setup.</description>
        <category>Vibe Coding</category><category>Developer Tools</category><category>CLI</category><category>Productivity</category><category>Gaming</category>
      </item>
      <item>
        <title>Batch Add Email Addresses to Outlook Contacts</title>
        <link>https://www.pohvii.cloud/en/blog/batch-add-email-addresses-to-outlook-contacts-1eb6dce1</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/batch-add-email-addresses-to-outlook-contacts-1eb6dce1</guid>
        <pubDate>Thu, 27 Nov 2025 00:00:00 GMT</pubDate>
        <description>A practical guide to efficiently adding hundreds of email addresses to your Outlook distribution list using Excel extraction and browser automation.</description>
        <category>Outlook</category><category>Automation</category><category>Python</category><category>Productivity</category><category>Email Management</category>
      </item>
      <item>
        <title>The Complete Guide to favicon.ico - Technical Implementation, SEO Impact, and Automation</title>
        <link>https://www.pohvii.cloud/en/blog/the-complete-guide-to-faviconico-technical-implementation-seo-impact-and-automation-4a1b0ce5</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/the-complete-guide-to-faviconico-technical-implementation-seo-impact-and-automation-4a1b0ce5</guid>
        <pubDate>Mon, 24 Nov 2025 00:00:00 GMT</pubDate>
        <description>Master favicon implementation with this comprehensive guide covering technical specs, SEO benefits, automation scripts, and modern web development best practices.</description>
        <category>SEO</category><category>HTML</category><category>Web Development</category><category>Performance</category><category>PWA</category><category>Automation</category>
      </item>
      <item>
        <title>Routing Home LAN Traffic Through WireGuard VPN</title>
        <link>https://www.pohvii.cloud/en/blog/routing-home-lan-traffic-through-wireguard-vpn-7ac4f457</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/routing-home-lan-traffic-through-wireguard-vpn-7ac4f457</guid>
        <pubDate>Fri, 31 Oct 2025 00:00:00 GMT</pubDate>
        <description>Learn how to configure your WireGuard VPN to access devices on your home LAN network from remote locations. A complete guide covering macOS gateway setup, NAT configuration, and client routing.</description>
        <category>WireGuard</category><category>VPN</category><category>Networking</category><category>macOS</category><category>NAT</category><category>Routing</category><category>Home Lab</category>
      </item>
      <item>
        <title>Designing a View Transition Theme Toggle Animation in Next.js</title>
        <link>https://www.pohvii.cloud/en/blog/designing-a-view-transition-theme-toggle-animation-in-nextjs-86fccc05</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/designing-a-view-transition-theme-toggle-animation-in-nextjs-86fccc05</guid>
        <pubDate>Wed, 15 Oct 2025 00:00:00 GMT</pubDate>
        <description>How we built a theme toggle that expands into light mode and contracts back to dark mode using the View Transitions API, next-themes, and a pinch of Web Animations control.</description>
        <category>Next.js</category><category>React</category><category>Animations</category><category>View Transitions</category><category>Dark Mode</category><category>UI</category>
      </item>
      <item>
        <title>How to Ship HLS Streaming in Next.js with Plyr and ffmpeg</title>
        <link>https://www.pohvii.cloud/en/blog/how-to-ship-hls-streaming-in-nextjs-with-plyr-and-ffmpeg-d3852b51</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/how-to-ship-hls-streaming-in-nextjs-with-plyr-and-ffmpeg-d3852b51</guid>
        <pubDate>Sat, 11 Oct 2025 00:00:00 GMT</pubDate>
        <description>A practical walkthrough on packaging adaptive bitrate video with ffmpeg, wiring HLS into a Next.js app using Plyr, and embedding streams inside MDX blog posts.</description>
        <category>HLS</category><category>Video Streaming</category><category>Next.js</category><category>ffmpeg</category><category>Plyr</category><category>Adaptive Bitrate</category>
      </item>
      <item>
        <title>Why I Switched from Next.js Image to Imgproxy (And You Should Too)</title>
        <link>https://www.pohvii.cloud/en/blog/why-i-switched-from-nextjs-image-to-imgproxy-and-you-should-too-4730f065</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/why-i-switched-from-nextjs-image-to-imgproxy-and-you-should-too-4730f065</guid>
        <pubDate>Wed, 24 Sep 2025 00:00:00 GMT</pubDate>
        <description>Learn how switching from Next.js built-in image optimization to Imgproxy solved critical OOM errors and improved performance. Includes complete implementation guide with CORS configuration and security best practices.</description>
        <category>Next.js</category><category>Image Optimization</category><category>Performance</category><category>Imgproxy</category><category>Memory Management</category><category>CORS</category><category>Web Development</category>
      </item>
      <item>
        <title>Essential Algorithms and Data Structures: A Comprehensive Programming Guide</title>
        <link>https://www.pohvii.cloud/en/blog/essential-algorithms-and-data-structures-a-comprehensive-programming-guide-2f8a9d1c</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/essential-algorithms-and-data-structures-a-comprehensive-programming-guide-2f8a9d1c</guid>
        <pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate>
        <description>Master fundamental algorithms and data structures with practical Java implementations. From binary search to graph algorithms, learn the patterns that power efficient code.</description>
        <category>Algorithms</category><category>Data Structures</category><category>Java</category><category>Programming</category><category>Software Engineering</category><category>Computer Science</category>
      </item>
      <item>
        <title>How to Clear All Blocked Contacts in iOS: The macOS Mail App Solution</title>
        <link>https://www.pohvii.cloud/en/blog/how-to-clear-all-blocked-contacts-in-ios-the-macos-mail-app-solution-7a3c2e1f</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/how-to-clear-all-blocked-contacts-in-ios-the-macos-mail-app-solution-7a3c2e1f</guid>
        <pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate>
        <description>Frustrated with deleting blocked contacts one by one in iOS? Learn how to use the macOS Mail app to bulk delete hundreds of blocked numbers and emails that sync back to your iPhone.</description>
        <category>iOS</category><category>macOS</category><category>iPhone Tips</category><category>Contact Management</category><category>Productivity</category>
      </item>
      <item>
        <title>Mastering SharePoint Development with Microsoft Graph API: Sites.Selected Permissions and Advanced Operations</title>
        <link>https://www.pohvii.cloud/en/blog/mastering-sharepoint-development-with-microsoft-graph-api-sitesselected-permissions-and-advanced-operations-68ca401e</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/mastering-sharepoint-development-with-microsoft-graph-api-sitesselected-permissions-and-advanced-operations-68ca401e</guid>
        <pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate>
        <description>A comprehensive guide to SharePoint development using Microsoft Graph API, covering Sites.Selected permissions, site and list operations, and handling complex field types</description>
        <category>SharePoint</category><category>Microsoft Graph</category><category>API</category><category>Azure AD</category><category>Development</category><category>Security</category>
      </item>
      <item>
        <title>Why Self-Healing URLs Are Essential for Modern Websites</title>
        <link>https://www.pohvii.cloud/en/blog/why-self-healing-urls-are-essential-for-modern-websites-8f4e9d12</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/why-self-healing-urls-are-essential-for-modern-websites-8f4e9d12</guid>
        <pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate>
        <description>Discover how self-healing URLs can transform your website&apos;s SEO, user experience, and maintenance overhead. Learn why major platforms like Amazon and Medium use this powerful technique.</description>
        <category>SEO</category><category>URL Structure</category><category>User Experience</category><category>Web Development</category><category>Content Strategy</category>
      </item>
      <item>
        <title>Zero-Knowledge Password Proofs: How OPAQUE is Revolutionizing Authentication Security</title>
        <link>https://www.pohvii.cloud/en/blog/zero-knowledge-password-proofs-how-opaque-is-revolutionizing-authentication-security-7ce96e45</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/zero-knowledge-password-proofs-how-opaque-is-revolutionizing-authentication-security-7ce96e45</guid>
        <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
        <description>Discover how zero-knowledge password proofs and the OPAQUE protocol are transforming authentication security, eliminating password breaches and protecting user credentials even from servers themselves.</description>
        <category>Cryptography</category><category>Security</category><category>Authentication</category><category>Zero Knowledge</category><category>OPAQUE</category><category>Privacy</category>
      </item>
      <item>
        <title>How to Write a Tech Blog: A Comprehensive Guide</title>
        <link>https://www.pohvii.cloud/en/blog/how-to-write-a-tech-blog-a-comprehensive-guide-0c74e0ba</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/how-to-write-a-tech-blog-a-comprehensive-guide-0c74e0ba</guid>
        <pubDate>Mon, 15 Sep 2025 00:00:00 GMT</pubDate>
        <description>Master the art of technical writing with this complete guide covering topic selection, structure, SEO optimization, and best practices for creating engaging tech content.</description>
        <category>Tech Blogging</category><category>Technical Writing</category><category>Content Creation</category><category>SEO</category>
      </item>
      <item>
        <title>Git LFS (Large File Storage)</title>
        <link>https://www.pohvii.cloud/en/blog/git-lfs-large-file-storage-f83967b1</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/git-lfs-large-file-storage-f83967b1</guid>
        <pubDate>Sat, 06 Sep 2025 00:00:00 GMT</pubDate>
        <description>Practical guide to installing, configuring, and using Git LFS for managing large binary assets efficiently, with tips for tracking, workflow, partial clones, and troubleshooting.</description>
        <category>Git</category><category>Git LFS</category><category>DevOps</category><category>Large Files</category>
      </item>
      <item>
        <title>Spring Boot SPI and AutoConfiguration.imports Technical Guide</title>
        <link>https://www.pohvii.cloud/en/blog/spring-boot-spi-and-autoconfigurationimports-technical-guide-fe8adea7</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/spring-boot-spi-and-autoconfigurationimports-technical-guide-fe8adea7</guid>
        <pubDate>Sat, 06 Sep 2025 00:00:00 GMT</pubDate>
        <description>Deep dive into Spring Boot&apos;s SPI mechanism and the modern AutoConfiguration.imports pipeline, including file formats, processing flow, metadata optimization, migration steps, and real-world examples.</description>
        <category>Spring Boot</category><category>SPI</category><category>AutoConfiguration</category><category>Java</category>
      </item>
      <item>
        <title>VMware Fusion Networking Configuration</title>
        <link>https://www.pohvii.cloud/en/blog/vmware-fusion-networking-configuration-ef79b0dd</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/vmware-fusion-networking-configuration-ef79b0dd</guid>
        <pubDate>Sat, 06 Sep 2025 00:00:00 GMT</pubDate>
        <description>Practical notes on configuring VMware Fusion virtual networks, DHCP/NAT settings, and useful commands on macOS.</description>
        <category>VMware</category><category>macOS</category><category>Networking</category><category>Virtualization</category>
      </item>
      <item>
        <title>Java Class Lifecycle</title>
        <link>https://www.pohvii.cloud/zh/blog/java-class-lifecycle-a3f7abef</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/zh/blog/java-class-lifecycle-a3f7abef</guid>
        <pubDate>Sat, 06 Sep 2025 00:00:00 GMT</pubDate>
        <description>Notes on the Java class loading process including loading, verification, preparation, resolution, initialization, usage, and unloading.</description>
        <category>Java</category><category>JVM</category><category>ClassLoader</category><category>Lifecycle</category>
      </item>
      <item>
        <title>Java Thread Lifecycle</title>
        <link>https://www.pohvii.cloud/zh/blog/java-thread-lifecycle-21a8ca84</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/zh/blog/java-thread-lifecycle-21a8ca84</guid>
        <pubDate>Sat, 06 Sep 2025 00:00:00 GMT</pubDate>
        <description>A concise overview of Java thread states with transitions and practical notes.</description>
        <category>Java</category><category>Concurrency</category><category>Threads</category><category>JVM</category>
      </item>
      <item>
        <title>Java Thread Pool Essentials</title>
        <link>https://www.pohvii.cloud/zh/blog/java-thread-pool-essentials-6cc9397a</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/zh/blog/java-thread-pool-essentials-6cc9397a</guid>
        <pubDate>Sat, 06 Sep 2025 00:00:00 GMT</pubDate>
        <description>Key parameters and behaviors of Java thread pools, including sizing strategy, queues, factories, and rejection policies.</description>
        <category>Java</category><category>Concurrency</category><category>ThreadPool</category><category>Executors</category>
      </item>
      <item>
        <title>JVM Notes — Generations and Tuning</title>
        <link>https://www.pohvii.cloud/zh/blog/jvm-notes-generations-and-tuning-0ef20c39</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/zh/blog/jvm-notes-generations-and-tuning-0ef20c39</guid>
        <pubDate>Sat, 06 Sep 2025 00:00:00 GMT</pubDate>
        <description>Quick notes on JVM memory generations, GC survivor spaces, metaspace, and common tuning flags.</description>
        <category>JVM</category><category>GC</category><category>Performance</category><category>Java</category>
      </item>
      <item>
        <title>Spring Bean LifeCycle</title>
        <link>https://www.pohvii.cloud/zh/blog/spring-bean-lifecycle-54c2adfc</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/zh/blog/spring-bean-lifecycle-54c2adfc</guid>
        <pubDate>Sat, 06 Sep 2025 00:00:00 GMT</pubDate>
        <description>Concise notes on the full Spring Bean lifecycle including instantiation, dependency injection, initialization hooks, BeanPostProcessor phases, usage, and destruction.</description>
        <category>Spring</category><category>Java</category><category>Lifecycle</category><category>Beans</category>
      </item>
      <item>
        <title>Testing Comment System</title>
        <link>https://www.pohvii.cloud/en/blog/testing-comment-system-795aade4</link>
        <guid isPermaLink="true">https://www.pohvii.cloud/en/blog/testing-comment-system-795aade4</guid>
        <pubDate>Fri, 24 Jan 2025 00:00:00 GMT</pubDate>
        <description>A simple test blog post to verify that the Giscus comment system works correctly with our self-healing URL implementation.</description>
        <category>Testing</category><category>Comments</category><category>Blog</category>
      </item>
  </channel>
</rss>