<?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>Widgita</title><link>https://widgita.xyz/</link><description>Recent content on Widgita</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 20 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://widgita.xyz/index.xml" rel="self" type="application/rss+xml"/><item><title>A CUDA Occupancy Calculator You Can Just Pull Up</title><link>https://widgita.xyz/posts/2026/04/a-cuda-occupancy-calculator-you-can-just-pull-up/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><guid>https://widgita.xyz/posts/2026/04/a-cuda-occupancy-calculator-you-can-just-pull-up/</guid><description>&lt;p&gt;If you&amp;rsquo;ve ever tuned a CUDA kernel, you know the dance: pick a block size, count registers per thread (or let &lt;code&gt;nvcc&lt;/code&gt; tell you with &lt;code&gt;--ptxas-options=-v&lt;/code&gt;), figure out how much shared memory you&amp;rsquo;re using, and then work out how many of those blocks can actually live on an SM at once. NVIDIA used to ship a spreadsheet for this - it was great, but a spreadsheet is exactly the friction I don&amp;rsquo;t want when I&amp;rsquo;m halfway through optimising a kernel and just want a quick &amp;ldquo;is the limiting factor &lt;em&gt;registers&lt;/em&gt; or &lt;em&gt;shared memory&lt;/em&gt; here?&amp;rdquo; answer.&lt;/p&gt;</description></item><item><title>A JWT Decoder That Doesn't Phone Home</title><link>https://widgita.xyz/posts/2026/04/a-jwt-decoder-that-doesnt-phone-home/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><guid>https://widgita.xyz/posts/2026/04/a-jwt-decoder-that-doesnt-phone-home/</guid><description>&lt;p&gt;Every now and then I need to peek inside a JWT - debugging an auth flow, sanity-checking what scopes a CI service account actually has, or figuring out &lt;em&gt;why&lt;/em&gt; a token is being rejected at 23:00 the night before a release. And every time, I&amp;rsquo;d catch myself reaching for whatever JWT decoder Google surfaced first, pasting in a token, and then immediately feeling slightly icky about it. That token might be a service credential. It might still be valid for another six hours. And I just handed it to some random subdomain.&lt;/p&gt;</description></item><item><title>Automated Folder Watching</title><link>https://widgita.xyz/posts/2026/04/automated-folder-watching/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><guid>https://widgita.xyz/posts/2026/04/automated-folder-watching/</guid><description>&lt;p&gt;I used file watching loops for almost my entire career (professionally and personally). It&amp;rsquo;s always been a &lt;code&gt;for&lt;/code&gt; loop or &lt;code&gt;os.walk&lt;/code&gt; or similar (C/C++/Python/SBCL/&amp;hellip;), and it was always lots of boilerplate code. Not difficult, just a bunch of lines to maintain and make sure they catch all corner cases.&lt;/p&gt;
&lt;p&gt;While setting up this blogging pipeline (thank goodness I can just concentrate on the &lt;em&gt;typing&lt;/em&gt; part and deployment happens automagically) I got to learn about gorakhargosh&amp;rsquo;s &lt;code&gt;watchdog&lt;/code&gt; Python library. You should totally check out &lt;a href="https://github.com/gorakhargosh/watchdog"&gt;their GitHub page&lt;/a&gt; for the project! It&amp;rsquo;s a bit dated, but does the job perfectly fine!&lt;/p&gt;</description></item><item><title>Converting Between JSON, YAML, and TOML Without the Awkwardness</title><link>https://widgita.xyz/posts/2026/04/converting-between-json-yaml-and-toml-without-the-awkwardness/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><guid>https://widgita.xyz/posts/2026/04/converting-between-json-yaml-and-toml-without-the-awkwardness/</guid><description>&lt;p&gt;Half my life as an engineer is moving things between configuration formats. A Helm chart wants YAML, the Rust crate wants TOML, the GitHub Action wants YAML again (but a slightly different dialect, naturally), and the thing I&amp;rsquo;m shipping it all into wants JSON. I always end up doing one of two things: opening some random web converter and pasting in a config that probably contains internal hostnames, or writing a five-line Python snippet that I&amp;rsquo;ll write again next week because I never bother to save it.&lt;/p&gt;</description></item><item><title>How Much Will Serving This LLM Actually Cost?</title><link>https://widgita.xyz/posts/2026/04/how-much-will-serving-this-llm-actually-cost/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><guid>https://widgita.xyz/posts/2026/04/how-much-will-serving-this-llm-actually-cost/</guid><description>&lt;p&gt;The question I get asked most often when someone wants to ship an LLM-powered feature is, basically, &amp;ldquo;okay but what&amp;rsquo;s this going to cost?&amp;rdquo; And the honest answer is &lt;em&gt;it depends on a lot of things you haven&amp;rsquo;t decided yet&lt;/em&gt;: which model, what precision, how many tokens per request, how many requests per second at peak, whether you self-host or pay an API provider per token, and whether you can tolerate the cold-start of a serverless GPU. Most of those have order-of-magnitude effects, so a back-of-envelope number can be off by 10x in either direction.&lt;/p&gt;</description></item><item><title>Posting Pipeline All Set Up</title><link>https://widgita.xyz/posts/2026/04/posting-pipeline-all-set-up/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><guid>https://widgita.xyz/posts/2026/04/posting-pipeline-all-set-up/</guid><description>&lt;p&gt;Welcome to Widgita. This first post confirms that the Hugo pipeline picks up
Markdown straight from my Obsidian vault and deploys it to my blog.&lt;/p&gt;
&lt;p&gt;I always wanted to try out this level of automation, and I love the fact that it integrates well with my favourite tools.&lt;/p&gt;
&lt;p&gt;This blog will be my personal scratchpad for any experiments, tryouts, developments, projects, etc. that I do. Mainly for my half personal/half professional growth; and maybe someone else finds interesting crumbs of knowledge, tooling links, or inspiration in it.&lt;/p&gt;</description></item><item><title>Stop Second-Guessing Cron Expressions</title><link>https://widgita.xyz/posts/2026/04/stop-second-guessing-cron-expressions/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><guid>https://widgita.xyz/posts/2026/04/stop-second-guessing-cron-expressions/</guid><description>&lt;p&gt;Cron is one of those things I&amp;rsquo;ve been using for twenty-odd years and still occasionally stare at for thirty seconds before committing. Is &lt;code&gt;*/15 9-17 * * 1-5&lt;/code&gt; what I think it is? Does &lt;code&gt;0 0 * * 0&lt;/code&gt; fire at midnight Sunday or Monday? And does that depend on the box&amp;rsquo;s timezone or UTC? Most of the time you can squint and reason your way through it, but &amp;ldquo;most of the time&amp;rdquo; is exactly the kind of confidence level you don&amp;rsquo;t want when the cron in question is the nightly DB backup.&lt;/p&gt;</description></item></channel></rss>