<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>shay2000 — writing</title><description>Open-source builds, field notes and write-ups from shay2000 — macOS menu-bar utilities, self-hosted services, and the occasional experiment.</description><link>https://shayprasad.me</link><language>en-gb</language><copyright>© 2026 shay2000</copyright><item><title>Finding duplicates without hashing your whole disk</title><link>https://shayprasad.me/writing/duplicate-files-without-the-wait</link><guid isPermaLink="true">https://shayprasad.me/writing/duplicate-files-without-the-wait</guid><description>A three-stage filter that reads 64 KB from each file before committing to a full SHA-256 — and why &apos;size on disk&apos; is the number you actually want to sort by.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><category>Swift</category><category>macOS</category><category>Performance</category><category>SwiftUI</category><author>shay2000</author></item><item><title>Your 140 W charger probably isn&apos;t delivering 140 W</title><link>https://shayprasad.me/writing/honest-wattage</link><guid isPermaLink="true">https://shayprasad.me/writing/honest-wattage</guid><description>macOS reports a wattage that describes the adapter, not what your Mac is actually receiving. Building a menu-bar utility to show the honest number.</description><pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate><category>Swift</category><category>macOS</category><category>Hardware</category><category>Menu bar</category><author>shay2000</author></item><item><title>Modelling a split-flap display in the browser</title><link>https://shayprasad.me/writing/split-flap-in-the-browser</link><guid isPermaLink="true">https://shayprasad.me/writing/split-flap-in-the-browser</guid><description>A mechanical flip board is not an animation, it&apos;s a state machine with a sound effect. Building one in vanilla JavaScript, with no frameworks and no build step.</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate><category>JavaScript</category><category>CSS</category><category>Canvas</category><category>Fun</category><author>shay2000</author></item><item><title>The brightness range macOS won&apos;t show you</title><link>https://shayprasad.me/writing/extended-brightness-range</link><guid isPermaLink="true">https://shayprasad.me/writing/extended-brightness-range</guid><description>XDR displays have headroom past 100%. Here&apos;s what it takes to expose it safely, and why the slider needs a warning label.</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate><category>Swift</category><category>macOS</category><category>Displays</category><category>Menu bar</category><author>shay2000</author></item><item><title>AI summaries that ask permission first</title><link>https://shayprasad.me/writing/consent-first-ai-tooling</link><guid isPermaLink="true">https://shayprasad.me/writing/consent-first-ai-tooling</guid><description>A Zotero plugin built around a consent preview: what leaves your machine, to which provider, how much of it, and what might go wrong — shown before anything is sent.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><category>JavaScript</category><category>Zotero</category><category>Privacy</category><category>AI</category><author>shay2000</author></item><item><title>Turning YouTube channels into a private podcast feed</title><link>https://shayprasad.me/writing/youtube-to-podcast-feed</link><guid isPermaLink="true">https://shayprasad.me/writing/youtube-to-podcast-feed</guid><description>Why podcast clients are so fussy about RSS, what it takes to bundle a whole Python media stack into a Mac app, and how to keep the feed on your own network.</description><pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate><category>Python</category><category>Self-hosting</category><category>Docker</category><category>macOS</category><author>shay2000</author></item></channel></rss>