<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Bhargav Deshpande</title><description>Bhargav Deshpande — B.Sc. Data Science student at MIT-WPU, Pune. I build backend-heavy full-stack systems.</description><link>https://penzulo.dev/</link><item><title>`save` not `&gt;`: piping tar into a tuned xz compression in nushell</title><link>https://penzulo.dev/til/nushell-save-vs-redirect-piping-tar-xz/</link><guid isPermaLink="true">https://penzulo.dev/til/nushell-save-vs-redirect-piping-tar-xz/</guid><description>To compress a folder you first bundle it into a single file (tar), then compress that file (xz) — which naively means juggling three artifacts: the folder, the intermediate .tar, and the final .tar.xz…</description><pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Every `impl Trait` argument is its own anonymous type parameter</title><link>https://penzulo.dev/til/rust-impl-trait-separate-generics/</link><guid isPermaLink="true">https://penzulo.dev/til/rust-impl-trait-separate-generics/</guid><description>From a Rustlings traits exercise: two impl Trait arguments look like they share one bound, but each occurrence is a separate generic parameter.</description><pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Run self-contained test files in parallel with Nu&apos;s `par-each`</title><link>https://penzulo.dev/til/nushell-par-each-parallel-tests/</link><guid isPermaLink="true">https://penzulo.dev/til/nushell-par-each-parallel-tests/</guid><description>In my LeetCode grind each solution file is self-contained: the function, its unittest cases, and an if name == &quot;main&quot; block that runs the tests — so uv run solution.py runs that file&apos;s suite. With a f…</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Dispatch pattern: a decorator-registered command registry instead of if-else</title><link>https://penzulo.dev/til/python-dispatch-pattern-decorators/</link><guid isPermaLink="true">https://penzulo.dev/til/python-dispatch-pattern-decorators/</guid><description>When a function must branch on a command string, an if/elif tree grows one branch at a time and the dispatcher bloats. The dispatch pattern replaces the tree with a registry: a command → handler mappi…</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate></item><item><title>CLI progress bars are just `\r` rewriting one line</title><link>https://penzulo.dev/til/cli-progress-bar-carriage-return/</link><guid isPermaLink="true">https://penzulo.dev/til/cli-progress-bar-carriage-return/</guid><description>A progress bar doesn&apos;t draw a new line per tick — it rewrites the same line over and over. The trick is the \r escape sequence: a carriage return that resets the cursor to the start of the current lin…</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate></item><item><title>`rm` and `mv` touch the index, not the data — why `node_modules` takes forever</title><link>https://penzulo.dev/til/rm-unlink-mv-rename/</link><guid isPermaLink="true">https://penzulo.dev/til/rm-unlink-mv-rename/</guid><description>rm does not erase your file from disk. Neither does mv &quot;move&quot; your file. Both work on the filesystem&apos;s index — the metadata that says &quot;this name points at this data&quot; — which is why deleting a folder w…</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Parenthesized `with` — multiple context managers in one clean block</title><link>https://penzulo.dev/til/python-parenthesized-with-context-managers/</link><guid isPermaLink="true">https://penzulo.dev/til/python-parenthesized-with-context-managers/</guid><description>Since Python 3.10 you can wrap the context managers of a with statement in parentheses, so several resources share one block instead of nested with blocks. Same cleanup semantics, flatter code.</description><pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Drive the whole OpenAPI contract with Annotated metadata in FastAPI and Pydantic</title><link>https://penzulo.dev/til/fastapi-pydantic-annotated-metadata/</link><guid isPermaLink="true">https://penzulo.dev/til/fastapi-pydantic-annotated-metadata/</guid><description>FastAPI and Pydantic both read Annotated metadata, merge it into the OpenAPI spec, and Orval turns that spec into a complete typed client. Write the contract once; get validation on the backend and a…</description><pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Generate a résumé in LaTeX with an AI agent and render it on Overleaf</title><link>https://penzulo.dev/til/latex-resume-overleaf/</link><guid isPermaLink="true">https://penzulo.dev/til/latex-resume-overleaf/</guid><description>The best résumé workflow I&apos;ve found: give an AI agent your raw material and let it write the LaTeX. You paste the result into Overleaf, it compiles to PDF, and you download it. No word processor invol…</description><pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Stop every running Docker container with Nu&apos;s splat operator</title><link>https://penzulo.dev/til/nushell-splat-docker-stop/</link><guid isPermaLink="true">https://penzulo.dev/til/nushell-splat-docker-stop/</guid><description>Stop all running containers in one command using nushell&apos;s splat operator:</description><pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Get the machine&apos;s IP address with Nu&apos;s sys net</title><link>https://penzulo.dev/til/nushell-sys-net-ip/</link><guid isPermaLink="true">https://penzulo.dev/til/nushell-sys-net-ip/</guid><description>Nushell&apos;s sys command exposes system info as structured data, so you can query it with filter syntax instead of scraping text out of ip addr or ifconfig with awk/grep.</description><pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Postgres LISTEN/NOTIFY for lightweight worker queues</title><link>https://penzulo.dev/til/postgres-listen-notify-worker-queue/</link><guid isPermaLink="true">https://penzulo.dev/til/postgres-listen-notify-worker-queue/</guid><description>Redis is the usual answer for job queues, but Postgres has a built-in pub/sub mechanism — LISTEN/NOTIFY — that covers simple worker patterns without adding another piece of infrastructure.</description><pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Make URL search params the source of truth with TanStack Router and Query</title><link>https://penzulo.dev/til/tanstack-search-params-source-of-truth/</link><guid isPermaLink="true">https://penzulo.dev/til/tanstack-search-params-source-of-truth/</guid><description>Stop duplicating state between the URL and component state. With TanStack Router + TanStack Query, the URL search params are the state, and the router turns any change into a data reload.</description><pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Moving to homelab infra made things 4x slower, and I blamed the wrong thing</title><link>https://penzulo.dev/blog/watchtower-throughput/</link><guid isPermaLink="true">https://penzulo.dev/blog/watchtower-throughput/</guid><description>I built Watchtower, a self hosted log ingestion pipeline. Moving infra off my dev machine made throughput 4x worse, and I spent way too long blaming the hardware.</description><pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate></item></channel></rss>