<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Kiran PK — Writing</title><description>Notes from production — concurrency, databases, testing, and the bugs that taught me something.</description><link>https://kiranpk.dev/</link><language>en-us</language><item><title>I Backtested Dual Momentum on Indian Markets Over 19 Years — Here&apos;s What Actually Worked</title><link>https://kiranpk.dev/blog/dual-momentum-nifty-backtest/</link><guid isPermaLink="true">https://kiranpk.dev/blog/dual-momentum-nifty-backtest/</guid><description>19 years of data, 8 rounds of testing, and two silent data bugs that would&apos;ve fooled anyone — building and correcting a dual-momentum strategy for Nifty, Gold, and cash.</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate><category>Quantitative Investing</category><category>Backtesting</category><category>Nifty 50</category></item><item><title>File Signature: How Systems Actually Detect File Types</title><link>https://kiranpk.dev/blog/file-signature/</link><guid isPermaLink="true">https://kiranpk.dev/blog/file-signature/</guid><description>A file extension is a hint, not a fact. How magic bytes actually identify a file — and where signature-based detection breaks down.</description><pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate><category>Systems</category><category>Security</category><category>Golang</category></item><item><title>Concurrency in Practice — A Job Claiming System That Works</title><link>https://kiranpk.dev/blog/job-claiming-concurrency/</link><guid isPermaLink="true">https://kiranpk.dev/blog/job-claiming-concurrency/</guid><description>Concurrency bugs rarely show up in development — they show up when real users hit the same row at once. Building a claim flow that never oversells a job.</description><pubDate>Thu, 01 May 2025 00:00:00 GMT</pubDate><category>Concurrency</category><category>Postgres</category><category>Golang</category></item><item><title>Handling Numeric Input in Go: Base Interpretation Mistakes to Avoid</title><link>https://kiranpk.dev/blog/go-numeric-input/</link><guid isPermaLink="true">https://kiranpk.dev/blog/go-numeric-input/</guid><description>A leading zero quietly turned my input into octal. What Go&apos;s numeric literals actually do, and how to read integers the way you meant to.</description><pubDate>Mon, 11 Nov 2024 00:00:00 GMT</pubDate><category>Golang</category><category>Debugging</category></item><item><title>How I Built a WhatsApp Campaign Internal Tool</title><link>https://kiranpk.dev/blog/whatsapp-campaign-tool/</link><guid isPermaLink="true">https://kiranpk.dev/blog/whatsapp-campaign-tool/</guid><description>Replacing manually-run scripts with a real scheduling and execution system for outreach campaigns — EventBridge, Lambda, and a CSV.</description><pubDate>Fri, 05 Jan 2024 00:00:00 GMT</pubDate><category>Node.js</category><category>AWS</category><category>Architecture</category></item><item><title>Implementing a Simple Cache Invalidation System in Vue.js</title><link>https://kiranpk.dev/blog/vue-cache-invalidation/</link><guid isPermaLink="true">https://kiranpk.dev/blog/vue-cache-invalidation/</guid><description>Caching is the easy half. A pragmatic way to know when cached content on the client has gone stale — and refresh it automatically after a release.</description><pubDate>Tue, 19 Sep 2023 00:00:00 GMT</pubDate><category>Vue.js</category><category>Frontend</category><category>Performance</category></item><item><title>Navigating the Jest Memory Issue — My Workaround</title><link>https://kiranpk.dev/blog/jest-memory/</link><guid isPermaLink="true">https://kiranpk.dev/blog/jest-memory/</guid><description>Our backend API suite ran fine until it didn&apos;t — heap climbing until the runner died. How I chased it down and the workaround that kept CI green.</description><pubDate>Sat, 09 Sep 2023 00:00:00 GMT</pubDate><category>Testing</category><category>Node.js</category><category>Debugging</category></item></channel></rss>