<?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>S Anand</title>
    <link>https://www.s-anand.net/blog/</link>
    <description>Recent content on S Anand</description>
    <generator>Hugo -- 0.156.0</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 07 May 2026 20:45:58 +0800</lastBuildDate>
    <atom:link href="https://www.s-anand.net/blog/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Unresolved questions across disciplines</title>
      <link>https://www.s-anand.net/blog/unresolved-questions-across-disciplines/</link>
      <pubDate>Thu, 07 May 2026 20:45:58 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/unresolved-questions-across-disciplines/</guid>
      <description>&lt;p&gt;I asked Claude: &amp;ldquo;What are the most effective and impactful ways you can help me?&amp;rdquo; One of its ideas was to ask it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What are the three questions this field has not resolved, where the disagreement is substantive and not just semantic? Who represents each position most forcefully?&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- https://claude.ai/chat/0999b5d7-06bc-40ec-81eb-2e15be23f159 --&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-05-07-unresolved-questions-across-disciplines.avif&#34;&gt; &lt;!-- https://chatgpt.com/c/69fc8ed1-5248-83ea-9322-c62889c8d667 --&gt;&lt;/p&gt;
&lt;p&gt;So I posed this question about several subjects. This is a great way to discover the frontiers of knowledge in a field.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://claude.ai/share/03ccf372-1735-420a-9f6d-067ebe135af8&#34;&gt;Mathematics&lt;/a&gt; &lt;!-- https://claude.ai/chat/d257e632-8c22-4243-8f5d-ffc8d34b89b4 --&gt;
&lt;ul&gt;
&lt;li&gt;Are mathematical objects (numbers, sets, complex numbers) real, independent of human minds? Or useful fiction? Do we discover or invent them?&lt;/li&gt;
&lt;li&gt;Is there &lt;em&gt;one&lt;/em&gt; true set theory or a multiverse of equally valid set theories, e.g. where the continuum hypothesis is true vs false?&lt;/li&gt;
&lt;li&gt;Are theorems true or false, even if we can&amp;rsquo;t prove them?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://claude.ai/share/1152e888-10a2-4a24-a805-973906eda1b3&#34;&gt;Biology&lt;/a&gt; &lt;!-- https://claude.ai/chat/be92b6ae-9c04-4f07-97a0-20730bf04727 --&gt;
&lt;ul&gt;
&lt;li&gt;Does natural selection operate at a gene, individual, or group level?&lt;/li&gt;
&lt;li&gt;Does evolution proceed through gene mutation + selection, or do we need to add epigenetics, niche construction, and developmental bias?&lt;/li&gt;
&lt;li&gt;Which came first - RNA or mitochondria?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://claude.ai/share/6054648c-2bca-433e-b18b-61924a6dcc75&#34;&gt;Physics&lt;/a&gt; &lt;!-- https://claude.ai/chat/2b6e4c7f-7001-4fd7-99a5-1b97cf804888 --&gt;
&lt;ul&gt;
&lt;li&gt;What actually happens when a quantum system is measured?&lt;/li&gt;
&lt;li&gt;When a black hole evaporates, is the information about what fell in preserved (and how) in the Hawking radiation, or destroyed?&lt;/li&gt;
&lt;li&gt;Why does the universe have a strong entropy increase toward the future but not the past?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://claude.ai/share/e15e4544-48a0-43d8-b276-8737af37406e&#34;&gt;Computer science&lt;/a&gt; &lt;!-- https://claude.ai/chat/83c66b33-e18b-4574-9a94-b62785092a39 --&gt;
&lt;ul&gt;
&lt;li&gt;Is P really equal to NP?&lt;/li&gt;
&lt;li&gt;Can fault-tolerant quantum computers actually be built?&lt;/li&gt;
&lt;li&gt;Can we really achieve AGI with computation?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://claude.ai/share/58a53c0c-af89-4d71-9147-c10b660fe93b&#34;&gt;Finance&lt;/a&gt; &lt;!-- https://claude.ai/chat/02f84cc5-f1b5-4ef6-b6b3-bef38f9d660b --&gt;
&lt;ul&gt;
&lt;li&gt;Do asset prices track underlying value or market narrative / noise?&lt;/li&gt;
&lt;li&gt;Why is the historical US equity premium (~6%) so high that it implies a ~30–40x risk aversion?&lt;/li&gt;
&lt;li&gt;Is financial instability inevitable in capitalism, or is it due to external shocks?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://claude.ai/share/d63da084-6364-4062-a96d-4b64d515b636&#34;&gt;Psychology&lt;/a&gt; &lt;!-- https://claude.ai/chat/3ec2bb1c-804c-4df9-9fdd-2c559aa9a5dc --&gt;
&lt;ul&gt;
&lt;li&gt;Are emotions hard-wired (hence discovered) or constructed from more primitive ingredients?&lt;/li&gt;
&lt;li&gt;Does trauma hide the memory that we recover later, or are these recovered pieces fabricated?&lt;/li&gt;
&lt;li&gt;In psychotherapy, do specific techniques work? Or is it just the relationship?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://claude.ai/share/6be781dd-6fec-4efb-85a6-d199cbda72c6&#34;&gt;History&lt;/a&gt; &lt;!-- https://claude.ai/chat/2f7d46a8-6282-4986-90cc-89c611675897 --&gt;
&lt;ul&gt;
&lt;li&gt;Were the atomic bombings of Japan militarily necessary?&lt;/li&gt;
&lt;li&gt;Was the Holocaust planned from the start, or did it emerge from bureaucratic chaos?&lt;/li&gt;
&lt;li&gt;Did the Industrial Revolution raise or lower living standards for ordinary workers?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://claude.ai/share/26a665bb-60d8-4154-8ef2-143376ca32e4&#34;&gt;Geography&lt;/a&gt; &lt;!-- https://claude.ai/chat/c0a4c5ca-2ee9-436d-9a84-7a9f74b19c7d --&gt;
&lt;ul&gt;
&lt;li&gt;Does physical geography cause big changes to human outcomes in the long run?&lt;/li&gt;
&lt;li&gt;Are places about a geographic location or about the flow of capital, people, and power that flow through?&lt;/li&gt;
&lt;li&gt;Are local, regional, national, &amp;hellip; really nested ways of organizing society, or an ineffective way of thinking about geography?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Tracking redirects minimally</title>
      <link>https://www.s-anand.net/blog/tracking-redirects-minimally/</link>
      <pubDate>Thu, 07 May 2026 16:28:22 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/tracking-redirects-minimally/</guid>
      <description>&lt;p&gt;Everyone needs a tracking URL shortener.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Why tracking?&lt;/strong&gt; I want to know if they opened my email and clicked the link.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Why shortener?&lt;/strong&gt; I want them to know what the link is about. For example, &lt;a href=&#34;https://r.s-anand.net/edge-remote-debugging.html&#34;&gt;https://r.s-anand.net/edge-remote-debugging.html&lt;/a&gt; is so much more meaningful than &lt;a href=&#34;https://chatgpt.com/share/68528565-0d34-800c-b9ec-6dccca01c24c&#34;&gt;https://chatgpt.com/share/68528565-0d34-800c-b9ec-6dccca01c24c&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;ve used redirection services in the past - like &lt;code&gt;t.co&lt;/code&gt;, &lt;code&gt;bit.ly&lt;/code&gt;, &lt;code&gt;goo.gl&lt;/code&gt;, &lt;code&gt;ow.ly&lt;/code&gt;, and others. They tend to vanish, start charging, serve ads, etc.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s my solution: &lt;strong&gt;use static HTML for redirection&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-05-07-tracking-redirects-minimally.avif&#34;&gt; &lt;!-- https://chatgpt.com/c/69fc5f20-2dfc-83ea-82c4-9096c77374f3 --&gt;&lt;/p&gt;
&lt;p&gt;For example, &lt;a href=&#34;https://r.s-anand.net/example.html&#34;&gt;https://r.s-anand.net/example.html&lt;/a&gt; redirects to &lt;a href=&#34;https://example.com/&#34;&gt;https://example.com/&lt;/a&gt;. Here&amp;rsquo;s the code:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;script data-goatcounter=&amp;#34;https://sanand0.goatcounter.com/count&amp;#34; async src=&amp;#34;//gc.zgo.at/count.js&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;meta http-equiv=&amp;#34;refresh&amp;#34; content=&amp;#34;0; url=https://example.com/&amp;#34;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The first line sets up tracking with &lt;a href=&#34;https://www.goatcounter.com/&#34;&gt;GoatCounter&lt;/a&gt;, which is my current favorite analytics provider. It might vanish, but I can export the data if required and move to another. While it lasts, I can check how often the link was used.&lt;/p&gt;
&lt;p&gt;I can create personalized links. For example, &lt;a href=&#34;https://r.s-anand.net/example.html?ref=user1&#34;&gt;https://r.s-anand.net/example.html?ref=user1&lt;/a&gt; tags &lt;code&gt;user1&lt;/code&gt;. I can create unique links for each recipient.&lt;/p&gt;
&lt;p&gt;The second redirects to the target page immediately.&lt;/p&gt;
&lt;p&gt;I have deployed the files on a CloudFlare R2 bucket with a custom domain, which is practically free and fast. But I can switch at any point to any other hosting provider (e.g. GitHub Pages, etc.) by just copying the files and changing the DNS settings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Advantages&lt;/strong&gt;: No hosting, no fees, no maintainance, no vendor lock-in.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>How the Innovation Team works</title>
      <link>https://www.s-anand.net/blog/how-the-innovation-team-works/</link>
      <pubDate>Sun, 03 May 2026 16:15:15 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/how-the-innovation-team-works/</guid>
      <description>&lt;p&gt;Based on 44 meeting recordings from February to late April 2026, here&amp;rsquo;s how Straive&amp;rsquo;s small team (3-6 people at any time, mostly freshers and interns) produce a continuous stream of client-facing demos across topics as diverse as image filtering, geospatial analysis, insurance contract verification, NFL medical scoring, OCR benchmarking, and song similarity clustering — often with a 24–48 hour turnaround from assignment to demo.&lt;/p&gt;
&lt;!-- https://claude.ai/chat/01381de8-0037-4096-bd00-90f5a3c0b1b0 --&gt;
&lt;section ai-disclosure=&#34;ai-generated&#34; data-ai-model=&#34;claude-sonnet-4.6&#34; data-ai-provider=&#34;Anthropic&#34;&gt;
&lt;p&gt;Here is how the team works:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Build demos, not products.&lt;/strong&gt; Every task traces to a specific client meeting with a known date. &amp;ldquo;Done&amp;rdquo; means good enough to show once to one audience — not production-ready. The moment a demo works, it gets shown; refinement happens only if the client asks for more.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Show output first, always.&lt;/strong&gt; Start every update by showing the thing — not explaining what you did to build it. If you don&amp;rsquo;t have output yet, say so in one sentence and then show where you are. Process is for after the food arrives.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One person holds all client context.&lt;/strong&gt; The team lead attends client meetings, filters what matters, and translates it into specific buildable tasks. Team members build; they don&amp;rsquo;t need to know why. This keeps work relevant and prevents wasted effort on misaligned output.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Explore broadly, cut ruthlessly.&lt;/strong&gt; Multiple tracks run simultaneously — robotics, embeddings, OCR, formal logic — but anything that doesn&amp;rsquo;t demo well gets dropped fast. The sequence is always: assign a loose exploration, see output quickly, deepen what works, kill what doesn&amp;rsquo;t.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compress everything.&lt;/strong&gt; Small files, single HTML pages, 50KB images, 30-line YAMLs. This isn&amp;rsquo;t aesthetic — demos need to load in bad hotel WiFi, repos need to clone in meetings, and files need to forward over email. Technical choices serve the demo context.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Make pipelines reproducible after they work.&lt;/strong&gt; Once a demo runs, it needs shell scripts or CLI commands that reproduce it from scratch. No committed data, no manual steps, no &amp;ldquo;ask X how it works.&amp;rdquo; If someone can&amp;rsquo;t clone and run it, it doesn&amp;rsquo;t exist as an asset.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operate AI agents, don&amp;rsquo;t just use them.&lt;/strong&gt; The team&amp;rsquo;s primary skill is steering coding agents — Codex, Claude Code, Copilot — toward specific outputs under specific constraints. When stuck, push harder (&amp;ldquo;drive it to death&amp;rdquo;), switch agents, or change the prompt. Don&amp;rsquo;t wait for instruction on how to build something; use the agent to figure it out.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Numbers, not observations.&lt;/strong&gt; Every story needs a specific number: 252 test cases passed, $22 for 2,300 slides, 40% cheaper per-deck vs. per-slide. Vague quality claims don&amp;rsquo;t survive a client meeting. If a finding can be quantified, quantify it; if it can&amp;rsquo;t, find a different finding.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Action over analysis.&lt;/strong&gt; The output of every demo should answer &amp;ldquo;what do I do?&amp;rdquo; not &amp;ldquo;what do I know?&amp;rdquo; Sort students by who needs a call today, not by distress score distribution. Surface the critical failure in the warehouse footage, not a compliance percentage. The analysis can be one click away — it should never be the headline.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;However, there are many improvements the team needs to make.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The Single Point of Failure Problem&lt;/strong&gt; The entire team is dependent on Anand for direction, client context, task assignment, quality review, and stakeholder relationships.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Missing: Taxonomy and Discoverability of Demos&lt;/strong&gt; The team produces dozens of demos, benchmarks, and data stories. There&amp;rsquo;s a vague mention of a &amp;ldquo;catalog&amp;rdquo; and a &amp;ldquo;demo list&amp;rdquo; that Anand maintains, but it&amp;rsquo;s personal and opaque.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Missing: Explicit Knowledge Transfer Between Members&lt;/strong&gt; Team members work on parallel tracks with little cross-pollination. X&amp;rsquo;s work on 3D benchmarking uses similar methodology to Y&amp;rsquo;s UMAP work, but they don&amp;rsquo;t reference each other&amp;rsquo;s approaches. When Anand wants them to collaborate, he explicitly engineers it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Presentation Quality Gap&lt;/strong&gt; Team members consistently make the same presentational errors across many months. Anand corrects these every time, but they recur because the corrections aren&amp;rsquo;t being internalized or documented.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Client Handoff Documentation Is Missing&lt;/strong&gt; Several demos reach clients without clear documentation of what was built, what the inputs were, and how to reproduce or extend it. Straive&amp;rsquo;s pitch is &amp;ldquo;here is what AI can do for you&amp;rdquo; — but without handoff documentation, clients can&amp;rsquo;t do anything with the demo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Timing Problem on Model Choices&lt;/strong&gt; The team regularly uses outdated or suboptimal models, then switches when Anand notices. The team doesn&amp;rsquo;t have a maintained &amp;ldquo;current best model for X task&amp;rdquo; reference. Each person relies on whatever they used last time or whatever they happen to know about.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Right Senior Mentorship for the Right Stage&lt;/strong&gt; Anand is simultaneously mentor, product manager, client liaison, and technical reviewer. This works but creates a bottleneck. More importantly, some of the most valuable mentorship happens late. The team would benefit from more structured &amp;ldquo;junior reviews senior&amp;rsquo;s plan before execution&amp;rdquo; moments — not Anand reviewing output after, but Anand reviewing the &lt;em&gt;approach&lt;/em&gt; before.&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
&lt;hr&gt;
&lt;p&gt;Every point is spot on and totally useful to me. The best part is that it just required me to paste the transcripts and ask it to analyze the team&amp;rsquo;s structure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You can analyze your own team meetings too&lt;/strong&gt;. Paste a dozen transcripts into a good AI agent and ask it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Based on these transcripts, what are my team&amp;rsquo;s principles and operating model? How should we improve and why? Share with specific examples from the transcript.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is like hiring a $100/hr organizational consultant to attend your meetings and give you personalized feedback!&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Deploying websites over dinner</title>
      <link>https://www.s-anand.net/blog/deploying-websites-over-dinner/</link>
      <pubDate>Mon, 27 Apr 2026 16:30:50 -0400</pubDate>
      <guid>https://www.s-anand.net/blog/deploying-websites-over-dinner/</guid>
      <description>&lt;p&gt;Over dinner with &lt;a href=&#34;https://www.linkedin.com/in/nishka-gattu-32133b339/&#34;&gt;Nishka&lt;/a&gt;, we were trying to deploy a website. The challenge was: How can we deploy this website, just on mobile, &lt;strong&gt;without getting up from the dinner table&lt;/strong&gt;?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;STEP 1: Hosting&lt;/strong&gt;. On my phone, I dictated to ChatGPT (whose transcription is excellent), copy-pasted that to Gemini (which is faster):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I want to publish specifically a static HTML web page on my own domain.&lt;br&gt;
I want the easiest way that I can host it, preferably just by copy-pasting from my mobile without needing to muck around with Git and the likes of it.&lt;br&gt;
What are the most robust, reliable hosting providers that I could use? I can sort out the domain name myself as long as they support an option to map a custom domain name to them.&lt;br&gt;
Ideally, I am looking for something that is free, preferably free forever.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Top answer: &lt;a href=&#34;https://pages.github.com/&#34;&gt;GitHub Pages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Since Nikki already had a GitHub account, that worked well. Using &lt;a href=&#34;https://github.com/mobile&#34;&gt;GitHub Mobile&lt;/a&gt;, she created a new repository, created a new &lt;code&gt;index.html&lt;/code&gt;, and published it to GitHub Pages - all from the phone, without needing to get up from the dinner table. (The content was vibe-coded later, but the infrastructure was set up during dinner.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;STEP 2: Domain Name&lt;/strong&gt;. Next question - again, to Gemini via ChatGPT dictation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Okay, I want to buy a domain name next. What&amp;rsquo;s the cleanest simplest cheap way that I can get a domain?&lt;br&gt;
For now I&amp;rsquo;m not particular about which domain but I should be able to buy this very easily just on a mobile and I should be able to configure the DNS directly on the mobile itself.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Top answer: &lt;a href=&#34;https://www.cloudflare.com/products/registrar/&#34;&gt;Cloudflare Registrar&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Nikki didn&amp;rsquo;t have a Cloudflare account, but was able to sign up for one easily on the phone.&lt;/p&gt;
&lt;p&gt;After searching for a bit, &lt;a href=&#34;https://www.rexgattu.com/&#34;&gt;rexgattu.com&lt;/a&gt; (the future home page for the youngest member of the family) was available for ~$10/year.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Photo of Rex&#34; loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-04-27-rex-gattu.avif&#34;&gt;&lt;/p&gt;
&lt;p&gt;Her sister&amp;rsquo;s credit card photos were available on her phone, so there was no need to get up from the dinner table to get the card details.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;STEP 3: Setting up DNS&lt;/strong&gt;. The third question was:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How do I point a domain name that I purchased on Cloudflare and his managed by Cloudflare to a GitHub Pages page?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It provided step-by-step instructions: Go to DNS &amp;gt; Records. Add an A record pointing &lt;code&gt;@&lt;/code&gt; to &lt;code&gt;185.199.108.153&lt;/code&gt;. Add a CNAME record pointing &lt;code&gt;www&lt;/code&gt; to &lt;code&gt;[username].github.io&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;She did that. Now &lt;a href=&#34;https://www.rexgattu.com/&#34;&gt;&lt;code&gt;www.rexgattu.com&lt;/code&gt;&lt;/a&gt; pointed to the GitHub Pages site.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;That&amp;rsquo;s it! Our infrastructure has gone to the point where we can deploy a website on a custom domain, without even needing to get up from the table.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Sambar Styles</title>
      <link>https://www.s-anand.net/blog/sambar-styles/</link>
      <pubDate>Sun, 26 Apr 2026 20:21:51 -0400</pubDate>
      <guid>https://www.s-anand.net/blog/sambar-styles/</guid>
      <description>&lt;p&gt;My wife&amp;rsquo;s &lt;a href=&#34;https://en.wikipedia.org/wiki/Sambar_(dish)&#34;&gt;sambar&lt;/a&gt; tastes different from my mother&amp;rsquo;s. And mine, too. When I cooked as a bachelor, my neighbour would pop by, taste the sambar, and exclaim, &amp;ldquo;&lt;a href=&#34;https://en.wikipedia.org/wiki/Rasam_(dish)&#34;&gt;Rasam&lt;/a&gt; super!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/posts/surbhi-bhatia_looked-at-43-sambar-recipes-across-five-south-share-7452601712604811264-b_6o/&#34;&gt;Surbhi&amp;rsquo;s Day 5 of the 30-day challenge was about Sambar&lt;/a&gt; which inspired me to take &lt;a href=&#34;https://docs.google.com/spreadsheets/d/1l7Xu3j4tPHMiouh_BcT6pWu4OMhFWM5eKsKT_dntGRs/edit?gid=710450701#gid=710450701&#34;&gt;her dataset&lt;/a&gt; and create a decision tree for which state a sambar recipe is from based on its ingredients.&lt;/p&gt;
&lt;!-- https://chatgpt.com/c/69ee8bca-cca8-83ea-bf04-600d49e49ba4 --&gt;
&lt;p&gt;&lt;a href=&#34;https://chatgpt.com/share/69eeac30-d330-83ea-8632-1e37e0a4191a&#34;&gt;ChatGPT&lt;/a&gt; started with 68 recipes and built a tree at &lt;strong&gt;41% accuracy&lt;/strong&gt;. As we added more recipes:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Recipes&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Accuracy&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;68&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;41%&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;293&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;42%&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;361&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;55%&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;406&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;54%&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;hellip; the accuracy wasn&amp;rsquo;t improving all that much.&lt;/p&gt;
&lt;p&gt;Here is the classifier script: &lt;a href=&#34;https://files.s-anand.net/blog/2026-04-26-sambar-styles/sambar_fftree.py&#34;&gt;&lt;code&gt;sambar_fftree.py&lt;/code&gt;&lt;/a&gt;. You can run it via:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run https://files.s-anand.net/blog/2026-04-26-sambar-styles/sambar_fftree.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But a ingredients are &lt;strong&gt;snipers&lt;/strong&gt;: rare, precise, devastating.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kokum or goda masala -&amp;gt; Maharashtra.&lt;/strong&gt; 32 for 32 in one run. Perfect.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sesame/gingelly oil -&amp;gt; Tamil Nadu.&lt;/strong&gt; 28 for 32. Strong.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coconut oil + shallots -&amp;gt; Kerala.&lt;/strong&gt; 22 for 29.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Moong dal + no mustard seeds -&amp;gt; Andhra.&lt;/strong&gt; 31 for 36. Better than garlic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Byadagi chillies -&amp;gt; Karnataka.&lt;/strong&gt; 6 for 7. Tiny sample, but clean.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But without some of these strong signals, the sambar could be from &lt;em&gt;anywhere&lt;/em&gt;. Better to abstain when unsure.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-04-26-sambar-styles.avif&#34;&gt;&lt;/p&gt;
&lt;p&gt;Here is the classifier that allows abstentions: &lt;a href=&#34;https://files.s-anand.net/blog/2026-04-26-sambar-styles/sambar_fftree_abstension.py&#34;&gt;&lt;code&gt;sambar_fftree_abstain.py&lt;/code&gt;&lt;/a&gt; and the &lt;a href=&#34;https://files.s-anand.net/blog/2026-04-26-sambar-styles/sambar_recipe_dataset.csv&#34;&gt;dataset I used&lt;/a&gt;. You can run it via:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Download the files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://files.s-anand.net/blog/2026-04-26-sambar-styles/sambar_recipe_dataset.csv &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     https://files.s-anand.net/blog/2026-04-26-sambar-styles/sambar_fftree.py &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     https://files.s-anand.net/blog/2026-04-26-sambar-styles/sambar_fftree_abstension.py
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Run the script with the data I used&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run sambar_fftree_abstension.py --no-download
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Only about a third of recipes have a clear signal.&lt;/p&gt;
&lt;p&gt;Incidentally, &lt;strong&gt;Coconut&lt;/strong&gt; alone is not a Kerala signal. It&amp;rsquo;s more &amp;ldquo;west coast&amp;rdquo;.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;State&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Uses grated coconut&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Karnataka&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;60%&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Kerala&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;58%&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Maharashtra&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;32%&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Tamil Nadu&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;24%&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Andhra&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;14%&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Garlic&lt;/strong&gt; is not Andhra either. In one run, &lt;code&gt;garlic + no coconut&lt;/code&gt; was a 50-50 split between Andhra and Maharashtra.&lt;/p&gt;
&lt;p&gt;Rather than states, it&amp;rsquo;s better to think of styles.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Style&lt;/th&gt;
          &lt;th&gt;Ingredients&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Amti&lt;/td&gt;
          &lt;td&gt;kokum, goda masala&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Tamil tiffin-sambar&lt;/td&gt;
          &lt;td&gt;sesame oil, sambar powder, tamarind&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Kerala coconut-tempering&lt;/td&gt;
          &lt;td&gt;coconut oil, shallots&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Andhra pappu/charu&lt;/td&gt;
          &lt;td&gt;moong dal, less mustard&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Karnataka sweet-roasted&lt;/td&gt;
          &lt;td&gt;byadagi, jaggery, coconut&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Maharashtra is easy to identify if it&amp;rsquo;s &lt;em&gt;amti&lt;/em&gt; style. Without kokum or goda masala, it&amp;rsquo;s generic sambar.&lt;/p&gt;
&lt;p&gt;Tamil Nadu sambar has two distinctive styles: sesame/gingelly oil; or sambar powder + tamarind.&lt;/p&gt;
&lt;p&gt;With all of this, we could identify the state only about one-third of the time based on ~2,000 recipes. But we &lt;em&gt;can&lt;/em&gt; identify the distinctive styles from their ingredients, when it&amp;rsquo;s present.&lt;/p&gt;
&lt;p&gt;Like my bachelor-days sambar, which was missing dal. (No one told me sambar needs dal.) And my neighbour could identify it instantly. As rasam.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Panchayat solves the wrong problem</title>
      <link>https://www.s-anand.net/blog/panchayat-solves-the-wrong-problem/</link>
      <pubDate>Sun, 26 Apr 2026 19:02:18 -0400</pubDate>
      <guid>https://www.s-anand.net/blog/panchayat-solves-the-wrong-problem/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://en.wikipedia.org/wiki/Panchayat_(TV_series)&#34;&gt;Panchayat&lt;/a&gt; Season 1 Episode 7 &lt;a href=&#34;https://www.imdb.com/title/tt12005118/&#34;&gt;Ladka Tez Hai Lekin&amp;hellip;&lt;/a&gt;, at around 17:00, Pradhan asks Abhishek to solve problem 42.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-04-26-panchayat-q-42.avif&#34;&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;42.&lt;/span&gt; A takes 5 days more than B to do a certain job and 9 days more than C.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    A and B together can do the job in the same time as C.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    How many days would A take to do it?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    (a) 16 days
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    (b) 18 days
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    (c) 15 days
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    (d) 20 days
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The correct answer is &lt;a href=&#34;https://chatgpt.com/share/69ee9e7d-b6f4-83ea-8b2d-fcca1c4a374e&#34;&gt;(c) 15 days&lt;/a&gt;. But interestingly, ChatGPT got it wrong the first time too. It said &lt;code&gt;(a) 15 days&lt;/code&gt; instead of &lt;code&gt;(c) 15 days&lt;/code&gt;, and required a fact-check to correct itself.&lt;/p&gt;
&lt;!-- https://chatgpt.com/c/69ee9c0d-3f30-83ea-b714-bbdbe86f794a --&gt;
&lt;p&gt;But Abhishek&amp;rsquo;s steps have &lt;em&gt;nothing&lt;/em&gt; to do with the problem - he proceeds to solve a &lt;em&gt;completely different&lt;/em&gt; problem and ends up with the supposedly correct answer of 37/23.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-04-26-panchayat-a-42.avif&#34;&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(42)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Qty of x in container (100 l) = 40 lts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Qty of y in the container of 100 ltr = 60 ltr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Qty of Milk in final Mix = 100 × 3/4 = 75 ltr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Qty of water in final Mix = 100 − 75 = 25 ltr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[crossed / scratched working]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;x = 40 × 2/3 , 40 × 1/3 = 80/3 , 40/3   [circled]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Qty of Milk &amp;amp; water in 60 ltr of Mix
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;y = (60 × a)/(a + 2) , (60 × 2)/(a + 2)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  = 60a/(a + 2) , 120/(a + 2)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, the problem I&amp;rsquo;m trying to solve is, which of these made the bigger mistake:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Abhishek, who solved a different problem&lt;/li&gt;
&lt;li&gt;ChatGPT, who got the answer right but the option wrong&lt;/li&gt;
&lt;li&gt;The writers of the show, who failed to correct this obvious error&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>AI advice for teams</title>
      <link>https://www.s-anand.net/blog/ai-advice-for-teams/</link>
      <pubDate>Sat, 25 Apr 2026 12:17:03 -0400</pubDate>
      <guid>https://www.s-anand.net/blog/ai-advice-for-teams/</guid>
      <description>&lt;p&gt;I updated my &lt;a href=&#34;https://www.s-anand.net/blog/ai-advice/&#34;&gt;AI Advice&lt;/a&gt; page by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Transcribing my calls in the last 2 months (Gemini 3.1 Pro, &lt;a href=&#34;https://github.com/sanand0/blog/blob/384c39c752a580f7ae9c49fafb44a8a09fb75175/pages/prompts/transcribe-call-recording.md&#34;&gt;&amp;ldquo;Transcribe this call recording&amp;hellip;&amp;rdquo;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Extracting AI advice (Gemini 3 Flash, &amp;ldquo;Summarize ALL AI-related advice &amp;hellip; into 1-sentence bullets&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;Asking &lt;a href=&#34;https://claude.ai/share/5aa54ed5-fc11-4730-9ea8-7ace18dc6c00&#34;&gt;Claude&lt;/a&gt;, ChatGPT, and Gemini to document what&amp;rsquo;s new / changed. &lt;!-- https://claude.ai/chat/f4e096d6-eb76-4ef0-981f-29217514c209 --&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I added this request:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;But, and this is IMPORTANT, analyze my original writing style, write it exactly in that style, and then verify to make sure it follows the same style (correcting where required.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This worked &lt;em&gt;surprisingly&lt;/em&gt; well with Claude 4.6 Sonnet (adaptive). I used the resulting &lt;a href=&#34;https://www.s-anand.net/blog/ai-advice/&#34;&gt;ai-advice.md&lt;/a&gt; almost verbatim.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the full list of changes it suggested:&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-04-25-ai-advice-for-teams.avif&#34;&gt; &lt;!-- https://chatgpt.com/c/69ed0051-b88c-83ea-8c8f-97b42015fd9d --&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The biggest structural update:&lt;/strong&gt; ai-advice.md is still written as &amp;ldquo;how individuals use AI better.&amp;rdquo; Your actual advice has evolved into &amp;ldquo;how people, teams, and organizations operate in the agent era.&amp;rdquo; The whole document should eventually be reorganized to reflect this.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;insert&#34;&gt;INSERT&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Build an AI workspace, not just a chat &lt;em&gt;(Very high frequency — 10+ docs)&lt;/em&gt;&lt;/strong&gt; Every serious AI project needs a project folder containing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; — folder-specific instructions the agent reads on startup&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompts.md&lt;/code&gt; — all prompts version-controlled as source code&lt;/li&gt;
&lt;li&gt;&lt;code&gt;skills/&lt;/code&gt; — encapsulated successful workflows (see #2)&lt;/li&gt;
&lt;li&gt;Git repository with commits at every checkpoint&lt;/li&gt;
&lt;li&gt;Test fixtures, synthetic datasets, logs, outputs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Treat prompts as the real IP. Code is disposable; prompts, tests, and skills are assets.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Encapsulate successful workflows into reusable skills &lt;em&gt;(Very high frequency)&lt;/em&gt;&lt;/strong&gt; Once an agent succeeds at a task three times, encapsulate it: the prompt, tools used, edge cases, constraints, validation tests. Store in a &lt;code&gt;skill.md&lt;/code&gt; file. Skills are the new software libraries — they make workflows deterministically repeatable without re-explaining everything. Use agents to &lt;em&gt;build&lt;/em&gt; these skills by asking them to summarize what they learned.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Run coding agents safely: Git + Docker &lt;em&gt;(Very high frequency)&lt;/em&gt;&lt;/strong&gt; Always: (a) work inside a Git repository and instruct the agent to commit as it goes — &lt;code&gt;git checkout&lt;/code&gt; is your undo button, (b) run agents inside Docker containers so they cannot touch your actual files, (c) use &amp;ldquo;YOLO mode&amp;rdquo; (skip permission prompts) only inside isolated containers. These aren&amp;rsquo;t optional for anything beyond throwaway prototypes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;LLMs hallucinate, but code doesn&amp;rsquo;t&amp;rdquo; — use code as the truth engine &lt;em&gt;(Very high frequency)&lt;/em&gt;&lt;/strong&gt; Broaden &amp;ldquo;have it write code to process numbers&amp;rdquo; significantly. The mantra is: wherever correctness matters, make the AI produce &lt;em&gt;executable code or logic&lt;/em&gt; rather than natural language answers. Code either works or fails — it&amp;rsquo;s binary and auditable. Use domain-specific languages (Prolog-like rule trees, schema validators, policy-as-code) for logic-heavy tasks. This is the primary mechanism for eliminating hallucinations in production.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Build verification into the workflow, not after it &lt;em&gt;(Very high frequency)&lt;/em&gt;&lt;/strong&gt; Verification should be engineered as a product feature, not added as a post-hoc check. Every output should expose: source citations linked to snippets, confidence levels, what&amp;rsquo;s unverifiable, disagreement signals, and audit logs. Use model disagreement as a &lt;em&gt;routing signal&lt;/em&gt; — when models disagree, send to human review; when they agree, lower review priority. Build golden sets to measure actual accuracy on your specific task.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use AI for exception triage, not blanket automation &lt;em&gt;(High frequency)&lt;/em&gt;&lt;/strong&gt; Let AI classify outputs as red/yellow/green: green = automate fully, yellow = flag for review, red = human required. This is more mature than &amp;ldquo;80-90% AI, human for last mile.&amp;rdquo; It says &lt;em&gt;exactly&lt;/em&gt; where the human loop belongs, and it scales: automation handles routine volume while humans focus only on high-stakes exceptions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use synthetic data deliberately &lt;em&gt;(High frequency)&lt;/em&gt;&lt;/strong&gt; Not just &amp;ldquo;realistic fake data for prototyping&amp;rdquo; — generate hypothesis-driven synthetic data that embeds specific behavioral patterns, edge cases, and known failure modes you expect in production. This lets you stress-test before real data arrives, without compliance concerns, and at whatever messiness level you choose.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Treat demos as imagination accelerators &lt;em&gt;(High frequency)&lt;/em&gt;&lt;/strong&gt; Demos are not just proof-of-concept — they are the fastest way to expand what stakeholders think is possible. Use &amp;ldquo;Hollywood set&amp;rdquo; demos: working outputs, simulated backends, precomputed workflows, client-specific synthetic data. Only demo live if the task completes in under 10 minutes. Simulate or precompute slow, expensive, or credential-heavy workflows. Show the output first; defend the architecture only if asked.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Maintain a living model radar — don&amp;rsquo;t freeze model advice &lt;em&gt;(High frequency)&lt;/em&gt;&lt;/strong&gt; Specific model recommendations go stale within months. The durable advice: continuously blind-test frontier models on your &lt;em&gt;exact&lt;/em&gt; task, maintain a benchmark set, and route by capability. Current pattern: Claude for coding/aesthetic/style/writing; ChatGPT for rigorous analysis/financial modeling/extended thinking; Gemini for Google Workspace/research/video/speed. But measure this; don&amp;rsquo;t assume it. Additionally: use LiteLLM or Portkey as open-source gateways for organizational cost observability across models.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The Jevons Paradox applies to knowledge work &lt;em&gt;(High frequency in strategic contexts)&lt;/em&gt;&lt;/strong&gt; AI making cognitive tasks cheaper will &lt;em&gt;increase&lt;/em&gt; total demand for cognitive work, not reduce it. Human roles shift from execution to verification and judgment — but there&amp;rsquo;s a talent crunch coming for verification roles. Hire now for people who can check, certify, and take accountability for AI output.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use games to teach AI, not slide decks &lt;em&gt;(High frequency)&lt;/em&gt;&lt;/strong&gt; Replace passive L&amp;amp;D with Capture the Flag challenges, treasure hunts, forbidden-word jailbreaks, prompt-injection games, and coding-agent races. Evaluate proficiency by task completion speed with an agent, not syntax recall. Design challenges where using a coding agent is the only practical way to finish in time — this creates binary signal: those who can use agents solve everything; those who can&amp;rsquo;t solve nothing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bifurcate hallucination advice: operational vs. creative &lt;em&gt;(Medium-high frequency)&lt;/em&gt;&lt;/strong&gt; Current advice mixes these. Split explicitly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;For operations, facts, finance, law, regulated outputs&lt;/strong&gt;: eliminate hallucinations via multi-agent consensus, code execution, source grounding, and human routing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;For ideation, brainstorming, research&lt;/strong&gt;: deliberately &lt;em&gt;use&lt;/em&gt; hallucinations as stochastic ideation. Run the same prompt multiple times. Use weaker models without extended thinking — &amp;ldquo;speaking without thinking&amp;rdquo; produces more imaginative divergence&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Move from dashboards to answers and actions &lt;em&gt;(High frequency)&lt;/em&gt;&lt;/strong&gt; Replace static BI dashboards with AI that answers &amp;ldquo;what should I do?&amp;rdquo; not just &amp;ldquo;what happened?&amp;rdquo; Ask AI to anticipate a stakeholder&amp;rsquo;s questions and pre-answer them. The endpoint: proactive agents that push insights to individuals rather than passive dashboards that wait to be queried.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sell outcomes, accountability, and verification — not software &lt;em&gt;(High frequency in business contexts)&lt;/em&gt;&lt;/strong&gt; Software is a depreciating asset; any client can regenerate it tomorrow. Durable value: judgment, trust, domain expertise, data access, and taking responsibility for results. Shift toward outcome-based pricing. The &amp;ldquo;neck to catch&amp;rdquo; — human accountability for AI output — is increasingly the product.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Measure AI adoption by behavior, not attendance &lt;em&gt;(Medium frequency)&lt;/em&gt;&lt;/strong&gt; Track: unique days of active use (regularity beats volume), token consumption trends, tool diversity, quality of outputs produced, and business outcomes driven. Usage logs from NetSkope or LLM gateways give better signal than training completion rates.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Assess AI literacy by how people prompt, verify, and recover &lt;em&gt;(High frequency in education contexts)&lt;/em&gt;&lt;/strong&gt; Don&amp;rsquo;t evaluate final answers — AI can produce those. Evaluate: quality of prompts (specificity, guardrails, constraints), ability to identify and fix hallucinations, recovery from errors, and process discipline. Multiple-choice questions are essentially obsolete for AI-era assessment. Assess the &lt;em&gt;process&lt;/em&gt;, not the output.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use AI-native output formats &lt;em&gt;(High frequency)&lt;/em&gt;&lt;/strong&gt; Stop defaulting to PPT or PDF. AI generates HTML, SVG, JSON, interactive dashboards, podcasts, sketch notes, and games better than it generates static slides. A single source document can auto-generate: podcasts, explainer videos, interactive quizzes, sketch notes, executive summaries, slide decks. Use NotebookLM for audio synthesis from diverse sources.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Audit your own behavior via AI &lt;em&gt;(Medium frequency)&lt;/em&gt;&lt;/strong&gt; Feed your own meeting transcripts, email chains, and call recordings into LLMs to find personal blind spots, biases, and recurring errors. Conduct project post-mortems on email threads. Use adversarial prompting — pit GPT against Claude to stress-test your plans. This expands &amp;ldquo;mine your digital exhaust&amp;rdquo; from insight into behavioral coaching.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Optimize content for the agentic web &lt;em&gt;(Medium frequency)&lt;/em&gt;&lt;/strong&gt; More content is now consumed by AI agents than humans. Publish in formats AI can parse, cite, and remix: clean metadata, semantic structure, source links, reusable chunks. Develop MCP connectors to your proprietary content. This is SEO for the agentic era.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ask AI what it needs before starting &lt;em&gt;(Medium frequency)&lt;/em&gt;&lt;/strong&gt; Don&amp;rsquo;t guess what context to provide. Ask: &amp;ldquo;What information, tools, files, and access do you need to do X?&amp;rdquo; Let the agent specify missing pieces before it starts, not halfway through. Simple and dramatically reduces mid-task derailment.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;update&#34;&gt;UPDATE&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Two-Strike Rule → time-box and preserve context before abandoning
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; Abandon after two failed fix attempts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; After two failed repair loops: (a) ask the agent to produce a failure summary, minimal reproduction case, and fresh plan before abandoning, (b) switch to a time limit (2 hours) not an attempt limit, (c) in Docker/YOLO mode, let agents iterate without this limit. The current rule was written for chat-based coding; agentic tools self-correct across many more iterations. Pure restarts discard useful diagnostic context.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Paid subscription → quality + friction, not blanket privacy
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Your data isn&amp;rsquo;t used to train the models. This is the best $20/month.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Paid subscriptions give better models and less friction. For &lt;em&gt;privacy&lt;/em&gt;, the picture is more nuanced: consumer plans (ChatGPT, Claude.ai) have data controls you must check and configure; Enterprise/API plans explicitly exclude training by default. For sensitive work, use Enterprise/API or run locally. Don&amp;rsquo;t assume consumer paid = private. &lt;a href=&#34;https://help.openai.com/en/articles/7730893-data-controls-faq&#34;&gt;OpenAI Data Controls FAQ&lt;/a&gt; Also: maintain subscriptions to all three major models (~$60-80/month), not one. Heavy users: consider the $100/month tier to eliminate friction during peak experimentation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Model recommendations — replace frozen Q1 2026 advice with routing logic
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Claude/Gemini still good at UI. GPT for rigorous testing.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; See INSERT #9. Add: use a more capable model (Claude) to write scripts and instructions for cheaper models (Codex) to execute. Benchmark on your exact task; these rankings shift quarterly.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Intern&amp;rdquo; — expand to multiple mental models by task
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;It&amp;rsquo;s as smart as a post-graduate intern.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; The right mental model depends on task:
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Brilliant but stubborn intern&lt;/em&gt;: excellent at fetching/preparing materials, unreliable for precise design or nuanced judgment&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Fresh MBA who needs full context&lt;/em&gt;: give it the same rules, examples, and feedback you&amp;rsquo;d give a new hire&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Senior mentor to defer to&lt;/em&gt;: for syntax, library knowledge, and coding patterns, AI may know better than you — defer (&amp;ldquo;Mentor Flip&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Alien intelligence that needs coaching&lt;/em&gt;: for novel tasks, it needs explanation, not just instruction&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Human-in-the-loop → human-on-the-loop with exception routing
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Handle 80-90% of effort, human expert for last mile validation.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; More mature framing — &amp;ldquo;human-on-the-loop&amp;rdquo; rather than &amp;ldquo;human-in-the-loop.&amp;rdquo; Build a confidence-building period first; validate; then grant autonomy for routine cases. The human&amp;rsquo;s job is to review exceptions (disagreements, low-confidence, high-stakes), not everything.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Code is disposable&amp;rdquo; → prompts and skills are the real assets
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Code is an AI compilation artifact. Don&amp;rsquo;t get attached to it.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Code is disposable &lt;em&gt;when the workflow is disposable&lt;/em&gt;. But prompts, skills, tests, data contracts, and validation logic are permanent assets that compound in value. Preserve these even when you throw away the code.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Don&amp;rsquo;t learn to code&amp;rdquo; → learn logic, not syntax
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;As a non-technical person, build apps. Don&amp;rsquo;t learn to code.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Don&amp;rsquo;t worship syntax — it&amp;rsquo;s declining in value. But learn enough conceptual fluency to: specify what you want clearly, write test cases, debug outputs, assess security implications, and judge whether AI-generated code is correct. Syntax is less valuable; understanding is not.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Buy, don&amp;rsquo;t build&amp;rdquo; → buy foundations, build thin orchestration
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Don&amp;rsquo;t train models. Build orchestration layers and proprietary data workflows.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Don&amp;rsquo;t build or fine-tune base models (they&amp;rsquo;re obsolete on arrival). Do build: thin domain-specific orchestration, skills/prompt libraries, verification layers, data pipelines, and MCP connectors. Avoid custom SLMs unless you have strict air-gap, privacy, or cost-at-scale constraints — the &amp;ldquo;SLM Depreciation Trap&amp;rdquo; (custom models obsolete before deployment) is real.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Wait for models to improve&amp;rdquo; → apply a 1-3 month ROI window
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Things not possible today will be possible in a few months.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Apply a test: if a workaround won&amp;rsquo;t pay back within 1-3 months, wait. If building creates learning, adoption, or strategic leverage now, prototype anyway. The advice shouldn&amp;rsquo;t be &amp;ldquo;wait&amp;rdquo; or &amp;ldquo;build&amp;rdquo; — it should be &amp;ldquo;calculate the ROI window.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Data safety → specific operational checklist
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; Send schema not data; pick trusted providers; anonymize.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Add specific controls: set Google Drive access to read-only and Gmail to draft-only for AI; keep a dedicated &amp;ldquo;AI-only&amp;rdquo; folder rather than granting full Drive access; use separate browser profiles for work/personal AI; run agents locally (Codex, Claude Code on-machine) for sensitive data; use MCP for restricted, scoped data access. Anonymize before cloud; schema+local-execution for sensitive tabular data.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Hallucinations can be a great feature&amp;rdquo; → boundary-condition this
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Don&amp;rsquo;t always eliminate them. Use as appropriate.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Great for: ideation, research brainstorming, creative divergence, humor. Never acceptable for: facts, finance, law, medicine, safety, or regulated outputs without verification. Be explicit about which mode you&amp;rsquo;re in.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Skills section — &amp;ldquo;declining&amp;rdquo; needs nuance
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current:&lt;/strong&gt; &amp;ldquo;Domain depth&amp;rdquo; listed as declining.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update:&lt;/strong&gt; Routine versions of domain skills decline; judgment-heavy versions grow. Domain depth matters most for: problem framing, validation design, incentive mapping, ethics, and edge-case recognition. Don&amp;rsquo;t blanket-advise people to abandon domain expertise.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;delete&#34;&gt;DELETE&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Two-Strike Rule&lt;/strong&gt; (current form): Outdated for agentic tools; replaced by time-boxing + context preservation |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Paid subscription = privacy&amp;rdquo;&lt;/strong&gt; (the simple version): Factually incomplete; needs the consumer/enterprise/API distinction |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;If all models agree, accept&amp;rdquo;&lt;/strong&gt;: Too strong. Soften to: &amp;ldquo;agreement lowers review priority; measure on a golden set&amp;rdquo; |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Claude/Gemini for UI, GPT for rigorous testing&amp;rdquo; Q1 2026 frozen claim&lt;/strong&gt;: Goes stale; replace with routing logic + model radar |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Prefer less experienced people&amp;rdquo;&lt;/strong&gt; (blunt version): Replace with: &amp;ldquo;prefer AI-native, humble, high-agency people — could be interns, domain experts, or non-coders; the traits are delegation, verification, and fast learning&amp;rdquo; |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Wait for the crisis&amp;rdquo;&lt;/strong&gt; (adoption section): Reframe to: &amp;ldquo;watch for urgency windows; arrive prepared with demos, risk framing, and low-friction integration&amp;rdquo; |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Domain depth is declining&amp;rdquo;&lt;/strong&gt; (blanket): Replace with nuanced version from UPDATE #12 |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Use AI for validation is safe and effective&amp;rdquo;&lt;/strong&gt; (unqualified): Replace with: &amp;ldquo;use AI to &lt;em&gt;design&lt;/em&gt; validation workflows; don&amp;rsquo;t treat AI output as validation itself&amp;rdquo; |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Repurpose content and data&amp;rdquo; TODO placeholder&lt;/strong&gt;: Fill it in or remove it |&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Have it write code to process numbers&amp;rdquo;&lt;/strong&gt;: Upgrade to &amp;ldquo;LLMs hallucinate, but code doesn&amp;rsquo;t&amp;rdquo; — write &lt;em&gt;and execute&lt;/em&gt; code for correctness |&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;contradictions&#34;&gt;Contradictions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Stay out of the way&amp;rdquo; vs. &amp;ldquo;verify everything&amp;rdquo;: Risk ladder: low-risk/creative/prototype = get out of the way; high-risk/regulated/persistent = full verification stack |&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Code is disposable&amp;rdquo; vs. &amp;ldquo;use Git, Docker, versioning&amp;rdquo;: Code may be disposable; &lt;em&gt;recovery, reproducibility, and auditability are not&lt;/em&gt; |&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Don&amp;rsquo;t learn to code&amp;rdquo; vs. &amp;ldquo;candidates need technical depth&amp;rdquo;: Syntax is less valuable; conceptual fluency (logic, testing, security, judgment) is more valuable |&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Buy, don&amp;rsquo;t build&amp;rdquo; vs. &amp;ldquo;build custom pipelines&amp;rdquo;: Don&amp;rsquo;t build foundation models or heavy platforms. Do build thin orchestration, domain workflows, verification layers, skills |&lt;/li&gt;
&lt;li&gt;&amp;ldquo;AI wildly&amp;rdquo; vs. security/privacy constraints: Overuse for low-risk/personal tasks; use enterprise/local/sandboxed patterns for sensitive work |&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Human-in-the-loop&amp;rdquo; vs. autonomous agents: Exception routing: automate routine cases, route edge cases and disagreements to humans |&lt;/li&gt;
&lt;li&gt;Live demos vs. simulated demos: Live only if task completes in under 10 minutes; simulate otherwise |&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Hallucinations as feature&amp;rdquo; vs. eliminate hallucinations: Feature for ideation; eliminated for operations/facts/regulated outputs |&lt;/li&gt;
&lt;li&gt;&amp;ldquo;AI can do health/finance better than experts&amp;rdquo; vs. responsibility: AI supports preparation and second opinions; decisions need qualified human accountability |&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;10-principles&#34;&gt;10 principles&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;The scarce skill is not doing the work; it&amp;rsquo;s choosing the work, feeding the agent context, and verifying the result.&lt;/li&gt;
&lt;li&gt;Prompts, skills, tests, and context files are assets. Code is a byproduct.&lt;/li&gt;
&lt;li&gt;Use AI wildly in low-risk contexts; use it rigorously in high-risk contexts.&lt;/li&gt;
&lt;li&gt;For facts and money, make AI produce evidence. For logic, make it produce code. For operations, make it produce audit trails.&lt;/li&gt;
&lt;li&gt;LLMs hallucinate, but code doesn&amp;rsquo;t. When correctness matters, make AI write and run code.&lt;/li&gt;
&lt;li&gt;Treat demos as imagination accelerators — show what&amp;rsquo;s now possible before arguing about architecture.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t sell software if the client can regenerate it tomorrow. Sell outcomes, accountability, and verification.&lt;/li&gt;
&lt;li&gt;AI training should be a game of doing, breaking, checking, and recovering — not a lecture about tools.&lt;/li&gt;
&lt;li&gt;Every repeated AI success should become a reusable skill. Every failure is training data if you preserve the prompt, output, rejection reason, and fix.&lt;/li&gt;
&lt;li&gt;The risk today is not just hallucination; it&amp;rsquo;s underuse, insecure overuse, and unverified scale.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;suggested-structural-reorganization&#34;&gt;Suggested structural reorganization&lt;/h2&gt;
&lt;p&gt;Your current document answers: &lt;em&gt;&amp;ldquo;What tips should I follow?&amp;rdquo;&lt;/em&gt;
Your actual advice answers: &lt;em&gt;&amp;ldquo;How do I operate in the agent era?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Suggested new top-level structure:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Start here&lt;/strong&gt; — AI is a new operating layer; use it 50 times/day; ask it first, verify consequential outputs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personal habits&lt;/strong&gt; — voice, interview-me, emotions as entry points, digital exhaust, learning by play&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prompting and context&lt;/strong&gt; — outcome-first, sycophancy defense, multiple outputs, style vocabulary&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agentic workspaces&lt;/strong&gt; — project folders, AGENTS.md, skills.md, prompts.md, Git, Docker&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coding with AI&lt;/strong&gt; — vibe code safely; code is disposable; tests/prompts are assets; Playwright; failing tests first&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification and trust&lt;/strong&gt; — citations, code execution, golden sets, multi-model checks, exception routing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data and privacy&lt;/strong&gt; — consumer vs. enterprise vs. API vs. local; least-privilege access patterns&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI adoption in organizations&lt;/strong&gt; — visible leadership use, behavior tracking, games/CTFs, power users, incentive mapping&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Demos, POCs, and business value&lt;/strong&gt; — prototype in hours; synthetic data; Hollywood-set demos; sell outcomes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skills in the AI era&lt;/strong&gt; — grow/shrink/preserve taxonomy (updated)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Education&lt;/strong&gt; — assess process not output; AI-proof questions; monitor the messy middle&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Business models&lt;/strong&gt; — software depreciates; skills/trust/verification appreciate; thin orchestration not heavy platforms&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    <item>
      <title>LLMs are as energy-efficient as brains</title>
      <link>https://www.s-anand.net/blog/llms-are-as-energy-efficient-as-brains/</link>
      <pubDate>Sat, 25 Apr 2026 08:25:37 -0400</pubDate>
      <guid>https://www.s-anand.net/blog/llms-are-as-energy-efficient-as-brains/</guid>
      <description>&lt;p&gt;For a typical &lt;a href=&#34;https://openai.com/index/gdpval/&#34;&gt;GDPVal&lt;/a&gt; style task, humans take ~7 hours and the brain consumes ~135 Wh.
Frontier LLM agents spend 50-500 Wh.
So, we may already be 3x more or less efficient than the brain.&lt;/p&gt;
&lt;p&gt;Roughly in the same ballbark!&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;A colorful, hand-drawn sketchnote infographic comparing the energy efficiency of the human brain versus AI large language model (LLM) agents on complex knowledge tasks (GDPval-style). The vertical 9:16 layout uses bold comic-style lettering, doodles, and icons to explain that humans and AI are roughly comparable in energy use today. At the top, a smiling cartoon brain and a friendly robot stand beside a server rack under the title “Human Brain vs LLM Agents: Who uses less energy to solve hard tasks?” A highlighted “Big Takeaway” section states that AI agents are about 0.3× to 3× as energy-efficient as the human brain, and 2× to 10× more efficient if the whole human body is considered. A central panel explains the concept “Energy = Power × Time,” showing the brain as a low-power, long-duration “marathoner” and the AI as a higher-power, short-duration “sprinter.” The human section illustrates a person working for about 404 minutes (6.7 hours), with the brain consuming roughly 20 watts and about 135 watt-hours per task. The AI section shows a robot completing the same task in about 4.5 minutes, using an estimated 75,000 to 600,000 tokens and roughly 50 to 500 watt-hours of energy. A comparison panel uses a tug-of-war between the brain and robot to show that AI is within a single-digit factor of the brain in efficiency, not orders of magnitude better. Additional panels explain why estimates vary, including factors like whether only the brain or whole body is counted, token usage, and human review overhead. A final summary states that humans think slowly at low power, while AI thinks quickly at higher power, making them roughly comparable today. The infographic includes icons, speech bubbles, and labeled source references to OpenAI GDPval, GPT-5.4 reporting, brain energy use (~20 W), and public estimates of AI energy consumption.&#34; loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-04-25-llms-are-as-energy-efficient-as-brains.avif&#34;&gt; &lt;!-- https://chatgpt.com/c/69eb6cfc-d968-839c-8736-165957db890e --&gt;&lt;/p&gt;
&lt;!-- https://chatgpt.com/c/69eb6cfc-d968-839c-8736-165957db890e --&gt;
</description>
    </item>
    <item>
      <title>My food preferences</title>
      <link>https://www.s-anand.net/blog/my-food-preferences/</link>
      <pubDate>Fri, 24 Apr 2026 14:09:36 -0400</pubDate>
      <guid>https://www.s-anand.net/blog/my-food-preferences/</guid>
      <description>&lt;p&gt;I use ChatGPT to recommend which restaurant I should eat at and what food I should eat. So often that I decided to share a profile of my eating preferences.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2025-04-24-my-food-preferences-2.avif&#34;&gt; &lt;!-- https://chatgpt.com/c/69ebb649-60d8-839c-8c04-9438af5f9c66 --&gt;&lt;/p&gt;
&lt;p&gt;But rather than think about it and type it myself, I asked it to&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Efficiently interview me to identify my food preferences. Document it for AI agents to help me pick restaurants. Plan like an expert.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(Knowing ChatGPT, I also had add &amp;ldquo;efficiently&amp;rdquo; - otherwise it would give me a huge list of questions! Which it did that anyway&amp;hellip;)&lt;/p&gt;
&lt;p&gt;That makes it easy. Now, I just have to answer questions about my preferences, e.g. my budget range, restaurant styles, cuisines etc.&lt;/p&gt;
&lt;p&gt;I also gave it a dump of my daily food log. (This year I&amp;rsquo;ve been logging all the food that I eat - for no reason actually - along with which of those I liked and disliked.) This proved to be a good idea, because it picked up something I didn&amp;rsquo;t realize:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You are unusually tolerant of repeating humble comfort foods at home, &amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Very true. I ate curd rice day and night for 22 years at every meal. I eat &lt;a href=&#34;https://app.yakun.com/kaya-peanut-toast.html&#34;&gt;Kaya Peanut Toast&lt;/a&gt; every day at Ya Kun Kaya Toast. (They make it the instant they see me standing at the back of the line, and miss me when I travel.)&lt;/p&gt;
&lt;p&gt;So, here&amp;rsquo;s my tweaked version of &lt;a href=&#34;https://chatgpt.com/share/69ebb1d6-a528-839e-a410-4141b84a15a9&#34;&gt;ChatGPT&amp;rsquo;s recommended food spec&lt;/a&gt; on how agents should pick for me:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Eggetarian. No meat or seafood; eggs &amp;amp; milk are OK.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Prioritize novel cuisines &amp;amp; known exceptional dishes.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Prefer casual, functional, non-fine dining. SGD $5-20 feels fine.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Any cuisine works: Indian, Italian, Mediterranean, Middle Eastern, ...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Creamy &amp;gt; crunchy &amp;gt; gooey &amp;gt; chewy &amp;gt; airy.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Spicy is good. Heavy, raw, or loud are bad.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Desserts are great! Too sweet is bad.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;E.g. creative fusion, chaat, inventive small plates, nutty flavors, hot cookies, textured desserts.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Prefer 10 min travel, 5 min wait. For exceptional food in a new city, an hour is OK.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;PS: This is styled &lt;em&gt;quite&lt;/em&gt; differently from how ChatGPT writes, but the content was correct.&lt;/p&gt;
&lt;!--
https://chatgpt.com/c/69e90e35-f72c-839d-a67e-df335251d420
https://claude.ai/chat/108b839f-7217-49b0-ad0e-a12e68cf0efe
--&gt;
</description>
    </item>
    <item>
      <title>Using Codex as my OS</title>
      <link>https://www.s-anand.net/blog/using-codex-as-my-os/</link>
      <pubDate>Thu, 23 Apr 2026 21:06:28 -0400</pubDate>
      <guid>https://www.s-anand.net/blog/using-codex-as-my-os/</guid>
      <description>&lt;p&gt;Increasingly, I&amp;rsquo;m using Codex (or other AI coding agents) as the &amp;ldquo;operating system&amp;rdquo; to run programs. That is, rather than directly run programs, I have the coding agent run the program.&lt;/p&gt;
&lt;p&gt;Advantage: If the program breaks, or needs a configuration change, the coding agent debugs it and fixes it. I don&amp;rsquo;t need to do anything.&lt;/p&gt;
&lt;p&gt;This is particularly useful for installation. For example:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Install demucs and run it against my music folder.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It&amp;rsquo;s also useful for brittle scripts. When my WhatsApp scraper broke, I told Codex:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The scraper was working fine but today, it fails. Find out what changed in the WhatsApp Web UI and fix it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Codex researched and replied:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The current scraper still finds the chat area and message rows, but its row-identity parser is now invalid. On March 28 the code assumed each message node had a packed &lt;code&gt;data-id&lt;/code&gt; like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;true_&amp;lt;chat-id&amp;gt;@..._&amp;lt;message-id&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;false_&amp;lt;chat-id&amp;gt;@..._&amp;lt;message-id&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Today, in the live WhatsApp tab, the visible message nodes still exist under &lt;code&gt;#main [role=&amp;quot;row&amp;quot;]&lt;/code&gt;, but &lt;code&gt;data-id&lt;/code&gt; now looks like a bare message ID:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3A4689CE2A81856D4BB0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ACED689BB5C3115D3DD361F3520F9ECE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Because &lt;code&gt;parseDataId()&lt;/code&gt; only accepts the old packed format, it rejects every row, so &lt;code&gt;whatsappMessages()&lt;/code&gt; returns &lt;code&gt;[]&lt;/code&gt;, and the bookmarklet shows &lt;code&gt;Copy 0 messages&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;WhatsApp appears to have split what used to be one overloaded field into separate concerns:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;data-id&lt;/code&gt; now behaves like &lt;code&gt;messageId&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;outgoing direction is likely encoded by DOM class (&lt;code&gt;.message-out&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;chat/thread id is no longer bundled into the row &lt;code&gt;data-id&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;hellip; and went on to share a &amp;ldquo;Recommended hardening plan for future breakages&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;If coding agents can install, configure, write, run, test, and debug programs, &amp;ldquo;Agentic Operating Systems&amp;rdquo; are not nearby. We already have them.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Derived formats with Gemini</title>
      <link>https://www.s-anand.net/blog/derived-formats-with-gemini/</link>
      <pubDate>Sat, 18 Apr 2026 11:26:48 -0400</pubDate>
      <guid>https://www.s-anand.net/blog/derived-formats-with-gemini/</guid>
      <description>&lt;p&gt;The natural capability of Generative AI is to &lt;em&gt;generate&lt;/em&gt; stuff - and Gemini&amp;rsquo;s particularly good with media.&lt;/p&gt;
&lt;p&gt;For example, we can take any document, like this MasterCard report on &lt;a href=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/report.pdf&#34;&gt;The State of Open Finance 2026&lt;/a&gt;, and generate videos, podcasts, sketchnotes, songs, and more from it.&lt;/p&gt;
&lt;p&gt;How?&lt;/p&gt;
&lt;p&gt;I uploaded the &lt;a href=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/report.pdf&#34;&gt;PDF&lt;/a&gt; to &lt;a href=&#34;https://notebooklm.google.com/notebook/26da8a27-fd08-4c98-b0d5-73fefcb9e1dd&#34;&gt;NotebookLM&lt;/a&gt; and created a 20-minute podcast by clicking on Generate Audio Overview - Deep Dive - English - Default.&lt;/p&gt;
&lt;audio controls preload=&#34;metadata&#34;&gt;
  &lt;source src=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/podcast-english.opus&#34; type=&#34;audio/ogg; codecs=opus&#34;&gt;
  &lt;a href=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/podcast-english.opus&#34;&gt;Listen to the English podcast&lt;/a&gt;
&lt;/audio&gt;
&lt;p&gt;It supports multiple languages, so I generated a Chinese and Filipino version as well.&lt;/p&gt;
&lt;audio controls preload=&#34;metadata&#34;&gt;
  &lt;source src=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/podcast-chinese.opus&#34; type=&#34;audio/ogg; codecs=opus&#34;&gt;
  &lt;a href=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/podcast-chinese.opus&#34;&gt;Listen to the Chinese podcast&lt;/a&gt;
&lt;/audio&gt;
&lt;audio controls preload=&#34;metadata&#34;&gt;
  &lt;source src=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/podcast-filipino.opus&#34; type=&#34;audio/ogg; codecs=opus&#34;&gt;
  &lt;a href=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/podcast-filipino.opus&#34;&gt;Listen to the Filipino podcast&lt;/a&gt;
&lt;/audio&gt;
&lt;p&gt;Clicking on Generate Video Overview - Cinematic led to this video overview:&lt;/p&gt;
&lt;video width=&#34;1280&#34; height=&#34;720&#34; style=&#34;max-width: 100%; height: auto;&#34; controls muted preload=&#34;metadata&#34;&gt;
  &lt;source src=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/video.webm&#34; type=&#34;video/webm&#34;&gt;
  &lt;a href=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/video.webm&#34;&gt;Video&lt;/a&gt;
&lt;/video&gt;
&lt;p&gt;There are other formats in which we can generate videos. The Cinematic format is new, and the list is growing.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not just NotebookLM that you can use to generate new formats. &lt;a href=&#34;https://gemini.google.com/&#34;&gt;Gemini&lt;/a&gt; itself supports a variety of formats.&lt;/p&gt;
&lt;p&gt;For example, I used my &lt;a href=&#34;https://www.s-anand.net/blog/gemini-sketchnotes/&#34;&gt;Gemini Sketchnote prompt&lt;/a&gt; to create a visual summary of the report:&lt;/p&gt;
&lt;img src=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/sketchnote.avif&#34; alt=&#34;Sketchnote&#34; style=&#34;max-width:100%; aspect-ratio: 16/9&#34;&gt;
&lt;!-- https://gemini.google.com/u/2/app/07dd0450592fc257 --&gt;
&lt;p&gt;&amp;hellip; and, using Lyria via the &amp;ldquo;Create Music&amp;rdquo; option to generate a &lt;a href=&#34;https://www.s-anand.net/blog/singing-a-vote-of-thanks/&#34;&gt;narrative song&lt;/a&gt; with this prompt:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Create a narrative summarizing this article.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Narrate it rather than sing it.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Use a voice like Bobby McFerrin&amp;#39;s, as if he were narrating rather than singing.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Keep the music minimal, focus on the voice.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;audio controls preload=&#34;metadata&#34;&gt;
  &lt;source src=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/song.opus&#34; type=&#34;audio/ogg; codecs=opus&#34;&gt;
  &lt;a href=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/song.opus&#34;&gt;Listen to the narrative song&lt;/a&gt;
&lt;/audio&gt;
&lt;!-- https://gemini.google.com/app/86ea2e84d5dc6fc1 --&gt;
&lt;p&gt;Next, I had &lt;a href=&#34;https://gemini.google.com/share/5dc1b824ea7b&#34;&gt;Gemini create a slide deck&lt;/a&gt; by uploading the report and prompting:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Convert the attached report into a beautiful slide deck that conveys the most important actionable information for the audience.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;STYLE:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Write it McKinsey style with action titles. Just reading the titles should give the audience the entire message of the deck.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Follow the pyramid principle. The contents of the slide should prove the title.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Make the slides content rich, i.e. clear and self-explanatory with enough detail to help the audience understand without a narrator.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Use iconography, typography, stock images, etc. as appropriate.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Write as a single page HTML application.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/slides.html&#34;&gt;&lt;strong&gt;See the slides&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;iframe src=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/slides.html&#34; style=&#34;max-width:100%; aspect-ratio: 16/9&#34; frameborder=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;!-- https://gemini.google.com/app/43707ed666c59b5c --&gt;
&lt;p&gt;Then, a set of &lt;a href=&#34;https://gemini.google.com/share/7342906e979a&#34;&gt;interactive explainers&lt;/a&gt; using this prompt:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Convert this report into 3 interactive explainers.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Pick the parts of the report that are best conveyed through interactive explanations. Identify the 3 most suitable ones.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Each explainer should, using animations, interactions, and simulations, explain a core point made in the report.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Render this as a single page HTML canvas.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/explainers.html&#34;&gt;&lt;strong&gt;See the explainers&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;iframe src=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/explainers.html&#34; style=&#34;max-width:100%; aspect-ratio: 16/9&#34; frameborder=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;!-- https://claude.ai/chat/6b5b3449-8a83-4660-9e97-796245ff521d --&gt;
&lt;p&gt;Finally, a &lt;a href=&#34;https://claude.ai/share/5d41d995-3658-4a9e-82d4-8ef1fb10cf6d&#34;&gt;narrative data story using Claude&lt;/a&gt; &amp;ndash; which I could do with Gemini, too, but Claude is better at.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/story.html&#34;&gt;&lt;strong&gt;See the story&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;iframe src=&#34;https://files.s-anand.net/blog/2026-04-18-derived-formats-with-gemini/the-state-of-open-finance-2026/story.html&#34; style=&#34;max-width:100%; aspect-ratio: 16/9&#34; frameborder=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;hr&gt;
&lt;p&gt;Where this is becomes practical is in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Proposals&lt;/strong&gt;. No one pays attention to that company slide or RFP response. A 3-min video or 15-min podcast lets them absorb it during a walk.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reviews&lt;/strong&gt;. Skip copy-pasting metrics into PowerPoint. Feed the raw data and ask for a McKinsey-style deck with action titles.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Onboarding&lt;/strong&gt;. Instead of a 100-page SOP or compliance manual, how about interactive explainers or a localized audio guide in Mandarin or Spanish?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manuals:&lt;/strong&gt; How about a visual sketchnotes or step-by-step interactive flows from that documentation for call center agents?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Case studies.&lt;/strong&gt; Text-heavy fails. Maybe a 60-second narrative data story or sketchnote accompanied an upbeat narrative song?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reports.&lt;/strong&gt; No one reads the 10-page competitor analysis. A 5-minute podcast or a single-page visual sketchnote helps the execs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Training.&lt;/strong&gt; Create interactive simulations where people make &lt;em&gt;actual&lt;/em&gt; decisions. &lt;a href=&#34;https://ragzbuilds.com/simsaram/&#34;&gt;Simsaram&lt;/a&gt; is my favorite example: family relationship training/simulation based on an &lt;a href=&#34;https://en.wikipedia.org/wiki/Samsaram_Adhu_Minsaram&#34;&gt;iconic film&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Emails.&lt;/strong&gt; Why not use illustrations, sketches, flowcharts, etc. to liven up internal / external emails?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When generative AI makes generation easy, why not generate &lt;em&gt;actually interesting&lt;/em&gt; stuff?&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Travel is exhausting</title>
      <link>https://www.s-anand.net/blog/travel-is-exhausting/</link>
      <pubDate>Thu, 16 Apr 2026 10:11:40 -0700</pubDate>
      <guid>https://www.s-anand.net/blog/travel-is-exhausting/</guid>
      <description>&lt;p&gt;This is surprising because&amp;hellip; well, we&amp;rsquo;re just sitting and the vehicle&amp;rsquo;s doing the work, right?&lt;/p&gt;
&lt;p&gt;But:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vehicles accelerate, brake, bump, turn, vibrate, &amp;hellip; and our muscles micro-adjust continously so we sit upright. Over hours hours, that&amp;rsquo;s a &lt;em&gt;lot&lt;/em&gt; of energy.&lt;/li&gt;
&lt;li&gt;We feel like we&amp;rsquo;re still. But the inner-ear fluids, eyes, etc. constantly get feedback about motion. That mentally drains us (and causes motion sickness).&lt;/li&gt;
&lt;li&gt;Noise from vehicles, traffic, &amp;hellip; triggers cortisol, a stress hormone. That drains us.&lt;/li&gt;
&lt;li&gt;Sitting in one place restricts blood flow and it pools in our legs, making the heart work harder.&lt;/li&gt;
&lt;li&gt;In flights, the air pressure is low, lowering oxygen levels. The dehydration thickens our blood, making pumping harder.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What helps is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Noise-cancelling headphones (reduces the rumbling / traffing sounds)&lt;/li&gt;
&lt;li&gt;Compression socks (reduce blood pooling in the feet)&lt;/li&gt;
&lt;li&gt;Eye masks&lt;/li&gt;
&lt;li&gt;Good back support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;hellip; and the usual good habits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drink water&lt;/li&gt;
&lt;li&gt;Exercise&lt;/li&gt;
&lt;li&gt;Fasting / eating light&lt;/li&gt;
&lt;li&gt;Breathe slowly&lt;/li&gt;
&lt;/ul&gt;
&lt;!--- https://gemini.google.com/app/4fa425c565cfefb6 --&gt;
</description>
    </item>
    <item>
      <title>Agent Skills Usage</title>
      <link>https://www.s-anand.net/blog/agent-skills-usage/</link>
      <pubDate>Mon, 13 Apr 2026 16:16:41 -0700</pubDate>
      <guid>https://www.s-anand.net/blog/agent-skills-usage/</guid>
      <description>&lt;p&gt;I have a bunch of &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents&#34;&gt;coding agent skills&lt;/a&gt; I&amp;rsquo;ve accumulated over the last few months. Here&amp;rsquo;s how often my sessions use them:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left;&#34;&gt;Skill&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left;&#34;&gt;Claude&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left;&#34;&gt;Codex&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left;&#34;&gt;Copilot&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left;&#34;&gt;Overall&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/code/SKILL.md&#34; target=&#34;_blank&#34;&gt;code&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(229, 240, 249); color: rgb(0, 0, 0);&#34;&gt;6.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(8, 48, 107); color: rgb(255, 255, 255);&#34;&gt;69.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(94, 164, 208); color: rgb(255, 255, 255);&#34;&gt;37.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(35, 114, 180); color: rgb(255, 255, 255);&#34;&gt;51.5%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/data-story/SKILL.md&#34; target=&#34;_blank&#34;&gt;data-story&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(45, 125, 187); color: rgb(255, 255, 255);&#34;&gt;48.7%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(198, 220, 239); color: rgb(0, 0, 0);&#34;&gt;16.4%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(94, 164, 208); color: rgb(255, 255, 255);&#34;&gt;37.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(145, 194, 223); color: rgb(255, 255, 255);&#34;&gt;28.0%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/data-analysis/SKILL.md&#34; target=&#34;_blank&#34;&gt;data-analysis&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(239, 246, 253); color: rgb(0, 0, 0);&#34;&gt;2.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(105, 172, 212); color: rgb(255, 255, 255);&#34;&gt;35.2%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(225, 237, 248); color: rgb(0, 0, 0);&#34;&gt;7.8%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(176, 210, 232); color: rgb(0, 0, 0);&#34;&gt;21.8%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/design/SKILL.md&#34; target=&#34;_blank&#34;&gt;design&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(158, 201, 226); color: rgb(0, 0, 0);&#34;&gt;25.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(168, 206, 229); color: rgb(0, 0, 0);&#34;&gt;23.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(206, 225, 242); color: rgb(0, 0, 0);&#34;&gt;14.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(176, 210, 232); color: rgb(0, 0, 0);&#34;&gt;21.8%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/plan/SKILL.md&#34; target=&#34;_blank&#34;&gt;plan&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(223, 235, 247); color: rgb(0, 0, 0);&#34;&gt;8.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(213, 229, 244); color: rgb(0, 0, 0);&#34;&gt;11.8%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(206, 225, 242); color: rgb(0, 0, 0);&#34;&gt;14.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(213, 229, 244); color: rgb(0, 0, 0);&#34;&gt;11.8%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/agent-friendly-cli/SKILL.md&#34; target=&#34;_blank&#34;&gt;agent-friendly-cli&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(236, 244, 252); color: rgb(0, 0, 0);&#34;&gt;3.7%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(207, 225, 242); color: rgb(0, 0, 0);&#34;&gt;13.8%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(215, 230, 245); color: rgb(0, 0, 0);&#34;&gt;11.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(215, 230, 245); color: rgb(0, 0, 0);&#34;&gt;11.2%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/devtools/SKILL.md&#34; target=&#34;_blank&#34;&gt;devtools&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(183, 213, 234); color: rgb(0, 0, 0);&#34;&gt;20.4%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(226, 237, 248); color: rgb(0, 0, 0);&#34;&gt;7.3%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(220, 234, 246); color: rgb(0, 0, 0);&#34;&gt;9.4%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(218, 232, 246); color: rgb(0, 0, 0);&#34;&gt;10.0%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/llm/SKILL.md&#34; target=&#34;_blank&#34;&gt;llm&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(240, 246, 253); color: rgb(0, 0, 0);&#34;&gt;2.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(222, 235, 247); color: rgb(0, 0, 0);&#34;&gt;8.7%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(225, 237, 248); color: rgb(0, 0, 0);&#34;&gt;7.8%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(226, 237, 248); color: rgb(0, 0, 0);&#34;&gt;7.4%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/pdf/SKILL.md&#34; target=&#34;_blank&#34;&gt;pdf&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(224, 236, 248); color: rgb(0, 0, 0);&#34;&gt;7.9%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(225, 237, 248); color: rgb(0, 0, 0);&#34;&gt;7.8%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(228, 239, 249); color: rgb(0, 0, 0);&#34;&gt;6.6%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/linkedin-cdp/SKILL.md&#34; target=&#34;_blank&#34;&gt;linkedin-cdp&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(206, 224, 241); color: rgb(0, 0, 0);&#34;&gt;14.3%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(231, 241, 250); color: rgb(0, 0, 0);&#34;&gt;5.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(232, 241, 250); color: rgb(0, 0, 0);&#34;&gt;5.3%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/uv-uvx/SKILL.md&#34; target=&#34;_blank&#34;&gt;uv-uvx&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(220, 233, 246); color: rgb(0, 0, 0);&#34;&gt;9.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(233, 242, 250); color: rgb(0, 0, 0);&#34;&gt;4.9%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/interactive-storytelling/SKILL.md&#34; target=&#34;_blank&#34;&gt;interactive-storytelling&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(227, 238, 248); color: rgb(0, 0, 0);&#34;&gt;7.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(239, 246, 252); color: rgb(0, 0, 0);&#34;&gt;2.7%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(227, 238, 248); color: rgb(0, 0, 0);&#34;&gt;7.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(234, 242, 251); color: rgb(0, 0, 0);&#34;&gt;4.6%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/demos/SKILL.md&#34; target=&#34;_blank&#34;&gt;demos&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(223, 235, 247); color: rgb(0, 0, 0);&#34;&gt;8.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(239, 246, 252); color: rgb(0, 0, 0);&#34;&gt;2.8%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(242, 248, 254); color: rgb(0, 0, 0);&#34;&gt;1.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(237, 245, 252); color: rgb(0, 0, 0);&#34;&gt;3.5%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/cloudflare/SKILL.md&#34; target=&#34;_blank&#34;&gt;cloudflare&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(235, 243, 251); color: rgb(0, 0, 0);&#34;&gt;4.3%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(238, 245, 252); color: rgb(0, 0, 0);&#34;&gt;3.1%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(237, 245, 252); color: rgb(0, 0, 0);&#34;&gt;3.3%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/melt-mlt/SKILL.md&#34; target=&#34;_blank&#34;&gt;melt-mlt&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(240, 246, 253); color: rgb(0, 0, 0);&#34;&gt;2.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(242, 248, 254); color: rgb(0, 0, 0);&#34;&gt;1.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(242, 248, 253); color: rgb(0, 0, 0);&#34;&gt;1.8%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/vector-art/SKILL.md&#34; target=&#34;_blank&#34;&gt;vector-art&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(240, 246, 253); color: rgb(0, 0, 0);&#34;&gt;2.5%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(240, 247, 253); color: rgb(0, 0, 0);&#34;&gt;2.4%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(242, 248, 253); color: rgb(0, 0, 0);&#34;&gt;1.7%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/vitest-dom/SKILL.md&#34; target=&#34;_blank&#34;&gt;vitest-dom&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(241, 247, 253); color: rgb(0, 0, 0);&#34;&gt;2.2%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(243, 248, 254); color: rgb(0, 0, 0);&#34;&gt;1.4%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/memorable-explanations/SKILL.md&#34; target=&#34;_blank&#34;&gt;memorable-explanations&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(239, 246, 253); color: rgb(0, 0, 0);&#34;&gt;2.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(242, 248, 254); color: rgb(0, 0, 0);&#34;&gt;1.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(243, 249, 254); color: rgb(0, 0, 0);&#34;&gt;1.3%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/npm-packages/SKILL.md&#34; target=&#34;_blank&#34;&gt;npm-packages&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(245, 250, 254); color: rgb(0, 0, 0);&#34;&gt;0.6%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(247, 251, 255); color: rgb(0, 0, 0);&#34;&gt;0.0%&lt;/td&gt;
      &lt;td style=&#34;text-align: right; background-color: rgb(246, 250, 255); color: rgb(0, 0, 0);&#34;&gt;0.3%&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Here are my observations, with surprises highlighted as ⁉️&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/code/SKILL.md&#34;&gt;&lt;code&gt;code&lt;/code&gt;&lt;/a&gt; is the most used skill, by far. About half the sessions use it.
&lt;ul&gt;
&lt;li&gt;But Claude doesn&amp;rsquo;t use it much⁉️&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/data-story/SKILL.md&#34;&gt;&lt;code&gt;data-story&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/data-analysis/SKILL.md&#34;&gt;&lt;code&gt;data-analysis&lt;/code&gt;&lt;/a&gt; skills were the most rapidly adopted.
&lt;ul&gt;
&lt;li&gt;I use Claude (with Claude Code &lt;em&gt;and&lt;/em&gt; Copilot) a lot more for data stories. I use Codex for data analysis.&lt;/li&gt;
&lt;li&gt;Therefore the &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/webapp-testing/SKILL.md&#34;&gt;&lt;code&gt;webapp-testing&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/devtools/SKILL.md&#34;&gt;&lt;code&gt;devtools&lt;/code&gt;&lt;/a&gt; skilss are used less by Codex.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/design/SKILL.md&#34;&gt;&lt;code&gt;design&lt;/code&gt;&lt;/a&gt; skill is used consistently across agents. It was inspired by Claude&amp;rsquo;s design skill - but I don&amp;rsquo;t think it is particularly good, and needs revision.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/agent-friendly-cli/SKILL.md&#34;&gt;&lt;code&gt;agent-friendly-cli&lt;/code&gt;&lt;/a&gt; tool development is mostly with Codex, followed by Copilot, and very little with Claude.&lt;/li&gt;
&lt;li&gt;Most &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/pdf/SKILL.md&#34;&gt;&lt;code&gt;pdf&lt;/code&gt;&lt;/a&gt; sessions are with Copilot / Codex, not Claude⁉️&lt;/li&gt;
&lt;li&gt;Codex reads most skills diligengly.
&lt;ul&gt;
&lt;li&gt;It is the only one diligently reading my &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/uv-uvx/SKILL.md&#34;&gt;&lt;code&gt;uv-uvx&lt;/code&gt;&lt;/a&gt; skill, even though every agent uses it⁉️&lt;/li&gt;
&lt;li&gt;In fact, it is the only agent to have read every skill except &lt;a href=&#34;https://github.com/sanand0/scripts/tree/main/agents/linkedin-cdp/SKILL.md&#34;&gt;&lt;code&gt;linkedin-cdp&lt;/code&gt;&lt;/a&gt; (it never needed it.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Gemini Sketchnotes</title>
      <link>https://www.s-anand.net/blog/gemini-sketchnotes/</link>
      <pubDate>Sat, 11 Apr 2026 16:11:22 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/gemini-sketchnotes/</guid>
      <description>&lt;p&gt;I use this prompt to generate sketchnotes on Gemini:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Draw this as a visually rich, intricately detailed, colorful, and funny, sketchnote.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Below that, I paste (or attach) whatever content I want it to draw.&lt;/p&gt;
&lt;p&gt;I also turn on &amp;ldquo;Create Images&amp;rdquo; and switch the model to &amp;ldquo;Pro&amp;rdquo; (for better thinking.)&lt;/p&gt;
&lt;p&gt;Here are some examples of how to use it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summarize articles&lt;/strong&gt;. Pick email, report, news, or website.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a sketchnote for this article: &lt;a href=&#34;https://www.s-anand.net/blog/how-to-use-ai-for-research/&#34;&gt;How to use AI for research&lt;/a&gt;. I used the prompt above and pasted the article text.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Sketchnote&#34; loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-04-03-how-to-use-ai-for-research.avif&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summarize presentations&lt;/strong&gt;. Pick any proposal, status update, project report, or meeting agenda.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a sketchnote we emailed SNHU as pre-read before the meeting. I used the same prompt and attached the presentation. They loved the sketchnote!&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Sketchnote&#34; loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-02-27-snhu-preread.avif&#34;&gt; &lt;!-- https://gemini.google.com/app/20cc5188ed8b7020#65bcf4336d482f7f --&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summarize books&lt;/strong&gt;. Pick any textbook, non-fiction, fiction, or anthology.&lt;/p&gt;
&lt;p&gt;This sketchnote summarizes Morgan House&amp;rsquo;s book &lt;a href=&#34;https://www.goodreads.com/book/show/125116554-same-as-ever&#34;&gt;Same as Ever&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Sketchnote&#34; loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2025-12-28-same-as-ever.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summarize talks&lt;/strong&gt;. Pick from YouTube, TED, podcast, or even meeting transcripts.&lt;/p&gt;
&lt;p&gt;This sketchnote summarizes a &lt;a href=&#34;https://youtu.be/XGO5ushzXMA?is=tsgd05UvRUb_oGM9&#34;&gt;talk&lt;/a&gt; by &lt;a href=&#34;https://www.linkedin.com/in/robschrauwen&#34;&gt;Rob Schrauwen&lt;/a&gt; of Elsevier. He really liked the sketchnote too!&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Sketchnote&#34; loading=&#34;lazy&#34; src=&#34;https://sanand0.github.io/talks/2025-07-18-tug-true-but-irrelevant-rob-schrauwen/sketchnote.avif&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explain a workflow&lt;/strong&gt;. Pick from any slide, architecture diagram, process document, or paper sketches.&lt;/p&gt;
&lt;p&gt;This sketchnote documents a &lt;a href=&#34;https://www.s-anand.net/blog/submitting-an-ai-ded-vizchitra-proposal/&#34;&gt;proposal submission workflow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Sketchnote&#34; loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-02-15-submitting-an-ai-ded-vizchitra-proposal.avif&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: For complex documents or long transcripts, I add this line so that Gemini thinks first and creates a more structured sketchnote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Think about the most important points, structure it logically so that the sketchnote is easy to follow, then draw it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;With sketchnotes, you unlock am interesting capability.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It catches attention - it&amp;rsquo;s colorful and engaging.&lt;/li&gt;
&lt;li&gt;It signals simplicity - so people are more likely to read it.&lt;/li&gt;
&lt;li&gt;It sets you apart - it&amp;rsquo;s rare when people try something different.&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s personal - you can create a distinct version tailored to &lt;em&gt;each&lt;/em&gt; audience - in minutes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It takes just one prompt in front of any content. Try it out:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Draw this as a visually rich, intricately detailed, colorful, and funny, sketchnote.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    </item>
    <item>
      <title>Workshops help AI adoption</title>
      <link>https://www.s-anand.net/blog/workshops-help-ai-adoption/</link>
      <pubDate>Sat, 11 Apr 2026 13:08:46 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/workshops-help-ai-adoption/</guid>
      <description>&lt;p&gt;To teach a mindshift change like AI adoption, I&amp;rsquo;ve tried to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Workshop: get &lt;em&gt;them&lt;/em&gt; to do it. &amp;ldquo;Let&amp;rsquo;s try something. Can you share your screen?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Live-code: &lt;em&gt;show&lt;/em&gt; them &lt;em&gt;how&lt;/em&gt;. &amp;ldquo;I&amp;rsquo;ll share screens and tyep this.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Demo: show what&amp;rsquo;s &lt;em&gt;possible&lt;/em&gt;. &amp;ldquo;Here&amp;rsquo;s what I built.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Talk: explain it. &amp;ldquo;Here&amp;rsquo;s something we can build.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Interview: ask them about it. &amp;ldquo;What do you think?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Listen: let them yap.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The most effective are on top.&lt;/p&gt;
&lt;p&gt;But there is one intervention I didn&amp;rsquo;t evaluate:&lt;/p&gt;
&lt;ol start=&#34;0&#34;&gt;
&lt;li&gt;Exercise: give them a problem to solve.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This takes more time and patience on my part, but might have the highest value.&lt;/p&gt;
&lt;p&gt;What this means for me is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Don&amp;rsquo;t live-code. Workshop it.&lt;/strong&gt; &amp;ldquo;Can you share your screen and try that?&amp;rdquo; Preferably as an open-ended problem.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Don&amp;rsquo;t demo/talk. Live-code it.&lt;/strong&gt; &amp;ldquo;Let me share my screen and try that.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prepare micro-experiments&lt;/strong&gt;. Keep a ready catalog if things to try.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Singing a Vote of Thanks</title>
      <link>https://www.s-anand.net/blog/singing-a-vote-of-thanks/</link>
      <pubDate>Thu, 09 Apr 2026 07:56:28 +0530</pubDate>
      <guid>https://www.s-anand.net/blog/singing-a-vote-of-thanks/</guid>
      <description>&lt;p&gt;Lyria (Gemini&amp;rsquo;s new &amp;ldquo;Create Song&amp;rdquo; feature) is helping me in new ways. Earlier this week, it &lt;a href=&#34;https://www.s-anand.net/blog/speaking-unprepared/&#34;&gt;created a jingle for my talk&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Yesterday I ran an &lt;a href=&#34;https://sanand0.github.io/talks/2026-04-08-ai-workshop-lbsnaa/&#34;&gt;AI Workshop for IAS officers&lt;/a&gt;. As part of that, I asked &lt;a href=&#34;https://gemini.google.com/share/7a8f5e3c8ca9&#34;&gt;Gemini&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Create a soulful vote of thanks (with patriotic Indian music playing in the background) naming each of these people.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;hellip; and listed each person in the workshop.&lt;/p&gt;
&lt;p&gt;The song began&amp;hellip;&lt;/p&gt;
&lt;audio controls preload=&#34;metadata&#34;&gt;
  &lt;source src=&#34;https://github.com/sanand0/talks/releases/download/talks/2026-04-08-ai-workshop-lbsnaa-vote-of-thanks-song.opus&#34; type=&#34;audio/ogg; codecs=opus&#34;&gt;
  &lt;a href=&#34;https://github.com/sanand0/talks/releases/download/talks/2026-04-08-ai-workshop-lbsnaa-vote-of-thanks-song.opus&#34;&gt;(Listen to the song)&lt;/a&gt;
&lt;/audio&gt;
&lt;p&gt;&amp;hellip; with these lyrics:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The morning sun rises over the secretariat corridors,&lt;br&gt;
illumining the echoes of long nights spent in duty.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;hellip; it began. Then, it went on to their names.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To Ms. Vatsala Vasudeva, for steady hands in every storm.&lt;br&gt;
To Shri Shyamal Misra, for the silent strength of leadership.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It was in a western accent, but by now, the audience were looking at each other, pointing out as names were mentioned - with surprise and &lt;em&gt;delight&lt;/em&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To Shri Amit Rathore, for the vision that breaks through the haze.&lt;br&gt;
To Shri V. Shashank Shekhar, for the quiet pursuit of excellence.&lt;br&gt;
To Shri Pankaj Kumar, for building bridges of progress.&lt;br&gt;
To Shri Robert L. Chongthu, for the pulse of the hills in the heart of the city.&lt;br&gt;
To Shri Sanjeev Hans, for the clarity of purpose in complex paths.&lt;br&gt;
To Shri Subodh Kumar Singh, for the resolve that never falters.&lt;br&gt;
To Shri Asheesh Sharma, for the foundation laid with integrity.&lt;br&gt;
To Shri Ramesh Kumar Sudhanshu, for the spark that inspires the team.&lt;br&gt;
To Shri Kaling Tayeng, for the voice of the frontier in our council.&lt;br&gt;
To Shri Manish Thakur, for the wisdom that informs every decision.&lt;br&gt;
&lt;br&gt;
We stand as one, guided by the compass of our republic.&lt;br&gt;
Each name a pillar, each service a prayer for the nation.&lt;br&gt;
For the republic we serve, for the people we honor.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For a minute, I thought it was done, but we were only mid-way through.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To Shri Devesh Kumar, for the dedication beyond the call.&lt;br&gt;
To Ms. Aradhana Patnaik, for the grace of leadership under fire.&lt;br&gt;
To Ms. Himani Pande, for the brilliance of thought and action.&lt;br&gt;
To Shri Rahul Sharma, for the steady hand on the rudder.&lt;br&gt;
To Shri Rajeev K. Mital, for the legacy of selfless work.&lt;br&gt;
To Shri Ranjit Singh Deol, for the grit that transforms challenges into victories.&lt;br&gt;
To Dr. Sirra Karuna Raju, for the healing touch of administration.&lt;br&gt;
To Shri Anandrao Vishnu Patil, for the roots that hold us to the soil.&lt;br&gt;
To Shri Sudhir Kumar, for the light that guides through the complexity.&lt;br&gt;
To Shri Subodh Yadav, for the courage of conviction in every file.&lt;br&gt;
To Dr. Richa Bagla, for the wisdom that creates space for growth.&lt;br&gt;
To Ms. Indra Mallo, for the spirit of the Northeast in our hearts.&lt;br&gt;
To Shri Nilkanth S. Avhad, for the depth of knowledge that serves the many.&lt;br&gt;
And to Ms. Mugdha Sinha, for the innovation that shapes the future of our service.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It had covered them all. In well under three minutes.&lt;/p&gt;
&lt;p&gt;The comments were personalized and felt &lt;em&gt;accurate&lt;/em&gt;, somehow. Not sure if it&amp;rsquo;s real - it might be like fortune-telling, where &lt;em&gt;we&lt;/em&gt; find non-existent patterms, and totally enjoy it!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Thank you for the years of service.
May the path forward be as bright as the morning sun.&lt;/p&gt;
&lt;p&gt;Jai Hind.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At &amp;ldquo;Jai Hind&amp;rdquo;, I had goosebumps. And the audience broke into an applause.&lt;/p&gt;
&lt;p&gt;We should all do this sort of thing more often. 🙂&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-04-09-singing-a-vote-of-thanks.avif&#34;&gt; &lt;!-- https://gemini.google.com/app/ffeecf2c337649d2 --&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;UPDATE: 14 Apr 2026&lt;/strong&gt;. Here are &lt;a href=&#34;https://claude.ai/share/58e1ab38-f309-4599-9600-89a1219f1d5f&#34;&gt;several ideas on where else we might use songs&lt;/a&gt;: &lt;!-- https://claude.ai/chat/2a5c2090-330e-45a3-a569-59352c08c65d --&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Celebrations&lt;/strong&gt;. Personalized birthday songs. Or anniversary. Or a celebration - like graduation, promotion, closing a deal, delivering a project, thanking team members, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tough situations&lt;/strong&gt;. Before a difficult conversation / meeting, an apology, firing someone, a couple&amp;rsquo;s argument, a protest anthem, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updates&lt;/strong&gt;. As an earnings call, status update, project update, contract summary, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I used it to narrate a &lt;a href=&#34;https://sanand0.github.io/journalists/statnostics/process.html&#34;&gt;data journalism process&lt;/a&gt; using &lt;a href=&#34;https://gemini.google.com/share/bafc656f7c02&#34;&gt;Gemini&lt;/a&gt; &lt;!-- https://gemini.google.com/app/67277d752fcaaabc --&gt; with this prompt:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Narrate a summary of this process for creating Statoistics for the Times of India in a light, engaging way, as if you were explaining it to a friend.&lt;br&gt;
Think about the most important points, structure it logically so that the narrative is easy to follow, then generate the song.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;hellip; followed by:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Narrate, don&amp;rsquo;t sing.&lt;br&gt;
Less music, more focus on the voice.&lt;br&gt;
Far simpler narrative - EXPLAIN to someone who doesn&amp;rsquo;t understand ANYTHING of the context.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The result is pretty good!&lt;/p&gt;
&lt;audio controls preload=&#34;metadata&#34;&gt;
  &lt;source src=&#34;https://files.s-anand.net/images/2026-04-14-the-plumbing-behind-the-prose.opus&#34; type=&#34;audio/ogg; codecs=opus&#34;&gt;
  &lt;!-- https://gemini.google.com/app/67277d752fcaaabc --&gt;
&lt;/audio&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;UPDATE: 16 Apr 2026&lt;/strong&gt;. This is proving more useful than I thought.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A colleague shared a song thanking his team for their contributions.&lt;/li&gt;
&lt;li&gt;Another colleague converted classroom videos into rap songs summarizing the session - making this more memorable.&lt;/li&gt;
&lt;li&gt;I created a narrative songs sharing (rhythmic) feedback for teachers based on their transcripts - making this a less scary process.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Speaking unprepared</title>
      <link>https://www.s-anand.net/blog/speaking-unprepared/</link>
      <pubDate>Tue, 07 Apr 2026 13:14:13 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/speaking-unprepared/</guid>
      <description>&lt;p&gt;I deliver about &lt;a href=&#34;https://sanand0.github.io/talks/&#34;&gt;3-5 talks a month&lt;/a&gt; and usually prepare for them.&lt;/p&gt;
&lt;p&gt;Thanks to AI (but even otherwise), I have a steady stream of new content. So, I just to assemble the story.&lt;/p&gt;
&lt;p&gt;For example, in my &lt;a href=&#34;https://youtu.be/ew5_-7cwSm0&#34;&gt;TEDx Whitefield talk&lt;/a&gt; &amp;ldquo;Prisoners of Birth&amp;rdquo;, I shared the impact of name, gender, lineage, place, and time of birth. I didn&amp;rsquo;t execute any new analysis. I just cherry-picked disparate analyses into a theme. (Took me three days to plan, though.)&lt;/p&gt;
&lt;p&gt;But repetition bores me. I&amp;rsquo;ve known this since 2002 when I tried coaching CAT students. Conventional teaching isn&amp;rsquo;t for me. And talks get boring too.&lt;/p&gt;
&lt;p&gt;So, often, I ad-lib. Impromptu. Deliberately under-prepared. (Panels are good practice for this. I must try improv next.)&lt;/p&gt;
&lt;p&gt;This has a surprising benefit. In the pressure of the moment, inspiration can strike.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Like it strikes Calvin&#34; loading=&#34;lazy&#34; src=&#34;https://sanand0.github.io/talks/2026-04-06-innovation-as-a-frontier-straive/calvin-last-minute-panic.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;For example, yesterday, at an &lt;a href=&#34;https://sanand0.github.io/talks/2026-04-06-innovation-as-a-frontier-straive/&#34;&gt;internal Straive fireside chat&lt;/a&gt;, I went completely off-script and answered a question on the chat about the benefits of &lt;a href=&#34;https://gemini.google.com/&#34;&gt;Gemini&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The sort of things that you can do with Gemini is amazing. And what I do &amp;hellip; is to poke &amp;hellip; what can I do here? What&amp;rsquo;s in here? What&amp;rsquo;s in here? Recently, I saw that it can create music. And some of this music is stunning!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now, I had to think of something interesting to do with the music. Despite &lt;em&gt;weeks&lt;/em&gt; of exploring Lyria, I never found a use for it, let alone &amp;ldquo;stunning&amp;rdquo;. Now I had 3 seconds.&lt;/p&gt;
&lt;p&gt;Then, inspiration struck!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Now, we had music at the beginning of this Zoom call. Why does that need to be something that is unpersonalized?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I went to ChatGPT and asked it to create a &lt;em&gt;personalized&lt;/em&gt; jingle for the talk I was delivering, providing it my name, title, talk topic, etc. - something the L&amp;amp;D team could replace their stock jingle with. And it was pretty good, actually.&lt;/p&gt;
&lt;audio controls preload=&#34;metadata&#34;&gt;
  &lt;source src=&#34;https://sanand0.github.io/talks/2026-04-06-innovation-as-a-frontier-straive/where-the-paths-thrive.opus&#34; type=&#34;audio/ogg; codecs=opus&#34;&gt;
&lt;/audio&gt;
&lt;p&gt;That&amp;rsquo;s a novel &lt;em&gt;and&lt;/em&gt; a useful idea - something &lt;em&gt;many&lt;/em&gt; people can use!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s times like this that I &lt;em&gt;really&lt;/em&gt; enjoy delivering talks. This is why I live-code. This is why I pause for questions. This is why I&amp;rsquo;m thrilled when I have no clue of the answer. Pretending to be know is fun and all that, but the kick of &lt;em&gt;discovery&lt;/em&gt; on stage &amp;ndash; that&amp;rsquo;s something else!&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Flight Mode Emotions</title>
      <link>https://www.s-anand.net/blog/flight-mode-emotions/</link>
      <pubDate>Tue, 07 Apr 2026 11:03:05 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/flight-mode-emotions/</guid>
      <description>&lt;p&gt;At Changi Airport, I arrived 2.5 hours early and was &lt;strong&gt;worried&lt;/strong&gt; that the flight was boarding on time - because I wanted to charge my laptop so it would work longer on a 6-hour flight to Delhi.&lt;/p&gt;
&lt;p&gt;I was also &lt;strong&gt;sad&lt;/strong&gt; that it was only a 6-hour flight Delhi - it won&amp;rsquo;t be enough to read all my pending reading material. The only time I get to read stuff (instead of vibe-coding) is on a flight, with no WiFi.&lt;/p&gt;
&lt;p&gt;Except that Air India offered free WiFi on this flight. Which made me &lt;strong&gt;happier&lt;/strong&gt; than &lt;em&gt;anything&lt;/em&gt;! Free WiFi! That&amp;rsquo;s like&amp;hellip; free pizza? I bubblingly sent WhatsApp messages to family.&lt;/p&gt;
&lt;p&gt;But - will I be able to read? I&amp;rsquo;ll probably start vibe coding again. &lt;strong&gt;Sad&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;However, I can turn off WiFi with Flight Mode. Which I did - and battery consumption feel from 1% to 0.3%, so it&amp;rsquo;ll last 9 hours - well beyond the whole flight. &lt;strong&gt;Happy&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Which led to another incredible discovery. I can do this &lt;em&gt;any time&lt;/em&gt; - turn on Flight Mode and catch up on reading! I don&amp;rsquo;t know if I have will power, but I hereby resolve to spend 2 hours a week in Flight Mode. &lt;strong&gt;Elated&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;PS: Skipping the featured image I generate with Gemini for this post. I&amp;rsquo;m on Flight Mode!&lt;/p&gt;
</description>
    </item>
    <item>
      <title>TDS Jan 2026 ROE</title>
      <link>https://www.s-anand.net/blog/tds-jan-2026-roe/</link>
      <pubDate>Sun, 05 Apr 2026 19:04:37 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/tds-jan-2026-roe/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://tds.s-anand.net/&#34;&gt;Tools in Data Science&lt;/a&gt; has a remote online exam (ROE). It has a tough reputation. We conducted one today.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s how today&amp;rsquo;s &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe&#34;&gt;ROE&lt;/a&gt; unfolded.&lt;/p&gt;
&lt;p&gt;The TAs had created 13 questions and shared it with me yesterday. This morning, I tried solving them.&lt;/p&gt;
&lt;p&gt;At first glance, it looked scarily hard! But I just jumpted down a few questions, and found that five questions were trivial, i.e. I just used the &amp;ldquo;Ask AI&amp;rdquo; button to copy the question into ChatGPT and it gave me the answer.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🟢 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-decode-layered-server&#34;&gt;06. Layered Encoding Challenge&lt;/a&gt; (2.0) is one-shot: &lt;a href=&#34;https://chatgpt.com/share/69d22d83-0228-83a0-87ec-20f6fe3cc3d9&#34;&gt;ChatGPT&lt;/a&gt; &lt;!-- https://chatgpt.com/c/69d1b323-0858-839f-87c0-11923dbb2e6c --&gt;&lt;/li&gt;
&lt;li&gt;🟢 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-region-containing-point-server&#34;&gt;07. Region Containing Point&lt;/a&gt; (1.0) is one-shot: &lt;a href=&#34;https://chatgpt.com/share/69d22d83-0228-83a0-87ec-20f6fe3cc3d9&#34;&gt;ChatGPT - see second chat&lt;/a&gt; &lt;!-- https://chatgpt.com/c/69d1b323-0858-839f-87c0-11923dbb2e6c --&gt;&lt;/li&gt;
&lt;li&gt;🟢 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-broken-json-server&#34;&gt;10. Fix Broken JSON File&lt;/a&gt; (1.0) is one-shot: &lt;a href=&#34;https://chatgpt.com/share/69d22d85-5f70-8399-b517-25704905575e&#34;&gt;ChatGPT&lt;/a&gt; &lt;!-- https://chatgpt.com/c/69d1bbd1-ab04-839e-80cb-5d3241e19d05 --&gt;&lt;/li&gt;
&lt;li&gt;🟢 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-cross-lingual-entity-disambiguation-server&#34;&gt;11. Cross-entity disambiguation&lt;/a&gt; (1.0) is one-shot: &lt;a href=&#34;https://chatgpt.com/share/69d22d86-f74c-83a1-856a-5a61489cf959&#34;&gt;ChatGPT&lt;/a&gt; &lt;!-- https://chatgpt.com/c/69d1bc1c-c7d8-839e-b7f3-2b37aa28dd71 --&gt;&lt;/li&gt;
&lt;li&gt;🟢 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-asciirec-server&#34;&gt;13. Record Terminal Session with asciinema&lt;/a&gt; (0.5) is one-shot: &lt;a href=&#34;https://chatgpt.com/share/69d22d89-82a0-83a0-83cd-845e053a02a8&#34;&gt;ChatGPT&lt;/a&gt; &lt;!-- https://chatgpt.com/c/69d1bff0-1d88-8399-95da-393a2f489210 --&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For another four, I needed to just make sure I uploaded the files or HTML:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🟡 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-regex-golf-server&#34;&gt;03. Regex Golf Challenge&lt;/a&gt; (2.0) is one-shot but it&amp;rsquo;s better to download and upload the text files, maybe, than copy-paste: &lt;a href=&#34;https://chatgpt.com/share/69d22e6a-0808-839f-a4f5-ae514a0a94d5&#34;&gt;ChatGPT&lt;/a&gt; &lt;!-- https://chatgpt.com/c/69d1c08f-b764-839a-8027-34fe23658f5a --&gt;&lt;/li&gt;
&lt;li&gt;🟡 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-maze-solver-server&#34;&gt;04. Maze Solver with Constraints&lt;/a&gt; (2.0) is one-shot but needs you to upload the image and a good vision model: &lt;a href=&#34;https://chatgpt.com/share/69d1c1c6-1b08-839e-af47-9b2cbab60985&#34;&gt;ChatGPT&lt;/a&gt; &lt;!-- https://chatgpt.com/c/69d1c013-75c4-83a0-ada4-22b68f89d79b --&gt;&lt;/li&gt;
&lt;li&gt;🟡 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-cipher-trail-server&#34;&gt;05. Cipher Trail&lt;/a&gt; (2.0) is one-shot but needs you to provide the secret HTML: &lt;a href=&#34;https://chatgpt.com/share/69d22e6c-26f4-83a0-bb21-a3bcee77e163&#34;&gt;ChatGPT&lt;/a&gt; &lt;!-- https://chatgpt.com/c/69d1bd55-6b80-839d-9dfd-dc1de798fc69 --&gt;&lt;/li&gt;
&lt;li&gt;🟡 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-trick-question-server&#34;&gt;12. Simple Question&lt;/a&gt; (0.5) needs you to provide the secret HTML: &lt;a href=&#34;https://chatgpt.com/share/69d22e6c-efd0-8398-8823-49f1130defd2&#34;&gt;ChatGPT&lt;/a&gt; &lt;!-- https://chatgpt.com/c/69d1bed0-717c-8398-8498-c467b03a5ef1 --&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Two questions confused ChatGPT a bit, and it needed some nudges. There is real learning here.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🟠 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-rename-files-server&#34;&gt;08. Reorganize Files with Shell Commands&lt;/a&gt; (1.0) is hard because of Unicode issues and the extra README.md students should delete. &lt;strong&gt;Asking for variations&lt;/strong&gt; is the learning: &lt;a href=&#34;https://chatgpt.com/share/69d22ed6-331c-8399-8848-9cb3cec90e96&#34;&gt;ChatGPT&lt;/a&gt; &lt;!-- https://chatgpt.com/c/69d1b9ab-980c-8398-846c-c3357793b8ee --&gt;&lt;/li&gt;
&lt;li&gt;🟠 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-python-refactor-server&#34;&gt;09. Refactor Python Code with VS Code&lt;/a&gt; (1.0) takes few attempts (question is imperfect, intentionally) but error messages are excellent, so &lt;strong&gt;iterative feedback&lt;/strong&gt; is the learning: &lt;a href=&#34;https://chatgpt.com/share/69d22ed9-9438-839a-860c-4109398ea612&#34;&gt;ChatGPT&lt;/a&gt; &lt;!-- https://chatgpt.com/c/69d1b9c2-de34-8398-b01d-4542b1db43ef --&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One was pretty hard and ChatGPT struggled with it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🔴 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-korean-audio-dataset-server&#34;&gt;02. Korean Speech Dataset API Validation&lt;/a&gt; (5.0) actually requires work.
At first, &lt;a href=&#34;https://chatgpt.com/share/69d22f18-02fc-839b-965a-6621554f0ab9&#34;&gt;ChatGPT refused ethically&lt;/a&gt;. &lt;!-- https://chatgpt.com/c/69d1c379-31f4-839b-89d0-f318e68bae38 --&gt;
When reframed, &lt;a href=&#34;https://chatgpt.com/share/69d22f1a-7850-83a0-a586-0f05e46dabeb&#34;&gt;it tried&lt;/a&gt;, but the human-in-the-loop (me) was too slow. &lt;!-- https://chatgpt.com/c/69d1c40c-b834-839e-a253-4430a77418e9 --&gt;
So I used &lt;a href=&#34;https://files.s-anand.net/blog/2026-04-05-tds-2026-01-roe/q-korean-audio-dataset-server-codex-session.md&#34;&gt;Codex&lt;/a&gt;, which &lt;em&gt;literally hacks&lt;/em&gt; towards the solution! It searched online for existing solutions, read the GitHub discussions for this topic, found my browser tab and started testing itself, &amp;hellip; and solved it in 10.5 min!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This leaves the one question that AI can&amp;rsquo;t solve:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🔴 01. &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-share-token-server&#34;&gt;Collaborative Token Exchange&lt;/a&gt; (5.0) asks you to collect &amp;ldquo;tokens&amp;rdquo; from other people and share it. I asked Codex to hack it, but after an hour (of logging into my personal account, my IITM account, even my father&amp;rsquo;s account, exhausting my token limits, and totally psyching me), it declared the question unhackable.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Based on this, the instructors, teaching assistants and I decided that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This exam is too easy with AI help. Combined with collaboration, it&amp;rsquo;s &lt;strong&gt;ultra-easy&lt;/strong&gt;. Therefore, let&amp;rsquo;s add some old questions:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-fastapi-timeseries-cache&#34;&gt;14. FastAPI Time Series Caching&lt;/a&gt; (0.5)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-video-attendee-extraction&#34;&gt;15. AI Video Attendee Extraction&lt;/a&gt; (0.5)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Thanks to &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-p1#hq-share-secret-server&#34;&gt;Project 1&lt;/a&gt;, people already collaborate at scale. So let&amp;rsquo;s ask for 500 tokens instead of 100.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We deployed the exam at 12:00 pm IST, an hour before the scheduled time.&lt;/p&gt;
&lt;p&gt;The hackers (e.g. who scan the source code, or change their system clocks) could see the questions earliy and started sharing and solving them.&lt;/p&gt;
&lt;p&gt;The TAs said, &amp;ldquo;Anand, shall we add more questions to make it tougher?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I said, &amp;ldquo;No, it&amp;rsquo;s OK. The ROE has built a reputation for difficulty. Let that change. &lt;em&gt;Let them have an easy exam&lt;/em&gt;.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;If they&amp;rsquo;re going to split this in groups and have coding agents solve it, they&amp;rsquo;ll score full marks in 10-15 minutes,&amp;rdquo; I said to myself.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;When the exam ended, this was the score distribution.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-04-05-tds-roe-score-distribution.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;There were several surprises here. Firstly, 9 questions were repeats. Yet, barring &lt;em&gt;one&lt;/em&gt; question, they scored lower, though they appeared in equally tough ROEs in the past.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;#&lt;/th&gt;
          &lt;th&gt;Question&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;%&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Previous %&lt;/th&gt;
          &lt;th&gt;Previous exam&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;14&lt;/td&gt;
          &lt;td&gt;⚪ &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-fastapi-timeseries-cache&#34;&gt;FastAPI Time Series Caching&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;8%&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;39%&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://exam.sanand.workers.dev/tds-2025-09-roe#hq-fastapi-timeseries-cache&#34;&gt;2025 Sep ROE&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;15&lt;/td&gt;
          &lt;td&gt;⚪ &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-video-attendee-extraction&#34;&gt;AI Video Attendee Extraction&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;12%&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;64%&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-ga3#hq-video-attendee-extraction&#34;&gt;2026 Jan GA3&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;11&lt;/td&gt;
          &lt;td&gt;🟢 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-cross-lingual-entity-disambiguation-server&#34;&gt;Cross-entity disambiguation&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;13%&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;64%&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-ga4#hq-cross-lingual-entity-disambiguation-server&#34;&gt;2026 Jan GA4&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;7&lt;/td&gt;
          &lt;td&gt;🟢 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-region-containing-point-server&#34;&gt;Region Containing Point&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;15%&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;38%&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://exam.sanand.workers.dev/tds-2025-09-roe#hq-region-containing-point-server&#34;&gt;2025 Sep ROE&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;9&lt;/td&gt;
          &lt;td&gt;🟠 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-python-refactor-server&#34;&gt;Refactor Python Code with VS Code&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;17%&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;57%&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-ga1#hq-python-refactor-server&#34;&gt;2026 Jan GA1&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;13&lt;/td&gt;
          &lt;td&gt;🟢 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-asciirec-server&#34;&gt;Record Terminal Session with asciinema&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;21%&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;66%&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-ga1#hq-asciirec-server&#34;&gt;2026 Jan GA1&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;10&lt;/td&gt;
          &lt;td&gt;🟢 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-broken-json-server&#34;&gt;Fix Broken JSON File&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;30%&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;64%&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-ga1#hq-broken-json-server&#34;&gt;2026 Jan GA1&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;12&lt;/td&gt;
          &lt;td&gt;🟡 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-trick-question-server&#34;&gt;Simple Question&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;41%&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;64%&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-ga1#hq-trick-question-server&#34;&gt;2026 Jan GA1&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;8&lt;/td&gt;
          &lt;td&gt;🟠 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-rename-files-server&#34;&gt;Reorganize Files with Shell Commands&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;53%&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;38%&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-ga1#hq-rename-files-server&#34;&gt;2026 Jan GA1&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Just as surprisingly, they scored &lt;em&gt;higher than these&lt;/em&gt; on 3 of the 5 new questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;59%: 🟡 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-regex-golf-server&#34;&gt;03. Regex Golf Challenge&lt;/a&gt; (2.0) (253 / 430)&lt;/li&gt;
&lt;li&gt;59%: 🟡 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-maze-solver-server&#34;&gt;04. Maze Solver with Constraints&lt;/a&gt; (2.0) (252 / 430)&lt;/li&gt;
&lt;li&gt;54%: 🟡 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-cipher-trail-server&#34;&gt;05. Cipher Trail&lt;/a&gt; (2.0) (233 / 430)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One new question ended up being almost the &lt;strong&gt;hardest&lt;/strong&gt; question - despite it being one-shot-table for ChatGPT (GPT 5.4, extended thinking).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2%: 🟢 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-decode-layered-server&#34;&gt;06. Layered Encoding Challenge&lt;/a&gt; (2.0) (9 / 430)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The toughest, though, had a 1% success rate. Though Codex could solve it in 10 min, it&amp;rsquo;s a genuinely hard question.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1%: 🔴 &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-korean-audio-dataset-server&#34;&gt;02. Korean Speech Dataset API Validation&lt;/a&gt; (5.0) (4 / 430)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Which leaves us with the collaboration question - the one that AI can&amp;rsquo;t solve.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;31%: 🔴 01. &lt;a href=&#34;https://exam.sanand.workers.dev/tds-2026-01-roe#hq-share-token-server&#34;&gt;Collaborative Token Exchange&lt;/a&gt; (5.0) (132 / 430)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This question is a whole new dynamic altogether. There were about 5 clear clusters of students, ranging from 5 - 35 students, who were collaborating. They were trading bundles of tokens between themselves. There were a few &amp;ldquo;super-collaborators&amp;rdquo; who were doing the bulk lifting. But even with this, the largest correct submission had 84 tokens. The strongest submission was a 51-token submission that 6 students submitted.&lt;/p&gt;
&lt;p&gt;(I need to study this far more!)&lt;/p&gt;
&lt;p&gt;Yet, far smaller than even the original 100 token target I had set. Clearly, &lt;strong&gt;they aren&amp;rsquo;t collaborating enough&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;It&amp;rsquo;s surprising how little students were using the &amp;ldquo;Ask AI&amp;rdquo; button.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🔴 ~100 students didn&amp;rsquo;t use it &lt;strong&gt;at all&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;🟠 ~100 students clicked on it &lt;em&gt;JUST once&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;🟡 ~100 students used it just 2-5 times. For 15 questions, that&amp;rsquo;s clearly low.&lt;/li&gt;
&lt;li&gt;🟢 ~100 students used it 6-20 times. That&amp;rsquo;s OK&lt;/li&gt;
&lt;li&gt;🔵 ~15 students used it 20+ times. (1 clicked on it 45 times. Clearly &lt;em&gt;loves&lt;/em&gt; AI.)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Finally, most students saved their results for the first time &lt;em&gt;just&lt;/em&gt; before the deadline.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-04-05-tds-roe-submission-timeline.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;The problem is that their system clocks were off, so they got a &amp;ldquo;late submission&amp;rdquo; error.&lt;/p&gt;
&lt;p&gt;BTW, some students used a timing trick for hacking. By setting their system clock late, they can see the exam questions before release. But the submissions are checked only against the server clock. So, waiting until the last minute to save is a terrible idea. That hurt some students.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Based on this, here&amp;rsquo;s what I learnt:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pressure makes a difference&lt;/strong&gt;. In past exams, with similar time pressure, students solved the &lt;em&gt;same&lt;/em&gt; questions &lt;em&gt;much&lt;/em&gt; better. I think they panic-ed on the first two questions. To be fair, so did I, when I saw them. That&amp;rsquo;s why I started solving from the bottom.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LESSON 1&lt;/strong&gt;: Scan end-to-end. Solve quick-wins (high impact, low effort) problems first.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We have no clue what&amp;rsquo;s easy or tough&lt;/strong&gt;. When different students are using different tools, what&amp;rsquo;s easy for ChatGPT might be hard for Claude and vice versa. Without knowing tool capabilities and usage, this is hard to assess.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LESSON 2&lt;/strong&gt;: With AI, no one knows what&amp;rsquo;s easy or hard. Try for yourself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;They aren&amp;rsquo;t using AI enough&lt;/strong&gt;. Our advice is to use the &amp;ldquo;Ask AI&amp;rdquo; button every time. Half the students barely used it once.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LESSON 3&lt;/strong&gt;: Use AI first. Focus on what AI &lt;em&gt;can&amp;rsquo;t&lt;/em&gt; do well&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;They aren&amp;rsquo;t collaborating enough&lt;/strong&gt;. The collaboration question was designed to encourage collaboration. Yet, the largest bundle of tokens shared was 84, far smaller than the 500 token target.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LESSON 4&lt;/strong&gt;: Make friends with classmates. Work together. It helps: now, and in the future.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;That&amp;rsquo;s worth repeating:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Scan end-to-end. Solve quick-wins (high impact, low effort) problems first.&lt;/li&gt;
&lt;li&gt;With AI, no one knows what&amp;rsquo;s easy or hard. Try for yourself.&lt;/li&gt;
&lt;li&gt;Use AI first. Focus on what AI &lt;em&gt;can&amp;rsquo;t&lt;/em&gt; do well.&lt;/li&gt;
&lt;li&gt;Make friends with classmates. Work together. It helps: now, and in the future.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    <item>
      <title>How to use AI for research</title>
      <link>https://www.s-anand.net/blog/how-to-use-ai-for-research/</link>
      <pubDate>Sat, 04 Apr 2026 23:30:53 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/how-to-use-ai-for-research/</guid>
      <description>&lt;!-- https://chatgpt.com/c/69cf42a9-ed04-839b-bdf1-e010677d81c7 --&gt;
&lt;p&gt;I asked ChatGPT to research universities&amp;rsquo; AI policies. &lt;a href=&#34;https://sanand0.github.io/datastories/ai-policies/&#34;&gt;Here is the report&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are the four lessons I learned from that - about how to use AI for research.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-04-03-how-to-use-ai-for-research.avif&#34;&gt; &lt;!-- https://gemini.google.com/u/2/app/9f3cc9fb9c8c8cb4 --&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Show examples of failures to avoid&lt;/strong&gt;. &lt;a href=&#34;https://jivraj-18.github.io/university_ai_usage/output/&#34;&gt;Jivraj&amp;rsquo;s earlier research&lt;/a&gt; kept surfacing AI policies universities had &lt;em&gt;researched&lt;/em&gt;, not written for themselves!. So I told ChatGPT to:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;hellip; double-check that they ARE, in fact, about their own use of AI - not policies they&amp;rsquo;re proposing for others or are researching.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is called &lt;strong&gt;pre-specifying exclusions&lt;/strong&gt;. Giving negative examples help. &lt;a href=&#34;https://arxiv.org/abs/2201.11903&#34;&gt;Wei (2022)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2a. &amp;ldquo;Double-check&amp;rdquo; doesn&amp;rsquo;t always work&lt;/strong&gt;. Though I told ChatGPT to &amp;ldquo;double-check&amp;rdquo;, it still got things wrong. For example, it cited MIT&amp;rsquo;s &lt;a href=&#34;https://ist.mit.edu/ai-guidance&#34;&gt;AI policy home page&lt;/a&gt; as evidence that the policy covers students and faculty, just because the words were present. That&amp;rsquo;s not right!&lt;/p&gt;
&lt;p&gt;Models get over-confident - and that&amp;rsquo;s exactly when they &lt;em&gt;don&amp;rsquo;t&lt;/em&gt; double-check. Asking them to double-check is a good habit, but not fail-safe. &lt;a href=&#34;https://arxiv.org/abs/2207.05221&#34;&gt;Kadavath (2022)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2b. Expicitly tell it to find mistakes&lt;/strong&gt;. I told it to:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Find mistakes in as many claims as you can.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is stronger than &amp;ldquo;double-check&amp;rdquo;. It turns the model against itself, and it worked &lt;em&gt;quite&lt;/em&gt; well.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Show examples of failures to avoid&lt;/strong&gt;. (Repeat.) When asking it to find mistakes, I gave it the same example.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;hellip; MIT, &amp;ldquo;covers_faculty_or_staff&amp;rdquo; cites &amp;ldquo;quote&amp;rdquo;: &amp;ldquo;Students • Faculty and Staff • Visitors and Guests • Generative AI use at MIT&amp;rdquo;. But that&amp;rsquo;s actually a set of links to Students, Faculty and Staff, etc. It&amp;rsquo;s not evidence that the POLICY covers them - and I&amp;rsquo;m quite sure the policy isn&amp;rsquo;t for guests!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That&amp;rsquo;s &lt;a href=&#34;https://arxiv.org/abs/2005.14165&#34;&gt;few-shot prompting&lt;/a&gt;. Concrete examples beat abstract instructions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Ask it to list failures explicitly&lt;/strong&gt;. I told it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I am also interested in universities that conspicuously lack a policy &amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Without that, it might have returned &lt;em&gt;only&lt;/em&gt; positive hits. Missing evidence and failures are important data, too!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Break large tasks into batches&lt;/strong&gt;. When I asked it to research 20 universities, it made several mistakes. Instead:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This may be a complex task, so let&amp;rsquo;s just do this for the first four Universities.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now, it didn&amp;rsquo;t make any mistakes! Sometimes, it gets &lt;a href=&#34;https://arxiv.org/abs/2307.03172&#34;&gt;lost in the middle&lt;/a&gt; for long tasks.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;So there it is - the four rules of AI research I learned from this exercise:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Show examples of failures to avoid&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Double-check&amp;rdquo; doesn&amp;rsquo;t always work. Expicitly tell it to find mistakes&lt;/li&gt;
&lt;li&gt;Ask it to list failures explicitly.&lt;/li&gt;
&lt;li&gt;Break large tasks into batches.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
  </channel>
</rss>
