<?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>chatgpt on S Anand</title>
    <link>https://www.s-anand.net/blog/tag/chatgpt/</link>
    <description>Recent content in chatgpt on S Anand</description>
    <generator>Hugo -- 0.156.0</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 22 Jun 2026 20:15:22 +0800</lastBuildDate>
    <atom:link href="https://www.s-anand.net/blog/tag/chatgpt/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Proving Code Works with Z3</title>
      <link>https://www.s-anand.net/blog/proving-code-works-with-z3/</link>
      <pubDate>Mon, 22 Jun 2026 20:15:22 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/proving-code-works-with-z3/</guid>
      <description>&lt;p&gt;At the &lt;a href=&#34;https://pycon.sg/edusummit.html&#34;&gt;PyCon SG Education Summit&lt;/a&gt; today, &lt;a href=&#34;https://www.linkedin.com/in/melvinzhang/&#34;&gt;Melvin&lt;/a&gt;&amp;rsquo;s lighting talk on &amp;ldquo;Writing Proofs in Python&amp;rdquo; began with a subtle bug in this mid-point calculation (often used in binary search or sort) in languages like Java, C/C++, Go, etc.&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-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;low&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#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;&lt;span class=&#34;nx&#34;&gt;high&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#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;&lt;span class=&#34;nx&#34;&gt;mid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;low&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;high&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Since the integers are fixed-width, this triggers an overflow when &lt;code&gt;low + high&lt;/code&gt; exceeds the maximum integer value.&lt;/p&gt;
&lt;p&gt;Even popular libraries like Pandas &lt;a href=&#34;https://github.com/pandas-dev/pandas/issues/25485&#34;&gt;had this bug until 2019&lt;/a&gt;. In fact, even Python&amp;rsquo;s native &lt;code&gt;list.sort()&lt;/code&gt; had &lt;a href=&#34;https://github.com/python/cpython/issues/67703&#34;&gt;this sort of bug until 2015&lt;/a&gt;! &lt;a href=&#34;https://envisage-project.eu/proving-android-java-and-python-sorting-algorithm-is-broken-and-how-to-fix-it/&#34;&gt;Read the details&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;z3-can-find-counterexamples&#34;&gt;Z3 can find counterexamples&lt;/h3&gt;
&lt;p&gt;Melvin showed how to use &lt;a href=&#34;https://github.com/z3prover/z3&#34;&gt;Z3&lt;/a&gt; - a popular theorem prover library - to prove or find errors in code.&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-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;z3&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;o&#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;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;low&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;high&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BitVecs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;low high&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#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;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Solver&lt;/span&gt;&lt;span class=&#34;p&#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;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;low&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;high&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;low&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;high&lt;/span&gt;&lt;span class=&#34;p&#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;&lt;span class=&#34;n&#34;&gt;mid&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;low&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;high&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;# signed 32-bit arithmetic&lt;/span&gt;
&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;&lt;span class=&#34;c1&#34;&gt;# Find a case where the &amp;#34;obvious&amp;#34; midpoint is wrong&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mid&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;low&lt;/span&gt;&lt;span class=&#34;p&#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;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;check&lt;/span&gt;&lt;span class=&#34;p&#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;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#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;&lt;span class=&#34;c1&#34;&gt;# Prints something like [high = 2142306236, low = 47120451]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The output has found a case where the midpoint is less than &lt;code&gt;low&lt;/code&gt;, which is clearly wrong.&lt;/p&gt;
&lt;!-- https://chatgpt.com/c/6a391927-68a0-83ee-8f8c-b7a8c54a1709 | https://chatgpt.com/share/6a391a41-4d78-83ee-af42-0dac8d8227bc --&gt;
&lt;h3 id=&#34;chatgpt-can-run-z3-to-find-issues&#34;&gt;ChatGPT can run Z3 to find issues&lt;/h3&gt;
&lt;p&gt;I had a &lt;a href=&#34;https://chatgpt.com/share/6a391ae5-1930-83e8-b357-cbef241de71c&#34;&gt;conversation with ChatGPT&lt;/a&gt; that ran like this: &lt;!-- https://chatgpt.com/c/6a38c544-f850-83ee-b6f1-4a7ccfb9ba00 --&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Me&lt;/strong&gt;: Prove something with Z3 and teach me.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt;: OK. Here&amp;rsquo;s how you find the midpoint overflow error.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Me&lt;/strong&gt;: How can Z3 help me?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt;: Find edge cases, counter-examples, refactor safely, validate rules, write tests, model workflows, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Me&lt;/strong&gt;: Any alternatives to Z3?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt;: Z3 is best, but consider &lt;a href=&#34;https://dafny.org/&#34;&gt;Dafny&lt;/a&gt; for production code, &lt;a href=&#34;https://alloytools.org/&#34;&gt;Alloy&lt;/a&gt; for data, &lt;a href=&#34;https://lamport.azurewebsites.net/tla/tla.html&#34;&gt;TLA+&lt;/a&gt; for workflows, &amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Me&lt;/strong&gt;: Any popular Python tutorials have Z3-detectable bugs?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt;: Several! GeeksforGeeks&amp;rsquo; Interpolation search hits a ZeroDivisionError; in Programiz&amp;rsquo; Bucket sort, the bucket index can exceed the number of buckets, &amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Me&lt;/strong&gt;: Find production Python code with Z3-detectable bugs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt;: Sure! There are plenty of &lt;code&gt;ZeroDivisionError&lt;/code&gt;s in networkx, rich, seaborn, xarray, plotly, matplotlib, &amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Me&lt;/strong&gt;: Find real errors - not nitpicky ones!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt;: OK, xarray, branca, mizani, shap, matplotlib, &amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Me&lt;/strong&gt;: If these don&amp;rsquo;t have existing bugs filed, write an issue.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt;: Sure! Here they are.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;some-issues-are-not-bad&#34;&gt;Some issues are not bad&lt;/h3&gt;
&lt;p&gt;One issue was quite relevant. I raised &lt;a href=&#34;https://github.com/python-visualization/branca/issues/222&#34;&gt;#222 on python-visualization/branca&lt;/a&gt; which roughly says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;LinearColormap([&amp;quot;red&amp;quot;, &amp;quot;blue&amp;quot;], vmin=0, vmax=1).to_step(n=1)&lt;/code&gt; fails. But there are times when I just have one bucket/class to display, so shouldn&amp;rsquo;t this work?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another looked pretty relevant, too. I raised &lt;a href=&#34;https://github.com/pydata/xarray/issues/11397&#34;&gt;#11397 on pydata/xarray&lt;/a&gt; which roughly says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;np.linspace(0, 1, num=1)&lt;/code&gt; works. Shouldn&amp;rsquo;t &lt;code&gt;RangeIndex.linspace(0, 1, num=1, dim=&amp;quot;x&amp;quot;)&lt;/code&gt; do the same?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;but-not-all-issues-are-worth-reporting&#34;&gt;But not all issues are worth reporting&lt;/h3&gt;
&lt;p&gt;Maybe not. The &lt;a href=&#34;https://github.com/python-visualization/branca/issues/222&#34;&gt;branca LinearColorMap&lt;/a&gt; issue feels more real to me than the &lt;a href=&#34;https://github.com/pydata/xarray/issues/11397&#34;&gt;xarray RangeIndex.linspace&lt;/a&gt; one - maybe because I&amp;rsquo;ve faced it.&lt;/p&gt;
&lt;p&gt;Maybe we could do this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;When &lt;strong&gt;you&lt;/strong&gt; find a bug, use Gen AI to report it. It&amp;rsquo;s a real need.&lt;/li&gt;
&lt;li&gt;If &lt;strong&gt;Gen AI&lt;/strong&gt; finds a bug, report it only if you&amp;rsquo;ll really need it.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;still-z3--chatgpt-is-quite-effective&#34;&gt;Still, Z3 + ChatGPT is quite effective&lt;/h3&gt;
&lt;p&gt;When testing your own code, the ability to prove it correct or find counterexamples is very powerful.&lt;/p&gt;
&lt;p&gt;Since you don&amp;rsquo;t need to know how to use these tools (AI does it for you), the cost of using these is very low.&lt;/p&gt;
&lt;p&gt;This adds a useful layer of defense against vibe coded technical debt.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;UPDATE: 25 Jun 2026&lt;/strong&gt;: The &lt;a href=&#34;https://github.com/pydata/xarray/pull/11401&#34;&gt;pull request&lt;/a&gt; I submitted to fix it was merged. But this led to a fascinating rabbit hole involving the &lt;a href=&#34;https://www.s-anand.net/blog/bounty-hunting-agent-ecosystem/&#34;&gt;Bounty-Hunting Agent Ecosystem&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 14 Jun 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-14-jun-2026/</link>
      <pubDate>Sun, 14 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-14-jun-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Overheard a journalist saying: &amp;ldquo;I can tell when humans are lying. There are no tell tale signs of AI lying. At least &lt;em&gt;I&lt;/em&gt; don&amp;rsquo;t have any.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/public-clis/rdt-cli&#34;&gt;rdt-cli&lt;/a&gt; is a Reddit CLI. It uses a clever trick: it auto-detects installed browsers and extracts cookies (supports Chrome, Firefox, Edge, Brave). So, if you&amp;rsquo;re logged into Reddit on any browser, &lt;code&gt;uvx --from rdt-cli rdt whoami&lt;/code&gt; automatically shows who you are logged in as. (The &lt;a href=&#34;https://github.com/public-clis/public-clis&#34;&gt;public-clis&lt;/a&gt; repo also lists other useful CLIs like &lt;a href=&#34;https://github.com/public-clis/twitter-cli&#34;&gt;twitter-cli&lt;/a&gt;, )&lt;/li&gt;
&lt;li&gt;Currently, a $20 Claude Pro gives you ~$400 and a $100 Claude Max gives you ~$2,000 of API usage. For ChatGPT, the numbers are ~$700 and $3,500. &lt;a href=&#34;https://x.com/SemiAnalysis_/status/2064815044085318040&#34;&gt;SemiAnalysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;When Fable 5 refuses to answer questions, here&amp;rsquo;s the message that appears: &amp;ldquo;Fable 5 has safety measures that flag messages on most cybersecurity or biology topics. They may flag safe, normal content as well. These measures let us bring you Mythos-level capability in other areas sooner, and we&amp;rsquo;re working to refine them. Send feedback or &lt;a href=&#34;https://support.claude.com/en/articles/15363606&#34;&gt;learn more&lt;/a&gt;.&amp;rdquo; I managed to trigger this once while researching an M&amp;amp;A acquisition target. Clicking on &amp;ldquo;Edit and retry with Fable 5&amp;rdquo; triggered Opus 5 again, twice.&lt;/li&gt;
&lt;li&gt;DNA codons (A, T, C, G) encode proteins in triplets. There are &lt;a href=&#34;https://en.wikipedia.org/wiki/DNA_and_RNA_codon_tables&#34;&gt;64 triplets that map to 20 amino acids&lt;/a&gt;. Some like Leucine, have 6 codons. Some like Methionine have only one. Why? When creating genes, there&amp;rsquo;s a wobble, sometimes, at the 3rd codon. THe mapping minimizes that impact: small errors map to similar proteins. The more common proteins have more codons. There&amp;rsquo;s a lot of fascinating information science going on here. &lt;a href=&#34;https://gemini.google.com/share/cfa70dcab30c&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ChatGPT now shows a &amp;ldquo;Check in&amp;rdquo; button when it&amp;rsquo;s thinking. Clicking on that gives you a work-in-progress answer while it continues thinking. When done, it &lt;em&gt;replaces&lt;/em&gt; the WIP answer with the final answer. A useful feature!&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>My most memorable anniversary</title>
      <link>https://www.s-anand.net/blog/my-most-memorable-anniversary/</link>
      <pubDate>Wed, 03 Jun 2026 09:27:14 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/my-most-memorable-anniversary/</guid>
      <description>&lt;p&gt;At 9:30 pm, I checked my calendar for tomorrow&amp;rsquo;s appointments, alt-tabbed frantically into ChatGPT, and started typing:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Tomorrow is my 24th anniversary. It&amp;rsquo;s a bit late for me to buy anything (except maybe an online service) or prepare something.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- https://chatgpt.com/c/6a1d867e-47bc-83ec-b25f-54d858826d24 --&gt;
&lt;p&gt;This has become a habit &amp;ndash; leaving things to the last minute &lt;em&gt;and&lt;/em&gt; asking ChatGPT to save my day.&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;did&lt;/em&gt; give it good context, though.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You remember the OCBC expenses treemap you created by analyzing my transactions? That will give you a good guessable idea of the kinds of things she spends on and hopefully, therefore, what she likes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I was analyzing my bank transactions over the weekend, so that came in handy.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What can I do (either create for her, like I made a &lt;a href=&#34;https://www.s-anand.net/blog/birthday-sandwich-cake/&#34;&gt;peanut jelly nutella sandwich birthday for Dhyeya&lt;/a&gt; or buy - if it&amp;rsquo;s an online service / gift voucher kind of thing) in the next hour or so?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ChatGPT began with gyaan - which I promptly ignored:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Your best move is not &amp;ldquo;buy a gift&amp;rdquo;. It is &amp;ldquo;prove that I have noticed your life, then attach a redeemable escape hatch&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;hellip; and moved on to analyzing her personality and recommending from different perspectives:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Practical person&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;No-decision day&lt;/strong&gt;: &amp;ldquo;Tomorrow, you decide nothing. I handle transport, food, booking, payment, and exit plan.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service relief voucher&lt;/strong&gt;: 24 hours where she forwards any household/admin nuisance to you.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personal-care float&lt;/strong&gt;: ClassPass/spa/salon voucher plus the promise: &amp;ldquo;I will book the slot and taxi, not just give you a coupon.&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;A romance playwright&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;24 tiny vows&lt;/strong&gt;: not grand vows; operational vows: &amp;ldquo;I will stop asking where the charger is.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The ordinary-places pilgrimage&lt;/strong&gt;: one route across 3-5 mundane but meaningful places.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Private audio guide&lt;/strong&gt;: 8 short voice notes she unlocks at home / taxi / restaurant / temple.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;hellip; and so on.&lt;/p&gt;
&lt;p&gt;For some of these, I&amp;rsquo;m absolutely the worst person to execute. ClassPass? Spa? Salon? I don&amp;rsquo;t even know the difference between them.&lt;/p&gt;
&lt;p&gt;But 1.2 and 2.1 were interesting. So, after a few iterations with ChatGPT, I woke up the next morning with:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Today&amp;rsquo;s our 24th anniversary. For the next 24 hours, I&amp;rsquo;m going to knock off 24 things from your TODO list.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I rescheduled my meetings. I spent the entire day doing nothing but what was on her list. Water purifier, doctor appointments, toothbrush shopping, investments, drying clothes, duct-taping, &amp;hellip; and we dined out.&lt;/p&gt;
&lt;p&gt;At 10:00 pm: &amp;ldquo;I think it was my most memorable anniversary. Thank you.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-06-03-my-most-memorable-anniversary.avif&#34;&gt;&lt;/p&gt;
&lt;p&gt;Thank you, ChatGPT. Thank you, habit of setting low expectations.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>ChatGPT is about FIDE 1600</title>
      <link>https://www.s-anand.net/blog/chatgpt-is-about-fide-1600/</link>
      <pubDate>Thu, 28 May 2026 16:04:51 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/chatgpt-is-about-fide-1600/</guid>
      <description>&lt;p&gt;I asked ChatGPT to play chess with &lt;a href=&#34;https://stockfishchess.org/&#34;&gt;Stockfish&lt;/a&gt;. Stockfish is a &amp;ldquo;strong open-source chess engine&amp;rdquo;. It has 8 levels of difficulty, which &lt;a href=&#34;https://share.google/aimode/yA9NvnPcsZ1TFtmna&#34;&gt;roughly maps to these FIDE levels&lt;/a&gt;:&lt;/p&gt;
&lt;section ai-disclosure=&#34;ai-generated&#34; data-ai-model=&#34;gemini-3.5-flash&#34; data-ai-provider=&#34;Google&#34;&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Stockfish&lt;/th&gt;
          &lt;th&gt;FIDE&lt;/th&gt;
          &lt;th&gt;Player Level &amp;amp; Description&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Level 1&lt;/td&gt;
          &lt;td&gt;~1000&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Beginner&lt;/strong&gt;: Constantly blunders, hangs pieces deliberately.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Level 2&lt;/td&gt;
          &lt;td&gt;~1100&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Advanced Beginner&lt;/strong&gt;: Fewer obvious tactical mistakes, plays completely aimlessly.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Level 3&lt;/td&gt;
          &lt;td&gt;~1200&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Early Intermediate&lt;/strong&gt;: Punishes very basic errors but regularly drops pieces.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Level 4&lt;/td&gt;
          &lt;td&gt;~1350&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Intermediate&lt;/strong&gt;: Plays standard opening moves; requires solid, blunder-free play to beat.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Level 5&lt;/td&gt;
          &lt;td&gt;~1450&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Advanced Intermediate&lt;/strong&gt;: Rarely hangs single pieces; you need positional advantages.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Level 6&lt;/td&gt;
          &lt;td&gt;~1650&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Strong Club Player&lt;/strong&gt;: Highly tactical. Aggressively exploits your mistakes.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Level 7&lt;/td&gt;
          &lt;td&gt;~1950&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Expert&lt;/strong&gt;: Exceptionally strong. Requires precise positional mastery and deep calculation.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Level 8&lt;/td&gt;
          &lt;td&gt;~2400&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Grandmaster&lt;/strong&gt;: Invincible for most humans. Plays with ruthless perfection.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Full Engine&lt;/td&gt;
          &lt;td&gt;~3600&lt;/td&gt;
          &lt;td&gt;Our of human reach completely, &amp;ldquo;like a smart ant trying to debate physics with a human.&amp;rdquo;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/section&gt;
&lt;p&gt;In the &lt;a href=&#34;https://chatgpt.com/share/6a17f88a-dd74-83ec-b6e6-b42fac198d9c&#34;&gt;first iteration&lt;/a&gt;, here were the results:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Stockfish&lt;/th&gt;
          &lt;th&gt;Result&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Level 0&lt;/td&gt;
          &lt;td&gt;Win&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Level 1&lt;/td&gt;
          &lt;td&gt;Win&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Level 2&lt;/td&gt;
          &lt;td&gt;Stalemate&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Level 3&lt;/td&gt;
          &lt;td&gt;Stalemate&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Level 4&lt;/td&gt;
          &lt;td&gt;Win&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Level 5&lt;/td&gt;
          &lt;td&gt;Loss&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Level 6&lt;/td&gt;
          &lt;td&gt;Loss&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&amp;hellip; etc.&lt;/td&gt;
          &lt;td&gt;Loss&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;When I asked ChatGPT how it played, it said something like &amp;ldquo;I wrote a Python program that plays chess using a fixed policy.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s crazy! So I told it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Rather than use a fixed policy, get the move that Stockfish made, analyze it, and return your next move. See if you can win at level 6.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After a few attempts, it &lt;a href=&#34;https://chatgpt.com/share/6a17f740-0424-83ec-b298-5bf6056a3905&#34;&gt;won&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://lichess.org/l9vffWVr&#34;&gt;Here&amp;rsquo;s the game&lt;/a&gt;:&lt;/p&gt;
&lt;video controls=&#34;&#34; width=&#34;534&#34; height=&#34;542&#34; style=&#34;max-width: 100%; height: auto;&#34;&gt;
  &lt;source src=&#34;https://files.s-anand.net/images/2026-05-28-chatgpt-vs-stockfish-chess-game.webm&#34; type=&#34;video/webm&#34;&gt;&lt;a href=&#34;https://lichess.org/l9vffWVr&#34;&gt;ChatGPT vs Stockfish Level 6&lt;/a&gt;
&lt;/video&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-pgn&#34; data-lang=&#34;pgn&#34;&gt;[White &amp;#34;ChatGPT&amp;#34;]
[Black &amp;#34;Stockfish Skill Level 6&amp;#34;]
[Termination &amp;#34;White won by checkmate&amp;#34;]
[FinalFEN &amp;#34;4Q3/2qrkp2/4pN2/1pp1P3/7P/p1P3P1/P5K1/4R3 b - - 5 39&amp;#34;]

1. d4 e6 2. c4 Nf6 3. Nf3 Be7 4. g3 O-O 5. Bg2 a5
6. O-O c6 7. Qc2 d5 8. Rd1 Ne4 9. Nc3 Nxc3 10. bxc3 a4
11. e4 h6 12. Bf4 Re8 13. e5 b6 14. Nd2 Ba6 15. h4 Qc7
16. Be3 Bb7 17. f4 Na6 18. Rf1 Rad8 19. f5 Bf8 20. f6 Nb8
21. fxg7 Bxg7 22. Qd1 Nd7 23. Qg4 Nxe5 24. dxe5 c5
25. Bf4 Re7 26. Re1 Kf8 27. Qh5 a3 28. Bh6 dxc4 29. Nxc4 Bxg2
30. Kxg2 Rd3 31. Bxg7+ Kxg7 32. Rf4 Rd2+ 33. Nxd2 Rd7
34. Ne4 b5 35. Rg4+ Kf8 36. Rg8+ Kxg8 37. Nf6+ Kf8
38. Qh8+ Ke7 39. Qe8# 1-0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So, guess ChatGPT (GPT-5.5, extended thinking) is at around 1600 FIDE level right now.&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s impressive is that it wasn&amp;rsquo;t specifically trained on Chess. It&amp;rsquo;s just something it picked up on the way.&lt;/p&gt;
&lt;p&gt;If it starts beating level 8 (grandmaster), will we finally acknowledge AGI? (Me? I think &lt;a href=&#34;https://marginalrevolution.com/marginalrevolution/2025/04/o3-and-agi-is-april-16th-agi-day.html&#34;&gt;we achieved AGI on 16 Apr 2025&lt;/a&gt;.)&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Creating comic explainers</title>
      <link>https://www.s-anand.net/blog/creating-comic-explainers/</link>
      <pubDate>Sun, 24 May 2026 16:48:58 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/creating-comic-explainers/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/in/lori-silverstein-b9baa03/&#34;&gt;Lori Silverstein&lt;/a&gt; shared a &lt;a href=&#34;https://www.linkedin.com/feed/update/urn:li:activity:7462864729913503744/&#34;&gt;post from Quickplay&lt;/a&gt; that featured a comic explainer, mentioning that &amp;ldquo;this could be a very impactful way for us to start being more creative &amp;hellip; and differentiate our value proposition.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-05-24-quickplay-comic.avif&#34;&gt;&lt;/p&gt;
&lt;p&gt;True. Comic explainers convey both creativity &lt;em&gt;and&lt;/em&gt; differentiation.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve used &lt;a href=&#34;https://www.s-anand.net/blog/gemini-sketchnotes/&#34;&gt;sketchnotes&lt;/a&gt; for the same effect, but comic explainers are easier to follow than sketchnotes.&lt;/p&gt;
&lt;p&gt;So I fed this image to ChatGPT and &lt;a href=&#34;https://chatgpt.com/share/6a12bd89-5274-83ec-827c-2446d0be19d2&#34;&gt;asked it to modify my Sketchnote prompt&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How would I modify this prompt to draw a Scott McCloud style explainer comic page in color? I&amp;rsquo;m looking for the way in which he explained Google Chrome when it was released, but with more vibrant colors. Something like the attached image is good for me.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Draw this as a visually rich, intricately detailed, colorful, and funny, sketchnote (square 1:1).
Use comic-style font in caps.
Keep the text to under 300 words. Prefer evocative imagery over text.
Think about the most important points, structure it logically so that the sketchnote is easy to follow, then draw it.
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;It gave me a prompt which I&amp;rsquo;ve iterated on a few times. This is the &lt;a href=&#34;https://github.com/sanand0/blog/blob/6e1af00d0bc593f3b88bddf57416b533d558c3a3/pages/prompts/fragments.md#comic-page&#34;&gt;comic page prompt&lt;/a&gt; I currently use:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Draw this as a full-color explainer comic page (portrait) - sequential explanation, friendly narrator, diagrams embedded inside panels, visual metaphors, self-aware captions, and clear cause-and-effect storytelling.
Style: expressive characters, comic-style ALL CAPS, vibrant modern colors, clear visual hierarchy.
Prefer pictures over words. Use recurring visual metaphors so the reader understands the idea even while skimming.
Think about the most important points, structure it as a memorable story.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Some examples of the output:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://sanand0.github.io/talks/2026-05-23-ai-unboxed-context-engineering/&#34;&gt;What Your AI Doesn&amp;rsquo;t Know About You&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://sanand0.github.io/talks/2026-05-23-ai-unboxed-context-engineering/&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://sanand0.github.io/talks/2026-05-23-ai-unboxed-context-engineering/comic-page.avif&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/where-enterprise-ai-is-headed/&#34;&gt;Where Enterprise AI is Headed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/where-enterprise-ai-is-headed/&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-05-23-where-enterprise-ai-is-headed.avif&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Though AI makes it easy to create comic explainers, sketchnotes, etc., I expect we might see &lt;em&gt;less&lt;/em&gt; of them.&lt;/p&gt;
&lt;p&gt;Why?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Excel made &lt;a href=&#34;https://en.wikipedia.org/wiki/William_Playfair&#34;&gt;Playfair&lt;/a&gt; style charts &lt;em&gt;less&lt;/em&gt; common with a deluge of bar charts.&lt;/li&gt;
&lt;li&gt;AI will make templatized slides &lt;em&gt;so much easier&lt;/em&gt; that comic explainers will be drowned out.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But creative people like &lt;a href=&#34;https://pudding.cool/&#34;&gt;The Pudding&lt;/a&gt; will likely use AI to create &lt;em&gt;even&lt;/em&gt; more innovative formats. Something I&amp;rsquo;m looking forward to.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-05-24-creating-comic-explainers.avif&#34;&gt;&lt;/p&gt;
&lt;!--

- Future of Comic Explainers - Creativity vs standardization with AI
  - https://chatgpt.com/c/6a12bf20-28a8-83ec-8a6f-5b20f137d4fe
  - https://claude.ai/chat/92bd7c3a-7de8-4106-a5d8-b39f92cca1be

--&gt;
</description>
    </item>
    <item>
      <title>How I use Local MCP</title>
      <link>https://www.s-anand.net/blog/how-i-use-local-mcp/</link>
      <pubDate>Sat, 16 May 2026 22:24:32 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/how-i-use-local-mcp/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-05-16-how-i-use-local-mcp.avif&#34;&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d love for Claude or ChatGPT to answer questions like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What meetings am I not setting up that I really should be?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;or:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Based on my activities since 9 May 2026, what should I blog about?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;or:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Who in my professional life most deserves an unreasonable gesture?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From data. My files, emails, calendar, contacts, transcripts, blogs, notes, code, browsing history, logs, random Markdown files I forgot I wrote.&lt;/p&gt;
&lt;p&gt;Hence, a &lt;a href=&#34;https://modelcontextprotocol.io/&#34;&gt;Local MCP&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;My Local MCP server exposes one tool: &lt;code&gt;bash&lt;/code&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-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@mcp.tool&lt;/span&gt;&lt;span class=&#34;p&#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;&lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;bash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;commands&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#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;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Runs multiline bash script.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;commands&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;executable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/bin/bash&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stdout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stderr&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s it. No vector database. No UI. No custom connectors. No &amp;ldquo;AI knowledge platform.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Just: &lt;strong&gt;run shell commands on my machine&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I run this locally, expose it online (which is slightly scary), and give Claude and ChatGPT this &lt;a href=&#34;https://www.s-anand.net/blog/prompts/fragments/#local-mcp&#34;&gt;prompt fragment&lt;/a&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;Local MCP runs bash and exposes:
&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;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; ~/code/talks/README.md - talk transcripts, slides
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; ~/code/blog/description.md - 20K files, 5K posts. Search for &amp;#34;- llm&amp;#34; for AI-related posts.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;... (etc.)
&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;&lt;span class=&#34;sb&#34;&gt;`gws`&lt;/span&gt; can access email, calendar, etc.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In one shot, this gives EVERYTHING I have to the agents.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;A common use is meeting prep.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You are a brilliant, brutally honest Chief of Staff. You have full access via Local MCP bash tool to calendar, emails, and past transcripts. Produce a briefing card for each substantive external meeting today.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It checks the calendar via &lt;code&gt;gws&lt;/code&gt;. It searches my transcripts. My notes. My &lt;a href=&#34;https://www.s-anand.net/blog/ai-advice/&#34;&gt;AI advice&lt;/a&gt;. Then gives me a briefing card with everything I need.&lt;/p&gt;
&lt;p&gt;I can&amp;rsquo;t do this by uploading files manually. The context is not one file: it&amp;rsquo;s scattered all over.&lt;/p&gt;
&lt;p&gt;A human assistant could do this. But agents are faster, cheaper, and I trust them more.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Another common use is relationship intelligence.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What meetings am I not setting up that I really should be?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Claude scans transcripts, contacts, emails, and recent activity to find people I should speak.&lt;/p&gt;
&lt;p&gt;This is where Local MCP is different from a file upload.&lt;/p&gt;
&lt;p&gt;In a file upload, I can ask &amp;ldquo;Where is X?&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Here, I&amp;rsquo;m asking &amp;ldquo;What am I missing?&amp;rdquo; and the answer depends on recency, relationship history, frequency, how conversations felt, unresolved actions, and so much more.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;A third use is mining my own work.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I used Local MCP to ask what I should blog about. It scanned all my content and found themes I haven&amp;rsquo;t really thought about, like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.s-anand.net/blog/google-meet-captions-local-transcript-recorder/&#34;&gt;Google Meet captions&lt;/a&gt; - a code commit I recently made. I wrote about it.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sanand0.github.io/talks/2026-05-15-gramener-all-hands/&#34;&gt;Agents are the new software&lt;/a&gt; - a theme I&amp;rsquo;ve been talking a lot about. I wrote about it.&lt;/li&gt;
&lt;li&gt;Local MCPs - that&amp;rsquo;s this post&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;hellip; and half a dozen topics I should be writing about soon.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;A fourth use is business research.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I have transcripts from sales calls and client conversations. I don&amp;rsquo;t attend all of them. But Local MCP can.&lt;/p&gt;
&lt;p&gt;I can ask:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Which client needs have we heard repeatedly but not converted into demos?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;or:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Which solutions have we pitched to one client that another client has explicitly asked for?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is beyond a CRM search. A HubSpot search finds what people typed in. This finds what people actually said.&lt;/p&gt;
&lt;p&gt;Then an email search finds if they acted on it. Calendar search finds what we spent time on.&lt;/p&gt;
&lt;p&gt;Across these, I find opportunities that no single system has.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;BUT:&lt;/strong&gt; this is not safe by default. A bash MCP server can delete my files, run commands, read my browser sessions, send emails &lt;code&gt;gws&lt;/code&gt;, and all sorts of risky things.&lt;/p&gt;
&lt;p&gt;So I monitor the commands like a hawk, and give it fairly controlled access, and only when I&amp;rsquo;m actually running one of these use-cases.&lt;/p&gt;
&lt;p&gt;I tried OAuth but setting up Auth0, dynamic client registration, callback URLs, scopes, ChatGPT connector errors, &amp;hellip; I gave up.&lt;/p&gt;
&lt;p&gt;For now, supervised local usage gives me most of the value.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;BUT #2:&lt;/strong&gt; Claude and ChatGPT use Local MCP differently.&lt;/p&gt;
&lt;p&gt;Claude uses it beautifully. Smooth. No mistakes. References memory.&lt;/p&gt;
&lt;p&gt;ChatGPT is more restrictive. No chat memory accessed, nor saved. Keeps asking for permissions.&lt;/p&gt;
&lt;p&gt;So I use ChatGPT less for Local MCP-heavy tasks. But ChatGPT is rigorous. When I want structured analysis, exhaustive lists, or better verification discipline, it is useful.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Local MCP is powerful because it lets AI &lt;em&gt;use all systems I have access to&lt;/em&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;local files - across Dropbox, Google Drive, my notes, blog posts, transcripts, slides, &amp;hellip;&lt;/li&gt;
&lt;li&gt;code - not just reading, but running, rewriting, and generatig&lt;/li&gt;
&lt;li&gt;email, calendar, contacts&lt;/li&gt;
&lt;li&gt;browser history&lt;/li&gt;
&lt;li&gt;shell tools - which can be used to access even more system&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Local MCP invites Claude / ChatGPT as a real assistant into my laptop.&lt;/p&gt;
&lt;p&gt;And into my 2,700-line TODO archive.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;You probably shouldn&amp;rsquo;t expose a bash tool to an AI. But note the direction I&amp;rsquo;m going with this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;If your work and transactions are agent-readable, your past work compounds.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;If they are trapped in apps, screenshots, and memory, your AI has amnesia.&lt;/li&gt;
&lt;/ul&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>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>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>Finding open source bugs with Ty</title>
      <link>https://www.s-anand.net/blog/finding-open-source-bugs-with-ty/</link>
      <pubDate>Sun, 11 Jan 2026 11:55:19 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/finding-open-source-bugs-with-ty/</guid>
      <description>&lt;p&gt;Astral released &lt;a href=&#34;https://astral.sh/blog/ty&#34;&gt;Ty (Beta)&lt;/a&gt; last month.&lt;/p&gt;
&lt;p&gt;As a prototyper, I don&amp;rsquo;t type check much - it slows me down. But the few apps I shipped to production had bugs type checking could have caught. Plus, LLMs don&amp;rsquo;t get slowed by type checking.&lt;/p&gt;
&lt;p&gt;So I decided to check if Ty can spot &lt;em&gt;real&lt;/em&gt; bugs in &lt;em&gt;real&lt;/em&gt; code.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://chatgpt.com/share/69631ff0-c14c-8003-bee2-13f016240cbd&#34;&gt;I asked ChatGPT&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Run &lt;code&gt;ty&lt;/code&gt; (Astral&amp;rsquo;s new type checker) on a few popular Python packages&amp;rsquo; source code, list the errors Ty reports (most of which may be false positives), and identify at least a few that are genuine bugs, not false positives. Write sample code or test case to demonstrate the bug.&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t fool yourself into inventing false or borderline bugs. Find genuine bugs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After 25 minutes, ChatGPT reported:&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-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;tqdm.rich&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tqdm&lt;/span&gt;
&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;&lt;span class=&#34;n&#34;&gt;bar&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tqdm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;total&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#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;&lt;span class=&#34;n&#34;&gt;bar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#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;
&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;# This crashes inside tqdm&amp;#39;s rich integration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;bar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;total&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;hellip; produces this error:&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;TypeError: Progress.reset() missing 1 required positional argument: &amp;#39;task_id&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I verified this locally:&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 --with tqdm python -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;from tqdm.rich import tqdm
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;bar = tqdm(total=3)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;bar.update(1)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;bar.reset(total=3)&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-01-11-tqdm-rich-ty-bug.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;Yes! Same error.&lt;/p&gt;
&lt;p&gt;But is it really a bug?&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.s-anand.net/blog/notes/gemini-tqdm-rich-task-id-bug/&#34;&gt;I asked Gemini&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is this a real tqdm bug?
&lt;ul&gt;
&lt;li&gt;Yes, it is.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Could I submit a pull request? Is tqdm active and reviewing/accepting pull requests - especially for the rich integration?
&lt;ul&gt;
&lt;li&gt;Yes, you should.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Find existing PRs with overlapping functionality. List the closest ones
&lt;ul&gt;
&lt;li&gt;Issue &lt;a href=&#34;https://github.com/tqdm/tqdm/issues/1306&#34;&gt;#1306&lt;/a&gt; and PRs &lt;a href=&#34;https://github.com/tqdm/tqdm/pull/1395&#34;&gt;#1395&lt;/a&gt;, &lt;a href=&#34;https://github.com/tqdm/tqdm/pull/1438&#34;&gt;#1438&lt;/a&gt; are close, but different.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;(I checked manually.) &lt;a href=&#34;https://github.com/tqdm/tqdm/issues/1674&#34;&gt;#1674&lt;/a&gt; looks very similar&amp;hellip; is it?
&lt;ul&gt;
&lt;li&gt;No, that&amp;rsquo;s a different bug&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;(I wanted to be sure.) What about this issue: &lt;a href=&#34;https://github.com/tqdm/tqdm/issues/1378&#34;&gt;#1378&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Yes, that&amp;rsquo;s an exact duplicate, waiting since 2022. (Stupid LLM!)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;What is the minimal fix?
&lt;ul&gt;
&lt;li&gt;Add &lt;code&gt;self._task_id&lt;/code&gt; as the first argument to &lt;code&gt;self._prog.reset(total=total)&lt;/code&gt; in &lt;code&gt;tqdm/rich.py&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;This PR seems to do that: &lt;a href=&#34;https://github.com/tqdm/tqdm/pull/1379&#34;&gt;#1379&lt;/a&gt; doesn&amp;rsquo;t it? Why is it not merged yet?
&lt;ul&gt;
&lt;li&gt;Yes, it was even approved, but not merged. Bump up. Else, submit your own PR.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So I &lt;a href=&#34;https://github.com/tqdm/tqdm/pull/1379#issuecomment-3733928734&#34;&gt;bumped it up&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This entire process of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Finding a bug&lt;/li&gt;
&lt;li&gt;In a new codebase&lt;/li&gt;
&lt;li&gt;Verifying the bug&lt;/li&gt;
&lt;li&gt;Finding an existing PR&lt;/li&gt;
&lt;li&gt;Bumping it up&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;hellip; took 30 min of my time and 30 min of computer time.&lt;/p&gt;
&lt;p&gt;The hardest problem in computer science isn&amp;rsquo;t P-vs-NP or cache invalidation. It&amp;rsquo;s understanding why a human will click a green &amp;lsquo;Merge&amp;rsquo; button.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Scrabble image generation</title>
      <link>https://www.s-anand.net/blog/scrabble-image-generation/</link>
      <pubDate>Tue, 06 Jan 2026 22:12:34 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/scrabble-image-generation/</guid>
      <description>&lt;p&gt;AI image generation still has a &lt;em&gt;long&lt;/em&gt; way to go. Here are two images generated by Gemini and ChatGPT from the same prompt: &amp;ldquo;Create a funny scrabble board of dysfunctional family relationships!&amp;rdquo;&lt;/p&gt;
&lt;h3 id=&#34;gemini&#34;&gt;Gemini &lt;!-- https://gemini.google.com/u/2/app/c21208572328a890 --&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-01-06-scrabble-dysfunctional-family-gemini.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s probably showing off, with coffee stains, and spelling &amp;ldquo;DYSFUNCTIONAL&amp;rdquo; right. But &amp;ldquo;ABLOMY&amp;rdquo;? &amp;ldquo;PASSIAVE&amp;rdquo;? &amp;ldquo;RGUCT_SVA&amp;rdquo;? &amp;ldquo;SORDSP&amp;rdquo;? Most of the vertical letters are wrong. Some horizontals (&amp;ldquo;DTENSION&amp;rdquo;?) are off, too.&lt;/p&gt;
&lt;p&gt;Also: &amp;ldquo;Z&amp;rdquo; has 2 points? &amp;ldquo;C&amp;rdquo; has &amp;ldquo;C&amp;rdquo; points? &amp;ldquo;DOUBLE STTER SCORE&amp;rdquo;? &amp;ldquo;UUT SCORE SCORE&amp;rdquo; instead of &amp;ldquo;TRIPLE WORD SCORE&amp;rdquo;?&lt;/p&gt;
&lt;p&gt;But one thing is clear, the number of times &amp;ldquo;DOUBLE STTER SCORE&amp;rdquo; appears indicates that it does some mental copy-pasting!&lt;/p&gt;
&lt;h3 id=&#34;chatgpt&#34;&gt;ChatGPT &lt;!-- https://chatgpt.com/c/695d16e3-2894-8322-b694-22c24c0af6c3 --&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-01-06-scrabble-dysfunctional-family-chatgpt.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;This is almost as bad. &amp;ldquo;FAKEHUY&amp;rdquo;? &amp;ldquo;MREGSUUEAHL&amp;rdquo;? The verticals are worse than the horizontals, but some horizontals are off, too. &amp;ldquo;DISAPPOINTI&amp;rdquo;? &amp;ldquo;THERPY&amp;rdquo;?&lt;/p&gt;
&lt;p&gt;&amp;ldquo;INLAWS&amp;rdquo; are hanging outside the board. The &amp;ldquo;TRIPLE WORD&amp;rdquo; at the bottom right and bottom left are not at the corners, and are missing a &amp;ldquo;SCORE&amp;rdquo;. More importantly, some of the letters aren&amp;rsquo;t printed right.&lt;/p&gt;
&lt;p&gt;Overall, slightly fewer errors, but slightly poorer style, too.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/posts/sanand0_ai-image-generation-still-has-a-%F0%9D%98%AD%F0%9D%98%B0%F0%9D%98%AF%F0%9D%98%A8-activity-7414972466193850369-vPl2&#34;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title></title>
      <link>https://www.s-anand.net/blog/style-transfer-is-my-new-superpower/</link>
      <pubDate>Tue, 16 Dec 2025 05:36:05 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/style-transfer-is-my-new-superpower/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Style transfer&lt;/strong&gt; is my newly discovered AI super-power: having AI rewrite in someone&amp;rsquo;s style.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EXAMPLE&lt;/strong&gt; 1: &lt;strong&gt;Kalama Sutta&lt;/strong&gt;. I asked Claude to &amp;ldquo;Rewrite this Kalama Sutta translation. Pick an author whose style is modern, thoughtful, and VERY readable. Mention the author and rewrite in their style.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The original sounds like this: &lt;a href=&#34;https://lnkd.in/gQhi8CBY&#34;&gt;https://lnkd.in/gQhi8CBY&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;It is proper for you, Kalamas, to doubt, to be uncertain; uncertainty has arisen in you about what is doubtful. Come, Kalamas. Do not go upon what has been acquired by repeated hearing; nor upon tradition; nor upon rumor&amp;hellip;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Here it is in the style of &lt;strong&gt;Pico Iyer&lt;/strong&gt;, an essayist who writes the way good conversation feels: &lt;a href=&#34;https://lnkd.in/gMFpc74y&#34;&gt;https://lnkd.in/gMFpc74y&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Your confusion makes sense. When things are genuinely doubtful, doubt is the appropriate response. So here is what I suggest: Don&amp;rsquo;t accept something just because you&amp;rsquo;ve heard it repeated many times. Don&amp;rsquo;t accept it just because it&amp;rsquo;s tradition, or rumor, &amp;hellip;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EXAMPLE&lt;/strong&gt; 2: &lt;strong&gt;AI Personhood&lt;/strong&gt;. Here&amp;rsquo;s a fascinating paper by Google: &lt;a href=&#34;https://lnkd.in/gikMnUzj&#34;&gt;https://lnkd.in/gikMnUzj&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Assuming some essence of personhood is “out there” waiting to be discovered, or a metaphysical fact about what AIs or persons “really are” that can settle our practical questions seems to us, unlikely to prove helpful. We propose treating personhood not as something entities possess by virtue of their nature, but as a contingent vocabulary developed for coping with social life in a biophysical world.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;Tim Urban&lt;/strong&gt;&amp;rsquo;s style, it becomes this one-liner: &lt;a href=&#34;https://lnkd.in/g8t8fG4g&#34;&gt;https://lnkd.in/g8t8fG4g&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Given this mess in front of us… what vocabulary actually works?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Both articles have amazing content. But now they&amp;rsquo;re accessible to me, thanks to style transfer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PROMPT&lt;/strong&gt;: Here&amp;rsquo;s the prompt fragment I&amp;rsquo;m using:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Think about whose style of writing would be the most engaging and informative to write the following content&lt;/em&gt;.&lt;em&gt;List options&lt;/em&gt;, &lt;em&gt;mentioning their style&lt;/em&gt;, &lt;em&gt;why they&lt;/em&gt;&amp;rsquo;&lt;em&gt;re suitable&lt;/em&gt;, &lt;em&gt;and pick the best&lt;/em&gt;, &lt;em&gt;with reason&lt;/em&gt;.&lt;em&gt;Then rewrite it in their style&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Claude has better &lt;strong&gt;style&lt;/strong&gt;. ChatGPT has higher &lt;strong&gt;rigor&lt;/strong&gt;. Pick what works for you!&lt;/p&gt;
&lt;p&gt;PS: Image by &lt;strong&gt;Nano Banana Pro&lt;/strong&gt;. &amp;ldquo;Draw Keanu Reeves as Buddha but wearing jeans, addressing a crowd of villagers. He is clearly modern. The village and villagers are clearly ancient. The image is very realistic, like from a modern digital camera.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2025-12-16-style-transfer-is-my-new-superpower-linkedin.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/posts/sanand0_%F0%9D%97%A6%F0%9D%98%81%F0%9D%98%86%F0%9D%97%B9%F0%9D%97%B2-%F0%9D%98%81%F0%9D%97%BF%F0%9D%97%AE%F0%9D%97%BB%F0%9D%98%80%F0%9D%97%B3%F0%9D%97%B2%F0%9D%97%BF-is-my-newly-discovered-activity-7405112924517601280-b3tu&#34;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title></title>
      <link>https://www.s-anand.net/blog/greatest-batsman-over-time/</link>
      <pubDate>Tue, 09 Dec 2025 05:36:05 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/greatest-batsman-over-time/</guid>
      <description>&lt;p&gt;When my father mentioned that Virat Kohli scored a century (again) against South Africa, I wondered how he compared to the likes of Tendulkar and Gavaskar.&lt;/p&gt;
&lt;p&gt;I asked ChatGPT:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If you had to evaluate the quality of Indian batsmen over time&lt;/em&gt;, &lt;em&gt;what single metric&lt;/em&gt; (&lt;em&gt;possibly composite&lt;/em&gt;) &lt;em&gt;would you use&lt;/em&gt;?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Evaluate the top Indian batsmen in history on this metric&lt;/em&gt;. &lt;em&gt;Plot them over their active years&lt;/em&gt; (&lt;em&gt;X&lt;/em&gt;-&lt;em&gt;axis&lt;/em&gt;) &lt;em&gt;along with the metric&lt;/em&gt; (&lt;em&gt;Y&lt;/em&gt;-&lt;em&gt;axis&lt;/em&gt;), &lt;em&gt;labelled with the player names&lt;/em&gt;, &lt;em&gt;on a beautiful visualization&lt;/em&gt;.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;It picked a simple metric: Batting Average * log(Total Runs).
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Claude and Gemini, too, preferred simple metrics that favored the batting average or total runs. Strike rate, relative to era, win rate impact, etc. were all excluded.&lt;/p&gt;
&lt;p&gt;(Sadly, any metric that misses Kapil Dev feels a bit&amp;hellip; incomplete.)&lt;/p&gt;
&lt;p&gt;Data story: &lt;a href=&#34;https://sanand0.github.io/datastories/indian-batting-greats/&#34;&gt;https://sanand0.github.io/datastories/indian-batting-greats/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2025-12-08-greatest-batsman-over-time-linkedin.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/posts/sanand0_when-my-father-mentioned-that-virat-kohli-activity-7402679838437744640--oUa&#34;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>How to create a data-driven exam strategy</title>
      <link>https://www.s-anand.net/blog/how-to-create-a-data-driven-exam-strategy/</link>
      <pubDate>Thu, 09 Oct 2025 01:24:19 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/how-to-create-a-data-driven-exam-strategy/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;How to create a data-driven exam strategy&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/tds-grades.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;Can ChatGPT give teachers data-driven &lt;strong&gt;heuristics&lt;/strong&gt; on student grades?&lt;/p&gt;
&lt;p&gt;I uploaded last term&amp;rsquo;s scores from about 1,700 students in my &lt;a href=&#34;https://tds.s-anand.net/&#34;&gt;Tools in Data Science course&lt;/a&gt; and asked ChatGPT:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This sheet contains the scores of students … (and explained the columns).&lt;/p&gt;
&lt;p&gt;I want to find out what are the best predictors of the total plus bonus… (and explained how scores are calculated).&lt;/p&gt;
&lt;p&gt;I am looking for simple statements with 80%+ correctness along the lines of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;if ga1_f + ga_4f &amp;gt; x then you will not fail; this is true for 90% of the students&amp;rdquo; or&lt;/li&gt;
&lt;li&gt;&amp;ldquo;your total will effectively be your p1_f score, within plus or minus 5 marks; this is true for ~90% of the students&amp;rdquo; or&lt;/li&gt;
&lt;li&gt;&amp;ldquo;if you get below 40% in ga3_f then you will likely fail; 80% of the students who did so fail.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Earlier predictors (GA1, GA2, maybe GA3) are more useful (to students) …&lt;/p&gt;
&lt;p&gt;Two kinds of students: Those who want to avoid failing and those who want to score high….&lt;/p&gt;
&lt;p&gt;.. give me the best student advice. Phrase it conversationally and include numerical evidence in simple language.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After a 30 minute conversation, ChatGPT delivered concrete, actionable advice:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One-page student playbook&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re behind / &amp;ldquo;don&amp;rsquo;t fail&amp;rdquo;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Immediate target:&lt;/strong&gt; &lt;strong&gt;GA2 &amp;gt; 45&lt;/strong&gt; and &lt;strong&gt;GA3 &amp;gt; 55&lt;/strong&gt;. That alone cuts fail risk to ~&lt;strong&gt;16%&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;If possible, push &lt;strong&gt;&amp;gt;85/85&lt;/strong&gt; to get fail to &lt;strong&gt;~8%&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Translation: stop skipping; get partial credit; move into the &amp;ldquo;safe&amp;rdquo; GA2/GA3 band.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;rsquo;re aiming for an &lt;strong&gt;A&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Path A1 (broad coverage):&lt;/strong&gt; &lt;strong&gt;P2 + ET &amp;gt;= 180&lt;/strong&gt; &amp;gt; A ~ &lt;strong&gt;35%&lt;/strong&gt; (n=169).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path A2 (also broad):&lt;/strong&gt; &lt;strong&gt;P1 + P2 &amp;gt;= 180&lt;/strong&gt; &amp;gt; A ~ &lt;strong&gt;45%&lt;/strong&gt; (n=161).&lt;/li&gt;
&lt;li&gt;If early GAs are fine (GA2/GA3 &amp;gt;=70), &lt;strong&gt;keep them steady&lt;/strong&gt;, but your &lt;strong&gt;marginal effort&lt;/strong&gt; should go to &lt;strong&gt;P2 and ET&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;rsquo;re aiming for an &lt;strong&gt;S&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Path S1 (most reliable):&lt;/strong&gt; &lt;strong&gt;P2 &amp;gt;= 90 + ROE &amp;gt;= 80&lt;/strong&gt; &amp;gt; S ~ &lt;strong&gt;77%&lt;/strong&gt; (n=26).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path S2 (elite):&lt;/strong&gt; &lt;strong&gt;P2 &amp;gt;= 90 + ET &amp;gt;= 85 + ROE &amp;gt;= 80&lt;/strong&gt; &amp;gt; S ~ &lt;strong&gt;91%&lt;/strong&gt; (n=11).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simple rule of thumb:&lt;/strong&gt; &lt;strong&gt;P2 + ROE &amp;gt;= 170&lt;/strong&gt; or &lt;strong&gt;ET + ROE &amp;gt;= 160&lt;/strong&gt; &amp;gt; ~&lt;strong&gt;70% S&lt;/strong&gt; with &lt;strong&gt;0% fails&lt;/strong&gt; in those groups.&lt;/li&gt;
&lt;li&gt;Translation: &lt;strong&gt;ace ROE&lt;/strong&gt;. Use P2 and ET as the second and third pillars.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Students&lt;/strong&gt;: Don&amp;rsquo;t study harder. Study what moves the marks. (Learning be damned!)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Teachers&lt;/strong&gt;: Try this with &lt;strong&gt;your&lt;/strong&gt; course data!&lt;/p&gt;
&lt;p&gt;Full chat: &lt;a href=&#34;https://chatgpt.com/share/68e7034a-7340-800c-b259-0bd51715ad11&#34;&gt;https://chatgpt.com/share/68e7034a-7340-800c-b259-0bd51715ad11&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/posts/sanand0_todays-exploration-data-driven-llm-advice-activity-7381923875992920064-Aeey&#34;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title></title>
      <link>https://www.s-anand.net/blog/sites-i-visit-most-in-2025/</link>
      <pubDate>Thu, 02 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/sites-i-visit-most-in-2025/</guid>
      <description>&lt;p&gt;The 11 sites I visit most:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt;. It&amp;rsquo;s replaced Google as my default knowledge source. I prefer it over Gemini, Claude, etc. because the &lt;strong&gt;app&lt;/strong&gt; has good features (memory from past conversations, code interpreter, strong voice mode, remote MCP on web app, etc.) The OpenAI models have pros and cons, but the app features are ahead of competition.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gmail&lt;/strong&gt;. It&amp;rsquo;s my work inbox. Interestingly, I check it more (and respond faster) than social channels (e.g. WhatsApp, Google Chat, LinkedIn). It also doubles up as my task queue.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WhatsApp&lt;/strong&gt;. It&amp;rsquo;s my default phone + messaging app. A fair bit of my work communication happens here, too.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prime Video&lt;/strong&gt;. I mainly watch The Mentalist. Totally love Patrick Jane!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google AI Studio&lt;/strong&gt;. Mostly for transcription. It&amp;rsquo;s better than Gemini on UI, ability to handle uploads, file-formats, etc. It&amp;rsquo;s also free (though the data is used for training.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;My Talks page&lt;/strong&gt;: &lt;a href=&#34;https://sanand0.github.io/talks/&#34;&gt;https://sanand0.github.io/talks/&lt;/a&gt;. I give 1-1.5 talks a week, mostly on AI/ML topics. I use Marp to render Markdown slides and publish it here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Chat&lt;/strong&gt;. It&amp;rsquo;s Straive&amp;rsquo;s social channel. I can&amp;rsquo;t use it from my phone, so I log in only if I need to check if I missed something.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;. It&amp;rsquo;s where I post by default. I don&amp;rsquo;t use it for networking and only connect with people I&amp;rsquo;ve met and know well.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;YouTube&lt;/strong&gt;. Mostly for movie clips over dinner. I occasionally watch educational content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LLM Foundry&lt;/strong&gt;: &lt;a href=&#34;https://llmfoundry.straive.com/&#34;&gt;https://llmfoundry.straive.com/&lt;/a&gt;. LLM Foundry is Straive&amp;rsquo;s internal gateway to multiple model APIs (I built it). I use it to experiment with models, grab API keys, and demo LLMs to clients.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Squoosh&lt;/strong&gt;. I compress every image, every time. Mostly into WebP (hands-down the best format today), typically lossless with an 8-color palette, or lossy at ~0-10% quality for photos.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The list will change. But the reasons probably won&amp;rsquo;t: fast, simple, automatable, and practical (for me).&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2025-10-02-sites-i-visit-most-in-2025-linkedin.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/posts/sanand0_the-11-sites-i-visit-most-1-%F0%9D%97%96%F0%9D%97%B5%F0%9D%97%AE%F0%9D%98%81%F0%9D%97%9A-activity-7379742000738312192-hQR6&#34;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Vibe Shopping</title>
      <link>https://www.s-anand.net/blog/vibe-shopping/</link>
      <pubDate>Fri, 26 Sep 2025 08:30:28 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/vibe-shopping/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Vibe Shopping&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/robot-shopping-cart.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve started &lt;strong&gt;vibe shopping&lt;/strong&gt;, i.e. using ChatGPT to shop for small, daily items and buying &lt;strong&gt;without verifying&lt;/strong&gt;. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;A metal rack for the floor: at least 2 ft * 1 ft * 2 ft, small gaps, popular options on Amazon.in.&amp;rdquo; &lt;a href=&#34;https://chatgpt.com/share/68d61d68-7040-800c-936b-354749539308&#34;&gt;https://chatgpt.com/share/68d61d68-7040-800c-936b-354749539308&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;An optical wired mouse that&amp;rsquo;s smaller than usual, 4*+, popular, Prime-eligible for Chennai by the weekend on Amazon.in.&amp;rdquo; &lt;a href=&#34;https://chatgpt.com/share/68d61e0d-420c-800c-bc71-821b9f9296a9&#34;&gt;https://chatgpt.com/share/68d61e0d-420c-800c-bc71-821b9f9296a9&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The best use is when I &lt;strong&gt;don&amp;rsquo;t know the right terms&lt;/strong&gt;. In this case, the terms were &lt;strong&gt;wire rack&lt;/strong&gt; and &lt;strong&gt;mini mouse&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This is also useful when I &lt;strong&gt;don&amp;rsquo;t know what to buy&lt;/strong&gt;. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;A Diwali gift for a Taiwanese colleague.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Useful travel items under Rs500.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;A harmless &amp;lsquo;annoying&amp;rsquo; gift for a friend who never returns stuff.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But last week I found a new use: &lt;strong&gt;deep product research&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;The Mentalist&lt;/strong&gt; (S5E4), Jane asks Grace to deliver &amp;ldquo;anything, as long as it&amp;rsquo;s large and heavy,&amp;rdquo; at an address.&lt;/p&gt;
&lt;p&gt;If I were Grace, I&amp;rsquo;d ask ChatGPT: &amp;lsquo;What are the cheapest things to buy per kg?&amp;rsquo;&amp;quot;&lt;/p&gt;
&lt;p&gt;It turns out that the cheapest thing I can order from Chennai is compost: ~Rs 13,500 for 1 ton. &lt;a href=&#34;https://chatgpt.com/share/68d61d0e-cfc4-800c-a562-6c9d07edfc69&#34;&gt;https://chatgpt.com/share/68d61d0e-cfc4-800c-a562-6c9d07edfc69&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are some products I&amp;rsquo;m &amp;ldquo;deep researching&amp;rdquo; on Amazon:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What can I buy that&amp;rsquo;s technically edible but shouldn&amp;rsquo;t be?&lt;/li&gt;
&lt;li&gt;What has the weirdest warning label?&lt;/li&gt;
&lt;li&gt;What product has the longest name?&lt;/li&gt;
&lt;li&gt;What&amp;rsquo;re individually innocent but together make the checkout very suspicious?&lt;/li&gt;
&lt;li&gt;What&amp;rsquo;s the heaviest thing that fits in a 1x1 foot box?&lt;/li&gt;
&lt;li&gt;What&amp;rsquo;s the most over-engineered kitchen gadget?&lt;/li&gt;
&lt;li&gt;What&amp;rsquo;s the most ridiculous &amp;ldquo;office supplies&amp;rdquo; I can expense?&lt;/li&gt;
&lt;li&gt;What&amp;rsquo;s the most useless thing that still has 4+ stars?&lt;/li&gt;
&lt;li&gt;What&amp;rsquo;s the quietest product? Stealth &amp;gt; silent.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/posts/sanand0_ive-started-%F0%9D%98%83%F0%9D%97%B6%F0%9D%97%AF%F0%9D%97%B2-%F0%9D%98%80%F0%9D%97%B5%F0%9D%97%BC%F0%9D%97%BD%F0%9D%97%BD%F0%9D%97%B6%F0%9D%97%BB%F0%9D%97%B4-ie-activity-7377561368142598144-ZljD&#34;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>The 10 sites I visit most often</title>
      <link>https://www.s-anand.net/blog/the-10-sites-i-visit-most-often/</link>
      <pubDate>Tue, 23 Sep 2025 12:39:29 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/the-10-sites-i-visit-most-often/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;The 10 sites I visit most often&#34; loading=&#34;lazy&#34; src=&#34;https://www.s-anand.net/blog/assets/top-used-sites.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;Here are the 10 most frequent sites I use (based on Microsoft Edge&amp;rsquo;s home bar):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://chatgpt.com/&#34;&gt;ChatGPT&lt;/a&gt;. It replaced Google as my default knowledge source. I prefer it over Gemini, Claude, etc. because the &lt;strong&gt;app&lt;/strong&gt; has good features (memory from past conversations, code interpreter, strong voice mode, remote MCP on web app, etc.) The OpenAI models have pros and cons, but the app features are ahead of competition.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mail.google.com/&#34;&gt;Gmail&lt;/a&gt;. It&amp;rsquo;s my work inbox. Interestingly, I check it more (and respond faster) than social channels (e.g. WhatsApp, Google Chat, LinkedIn). It also doubles up as my task queue.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.primevideo.com/&#34;&gt;Prime Video&lt;/a&gt;. I mainly watch &lt;a href=&#34;https://www.imdb.com/title/tt1196946/&#34;&gt;The Mentalist&lt;/a&gt;. Totally love Patrick Jane!&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ai.google.com/studio&#34;&gt;Google AI Studio&lt;/a&gt;. Mostly for transcription. It&amp;rsquo;s better than &lt;a href=&#34;https://gemini.google.com/&#34;&gt;Gemini&lt;/a&gt; on UI, ability to handle uploads, file-formats, etc. It&amp;rsquo;s also free (though the data is used for training.)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sanand0.github.io/talks/&#34;&gt;My Talks page&lt;/a&gt;. I give 1-1.5 talks a week, mostly on AI/ML topics. I use &lt;a href=&#34;https://marp.app/&#34;&gt;Marp&lt;/a&gt; to render Markdown slides and publish it here.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://chat.google.com/&#34;&gt;Google Chat&lt;/a&gt;. It&amp;rsquo;s Straive&amp;rsquo;s social channel. I can&amp;rsquo;t use it from my phone, so I log in only if I need to check if I missed something.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://linkedin.com/&#34;&gt;LinkedIn&lt;/a&gt;. It&amp;rsquo;s where I post by default. I don&amp;rsquo;t use it for networking and only connect with people I&amp;rsquo;ve met and know well.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/&#34;&gt;YouTube&lt;/a&gt;. Mostly for movie clips over dinner. I occasionally watch educational content.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://llmfoundry.straive.com/&#34;&gt;Playground&lt;/a&gt;. LLM Foundry is Straive&amp;rsquo;s internal gateway to multiple model APIs (I built it). I use it to experiment with models, grab API keys, and demo LLMs to clients.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://squoosh.app/&#34;&gt;Squoosh&lt;/a&gt;. I compress every image, every time. Mostly into WebP (hands-down the best format today), typically lossless with an 8-color palette, or lossy at ~0-10% quality for photos.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&amp;rsquo;s my current home row. It will change. But the reasons probably won&amp;rsquo;t: fast, simple, automatable, and practical (for me).&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 21 Sep 2025</title>
      <link>https://www.s-anand.net/blog/things-i-learned-21-sep-2025/</link>
      <pubDate>Sun, 21 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-21-sep-2025/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When editing an image, ChatGPT&amp;rsquo;s non-thinking mode does a &lt;em&gt;much&lt;/em&gt; better job of preserving the original image features than the thinking mode. When editing my photo, I found that the thinking mode creates images that looks quite different than me. A surprising effect of overthinking.&lt;/li&gt;
&lt;li&gt;⭐ When evaluating model accuracy, compare with human accuracy rather than perfect accuracy. SMEs rarely agree among themselves, so it&amp;rsquo;s unlikely that they will agree with an LLM. Instead, measure how often the LLM agrees with the majority of SMEs and how often it disagrees with all SMEs. This gives a more realistic measure of accuracy. &lt;a href=&#34;https://aclanthology.org/2025.acl-short.20.pdf&#34;&gt;LLMs instead of Human Judges?&lt;/a&gt; and &lt;a href=&#34;https://arxiv.org/pdf/2306.05685&#34;&gt;Judging LLM-as-a-Judge&lt;/a&gt;. &lt;a href=&#34;https://chatgpt.com/share/68cfc068-0c5c-800c-b961-81e6a061b05f&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I understand at least one mechanism of how costs are inflated in large organizations. Even people who want to keep costs low find that the process of tracking expenses, submitting receipts, answering questions around approval, adds transaction cost. So, rather than going for a $10 plus top up mechanism, I would rather go for and ask people to take a $500 top up. Better ask for more and waste than have to ask again.&lt;/li&gt;
&lt;li&gt;YouTube downloaders: &lt;a href=&#34;https://github.com/yt-dlp/yt-dlp&#34;&gt;yt-dlp&lt;/a&gt; for the CLI, &lt;a href=&#34;https://stacher.io/&#34;&gt;Stacher&lt;/a&gt; for Windows/Mac/Linux, &lt;a href=&#34;https://cobalt.tools/&#34;&gt;Cobalt&lt;/a&gt; for a web-based app. &lt;a href=&#34;https://windowsread.me/p/best-youtube-downloaders&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;VS Code a bunch of features I discovered:
&lt;ul&gt;
&lt;li&gt;It can run a terminal in its own new window for over a year (via Ctrl+P &amp;gt; Terminal: Move Terminal into New Window). Now, &lt;kbd&gt;Ctrl + Alt + Shift + `&lt;/kbd&gt; does this directly.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://code.visualstudio.com/docs/terminal/shell-integration#_intellisense-preview&#34;&gt;Terminal Intellisense&lt;/a&gt; shows completion suggestions in the UI. Very helpful. Ctrl+Space triggers the menu completion.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⭐ &amp;ldquo;We find that the per-step error rate itself rises as the task progresses&amp;rdquo;, i.e. once a conversation goes the wrong way, it&amp;rsquo;s really hard to correct it. &lt;a href=&#34;https://arxiv.org/html/2509.09677&#34;&gt;The Illusion of Diminishing Returns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.google.com/search?q=japonaise&#34;&gt;Japonaise Cake&lt;/a&gt; is the name of the pastry that I had as a child and grew up longing for. I have spent several weeks searching for it in the roadside bakeries at Bangalore and Chennai but only &lt;a href=&#34;https://cakebee.in/products/japonaise-cake&#34;&gt;one bakery&lt;/a&gt; seems to have it.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;systemd&lt;/code&gt; is the modern way to run scheduled jobs, instead of &lt;code&gt;cron&lt;/code&gt;. It&amp;rsquo;s far more complex. But it can catch up on missed runs via a &lt;code&gt;Persistent&lt;/code&gt; option. &lt;a href=&#34;https://documentation.suse.com/smart/systems-management/html/systemd-working-with-timers/index.html&#34;&gt;Working with systemd timers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;⭐ Vice-chancellors of universities resist AI in education because (a) their faculty does not know AI and (b) AI is unreliable. But they are interested in (a) large-scale AI-evaluation and (b) AI-enabling entire campus.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://tldr.sh/&#34;&gt;tldr.sh&lt;/a&gt; offers concise man pages, e.g. &lt;code&gt;uvx tldr jq&lt;/code&gt;. &lt;a href=&#34;http://cheat.sh/&#34;&gt;cheat.sh&lt;/a&gt; offers detailed examples, e.g. &lt;code&gt;curl cheat.sh/jq&lt;/code&gt; or &lt;code&gt;curl cheat.sh/:help&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/Genivia/ugrep&#34;&gt;&lt;code&gt;ugrep&lt;/code&gt;&lt;/a&gt; is a fast drop-in replacement for &lt;code&gt;grep&lt;/code&gt;. It supports fuzzy search with a customizable Levenshtein distance. Also &lt;code&gt;ug -Q&lt;/code&gt; shows an interactive TUI searches like VS Code&amp;rsquo;s &amp;ldquo;Search in Files&amp;rdquo; feature. Very intuitive.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dagger.io/&#34;&gt;Dagger&lt;/a&gt; lets you write CI/CD workflows in Python. I tried running it but after 7m of pulling large Docker containers, I gave up. Too heavy.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dotslash-cli.com/&#34;&gt;dotslash&lt;/a&gt; lets you write scripts that downloads GitHub releases, caches, and runs them. Requires writing scripts. I prefer &lt;a href=&#34;https://mise.jdx.dev/&#34;&gt;&lt;code&gt;mise&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;ChatGPT has a quota for searches. I saw this phrase in the reasoning traces: &amp;ldquo;I&amp;rsquo;ll avoid overloading on citations since we only have a few calls left.&amp;rdquo; It doesn&amp;rsquo;t seem to be in ChatGPT&amp;rsquo;s &lt;a href=&#34;https://github.com/elder-plinius/CL4R1T4S/blob/476a209169e8cf0c7cad97c7ccf4c5afb2248067/OPENAI/ChatGPT5-08-07-2025.mkd&#34;&gt;system prompt&lt;/a&gt; from last month, so it&amp;rsquo;s either part of the tool response or a new prompt.&lt;/li&gt;
&lt;li&gt;Depending on the underlying chips that a model uses, the floating point multiplications may differ and model quality can vary. So Claude 4 Opus running on Anthropic&amp;rsquo;s GPUs can produce different results from when running on Google&amp;rsquo;s GPUs or Amazon&amp;rsquo;s GPUs.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title></title>
      <link>https://www.s-anand.net/blog/chatgpt-vs-google-usage/</link>
      <pubDate>Sun, 10 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/chatgpt-vs-google-usage/</guid>
      <description>&lt;p&gt;My ChatGPT engagement is now far higher than with Google.&lt;/p&gt;
&lt;p&gt;I started using ChatGPT in June 2023. From Sep 2023 - Feb 2024, my Google usage was 5x ChatGPT. Then, fell to 3x until May 2024. Then about 2x until Apr 2025. Since May 2025, it sits at the 1.5x mark.&lt;/p&gt;
&lt;p&gt;We spend &lt;em&gt;much&lt;/em&gt; more time with a ChatGPT conversation than a Google search result. So clearly, ChatGPT is my top app, beating Google some months ago.&lt;/p&gt;
&lt;p&gt;This is a global trend. ChatGPT gets 2.5B requests/day. Google gets 14B (~5-6x larger). But if we spend 5x more time on a ChatGPT conversation than a Google search, Google would rightly be worried.&lt;/p&gt;
&lt;p&gt;This usage isn&amp;rsquo;t complementary. My negative correlation of -0.74 is a strong substitution signal. I&amp;rsquo;m using ChatGPT &lt;em&gt;instead&lt;/em&gt; of Google, not &lt;em&gt;in addition&lt;/em&gt; to Google.&lt;/p&gt;
&lt;p&gt;But it&amp;rsquo;s not just ChatGPT vs Google. It&amp;rsquo;s chat vs search. What will people &lt;em&gt;search&lt;/em&gt; for instead of &lt;em&gt;chat&lt;/em&gt;? Will search become just background data for LLMs? Should search engines optimize output for chatbots?&lt;/p&gt;
&lt;p&gt;That might be a good thing for information diversity. I&amp;rsquo;m glad ChatGPT helps me ask fresh questions. Authors might be glad that different kinds of content will find an audience.&lt;/p&gt;
&lt;p&gt;My chat will overtake search in 12-18 months. When ChatGPT becomes my primary lens on knowledge, &amp;ldquo;Who curates the lens? And who audits the curvature?&amp;rdquo; (to quote ChatGPT)&lt;/p&gt;
&lt;p&gt;Full analysis: &lt;a href=&#34;https://sanand0.github.io/datastories/chatgpt-vs-google/&#34;&gt;https://sanand0.github.io/datastories/chatgpt-vs-google/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://sanand0.github.io/datastories/chatgpt-vs-google/chatgpt-vs-google-usage-ratio.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/posts/sanand0_my-chatgpt-engagement-is-now-far-higher-than-activity-7354015077819142144-8F-A&#34;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title></title>
      <link>https://www.s-anand.net/blog/analyze-chatgpt-thinking-time/</link>
      <pubDate>Sun, 29 Jun 2025 04:10:05 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/analyze-chatgpt-thinking-time/</guid>
      <description>&lt;p&gt;How long have &lt;em&gt;you&lt;/em&gt; made ChatGPT think? My highest was 6m 50s, with the question: &lt;em&gt;Here are vehicle telematics stats for&lt;/em&gt; 2 &lt;em&gt;months. Unzip it and take a look. Find interesting insights from this data. Look hard until you find at least&lt;/em&gt; 5 &lt;em&gt;surprising insights from this&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The next largest thinking block (5m 42s) was where I asked: &lt;em&gt;I would like to explore parallels to the current phenomenon where intelligence is becoming too cheap to meter. Historically, both in recent history as well as over ancient history, what technologies have made what kind of tasks so cheap that they are too cheap to meter? Give me a wide range of examples&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Completing long tasks is one measure of intelligence. &lt;strong&gt;Working independently for long&lt;/strong&gt; is another. O3 is at ~6 minutes. While it works, I&amp;rsquo;m practicing Bubble Shooter in 6 minutes!&lt;/p&gt;
&lt;p&gt;Completing long tasks: &lt;a href=&#34;https://www.lesswrong.com/posts/deesrjitvXM4xYGZd/metr-measuring-ai-ability-to-complete-long-tasks&#34;&gt;https://www.lesswrong.com/posts/deesrjitvXM4xYGZd/metr-measuring-ai-ability-to-complete-long-tasks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can do try this on your history. If you managed to beat 7 minutes, could you please share your prompt?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to export ChatGPT history: &lt;a href=&#34;https://help.openai.com/en/articles/7260999-how-do-i-export-my-chatgpt-history-and-data&#34;&gt;https://help.openai.com/en/articles/7260999-how-do-i-export-my-chatgpt-history-and-data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;How to analyze thinking time: &lt;a href=&#34;https://www.npmjs.com/package/chatgpt-to-markdown&#34;&gt;https://www.npmjs.com/package/chatgpt-to-markdown&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;hellip; or run:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npx -p chatgpt-to-markdown thinktime conversations.json&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/feed/update/urn%3Ali%3Ashare%3A7344940195856752642&#34;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
  </channel>
</rss>
