<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Binary Yoga</title><link>https://yogirk.dev/</link><description>Recent content on Binary Yoga</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 04 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://yogirk.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>'Merge On False' Is Not the Anti-Pattern You Think It Is</title><link>https://yogirk.dev/posts/merge-on-false-is-not-the-antipattern/</link><pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate><guid>https://yogirk.dev/posts/merge-on-false-is-not-the-antipattern/</guid><description>I set out to prove MERGE ON FALSE is an anti-pattern in BigQuery. The data told a different story. The real culprit is unclustered tables and unscoped delete clauses.</description></item><item><title>Why I Build Things</title><link>https://yogirk.dev/posts/why-i-build-things/</link><pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate><guid>https://yogirk.dev/posts/why-i-build-things/</guid><description>Using a tool teaches you the tool. Building your own teaches you the domain. That is why I keep making things, even when something usable already exists.</description></item><item><title>Why I Gave Up on Remote-Controlling Gemini CLI (With a Working Prototype)</title><link>https://yogirk.dev/posts/why-i-gave-up-on-remote-controlling-gemini-cli/</link><pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate><guid>https://yogirk.dev/posts/why-i-gave-up-on-remote-controlling-gemini-cli/</guid><description>&lt;p&gt;This was in my drafts for far too long. Things are changing rapidly, with the Claude Code codebase leak this week and these tools evolving daily holding it any longer risks making the learnings dated. I will start with a disclaimer Gemini CLI is probably last in my lineup of preferred agent harnesses — behind Claude Code, Codex, pi.dev, opencode. But that&amp;rsquo;s one of the reasons why I chose it for this exercise. I wanted to understand &lt;em&gt;why&lt;/em&gt; some of these tools feel fast and some don&amp;rsquo;t, &lt;em&gt;why&lt;/em&gt; Claude Code&amp;rsquo;s remote control feels native while no equivalent exists (yet) for Gemini. Building the thing myself felt like the best way to find out. So when Claude remote was first announced a few weeks ago, I started building the equivalent for Gemini CLI. This post is mainly about how I failed and what I learned along the way&lt;/p&gt;</description></item><item><title>Why Terminal TUI Apps Can't Have Both Scroll and Text Selection</title><link>https://yogirk.dev/posts/why-terminal-tui-apps-cant-have-both-scroll-and-text-selection/</link><pubDate>Tue, 24 Mar 2026 00:00:00 +0000</pubDate><guid>https://yogirk.dev/posts/why-terminal-tui-apps-cant-have-both-scroll-and-text-selection/</guid><description>&lt;h2 id="the-background"&gt;The Background&lt;/h2&gt;
&lt;p&gt;I am currently building &lt;a href="https://github.com/yogirk/cascade"&gt;Cascade&lt;/a&gt;, AI-native terminal agent for GCP data engineering. Think Claude Code and Cortex CLI - but for GCP data engineering. However, this is still pre-alpha and I might end up scrapping the current project completely, in favour of some other stack in future, depending on what I learn while building this. However, as things stand today - Cascade is a Go terminal app, built on &lt;a href="https://github.com/charmbracelet/bubbletea"&gt;Bubble Tea v2&lt;/a&gt;, styled with &lt;a href="https://github.com/charmbracelet/lipgloss"&gt;Lip Gloss&lt;/a&gt; and I am also using the Charm ecosystem in general for components like viewports, keymaps, and terminal mouse handing. The first time I got to explore this stack was when I was building another TUI app for GCP called, well, &lt;a href="https://github.com/yogirk/tgcp"&gt;TGCP&lt;/a&gt; :)&lt;/p&gt;</description></item><item><title>Poking around a streaming platform's unsecured API</title><link>https://yogirk.dev/posts/poking-around-a-streaming-platforms-unsecured-api/</link><pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate><guid>https://yogirk.dev/posts/poking-around-a-streaming-platforms-unsecured-api/</guid><description>&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.etvwin.com/"&gt;ETVWin&lt;/a&gt; is a Telugu streaming platform. Growing up in the 90s, ETV was the only source of entertainment for many Telugu households. It was a cultural phenomenon. So I thought, they have a huge library of nostalgia inducing content. But there is one problem - their site search sucks!&lt;/p&gt;
&lt;figure class="figure "&gt;
 &lt;div class="figure-image-wrapper" style="background-image: url('/posts/poking-around-a-streaming-platforms-unsecured-api/image_hu_cf22264b8c5de0a3.png'); aspect-ratio: 2340 / 922;"&gt;
 &lt;picture&gt;
 &lt;source srcset="https://yogirk.dev/posts/poking-around-a-streaming-platforms-unsecured-api/image_hu_859c6a7ae33af6c.webp 640w, https://yogirk.dev/posts/poking-around-a-streaming-platforms-unsecured-api/image_hu_29b86e9a974d7b83.webp 960w, https://yogirk.dev/posts/poking-around-a-streaming-platforms-unsecured-api/image_hu_b53d043af5485847.webp 1280w, https://yogirk.dev/posts/poking-around-a-streaming-platforms-unsecured-api/image_hu_f7e1ce165bdb426b.webp 1920w" sizes="(min-width: 1024px) 75ch, 100vw" type="image/webp"&gt;
 &lt;source srcset="https://yogirk.dev/posts/poking-around-a-streaming-platforms-unsecured-api/image_hu_73f7ed084007b8ba.png 640w, https://yogirk.dev/posts/poking-around-a-streaming-platforms-unsecured-api/image_hu_ee55f155df73c4ff.png 960w, https://yogirk.dev/posts/poking-around-a-streaming-platforms-unsecured-api/image_hu_b07fca2cdeffaf19.png 1280w, https://yogirk.dev/posts/poking-around-a-streaming-platforms-unsecured-api/image_hu_4787a9dae3e36c97.png 1920w" sizes="(min-width: 1024px) 75ch, 100vw" type="image/png"&gt;
 &lt;img class="figure-image" src="https://yogirk.dev/posts/poking-around-a-streaming-platforms-unsecured-api/image_hu_b07fca2cdeffaf19.png" alt="ETVWin search results showing poor search experience" width="2340" height="922" loading="lazy" onload="this.parentElement.parentElement.classList.add('is-loaded')"&gt;
 &lt;/picture&gt;
 &lt;/div&gt;
 
&lt;/figure&gt;
&lt;p&gt;Armed with Claude Code, I decided to poke around a bit and see if there is a way to find what I was looking for. I trusted them to have designed a bad system and I was sure I could find a way around it. With a bit of poking around, I ended up downloading their entire catalog and building a local search engine for it.&lt;/p&gt;</description></item><item><title>About</title><link>https://yogirk.dev/pages/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yogirk.dev/pages/about/</guid><description>&lt;p&gt;There are people who produce knowledge and there are those who consume it. I am the latter. I am trying to build things I wish had always existed, primarily to amuse myself and as a way of learning. If you find any of this useful, that&amp;rsquo;s a bonus.&lt;/p&gt;
&lt;p&gt;This is a personal blog. I plan to write about cloud, building tools, agentic engineering, open source, data analytics, databases, and occasionally about good books and music. I believe in &lt;a href="https://paulgraham.com/writes.html"&gt;Paul Graham&amp;rsquo;s thesis&lt;/a&gt; : &amp;ldquo;a world divided into writes and write-nots&amp;rdquo;. Writing is thinking with clarity. This blog is my public notebook.&lt;/p&gt;</description></item></channel></rss>