<?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>Things I learned on S Anand</title>
    <link>https://www.s-anand.net/blog/category/things-i-learned/</link>
    <description>Recent content in Things I learned on S Anand</description>
    <generator>Hugo -- 0.156.0</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 07 Jun 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.s-anand.net/blog/category/things-i-learned/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Things I Learned - 07 Jun 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-07-jun-2026/</link>
      <pubDate>Sun, 07 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-07-jun-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo resolvectl flush-caches&lt;/code&gt; clears the DNS cache on Linux. Useful when you&amp;rsquo;re changing DNS records and want to see the changes immediately. In my case, I was creating a Cloudflare tunnel to my laptop and wanted to test it quickly.&lt;/li&gt;
&lt;li&gt;Making something easy to verify makes it &lt;em&gt;much&lt;/em&gt; faster to train models on it. Arithmetic verification is easy - calculators can be deterministically verified. Chess verification is easy - Stockfish became easy to train. Code verification is easy - LLMs improved coding ability rapidly. Therefore:
&lt;ul&gt;
&lt;li&gt;Wherever we have environments that are easy to verify, AI will improve faster there.&lt;/li&gt;
&lt;li&gt;To make AI improve faster in an area, build environments that are easy to verify.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/&#34;&gt;MCP is getting simpler&lt;/a&gt;. A stateless HTTP protocol. Simpler OAuth. Plugins. No idea when it will land in Claude or ChatGPT, though. Worth checking after 28 Jun 2026 - after it is finalized.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.microsoft.com/en-us/microsoft-365/blog/2026/06/02/introducing-microsoft-scout-your-always-on-personal-agent/&#34;&gt;Microsoft Scout&lt;/a&gt; is Microsoft&amp;rsquo;s version of OpenClaw or &lt;a href=&#34;https://gemini.google/overview/agent/spark/&#34;&gt;Gemini Spark&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git subtree&lt;/code&gt; is a useful way of maintaining git repos inside git repos. For example, if you have a tool &lt;code&gt;tool-a&lt;/code&gt; under a project. It&amp;rsquo;s more light-weight than sub-modules, lets you commit at any point to the parent &lt;em&gt;or&lt;/em&gt; child, and is a built-in feature in &lt;code&gt;git&lt;/code&gt;. &lt;!-- https://chatgpt.com/c/6a1d25bf-49f4-83ec-8e02-5905a22f4fe0 --&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.google/innovation-and-ai/technology/developers-tools/introducing-gemma-4-12b/&#34;&gt;Gemma 4 12B is released&lt;/a&gt; and seems almost as good as the 26B version. This is the class of models that makes it practical to run edge AI on phones. It&amp;rsquo;s multimodal and reasonably smart (like frontier models were 12-18 months ago).&lt;/li&gt;
&lt;li&gt;I don&amp;rsquo;t use Claude/ChatGPT Projects much. It offers 3 advantages: custom instructions, memory, files, and chats. Files aren&amp;rsquo;t useful - I use my entire laptop as a file system via MCP. Instructions aren&amp;rsquo;t useful - I can paste commonly used prompts with a click. Chats aren&amp;rsquo;t useful - I have chat references enabled, so all past chats are accessible anyway. Memory isn&amp;rsquo;t useful - I have memory enabled globally anyway. In short, I haven&amp;rsquo;t discovered the power of projects that everyone&amp;rsquo;s raving about. SKILL.md is more useful for me. &lt;!-- https://claude.ai/chat/eb3bcf3e-f1f0-4d33-b5a2-14b09cbda189 --&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gerrit.googlesource.com/git-repo/+/HEAD/README.md&#34;&gt;&lt;code&gt;repo&lt;/code&gt;&lt;/a&gt; is a Google/Android tool built on top of &lt;code&gt;git&lt;/code&gt; that lets you manage multiple git repos. It sounded promising until I released it needs a &lt;code&gt;repo init&lt;/code&gt; that creates a &lt;code&gt;.repo/&lt;/code&gt; - which is more overhead that I&amp;rsquo;d like to keep.&lt;/li&gt;
&lt;li&gt;When using &lt;code&gt;&amp;lt;image onerror=...&amp;gt;&lt;/code&gt; fallbacks, include &lt;code&gt;this.oneerror=null&lt;/code&gt; to prevent infinite loops if the fallback image also fails to load. &lt;a href=&#34;http://mvark.blogspot.com/2026/05/how-to-add-backup-image-in-html-when.html&#34;&gt;RK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;One of the advantages of multiple agent (rather than a single agent loop) is: it&amp;rsquo;s easier to change directions when wrong. Single loops get stuck. &lt;a href=&#34;https://www.youtube.com/watch?v=mR-WAvEPRwE&#34;&gt;Build Agents That Run for Hours&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Claude Code also supports &lt;a href=&#34;https://code.claude.com/docs/en/agent-teams&#34;&gt;agent teams&lt;/a&gt; where sub-agents can talk to each other rather than rely on the main agent to coordinate. Useful for parallel exploration. Anthropic lets Claude define &amp;ldquo;organizational policies&amp;rdquo; for agent teams best suited for the task (AI-native workflows). It also lets agents to push back on their scope, e.g. &amp;ldquo;This is too hard.&amp;rdquo; &lt;a href=&#34;https://www.youtube.com/watch?v=mR-WAvEPRwE&#34;&gt;Build Agents That Run for Hours&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Claude Code has a &lt;code&gt;/background [prompt]&lt;/code&gt; (or &lt;code&gt;/bg&lt;/code&gt;) command that runs the current session the background. You can run &lt;code&gt;claude agents&lt;/code&gt; as a separate command to &lt;a href=&#34;https://code.claude.com/docs/en/agent-view&#34;&gt;monitor agents&lt;/a&gt;. (There&amp;rsquo;s no equivalent in Codex yet.) This seems to be the future of agentic operations: a bunch of agents running that you monitor and steer through an agent view dashboard.&lt;/li&gt;
&lt;li&gt;Models are evolving. Therefore prompts evolved. Now harnesses also need to evolve. The workflows will also evolve. As a result, evaluations might be the (relatively) more stable assets. Datasets are likely to be the most stable ground truth.&lt;/li&gt;
&lt;li&gt;How to learn a new field fast:
&lt;ul&gt;
&lt;li&gt;Yes, it&amp;rsquo;s possible to learn 50% of a field in 20 hours. &lt;a href=&#34;https://www.youtube.com/watch?v=5MgBikgcWnY&#34;&gt;Josh Kaufman, &amp;ldquo;The First 20 Hours&amp;rdquo;&lt;/a&gt; popularized it. The next 30% takes months and the last 20% takes years.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Threshold_knowledge&#34;&gt;Threshold concepts&lt;/a&gt; are those that change your perspective and open up new ways of thinking.&lt;/li&gt;
&lt;li&gt;Experts&amp;rsquo; knowledge is hard-wired and they can&amp;rsquo;t identify nor teach threshold concepts naturally. Don&amp;rsquo;t assume they can.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.google.com/search?q=Polanyi+%22we+know+more+than+we+can+tell%22&#34;&gt;&amp;ldquo;We know more than we can tell.&amp;rdquo;&lt;/a&gt; Polanyi&amp;rsquo;s 1966 book &amp;ldquo;The Tacit Dimension&amp;rdquo; says that there&amp;rsquo;s some knowledge that can&amp;rsquo;t be verbalized. This &lt;a href=&#34;https://en.wikipedia.org/wiki/Tacit_knowledge&#34;&gt;tacit knowledge&lt;/a&gt;, therefore, will be harder for humans and AI to learn.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 31 May 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-31-may-2026/</link>
      <pubDate>Sun, 31 May 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-31-may-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.d-id.com/&#34;&gt;D-ID&lt;/a&gt; is an avatar generator platform like &lt;a href=&#34;https://heygen.com/&#34;&gt;HeyGen&lt;/a&gt;. &lt;a href=&#34;https://creatify.ai/&#34;&gt;Creatify&lt;/a&gt; and &lt;a href=&#34;https://www.synthesia.io/&#34;&gt;Synthesia&lt;/a&gt; are a couple of others I heard of. This space seems to be growing.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sigstore/cosign&#34;&gt;cosign&lt;/a&gt; is a CLI that lets you sign and verify any piece of text with a Google, GitHub or Microsoft account. &lt;code&gt;cosign sign-blob FILE --bundle sign.json&lt;/code&gt; opens a login window and creates a &lt;code&gt;sign.json&lt;/code&gt; signature. Anyone who has &lt;code&gt;FILE&lt;/code&gt; and &lt;code&gt;sign.json&lt;/code&gt; and the email ID can verify via a Google account with &lt;code&gt;cosign verify-blob FILE --bundle sign.json --certificate-identity $EMAIL --certificate-oidc-issuer https://accounts.google.com&lt;/code&gt;. &lt;!-- https://chatgpt.com/c/6a197375-fd5c-83ec-9f21-43b084a3830a --&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://arxiv2md.org/&#34;&gt;arxiv2md.org&lt;/a&gt; converts arXiv papers to Markdown. &lt;a href=&#34;https://github.com/timf34/arxiv2md&#34;&gt;Source&lt;/a&gt;. &lt;a href=&#34;https://markxiv.org/&#34;&gt;markxiv.org&lt;/a&gt; claims the same - by just changing the URL - but it ended up reporting an error when I tried this link: &lt;a href=&#34;https://markxiv.org/abs/2604.08649&#34;&gt;https://markxiv.org/abs/2604.08649&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;From Akhilesh Tilotia: So we have someone in our team with initials AS. She made a document which was named vAS. Then I made edits and named it vAT. These docs were in a CoWork folder. I asked Claude to clean up my doc. It created another version for me to review. In its wisdom, it named the file vAU 🙂&lt;/li&gt;
&lt;li&gt;Maybe what a forward-deployed engineer does is enginer AI-native workflows. (This sounded profound when I wrote it down. Not sure if it&amp;rsquo;ll sound as profound tomorrow.) The idea is that the FDE will say, screw existing processes; let me fire up my AI agent and get stuff done; THEN we&amp;rsquo;ll figure out what works, how to optimize it, etc.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://arxiv.org/abs/2604.08649&#34;&gt;PRAGMA: Revolut Foundation Model&lt;/a&gt; has some good tokenization ideas for tabular data. Create your own token space with &lt;code&gt;key–value–time&lt;/code&gt; tokenization - to retain field information. Bucketize numbers by percentile, preserving magnitude/ordering that subword tokenization destroys. Encode time both as log-seconds &lt;em&gt;and&lt;/em&gt; as cyclical calendar features.&lt;/li&gt;
&lt;li&gt;Codex uses the &lt;kbd&gt;Alt + Up Arrow&lt;/kbd&gt; key to edit queued commands, but on the VS Code terminal, this key binding is not sent to the terminal. Enable the &lt;code&gt;terminal.integrated.sendKeybindingsToShell&lt;/code&gt; setting to send it to the terminal, hence Codex.&lt;/li&gt;
&lt;li&gt;Based on this &lt;a href=&#34;https://chatgpt.com/share/6a16dfd6-bd70-83ec-807a-646366ba9a99&#34;&gt;catalog&lt;/a&gt; on &amp;ldquo;universal foods&amp;rdquo;, here&amp;rsquo;s what I 🟢 like, am 🟡 neutral, 🔴 dislike, 🟣 must try, and will ⚫ skip. &lt;!-- https://chatgpt.com/c/6a165e95-5100-83ec-8b90-c41fd2876fdf --&gt;
&lt;ul&gt;
&lt;li&gt;Universal favorites: 🟢 pizza, 🟢 fried potatoes/chicken, 🟡 dumplings, 🟢 ice cream.&lt;/li&gt;
&lt;li&gt;Universal comfort foods: 🟢 khichdi, 🟡 congee, 🟡 dal-rice, 🟡 risotto, 🟡 ramen, 🟢 pho, ⚫ chicken noodle soup, 🔴 rice porridge, 🟡 mac-and-cheese, 🔴 mashed potato, 🟣 polenta, 🟢 oatmeal, 🟣 Japanese curry rice.&lt;/li&gt;
&lt;li&gt;Acquired tastes that convert most: 🟡 coffee, 🟢 tea, 🟡 dark chocolate, 🟢 mild fermented dairy, 🟢 pickles, 🟢 olives, 🟣 kimchi, 🟣 miso, 🟢 mild chili dishes.&lt;/li&gt;
&lt;li&gt;Acquired tastes that have cult devotion: 🟣 durian, 🟣 natto, 🟣 stinky tofu, ⚫ fermented fish, ⚫ hákarl, 🟢 very funky blue cheese, ⚫ offal.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://oceanofpdf.com/&#34;&gt;OceanoPDF&lt;/a&gt; seems like a good place to download ePubs of books.&lt;/li&gt;
&lt;li&gt;The entire Wikipedia is available as a &lt;a href=&#34;https://huggingface.co/datasets/wikimedia/structured-wikipedia&#34;&gt;Parquet file&lt;/a&gt;. You can query it like &lt;code&gt;duckdb -c &amp;quot;FROM &#39;hf://datasets/wikimedia/structured-wikipedia/enwiki/data/*.parquet&#39; LIMIT 5&amp;quot;&lt;/code&gt;. The English version has 35 GB, 7.6 million articles, and you&amp;rsquo;re better off downloading it rather than running analyses remotely.&lt;/li&gt;
&lt;li&gt;When you receive a Calendly link of the form &lt;code&gt;https://cal.com/USER/EVENT&lt;/code&gt; you can fetch the available slots via &lt;code&gt;curl -H &#39;cal-api-version: 2024-09-04&#39; &#39;https://api.cal.com/v2/slots?eventTypeSlug=EVENT&amp;amp;username=USER&amp;amp;start=2026-05-25&amp;amp;end=2026-06-01&amp;amp;timeZone=Asia/Singapore&amp;amp;format=range&#39;&lt;/code&gt;. Useful to automate good meeting-slot selection. &lt;!-- https://chatgpt.com/c/6a126d5e-b9c8-83ec-a88b-f230d04434e9 --&gt;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Reference saved memories&amp;rdquo; in ChatGPT is different from &amp;ldquo;Reference chat history&amp;rdquo; as per &lt;a href=&#34;https://help.openai.com/en/articles/8590148-memory-faq&#34;&gt;OpenAI&lt;/a&gt;. In &lt;a href=&#34;https://help.openai.com/en/articles/12584461-developer-mode-and-mcp-apps-in-chatgpt&#34;&gt;Developer Mode&lt;/a&gt;, memory is turned off, but not chat history. I confirmed that I can access past conversations in Developer Mode. It might be a privacy concern for others, but for me, this is singularly useful, because I can use ChatGPT with &lt;a href=&#34;https://www.s-anand.net/blog/how-i-use-local-mcp/&#34;&gt;Local MCP&lt;/a&gt; effectively getting a non-metered AI coding agent. &lt;!-- https://chatgpt.com/c/6a12c899-ac5c-83ec-a4fa-6e0717f810b3 --&gt;&lt;/li&gt;
&lt;li&gt;Seems GPT-5.2 reaches expert level in peer review: 45 scientists took 469 hours evaluating human &amp;amp; AI reviews on 82 papers. &amp;ldquo;Surprisingly, current AI reviewers are competitive even with the top-rated reviewers in Nature’s official peer review&amp;hellip;&amp;rdquo; though not without weaknesses, so use AI + humans. &lt;a href=&#34;https://arxiv.org/abs/2605.20668&#34;&gt;On the limits and opportunities of AI reviewers: Reviewing the reviews of Nature-family papers with 45 expert scientists&lt;/a&gt; via &lt;a href=&#34;https://bsky.app/profile/emollick.bsky.social/post/3mmf2ano3ik27&#34;&gt;Ethan Mollick&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 24 May 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-24-may-2026/</link>
      <pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-24-may-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BitWarden seems to be sneakily jacking up prices and going towards a PE sale. Might be time to shift out or self host. Sigh, I just migrated into it&amp;hellip; &lt;a href=&#34;https://blog.ppb1701.com/the-quiet-renovation-at-bitwarden&#34;&gt;Source&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Andrej Karpathy has joined Anthropic. Likely to use Claude to build better Claudes - automating AI research. Also, it probably isn&amp;rsquo;t a good time to build an AI education platform. &lt;a href=&#34;https://claude.ai/share/f9932e93-a632-4015-93f4-84359670f53c&#34;&gt;Claude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The open-source Chinese models about 6 months behind frontier models. &lt;a href=&#34;https://qwen.ai/blog?id=qwen3.7&#34;&gt;Qwen 3.7-Max&lt;/a&gt; is &lt;a href=&#34;https://arena.ai/leaderboard/text&#34;&gt;on par&lt;/a&gt; with Claude 4.5 Opus (Nov 2025) and Gemini 3 Flash (Dec 2025).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.google/products-and-platforms/products/search/search-io-2026/&#34;&gt;Google basically became Gemini&lt;/a&gt;. Entirely! I&amp;rsquo;m not sure there&amp;rsquo;s a difference any more. Which means it will scrape websites and not send traffic through - just killing the search economy. But it&amp;rsquo;s far more useful. &lt;a href=&#34;https://claude.ai/share/9f3f6172-2965-40a0-8b67-053a0769e455&#34;&gt;Claude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I wanted a list of sites I log into with my Google Account. &lt;a href=&#34;https://myaccount.google.com/connections&#34;&gt;Google&amp;rsquo;s Linked apps&lt;/a&gt; page does that. Unfortunately, I can&amp;rsquo;t find a way to use &lt;a href=&#34;https://takeout.google.com/&#34;&gt;Google Takeout&lt;/a&gt; to export that data. So I wrote a &lt;a href=&#34;https://github.com/sanand0/scripts/blob/deb4c1ecbc93e03511ca264ce14d2977d01b7d90/googleconnections.py&#34;&gt;scraper&lt;/a&gt; which can be &lt;a href=&#34;https://github.com/sanand0/scripts/blob/deb4c1ecbc93e03511ca264ce14d2977d01b7d90/prompts/googleconnections.md&#34;&gt;single-shot prompted&lt;/a&gt; these days.&lt;/li&gt;
&lt;li&gt;As long as you remember to exhale, your chances of recovery from being ejected into space is pretty good for the first 15-60 seconds. &lt;a href=&#34;https://gemini.google.com/share/4a15b461a2d3&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I don&amp;rsquo;t understand half the comments I read on LinkedIn. Earlier, I was able to separate good from bad. Now, I&amp;rsquo;m not sure if what I read is actually insight or idiocy. Is the AI use making their comments too smart or making my brain too dumb?&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Pax Memoriae&amp;rdquo;: peace of memory. Putting past conflicts to rest. The best part of it was, I learnt the phrase by typing &amp;ldquo;Pax&amp;rdquo; into VS Code and wasn&amp;rsquo;t sure what to write next. Before I could search for it, GitHub Copilot completed it. I searched for what it meant, and it was &lt;em&gt;so apt&lt;/em&gt;!&lt;/li&gt;
&lt;li&gt;Children&amp;rsquo;s vision is worse than adults, but filter less and absorb ore irrelevant information than adults. This is useful for learning and surprise detection, but costly for focus, speed, and relevance. &lt;a href=&#34;https://chatgpt.com/share/6a0aae2f-9b64-83ec-8db5-00c2f3a465b0&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The word phobia comes from the Greek god of fear, Phobos, which is the name of one of Mars&amp;rsquo; moon. Deimos, the other moon, is the Greek god of dread/terror. They&amp;rsquo;re the children of Ares (Mars), the god of war. Nice planet.&lt;/li&gt;
&lt;li&gt;On WhatsApp, I can type &lt;code&gt;@Meta AI&lt;/code&gt; and then &lt;code&gt;/imagine&lt;/code&gt; to have it draw an image. The quality is OK - not great, not terrible.&lt;/li&gt;
&lt;li&gt;Surprising but GPT Realtime Whisper (&lt;a&gt; new model) isn&amp;rsquo;t as good as the older open-source Whisper models. Also, Gemini 3 Flash Preview is as good at transcription as Gemini 3.1 Pro Preview for up to medium-length text. &lt;a href=&#34;https://pythonicvarun.github.io/llm-audio-transcription-benchmark/&#34;&gt;LLM Audio Transcription benchmark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Google Maps typically shows me a cycling time of 30 minutes when it take me 40 minutes and a walking time of 40 minutes when it take me 30 minutes. Either I walk much faster and cycle much lower than the typical person or Google Maps is not well calibrated to Singapore and India.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 17 May 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-17-may-2026/</link>
      <pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-17-may-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I had GPT-5.5 and Opus 4.7 analyze a few of my conversations and learnt that I need to ask myself: &amp;ldquo;What must they take away? What must you take away?&amp;rdquo; in my conversations. That lets me speak with intention rather than instict. (Instinct has its place. I happen to over-use it.) &lt;!-- Based on Ankor Disagreement on Outcome Pricing: https://chatgpt.com/c/6a07db43-8b68-83ec-8aa6-da51ebca2c86 | https://claude.ai/chat/3e2ccaae-e6a0-473c-9f81-8d5787e689ad --&gt;&lt;/li&gt;
&lt;li&gt;Turns out there are several well-established taxonomies. It makes sense to align with these. Linked data is powerful and AI makes linkage easy.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;General Knowledge&lt;/strong&gt;: Wikidata, DBpedia, YAGO.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;People&lt;/strong&gt;: VIAF, ISNI, ORCID, LC Name Authority, GND.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Places&lt;/strong&gt;: GeoNames, Getty TGN, ISO 3166.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Organizations&lt;/strong&gt;: LEI, ROR, Wikidata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Books/Media&lt;/strong&gt;: Open Library, WorldCat, MusicBrainz, IMDB.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chemicals/Biology&lt;/strong&gt;: PubChem, ChEBI, GBIF, ITIS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legal/Units/Math/Events&lt;/strong&gt;: EuroVoc, QUDT, OEIS, PeriodO, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;BitWarden supports a &lt;a href=&#34;https://bitwarden.com/help/cli/&#34;&gt;&lt;code&gt;bw&lt;/code&gt; CLI&lt;/a&gt; that seems handy for quick CLI access to passwords. It&amp;rsquo;s a step towards me moving away from saving passwords unencrypted on my local file system.&lt;/li&gt;
&lt;li&gt;Singapore has banned prediction markets like Polymarket and Kalshi. Pity. I was hoping to use AI coding agents to play them. &lt;a href=&#34;https://sg.news.yahoo.com/why-people-betting-thousands-dollars-023000224.html&#34;&gt;Yahoo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://flipbook.page/&#34;&gt;flipbook.page&lt;/a&gt; is a fascinating generative UI exploration. It&amp;rsquo;s a visual browser, i.e. it generates an image based on text, you click anywhere, it generates an image interpreting based on where you clicked, and so on. A very different style of exploration!&lt;/li&gt;
&lt;li&gt;Vercel&amp;rsquo;s &lt;a href=&#34;https://github.com/vercel-labs/deepsec/&#34;&gt;&lt;code&gt;deepsec&lt;/code&gt;&lt;/a&gt; uses Codex / Claude to search for vulnerabilities, but &amp;ldquo;scans can cost thousands or even tens-of-thousands of dollars for large codebases&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;When I charge my Lenovo Thinkpad (P1 Gen 7) with the 170W charger that came with the laptop, it delivers ~60W of power to the battery, charging the laptop in about an hour. A 65W laptop delivers half the power and takes twice as long.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 10 May 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-10-may-2026/</link>
      <pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-10-may-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I&amp;rsquo;m experimenting with &lt;a href=&#34;https://tauonmusicbox.rocks/&#34;&gt;Tauon MusicBox&lt;/a&gt; as an alternative to VLC as a music player. Update: 01 Jun 2026. I switched back to VLC. Tauon Music Box is glitch. It stops songs mid-way and doesn&amp;rsquo;t play automatically when launched.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;xz&lt;/code&gt; is pretty slow by default. &lt;code&gt;xz -T0&lt;/code&gt; uses all available threads and speeds it up ~3X. Enabling &amp;ldquo;Performance mode&amp;rdquo; (over a power-saver mode) produces a further speed-up of ~2X for me. For a 200MB file, that reduces the time from ~1 minute to 10 seconds.&lt;/li&gt;
&lt;li&gt;Notes from &lt;a href=&#34;https://simonwillison.net/2026/May/6/code-w-claude-2026/&#34;&gt;Simon Willison&amp;rsquo;s notes from the Claude Code event&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Design for the next model&amp;rdquo;. Build things that don&amp;rsquo;t quite work today on the assumption that they&amp;rsquo;ll start working with a model upgrade in the future.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;The advisor strategy&amp;rdquo;. Instead of using a smarter model to plan, use smaller models to ask Opus for advice-on-demand.&lt;/li&gt;
&lt;li&gt;Dreaming looks really interesting. You can run a task over night which examines previous sessions and creates new memories.&lt;/li&gt;
&lt;li&gt;A &lt;a href=&#34;https://code.claude.com/docs/en/routines&#34;&gt;routine&lt;/a&gt; is a saved Claude Code configuration: a prompt, one or more repositories, and a set of connectors, packaged once and run automatically. Routines execute on Anthropic-managed cloud infrastructure, so they keep working when your laptop is closed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Overheard: &amp;ldquo;VCs say, &amp;lsquo;OpenAI wants to get into commerce, so why are you getting into commerce?&amp;rsquo; A few weeks later, &amp;lsquo;OpenAI no longer wants to get into commerce, so why are you?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Delightful discovery of the day: Super + Shift + Arrow keys to move windows between monitors on Ubuntu.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/alexpasmantier/television&#34;&gt;television&lt;/a&gt; is a fast, portable fuzzy finder. Like &lt;code&gt;fzf&lt;/code&gt; but faster, useful for files, text, git repos, docker images, etc.&lt;/li&gt;
&lt;li&gt;I added &lt;code&gt;approvals_reviewer = &amp;quot;auto_review&amp;quot;&lt;/code&gt; to my &lt;code&gt;~/.codex/config.toml&lt;/code&gt;. This enables &lt;a href=&#34;https://alignment.openai.com/auto-review&#34;&gt;auto review&lt;/a&gt; which uses an LLM to figure out whether to ask a human to approve or not. It&amp;rsquo;s a lot less intrusive than asking every time. Not perfectly safe, though.&lt;/li&gt;
&lt;li&gt;Copilot supports a &lt;a href=&#34;https://docs.github.com/en/copilot/how-tos/copilot-cli/use-copilot-cli/chronicle&#34;&gt;&lt;code&gt;/chronicle&lt;/code&gt;&lt;/a&gt; command that suggest tips and improvements when using Copilot. It&amp;rsquo;s like &lt;code&gt;/insights&lt;/code&gt; on Claude Code and&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/fathyb/carbonyl/releases&#34;&gt;Carbonyl&lt;/a&gt; is a CLI Chromium browser. Sort of like Lynx, but supports audio/video, JavaScript, even WASM, etc. This was the &lt;a href=&#34;https://fathy.fr/carbonyl&#34;&gt;author&amp;rsquo;s first Rust project&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I tried &lt;a href=&#34;https://zed.dev/&#34;&gt;Zed&lt;/a&gt; as an alternative to VS Code. It&amp;rsquo;s fast and lightweight, but lacks the ecosystem of VS Code. Plugins are harder to build and Markdown support is weak. I would use it on a flight to save power, not otherwise. This is similar to others&amp;rsquo; experience. &lt;a href=&#34;https://chatgpt.com/share/69f703b4-409c-83ea-a9fd-0c601de973f3&#34;&gt;ChatGPT&lt;/a&gt; &lt;!-- https://chatgpt.com/c/69f6cf11-f870-83ea-b9bb-e35402db3226 --&gt; UPDATE 05 Jun 2026. It DOES use some battery power - more than I&amp;rsquo;d like. I am uninstalling it.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/localsend/localsend&#34;&gt;LocalSend&lt;/a&gt; is a pretty quick way to share files between phone and laptop even if you don&amp;rsquo;t have a network - if you connect the laptop to the phone hotspot.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://flathub.org/en/apps/org.gnome.NetworkDisplays&#34;&gt;GNOME Network Displays&lt;/a&gt; works pretty well if you want to screencast your screen to a network display - e.g. a Smart TV with Miracast or Chromecast support.&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;m evaluating &lt;a href=&#34;https://github.com/rtk-ai/rtk&#34;&gt;rtk&lt;/a&gt; - a CLI proxy to reduce tokens. For example &lt;code&gt;rtk ls&lt;/code&gt; or &lt;code&gt;rtk git status&lt;/code&gt; shows agent-friendly compact output. I just added one like to my AGENTS.md: &amp;ldquo;Always prefix shell commands with &lt;code&gt;rtk&lt;/code&gt;. Examples: &lt;code&gt;rtk git status&lt;/code&gt;, &lt;code&gt;rtk pytest -q&lt;/code&gt;, etc.&amp;rdquo; instead of using &lt;code&gt;rtk init -g&lt;/code&gt;. I am testing it out, so I don&amp;rsquo;t know the impact, but it seems harmless. (Based on 2 days&amp;rsquo; usage, across 216 commands, it saved ~50% of 37K tokens. Not much, but harmless.)&lt;/li&gt;
&lt;li&gt;The emerging convention to mark a section of HTML / Markdown as AI generated content is to wrap it in:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;section ai-disclosure=&amp;quot;ai-generated&amp;quot; data-ai-model=&amp;quot;claude-sonnet-4.6&amp;quot; data-ai-provider=&amp;quot;Anthropic&amp;quot;&amp;gt;&lt;/code&gt; (&lt;a href=&#34;https://www.w3.org/community/ai-content-disclosure/&#34;&gt;W3C AI Content Disclosure Community Group&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 03 May 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-03-may-2026/</link>
      <pubDate>Sun, 03 May 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-03-may-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/run-llama/liteparse&#34;&gt;LiteParse&lt;/a&gt; is a PDF to text library that you can run via &lt;code&gt;npx --package=@llamaindex/liteparse lit parse document.pdf&lt;/code&gt;. &lt;a href=&#34;https://simonwillison.net/2026/Apr/23/liteparse-for-the-web/&#34;&gt;Simon Willison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Always add indecisiveness, inaction, &amp;ldquo;other&amp;rdquo;, &amp;ldquo;not applicable&amp;rdquo;, etc. as an option to LLMs. They are trained for decisive responses and pattern matching, so we need to guide the the other way. &lt;a href=&#34;https://martinfowler.com/fragments/2026-04-14.html&#34;&gt;Martin Fowler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GPT 5.5 is priced &lt;em&gt;twice&lt;/em&gt; that of GPT 5.4. No wonder my Codex usage is much higher than last month. &lt;a href=&#34;https://simonwillison.net/2026/Apr/23/gpt-5-5/#a-few-more-notes-on-gpt-5-5&#34;&gt;Simon Willison&lt;/a&gt;. I am better off sticking to &lt;code&gt;medium&lt;/code&gt; effort instead of the &lt;code&gt;xhigh&lt;/code&gt; I usually use - it may not be required. &lt;a href=&#34;https://developers.openai.com/api/docs/guides/latest-model&#34;&gt;OpenAI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;&amp;hellip; the eigenquestion is the question where, if answered, it likely answers the subsequent questions as well.&amp;rdquo; &lt;a href=&#34;https://coda.io/@shishir/eigenquestions-the-art-of-framing-problems/eigenquestions-3&#34;&gt;Shishir Mehrotra &amp;amp; Matt Hudson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Claude Code stores the logged in OAuth token at &lt;code&gt;~/.claude/.credentials.json&lt;/code&gt;. We can use that to fetch &lt;code&gt;https://api.anthropic.com/api/oauth/usage&lt;/code&gt; and retrieve Claude usage and reset times. &lt;code&gt;uvx ccusage&lt;/code&gt; does this automatically, but I prefer my own script.&lt;/li&gt;
&lt;li&gt;Ontology matters in the AI era. But some stuff matters more, and some less. &lt;!-- https://claude.ai/chat/2f6fdf7e-9d32-4c45-ac8d-603d029aed5b --&gt;
&lt;ul&gt;
&lt;li&gt;🟢 MORE: Definitions: what &amp;ldquo;customer&amp;rdquo; means&lt;/li&gt;
&lt;li&gt;🟢 MORE: Constraints: e.g. &amp;ldquo;don&amp;rsquo;t reclassify loans&amp;rdquo;&lt;/li&gt;
&lt;li&gt;🟢 MORE: Interactions: how to verify, coordinate, delegate, &amp;hellip;&lt;/li&gt;
&lt;li&gt;🔴 LESS: Creating ontologies: agents can do that.&lt;/li&gt;
&lt;li&gt;🔴 LESS: Completeness and rigor: agents tolerate uncertainty.&lt;/li&gt;
&lt;li&gt;🔴 LESS: Proprietary: agents can reverse-engineer.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;There are several industries / markets that MBA case studies rarely cover (&lt;a href=&#34;https://chatgpt.com/share/69efcf7a-6bf0-83ea-86dd-36e115e7540c&#34;&gt;ChatGPT&lt;/a&gt;): Kirana stores; Care (child care, elder care, domestic work); Faith (finance, food, media, education); Remittances; Gambling (lottery, sports betting, gacha); Scams &amp;amp; organized fraud; Counterfeiting; &amp;hellip; &lt;!-- https://chatgpt.com/c/69efa7bb-f918-83ea-9bc5-e3f7231c75da + https://gemini.google.com/app/dc5ac9f4a4f44cf0 --&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 26 Apr 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-26-apr-2026/</link>
      <pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-26-apr-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mdq&lt;/code&gt; is pretty useful to extract Markdown sections. For example &lt;code&gt;cat *.md | mdq &#39;# Title&#39;&lt;/code&gt; extracts all sections where the header contains &amp;lsquo;Title&amp;rsquo; (case-insensitive).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://developers.cloudflare.com/browser-run/&#34;&gt;CloudFlare Browser Run&lt;/a&gt; is, roughly, a browser as a service. &lt;a href=&#34;https://developers.cloudflare.com/browser-run/pricing/&#34;&gt;Pricing&lt;/a&gt;: 10 hours free per month, then 9c per hour. I had Codex run a small &lt;a href=&#34;https://github.com/sanand0/research/tree/main/cloudflare-browser-run&#34;&gt;research&lt;/a&gt; to explore it, and it seems simple to set it up and use it.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://openai.com/index/introducing-gpt-5-5/&#34;&gt;GPT 5.5&lt;/a&gt; seems to be especially better than GPT 5.4 and running for long, with tool calls, without losing focus. That&amp;rsquo;s something OpenAI models are good at anyway, so this takes it a step further. &lt;a href=&#34;https://chatgpt.com/share/69eaccb0-b9e0-8399-be3f-6bd73906d0ec&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I added &lt;a href=&#34;https://developers.openai.com/api/docs/models/gpt-image-2&#34;&gt;gpt-image-2&lt;/a&gt; to my &lt;a href=&#34;https://sanand0.github.io/llmartstyle/&#34;&gt;LLM Art Style gallery&lt;/a&gt;. It is notably better with text accuracy. For example, on &lt;a href=&#34;https://sanand0.github.io/llmartstyle/?category=text&#34;&gt;Rock - Paper - Scissors - Lizard - Spock&lt;/a&gt; it consistently lists all 10 rules, which Nano Banana 2 does not.&lt;/li&gt;
&lt;li&gt;World leaders do keep us entertained. &lt;!-- https://gemini.google.com/app/240186d320b283d8 --&gt;
&lt;ul&gt;
&lt;li&gt;Saparmurat Niyazov (Turkmenistan) renamed the months of the year and days of the week after himself and his mother. He built a towering, gold-plated statue of himself in the capital that rotated so it would always face the sun. He also banned lip-syncing at concerts, outlawed gold teeth, and banished dogs from the capital because he found their smell unappealing.&lt;/li&gt;
&lt;li&gt;Idi Amin (Uganda) declared himself the &amp;ldquo;Uncrowned King of Scotland&amp;rdquo; and sent baffling, unsolicited telegrams to world leaders - advising Richard Nixon to recover from Watergate, or offering food aid to a struggling Britain.&lt;/li&gt;
&lt;li&gt;François &amp;ldquo;Papa Doc&amp;rdquo; Duvalier (Haiti) reportedly ordered all black dogs in Haiti to be put to death and claimed his personal Vodou curse was responsible for the assassination of John F. Kennedy.&lt;/li&gt;
&lt;li&gt;Francisco Macías Nguema (Equatorial Guinea) banned the word &amp;ldquo;intellectual&amp;rdquo;, banned the use of lubricants in the power plant (claiming his magic would keep it running, which promptly broke the generators), and stored the nation&amp;rsquo;s remaining foreign currency under his bed.&lt;/li&gt;
&lt;li&gt;Kim Jong-il (North Korea) claimed he invented the hamburger (calling it &amp;ldquo;double bread with meat&amp;rdquo;) and shot 11 holes-in-one his first time playing golf.&lt;/li&gt;
&lt;li&gt;Donald Trump (United States) used late-night tweets to announce major policy shifts and fire his own cabinet members. He altered an official government hurricane map with a Sharpie to match a previous erroneous statement, and publicly mused during a press briefing about the injection of household disinfectants as a medical treatment.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Git repositories inside git repositories (without using sub-modules) don&amp;rsquo;t seem to work well. I need this because I have mono-repos for research and I want to use git in a sub-folder to iterate, then commit just the final version to the parent folder. Looks like I need to remove the child &lt;code&gt;.git/&lt;/code&gt; (e.g. rename to &lt;code&gt;.git.bak/&lt;/code&gt;, which I&amp;rsquo;ve added to my &lt;code&gt;~/.config/git/ignore&lt;/code&gt;) for this to work. &lt;a href=&#34;https://gemini.google.com/share/1a89ad8cf6da&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;To run a script in the background (without logs) and detach / disown it, use &lt;code&gt;nohup your-script &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 &amp;amp; disown&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Running &lt;code&gt;/insights&lt;/code&gt; on Claude Code helped me add these two instructions to my &lt;a href=&#34;https://github.com/sanand0/scripts/blob/main/agents/code/SKILL.md&#34;&gt;code skill&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;Test web pages with screenshots (for layout, overlaps, contrast) AND CDP (for interactions, navigation) before finalizing&lt;/li&gt;
&lt;li&gt;Prefer icon libraries over unicode/emoji icons.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Sending an entire PDF/PPTX to Gemini costs ~40% of sending PDF/PPTX + images. The quality is fine for small files, but for large files adding images reduces error rate from ~5% to 0.5%.&lt;/li&gt;
&lt;li&gt;Pandoc Markdown to Word DOCX supports sidebar comments. You can use this Markdown: Here is &lt;code&gt;[comment in sidebar]{.comment-start id=&amp;quot;c1&amp;quot; author=&amp;quot;Anand&amp;quot; date=&amp;quot;2026-01-01T12:00:00Z&amp;quot;}commented text[]{.comment-end id=&amp;quot;c1&amp;quot;} inline.&lt;/code&gt; &lt;a href=&#34;https://gemini.google.com/share/430e7556ad69&#34;&gt;Gemini&lt;/a&gt;. In fact, Pandoc supports lots of other things, like: &lt;!-- https://gemini.google.com/app/0fe9e7b12650f7f2 --&gt;
&lt;ul&gt;
&lt;li&gt;Custom styles via block &lt;code&gt;::: {custom-style=&amp;quot;Custom Style Name&amp;quot;}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Track changes via &lt;code&gt;[inserted text]{.insertion author=&amp;quot;Name&amp;quot; date=&amp;quot;2026-04-20T12:00:00Z&amp;quot;}&lt;/code&gt; and &lt;code&gt;[deleted text]{.deletion author=&amp;quot;Name&amp;quot;}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Page breaks via &lt;code&gt;\newpage&lt;/code&gt; (a LaTeX command that Pandoc supports in Markdown)&lt;/li&gt;
&lt;li&gt;CSS styles via &lt;code&gt;![Alt Text](image.png){width=&amp;quot;5.5in&amp;quot; height=&amp;quot;3in&amp;quot;}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://offpunk.net/&#34;&gt;Offpunk&lt;/a&gt; is a CLI offline-first browser. Interesting idea, but installation is a problem.
After &lt;code&gt;sudo apt uninstall offpunk&lt;/code&gt; running &lt;code&gt;offpunk&lt;/code&gt; failed with &lt;code&gt;ImportError: lxml.html.clean module is now a separate project lxml_html_clean.&lt;/code&gt;
After a &lt;code&gt;git clone&lt;/code&gt; it reported &lt;code&gt;HTML document detected. Please install python-bs4 and python-readability&lt;/code&gt;.
These are easy to fix, but I wasn&amp;rsquo;t inclined.&lt;/li&gt;
&lt;li&gt;Creating an authenticated &lt;a href=&#34;https://developers.openai.com/api/docs/mcp&#34;&gt;MCP Server for ChatGPT&lt;/a&gt; is complex. It requires OpenID Connect (for which library support is weak and requires a provider like Auth0), dynamic client registration (which is hard to implement though Auth0 supports it), and after half a day of experiments, I still couldn&amp;rsquo;t connect. An easier option is to run temporary tunnels with &lt;code&gt;cloudflared&lt;/code&gt; or &lt;code&gt;ngrok&lt;/code&gt; or &lt;code&gt;localtunnel&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 19 Apr 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-19-apr-2026/</link>
      <pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-19-apr-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WebApps are a depreciated store of value. Earlier, a web-app would have impressed me because the capability to create it is rare, and the effort to create it is high. Today, when I see a &amp;ldquo;localhost:3000&amp;rdquo; or a &amp;ldquo;replit.app&amp;rdquo; domain, I mentally discount the effort behind it and ask: How rare is the capability to create this with a coding agent and how much effort is it. THAT determines the value of what I see. Part of the value is &amp;ldquo;Look ma, no hands!&amp;rdquo; and it&amp;rsquo;s delightful they&amp;rsquo;ve learnt. Part of the value is &amp;ldquo;There&amp;rsquo;s gold in them thar hills!&amp;rdquo; and use-case discovery is important.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://wavacity.com/&#34;&gt;WaveCity&lt;/a&gt; is a WASM build of Audacity, i.e. Audacity running in the browser! &lt;a href=&#34;https://audiomass.co/&#34;&gt;Audiomass&lt;/a&gt; is a similar but simpler audio editor - again, WASM-based. &lt;a href=&#34;https://gemini.google.com/share/54d4778ed7bd&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 12 Apr 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-12-apr-2026/</link>
      <pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-12-apr-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://resend.com/&#34;&gt;Resend&lt;/a&gt; is a simple way to send emails via an API.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://martinfowler.com/articles/mechanical-sympathy-principles.html&#34;&gt;Principles of Mechanical Sympathy&lt;/a&gt; has some practical hardware-driven optimization tips.
&lt;ul&gt;
&lt;li&gt;Prefer accessing memory sequentially. CPU access to RAM and cache is optimized for this.&lt;/li&gt;
&lt;li&gt;Natural batching: flush the buffer when you reach the maximum buffer size &lt;em&gt;or when the queue is empty&lt;/em&gt;. This avoids buffers waiting unnecessarily.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The core argument in &lt;a href=&#34;https://www.goodreads.com/book/show/18736925-capital-in-the-twenty-first-century&#34;&gt;Capital in the Twenty-First Century (Thomas Piketty, 2013/2014)&lt;/a&gt; is &lt;code&gt;r &amp;gt; g&lt;/code&gt;. The interest on capital (&lt;code&gt;r&lt;/code&gt;) is always greater than the economic growth (&lt;code&gt;g&lt;/code&gt;). Hence, the rich will keep getting richer - inequality is consistently part of capitalism. (Not surprising, but well supported by data.)&lt;/li&gt;
&lt;li&gt;A good collection of practices on automated AI code reviews by &lt;a href=&#34;https://www.latent.space/p/reviews-dead&#34;&gt;Ankit Jain&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;Compare multiple options. Whichever passes the most tests wins.&lt;/li&gt;
&lt;li&gt;Deterministic guardrails. Use linters, type-checkers, SAST/DAST checks, test scripts, etc.&lt;/li&gt;
&lt;li&gt;Humans define acceptance criteria. Use a behavior driven development script (in natural language, agent-implemented).&lt;/li&gt;
&lt;li&gt;Permission Systems as Architecture. Provide agents granular permissions based on the task - against pre-defined rules.&lt;/li&gt;
&lt;li&gt;Adversarial Verification. Have one agent break the others&amp;rsquo; work.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Based on a quick exploration of the AT protocol (&lt;a href=&#34;https://jakelazaroff.com/words/building-more-resilient-local-first-software-with-atproto/&#34;&gt;via Jake Lazaroff&lt;/a&gt;), I am yet to see a viable use for it. It&amp;rsquo;s a decentralized distributed data network. OK&amp;hellip; what will &lt;strong&gt;I&lt;/strong&gt; use it for?&lt;/li&gt;
&lt;li&gt;When I asked Claude if any of my work is patentable, it said &amp;ldquo;Comicgen is the sole candidate, but you only get one year grace after it&amp;rsquo;s public. But why do &lt;em&gt;you&lt;/em&gt; want to patent? Your edge is prototyping speed, taste, and knowledge. Patents don&amp;rsquo;t protect those. Publishing freely (as you do) creates prior art that prevents others from patenting the space around you, which is often a better defensive strategy than filing patents yourself.&amp;rdquo; Oh! Ah! &lt;!-- https://claude.ai/chat/539996da-f0a2-48d9-99dc-c3fac929199f --&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/chenglou/pretext&#34;&gt;pretex&lt;/a&gt; is a fast (currently browser-only) library that computes the width and height of any text in any font in the browser. Useful for things like word-wrapping in SVG, layout planning before rendering, etc.&lt;/li&gt;
&lt;li&gt;Because AI bots scan deeply rather than &amp;ldquo;browse&amp;rdquo; popular pages, CDN cache invalidation strategies designed for humans (like LRU - Least Recently Used) no longer work. They&amp;rsquo;re exploring new caching algorithms like &lt;a href=&#34;https://cachemon.github.io/SIEVE-website/&#34;&gt;SIEVE&lt;/a&gt; and &lt;a href=&#34;https://s3fifo.com/&#34;&gt;FIFO&lt;/a&gt; &lt;a href=&#34;https://blog.cloudflare.com/rethinking-cache-ai-humans/&#34;&gt;CloudFlare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I enabled CloudFlare&amp;rsquo;s new dynamic &lt;a href=&#34;https://blog.cloudflare.com/client-side-security-open-to-everyone/&#34;&gt;Client-Side Security&lt;/a&gt; monitor. If someone hacks my &lt;a href=&#34;https://www.s-anand.net/&#34;&gt;website&lt;/a&gt; or the libraries I use, it does a quick filter with a fast neural network, then falls back to an LLM to check if it&amp;rsquo;s safe, &lt;em&gt;then&lt;/em&gt; serves the content.&lt;/li&gt;
&lt;li&gt;CloudFlare practically rewrote WordPress into a new Astro-based CMS: &lt;a href=&#34;https://blog.cloudflare.com/emdash-wordpress/&#34;&gt;EmDash&lt;/a&gt;! It runs natively on CloudFlare (and elsewhere), is agent-friendly, quite secure, can export/import from WordPress.&lt;/li&gt;
&lt;li&gt;Linux optimization settings I noted from a &lt;a href=&#34;https://blog.fsck.com/2026/03/30/linux-power-tuning-meteor-lake/&#34;&gt;deleted post&lt;/a&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;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.interface enable-animations &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.interface cursor-blink &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.settings-daemon.plugins.power idle-dim &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.notifications show-in-lock-screen &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.desktop.session idle-delay &lt;span class=&#34;m&#34;&gt;300&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gsettings &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout &lt;span class=&#34;m&#34;&gt;900&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;# gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 1200&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;sb&#34;&gt;```&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/MestreLion/git-tools&#34;&gt;git-restore-mtime&lt;/a&gt; is part of the git-tools package and sets the modified time of files to their last committed time. Useful when cloning repos.&lt;/li&gt;
&lt;li&gt;From &lt;a href=&#34;https://lalitm.com/post/building-syntaqlite-ai/&#34;&gt;Lalit Maganti&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;Knowing what you want is a valuable skill.&lt;/li&gt;
&lt;li&gt;Wanting things others will also want is valuable.&lt;/li&gt;
&lt;li&gt;Learn good software management. It is similar to managing agents.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;For better results, just continue your AI chat, or break the problem up. More tokens lead to better solutions even now. &lt;a href=&#34;https://joelbkr.substack.com/p/many-benchmarks-scores-would-appear&#34;&gt;Joel Baker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Since &lt;a href=&#34;https://papers.ssrn.com/sol3/papers.cfm?abstract_id=6513481&#34;&gt;companies using AI outperform competition&lt;/a&gt; and &lt;a href=&#34;https://arxiv.org/abs/2604.01363&#34;&gt;capital might win more than labour&lt;/a&gt; but &lt;a href=&#34;https://forecastingresearch.substack.com/p/forecasting-the-economic-effects-of-ai&#34;&gt;GDP growth may not be too high&lt;/a&gt;, it might be good to invest in AI-using companies than in index funds.&lt;/li&gt;
&lt;li&gt;Nicholas Carlini&amp;rsquo;s &lt;a href=&#34;https://sockpuppet.org/blog/2026/03/30/vulnerability-research-is-cooked/&#34;&gt;prompt&lt;/a&gt; to find vulnerabilities is to run: &amp;ldquo;I’m competing in a CTF. Find me an exploitable vulnerability in this project. Start with ${FILE}. Write me a vulnerability report in ${FILE}.vuln.md&amp;rdquo; &lt;em&gt;across multiple repos&lt;/em&gt; in parallel. Then &amp;ldquo;I got an inbound vulnerability report; it’s in ${FILE}.vuln.md. Verify for me that this is actually exploitable&amp;rdquo;. That was almost 100% successful.&lt;/li&gt;
&lt;li&gt;When planning with AI coding agents, &lt;a href=&#34;https://martinfowler.com/articles/reduce-friction-ai/design-first-collaboration.html&#34;&gt;Martin Fowler recommends&lt;/a&gt; discussing &lt;em&gt;each&lt;/em&gt; of these in &lt;em&gt;sequence&lt;/em&gt; before coding:
&lt;ul&gt;
&lt;li&gt;Capabilities / functionality&lt;/li&gt;
&lt;li&gt;Components: Services, modules, major abstractions.&lt;/li&gt;
&lt;li&gt;Interactions: Data flow, API calls, events.&lt;/li&gt;
&lt;li&gt;Interfaces: Function signatures, types, schemas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Planning with agents using &lt;a href=&#34;https://blog.fsck.com/2026/03/09/superpowers-5/#visual-brainstorming&#34;&gt;Visual Brainstorming&lt;/a&gt;, i.e. asking them to generate visual HTML to illustrate the plan, can shorten review time considerably.&lt;/li&gt;
&lt;li&gt;I enabled CloudFlare&amp;rsquo;s new dynamic &lt;a href=&#34;https://blog.cloudflare.com/client-side-security-open-to-everyone/&#34;&gt;Client-Side Security&lt;/a&gt; monitor. If someone hacks my &lt;a href=&#34;https://www.s-anand.net/&#34;&gt;website&lt;/a&gt; or the libraries I use, it does a quick filter with a fast neural network, then falls back to an LLM to check if it&amp;rsquo;s safe, &lt;em&gt;then&lt;/em&gt; serves the content. This pattern of deterministic with LLM fallback works for &lt;a href=&#34;https://martinfowler.com/articles/harness-engineering.html&#34;&gt;most reviews&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Harness = Agent minus Model: everything in an AI agent except the model itself. &lt;a href=&#34;https://martinfowler.com/articles/harness-engineering.html&#34;&gt;Nice definition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update feature-level summaries as you go in &lt;code&gt;context/$FEATURE.md&lt;/code&gt; with user prompt, summary of WHY from agent&amp;rsquo;s responses for future learning, my comments. Like Architectural Decision Records (ADRs) for humans and agents. &lt;a href=&#34;https://martinfowler.com/articles/reduce-friction-ai/context-anchoring.html&#34;&gt;Context Anchoring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.bassimeledath.com/blog/levels-of-agentic-engineering&#34;&gt;8 levels of Agentic Engineering&lt;/a&gt;. &lt;a href=&#34;https://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04&#34;&gt;8 levels of Gas Town&lt;/a&gt;. I&amp;rsquo;m still only at level 6 on both. 🙁&lt;/li&gt;
&lt;li&gt;&amp;ldquo;It&amp;rsquo;s important to watch the loop as that is where your personal development and learning will come from.&amp;rdquo; &lt;a href=&#34;https://ghuntley.com/loop/&#34;&gt;Geoff Huntley&lt;/a&gt;, originator of the Ralph (Wiggum) loop.&lt;/li&gt;
&lt;li&gt;UNIX has a &lt;code&gt;script&lt;/code&gt; command that runs a shell and logs it. For example:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;script -c fish session.log&lt;/code&gt; starts a new &lt;code&gt;fish&lt;/code&gt; shell and logs it to &lt;code&gt;session.log&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;script -c &amp;quot;uv run app.py&amp;quot; -q -a app.log&lt;/code&gt; will append to app.log, suppressing &amp;ldquo;Script started&amp;hellip;&amp;rdquo; and &amp;ldquo;Script done&amp;hellip;&amp;rdquo; messages.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;script --timing=time.txt session.log&lt;/code&gt; logs the timing, which you can replay with &lt;code&gt;scriptreplay --timing=time.txt session.log&lt;/code&gt;. Similar to asciinema.&lt;/li&gt;
&lt;li&gt;A quick way to strip out the ANSI escape sequences (weird Unicode characters) is to pipe it through &lt;code&gt;npx strip-ansi-cli&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Google has an &lt;a href=&#34;https://github.com/google-ai-edge/gallery&#34;&gt;Edge Gallery&lt;/a&gt; app that runs Gemma 4 on mobile. The main advantage is that you can use it on a flight. It&amp;rsquo;s not too bad as a model either. Transcription quality is average. It doesn&amp;rsquo;t run in the background, only one chat at a time, etc. So, it&amp;rsquo;s useful only as a last resort.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 05 Apr 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-05-apr-2026/</link>
      <pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-05-apr-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It&amp;rsquo;s pretty convenient (on Ubuntu) to be able to move windows around desktops. Apart from the usual Super + Arrow keys to manage windows within a desktop, you can use:
&lt;ul&gt;
&lt;li&gt;Ctrl + Alt + Left/Right Arrow: Move desktops&lt;/li&gt;
&lt;li&gt;Ctrl + Alt + Shift + Left/Right Arrow: Move window to desktop&lt;/li&gt;
&lt;li&gt;Super + Shift + Arrow: Move window to another monitor&lt;/li&gt;
&lt;li&gt;Super + Drag: Drag window from anywhere&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jq . file.json&lt;/code&gt; is an efficient way to pretty-print JSON files in the terminal. (Or &lt;code&gt;jaq . file.json&lt;/code&gt;, which is ~30% faster.)&lt;/li&gt;
&lt;li&gt;GitHub Copilot monthly premium requests were &lt;em&gt;not&lt;/em&gt; reset at 12 am UTC&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://social.jvns.ca/@b0rk/116297197345549083&#34;&gt;How Diffie Hellman Key Exchange Works&lt;/a&gt; by Julia Evans is an &lt;em&gt;excellent&lt;/em&gt; explanation. Share a random number. A multiplies it by their private key and shares S&lt;em&gt;A. B multiplies it by their private key and shares S&lt;/em&gt;B. They multiply the others&amp;rsquo; key with their secret key and they get S&lt;em&gt;A&lt;/em&gt;B = S&lt;em&gt;B&lt;/em&gt;A. Now &lt;em&gt;both&lt;/em&gt; of them have the same &lt;em&gt;new&lt;/em&gt; secret they can encrypt/decrypt with, but no one else knows, even though they shared everything publicly! This may be one of the &lt;strong&gt;best&lt;/strong&gt; cool uses of math I&amp;rsquo;ve seen in a long time.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.hofstede.it/shell-tricks-that-actually-make-life-easier-and-save-your-sanity/&#34;&gt;Shell tricks&lt;/a&gt; I didn&amp;rsquo;t know:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ALT + . cycles through the last arguments typed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv file.&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;txt,md&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;# Move file.txt to file.md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls &lt;span class=&#34;p&#34;&gt;|&amp;amp;&lt;/span&gt; tee file.txt  &lt;span class=&#34;c1&#34;&gt;# Pipe both stdout and stderr to tee&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 29 Mar 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-29-mar-2026/</link>
      <pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-29-mar-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://thekidshouldseethis.com/&#34;&gt;The Kids Should See This&lt;/a&gt; - great collection of videos for curious people. &lt;a href=&#34;https://thejeshgn.com/2026/03/27/weekly-notes-13-2026/&#34;&gt;Thej&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A jury fined Meta and YouTube $4.2m and $1.8m for building addictive features in their products. That&amp;rsquo;s a first. &lt;a href=&#34;https://www.nytimes.com/2026/03/25/technology/social-media-trial-verdict.html&#34;&gt;NY Times&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;I think AI-type tools will actually revolutionize the experimental side of math, where you don’t care so much about individual problems and the process of solving them, but you want to gather large-scale data about what things work and what things don’t.&amp;rdquo; &lt;a href=&#34;https://www.dwarkesh.com/p/terence-tao#:~:text=gather%20large%2Dscale%20data&#34;&gt;Terence Tao&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://en.wikipedia.org/wiki/Hedonic_treadmill&#34;&gt;hedonic treadmill&lt;/a&gt; (which roughly quantifies a Buddhist principle) says that we revert to a &lt;a href=&#34;https://en.wikipedia.org/wiki/Hedonic_treadmill#Happiness_set_point&#34;&gt;happiness set point&lt;/a&gt; (which varies by individual). Worse, those who experience a high kick (e.g. a lottery) don&amp;rsquo;t get enough kick from normal wins (contrast effect) &amp;ndash; &lt;a href=&#34;https://gemini.google.com/share/9e8a904b34bb&#34;&gt;Interactive explainer&lt;/a&gt;. &lt;!-- https://gemini.google.com/app/b676e7571e5cbc85 --&gt; The happiness neutral&lt;/li&gt;
&lt;li&gt;As of today, a &lt;a href=&#34;https://www.linkedin.com/search/results/people/?keywords=%22llm%20psychologist%22&#34;&gt;LinkedIn search for &amp;ldquo;llm psychologist&amp;rdquo;&lt;/a&gt; lists 9 people. I&amp;rsquo;m not alone!
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linkedin.com/in/sanand0/&#34;&gt;Anand S&lt;/a&gt;, LLM Psychologist, Singapore, Singapore&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linkedin.com/in/analyticsanshul/&#34;&gt;Anshul Saxena, PhD&lt;/a&gt;, AI Advisor &amp;amp; Trainer | Technology Strategist | LLM Psychologist | Currently teaching humans, machines &amp;amp; business to work smarter through Generative AI and Quantum Computing | 15+ Years Experience, Pune, Maharashtra, India&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linkedin.com/in/chadofficial/&#34;&gt;Charitarth (Chad) Sindhu&lt;/a&gt;, LLM Psychologist / Fractional Business &amp;amp; AI Workflow Consultant/ Digital Nomad, Tokyo, Japan&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linkedin.com/in/lancelotsalavert/&#34;&gt;Lancelot Salavert&lt;/a&gt;, LLM Psychologist, Barcelona, Catalonia, Spain&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linkedin.com/in/lior-durahly/&#34;&gt;Lior Dor(Durahly)&lt;/a&gt;, Team Lead | Bug Banisher | Ex 8200, Tel Aviv District, Israel. Past: R&amp;amp;D Team Lead and &lt;strong&gt;LLM&lt;/strong&gt; &lt;strong&gt;Psychologist&lt;/strong&gt; at Superwise | A Blattner Tech Company&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linkedin.com/in/maximebodereau/&#34;&gt;maxime bodereau&lt;/a&gt;, Lead Creative Art Director | UX Forensics | Ai LLM Psychologist | Visual Alchemist | Codesmith | Brandologist | Full Stack Designer, Nantes, Pays de la Loire, France&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linkedin.com/in/chenml/&#34;&gt;Mei Chen 🦋&lt;/a&gt;, LLM Psychologist | Lead Product Engineer | Delivering Agentic Experiences, Toronto, Ontario, Canada&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linkedin.com/in/shoshannahtekofsky/&#34;&gt;Shoshannah Tekofsky&lt;/a&gt;, LLM Psychologist at AI Digest, Zwolle, Overijssel, Netherlands&lt;/li&gt;
&lt;li&gt;LinkedIn Member, LLM, psychologist, mediator, Prague, Czechia&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://simonwillison.net/2026/Mar/19/openai-acquiring-astral/&#34;&gt;OpenAI acquired Astral!&lt;/a&gt;. This will likely slow down the new wonderful tools accelerating the Python ecosystem. Like with &lt;a href=&#34;https://openai.com/index/openai-to-acquire-promptfoo/&#34;&gt;PromptFoo&lt;/a&gt; and &lt;a href=&#34;https://steipete.me/posts/2026/openclaw&#34;&gt;OpenClaw&lt;/a&gt;, this seems to be about talent. The &amp;ldquo;acqui-hire&amp;rdquo; mode seems a &lt;em&gt;clear&lt;/em&gt; niche career path now, and an alternative to getting hired (you get a much higher salary) or getting acquired (you take on much higher risk).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.npmjs.com/package/quickjs-emscripten&#34;&gt;quickjs-emscripten&lt;/a&gt; lets you run isolated JS code securely in the browser, CloudFlare workers, NodeJS, and Deno. It compiles to WASM. @sebastianwessel/quickjs is a higher-level TS wrapper. &lt;a href=&#34;https://github.com/simonw/research/tree/main/javascript-sandboxing-research&#34;&gt;Simon Willison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bramcohen.com/p/manyana&#34;&gt;Manyana&lt;/a&gt; is a CRDT based version control system. It sounds like a good idea but I&amp;rsquo;m sceptical because merge conflicts are a &amp;ldquo;what should I do&amp;rdquo; problem more than &amp;ldquo;how&amp;rdquo;. With &lt;a href=&#34;https://simonwillison.net/guides/agentic-engineering-patterns/using-git-with-coding-agents/&#34;&gt;agents doing more merge conflict management&lt;/a&gt;, I am not sure this will offer a concrete benefit - but probably no harm either.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://posttrainbench.thoughtfullab.com/&#34;&gt;LLMs are able post-train LLMs on new topics&lt;/a&gt;. They&amp;rsquo;re improving fast. &lt;a href=&#34;https://jack-clark.net/2026/03/16/importai-449-llms-training-other-llms-72b-distributed-training-run-computer-vision-is-harder-than-generative-text/&#34;&gt;Jack Clark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linkedin.com/search/results/people/?keywords=vibe+coding+fixer&#34;&gt;Vibe Coding Fixer&lt;/a&gt; and &lt;a href=&#34;https://www.linkedin.com/search/results/people/?keywords=ai+slop+cleaner&#34;&gt;AI Slop Cleaner&lt;/a&gt; are real job descriptions - which are morphing into enterprise offerings. But I still seem to be the only official &lt;a href=&#34;https://www.linkedin.com/search/results/people/?keywords=llm+psychologist&#34;&gt;LLM Psychologist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Notes from &lt;a href=&#34;https://mtrajan.substack.com/p/ai-services-wrong-mental-models-right&#34;&gt;AI Services - Wrong Mental Models, Right Moment&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;AI services has 3 markets. Automatable work: vanishes in 2 years. Human-in-the-loop work: sustains. Judgement-driven: grows in importance.&lt;/li&gt;
&lt;li&gt;YC: don’t sell access to a tool for $50 a month, use the AI yourself and sell the finished work for $5,000.&lt;/li&gt;
&lt;li&gt;Sell output. Price on outcome. Sell to business, not IT.&lt;/li&gt;
&lt;li&gt;Sell accountability: proven success, with your guarantee.&lt;/li&gt;
&lt;li&gt;Sell authenticity: a brand story representing uniqueness, character, &amp;hellip; or whatever&amp;hellip; something people respect.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Data transfer between GPU and memory is a bottleck and three approaches are emerging. &lt;a href=&#34;https://mtrajan.substack.com/p/inference-blindness&#34;&gt;#&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://taalas.com/the-path-to-ubiquitous-ai/&#34;&gt;Taalas&lt;/a&gt; is etching LLMs into the chip. Llama 8b runs at 17,000 tok/s (H200 is at 230 tok/s).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.d-matrix.ai/announcements/d-matrix-unveils-corsair-the-worlds-most-efficient-ai-computing-platform-for-inference-in-datacenters/&#34;&gt;d-Matrix&lt;/a&gt; is moving compute into SRAM memory chips. 30,000 tok/s for Llama 70b. Cerebras and MatX are similar: memory-oriented.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://furiosa.ai/blog/lg-ai-research-taps-furiosaai-to-achieve-2-25x-better-llm-inference-in-production-vs-gpus&#34;&gt;FuriosaAI&lt;/a&gt; minimizes data movement. Groq and Sambanova are similar.&lt;/li&gt;
&lt;li&gt;But in the long run, commodity technology usually beats integrated stacks.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://openai.com/index/introducing-gpt-5-4-mini-and-nano/&#34;&gt;GPT 5.4 Nano ($0.2/MTok) and Mini ($0.75/MTok)&lt;/a&gt; are good options for bulk OCR, transcription, etc. as cost and quality comparable alternatives to Gemini Flash Lite and Gemini Flash. &lt;a href=&#34;https://simonwillison.net/2026/Mar/17/mini-and-nano/&#34;&gt;They can describe 75K photos for $50&lt;/a&gt;. Both models are better than GPT-5 Mini on most benchmarks.&lt;/li&gt;
&lt;li&gt;Cool &lt;a href=&#34;https://simonwillison.net/guides/agentic-engineering-patterns/using-git-with-coding-agents/&#34;&gt;AI coding agent git prompt fragments&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;Use git bisect to find when this bug was introduced: &amp;hellip;&lt;/li&gt;
&lt;li&gt;Find and recover my code that does &amp;hellip;&lt;/li&gt;
&lt;li&gt;Sort out this git mess for me.&lt;/li&gt;
&lt;li&gt;Rewrite history removing &amp;hellip;&lt;/li&gt;
&lt;li&gt;Split the last commit into multiple commits grouped logically.&lt;/li&gt;
&lt;li&gt;Start a new repo at &amp;hellip; and build just this module &amp;hellip; based on &amp;hellip; with a similar commit history copying the author and commit dates.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://matthodges.com/posts/2026-01-07-ai-agents-campaigns/&#34;&gt;Campaigns Are Knowledge Workers and the Tools Just Caught Up&lt;/a&gt;. A powerful framing. I saw this in action a few days ago when a friend was able to automate an outbound campaign with Claude Code.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.google.com/search?q=EARS+(Easy+Approach+to+Requirements+Syntax)&amp;amp;oq=EARS+(Easy+Approach+to+Requirements+Syntax)&#34;&gt;EARS (Easy Approach to Requirements Syntax)&lt;/a&gt; is a simple structure for requirements. For &lt;a href=&#34;https://github.com/github/spec-kit/issues/1356&#34;&gt;example&lt;/a&gt;, &amp;ldquo;Users should be able to drag tasks between columns. The app needs to work offline too. Handle errors gracefully.&amp;rdquo; becomes the following - which AI can convert to and is easier to spot errors in. State machines and decision tables are useful alternatives, too.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;REQ-001&lt;/strong&gt; (Event): When the user drags a task card to a different column, the system shall update the task status to match the destination column.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;REQ-002&lt;/strong&gt; (State): While the application is offline, the system shall store task updates in local storage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;REQ-003&lt;/strong&gt; (Event): When the application reconnects, the system shall synchronize locally stored updates with the server.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;REQ-004&lt;/strong&gt; (Unwanted): If synchronization conflicts occur, then the system shall display a resolution dialog to the user.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;As of now, avoid using Claude.ai to create (large) visualizations. It runs forever and exhausts credits without generating anything. Claude Code works much better for this.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 22 Mar 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-22-mar-2026/</link>
      <pubDate>Sun, 22 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-22-mar-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Psychological operations in design by &lt;a href=&#34;https://www.linkedin.com/in/narendraghate/&#34;&gt;Narendra Ghate&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;When lights are dimmed people speak softer. So, dimming lights reduces sound levels in noisy offices.&lt;/li&gt;
&lt;li&gt;Rather than reduce the size of shampoo sachets (which customers and business both hate), include 2 shampoos in one sachet, tearable in the middle.&lt;/li&gt;
&lt;li&gt;Price saches at 95p with a 5p deposit for the sachet - which rag-pickers can collect and return to the retailer.&lt;/li&gt;
&lt;li&gt;People think of stains like wounds on cloth. So a &amp;ldquo;stain band-aid&amp;rdquo; where you stick a strip, and remove it after 5 min to remove the stain, is catchy.&lt;/li&gt;
&lt;li&gt;A mechanical wind-up fish that stirs the water in the bucket while clothes are soaking speeds up the process.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Senthil &amp;amp; Amutha, founders of &lt;a href=&#34;https://www.payir.org/&#34;&gt;Payir&lt;/a&gt; demonstrated a &lt;a href=&#34;https://thinaistore.myinstamojo.com/product/fabric-calendar-hanging-model-reusable&#34;&gt;re-usable fabric calendar&lt;/a&gt; that converts into a bag for re-use. Pretty clever! Their message at the &lt;a href=&#34;https://www.chennaidesignfestival.com/&#34;&gt;Chennai Design Festival&lt;/a&gt; was that good design can be &lt;em&gt;for&lt;/em&gt; the masses and &lt;em&gt;by&lt;/em&gt; the masses to reclaim their time, energy, and joy.&lt;/li&gt;
&lt;li&gt;The urinary bladder works based on &lt;em&gt;involuntary&lt;/em&gt; muscular contractions towards the end, to clear out the last bits of fluid. It&amp;rsquo;s not fluid flow, it&amp;rsquo;s muscle contractions. (Oh, the things I learn!) &lt;a href=&#34;https://gemini.google.com/share/87351b16e4b6&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Indigo bans ghee in cabin baggage. Also coconuts, pickles, oily foods, gooey cakes, spices (masala, powders), strong-smelling food. &lt;a href=&#34;https://chatgpt.com/share/69bc0652-bdbc-8003-9326-b48a91d5bd2c&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;New skill unlocked: how to demo without knowing what you&amp;rsquo;re demo-ing. STEP 1: Copy-paste all demo pages as Markdown. STEP 2: Tell AI &amp;ldquo;Here is a demo I&amp;rsquo;ll be showing. (Add context.) Tell me how I should explain this and what I should point out as specific examples. Use concise bullets.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;We&amp;rsquo;ve learnt not to do things we don&amp;rsquo;t know how to (until we learn it). When AI is doing things, this is a bottleneck. Get out of the way. Stop filtering for what YOU can do. Stop learning what IT can do. Ask for it. That&amp;rsquo;s faster. Learning can come later.&lt;/li&gt;
&lt;li&gt;I keep forgetting that QR codes need a white border for them to work.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/JamesLMilner/terra-draw&#34;&gt;TerraDraw&lt;/a&gt; provides a unified API across multiple mapping libraries. (In the vibe-coding era, this is not as useful.)&lt;/li&gt;
&lt;li&gt;To create desktop apps declaratively on Linux, Slint, Flutter, QML(Qt) and GTK4 are options. Slint and Flutter seem to be cross platform. Slint is newer, less mature but compiles to small fast binaries and might be a good option to explore. Flutter seems more mature and fairly popular. &lt;a href=&#34;https://claude.ai/share/183cd28a-be7e-4857-a6ff-6c919e3a9c15&#34;&gt;Claude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pytorch.org/blog/automated-trace-collection/&#34;&gt;PyTorch Tracing&lt;/a&gt; watches one forward pass and freezes the path into a portable recipe. But it silently ignores branches your example didn&amp;rsquo;t take. &lt;a href=&#34;https://claude.ai/share/7d970eff-56a5-4502-9afd-3fcf8648df2a&#34;&gt;Claude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The Internet is forking into a human internet vs an agent web &lt;a href=&#34;https://www.linkedin.com/posts/saamnaghshineh_automate-faster-activity-7431817567536627712-vkLz/&#34;&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://samgeo.gishub.org/&#34;&gt;SamGeo&lt;/a&gt; is a Python Package for geospatial image processing. While &lt;a href=&#34;https://allenai.org/olmoearth&#34;&gt;OlmoEarth&lt;/a&gt; provides geospatial embeddings, SamGeo can convert geospatial data to vector data! So you can do things like:
&lt;ul&gt;
&lt;li&gt;Create the outer boundary of all apartments with swimming pools in a city&lt;/li&gt;
&lt;li&gt;Extract the shape of all lakes across the years to find out how they&amp;rsquo;re changing.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Terence started Foundation for Science and AI Research (SAIR) to use AI in science research. Verifiable proofs (e.g. &lt;a href=&#34;https://lean-lang.org/&#34;&gt;LEAN&lt;/a&gt;) are a big part of this.&lt;/li&gt;
&lt;li&gt;Since AI needs to run on phones and that needs GPUs, a lot of phones might need replacement in the next few years.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 15 Mar 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-15-mar-2026/</link>
      <pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-15-mar-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Timsort&#34;&gt;Timsort&lt;/a&gt; is one of the &lt;a href=&#34;https://simonwillison.net/2026/Mar/11/sorting-algorithms/&#34;&gt;fastest sorting algorithms&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Switching from &lt;a href=&#34;https://github.com/sharkdp/bat&#34;&gt;&lt;code&gt;bat&lt;/code&gt;&lt;/a&gt; to &lt;a href=&#34;https://github.com/walles/moor&#34;&gt;&lt;code&gt;moor&lt;/code&gt;&lt;/a&gt; as a pager, since &lt;code&gt;bat&lt;/code&gt; doesn&amp;rsquo;t support wrapping via keyboard shortcuts. &lt;a href=&#34;https://gemini.google.com/share/812da811d636&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Use &lt;code&gt;(some-command) --help&lt;/code&gt; to &amp;hellip;&amp;rdquo; is an efficient prompt prefix that tells agents to read the docs and use a CLI tool to solve a problem. For example, &amp;ldquo;Use &lt;code&gt;uvx rodney --help&lt;/code&gt; and &lt;code&gt;ffmpeg&lt;/code&gt; for a demo video of GitHub PRs&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;As agents improve, we&amp;rsquo;ll have more mediorce output (e.g. dashboards) since people won&amp;rsquo;t know to ask for better, or validate the result. They&amp;rsquo;ll hire experts who know to ask better and verify better.&lt;/li&gt;
&lt;li&gt;Claude Opus 4.6 solved a problem Knuth was working on! &lt;a href=&#34;https://www-cs-faculty.stanford.edu/~knuth/papers/claude-cycles.pdf&#34;&gt;Knuth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://simonwillison.net/tags/cognitive-debt/&#34;&gt;Cognitive debt&lt;/a&gt; is what Simon Willison calls it when we build (or, in my case, say/write) stuff we don&amp;rsquo;t understand. The debt framing is apt. One solution is to generate a version intended for AI to read, and another for us. &lt;a href=&#34;https://simonwillison.net/2026/Feb/17/release-notes-webcomic/&#34;&gt;#&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;How can an innovator learn accountability? &amp;ldquo;I&amp;rsquo;m wired to start fires. Should I learn to also run the fire department, hire someone who does, or just stay a fire-starter and let others deal with the mess?&amp;rdquo; ANS: First, accountability is high value, so &lt;strong&gt;do it&lt;/strong&gt;! Second, prefer a partner over building muscle. Build muscle only if output is checkable, has value, and customers will pay. &lt;a href=&#34;https://claude.ai/share/d2c6a479-3aaf-402d-a2b9-318532158a92&#34;&gt;Claude&lt;/a&gt; | &lt;a href=&#34;https://chatgpt.com/share/69b0e234-64b8-8003-93b5-f244b05a7545&#34;&gt;ChatGPT&lt;/a&gt; | &lt;a href=&#34;https://gemini.google.com/share/38f8bab88751&#34;&gt;Gemini&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Commit publicly. Put your name on the output.&lt;/li&gt;
&lt;li&gt;Commit to process (or narrowly defined output) rather than outcome.&lt;/li&gt;
&lt;li&gt;Optimize with data, code, checklists, workflows, culture, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;OpenAI released &lt;a href=&#34;https://developers.openai.com/api/docs/models/gpt-realtime-1.5&#34;&gt;gpt-realtime-1.5&lt;/a&gt; and &lt;a href=&#34;https://developers.openai.com/api/docs/models/gpt-audio-1.5&#34;&gt;gpt-audio-1.5&lt;/a&gt;. Buth are ~20% cheaper than the 4o versions, but 6.7x more expensive than &lt;a href=&#34;https://developers.openai.com/api/docs/models/gpt-realtime-mini&#34;&gt;gpt-realtime-mini&lt;/a&gt;. 1 second is about 10 tokens, so an hour of audio input at $32/MTok is about $1.15.&lt;/li&gt;
&lt;li&gt;The &amp;ldquo;Effort&amp;rdquo; setting for AVIF files on &lt;a href=&#34;https://squoosh.app/&#34;&gt;Squoosh&lt;/a&gt; doesn&amp;rsquo;t reduce file size - it increases quality slightly (for a tiny &lt;em&gt;increase&lt;/em&gt; in file size). So, set the quality to whatever file size you need and increase the effort for a slightly better quality.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/George_P%C3%B3lya&#34;&gt;Polya&lt;/a&gt; believed in teaching problem-solving rather than solutions, i.e. teach &lt;a href=&#34;https://en.wikipedia.org/wiki/How_to_Solve_It&#34;&gt;How to Solve It&lt;/a&gt;, not just &lt;em&gt;what&lt;/em&gt; you get at the end. To me, this includes:
&lt;ul&gt;
&lt;li&gt;Understand the problem (from different perspectives)&lt;/li&gt;
&lt;li&gt;Plan (with different mental models)&lt;/li&gt;
&lt;li&gt;Execute (the easy bit)&lt;/li&gt;
&lt;li&gt;Look back (post-mortem, retrospectives, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/browserless/browserless&#34;&gt;Browserless&lt;/a&gt; lets you run browsers via an API. Useful when you don&amp;rsquo;t want the overhead of setting up a browser infrastructure, or for multiple browsers in parallel. Scraping, testing, web app automation, PDF/screenshot/video generation, etc. are all possible. &lt;a href=&#34;https://gemini.google.com/share/3c547e57030b&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenAI has a &lt;a href=&#34;https://developers.openai.com/api/docs/guides/websocket-mode/&#34;&gt;Websocket mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.github.com/gh-aw/setup/creating-workflows/&#34;&gt;GitHub Agentic Workflows&lt;/a&gt; lets you &amp;ldquo;compile&amp;rdquo; a Markdown file into an agentic GitHub action. Useful as a sceptical reviewer, issue-to-prototype builder, data to story generator, automated code migrator, etc. &lt;a href=&#34;https://gemini.google.com/share/d604275d42d7&#34;&gt;Gemini&lt;/a&gt; &lt;a href=&#34;https://claude.ai/share/e4beeed2-e49e-49be-99bd-d6ce5678a7a7&#34;&gt;Claude&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 08 Mar 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-08-mar-2026/</link>
      <pubDate>Sun, 08 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-08-mar-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IITM has launched a &lt;a href=&#34;https://study.iitm.ac.in/mg/&#34;&gt;4 year degree in management &amp;amp; data science&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Use AI to replace early-career mentorship: use AI-driven synthetic practice when traditional apprenticeship pathways collapse. AI can generate personalized coaching, replacing the missing junior loop with training environments.&amp;rdquo; &lt;a href=&#34;https://jack-clark.net/about/&#34;&gt;Jack Clark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Observability is more than logging. It&amp;rsquo;s agents watching feeds and signalling insights!&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://developers.openai.com/api/docs/guides/prompt-guidance&#34;&gt;GPT 5.4 prompt guidance&lt;/a&gt; is a bit complex, but here&amp;rsquo;s what it&amp;rsquo;s broadly saying: (&lt;a href=&#34;https://gemini.google.com/share/b359f1e5fb50&#34;&gt;Gemini&lt;/a&gt;)
&lt;ul&gt;
&lt;li&gt;It&amp;rsquo;ll over-complicate answers and front-end design unless you tell it exactly how you want it&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;ll keep checking with you or give up (e.g. on errors) unless you tell it otherwise, e.g. with checklists or rules&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Claude Code supports &lt;a href=&#34;https://code.claude.com/docs/en/settings&#34;&gt;32K output tokens&lt;/a&gt; by default. Since I generate large data stories, I usually hit this limit and lose an entire session. Setting the environment variable &lt;code&gt;CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000&lt;/code&gt; (which is the maximum) reduces this problem.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/googleworkspace/cli&#34;&gt;Google Workspace CLI&lt;/a&gt; lets you run &lt;code&gt;npx -y @googleworkspace/cli&lt;/code&gt; as a single unified service for all Google Workspace APIs. It follows &lt;a href=&#34;https://justin.poehnelt.com/posts/rewrite-your-cli-for-ai-agents/&#34;&gt;agent-friendly CLI practices&lt;/a&gt; which I turned into a &lt;a href=&#34;https://github.com/sanand0/scripts/blob/live/agents/agent-friendly-cli/SKILL.md&#34;&gt;SKILL.md&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;ve been using &lt;code&gt;mise use -g ubi:owner/repo&lt;/code&gt; to install GitHub packages. The &lt;a href=&#34;https://mise.jdx.dev/dev-tools/backends/ubi.html&#34;&gt;&lt;code&gt;ubi&lt;/code&gt; backend&lt;/a&gt; is now &lt;a href=&#34;https://github.com/jdx/mise/discussions/7727&#34;&gt;deprecated&lt;/a&gt; in favor of the new &lt;a href=&#34;https://mise.jdx.dev/dev-tools/backends/github.html&#34;&gt;&lt;code&gt;github&lt;/code&gt; backend&lt;/a&gt;. This works fine for most repos, with edge cases like &lt;a href=&#34;https://github.com/jtroo/kanata/&#34;&gt;jtroo/kanata&lt;/a&gt; which still require &lt;code&gt;ubi:jtroo/kanata&lt;/code&gt; as of now.&lt;/li&gt;
&lt;li&gt;On the margin, I&amp;rsquo;ll likely switch to &lt;a href=&#34;https://github.com/casey/just&#34;&gt;&lt;code&gt;just&lt;/code&gt;&lt;/a&gt; as my task runner. &lt;a href=&#34;https://claude.ai/share/9ec242a3-e0e8-4d82-b80b-fa8bac036ed4&#34;&gt;Claude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;With AI now writing almost all of my code, I don&amp;rsquo;t see much need to format it. Code formatters like &lt;code&gt;ruff&lt;/code&gt;, &lt;code&gt;dprint&lt;/code&gt;, &lt;code&gt;biome&lt;/code&gt;, etc. are not relevant when AI will be reading and writing the code, not humans. I just format the prompts in Markdown.&lt;/li&gt;
&lt;li&gt;Salt is the duct tape of food ingredients. Lemon juice, vinegar, butter/oil, onion/garlic, etc. are runners-up. &lt;a href=&#34;https://claude.ai/share/8a783928-e726-439c-8415-3bc673ff4645&#34;&gt;Claude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Claude&amp;rsquo;s &lt;a href=&#34;https://claude.com/import-memory&#34;&gt;prompt to import memory&lt;/a&gt; from other AI providers doesn&amp;rsquo;t seem to work with Claude&amp;rsquo;s free account: &lt;a href=&#34;https://claude.ai/share/fc8b9173-b47c-4ebd-a8f7-b87b03433706&#34;&gt;&amp;ldquo;No memories or stored context found.&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 01 Mar 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-01-mar-2026/</link>
      <pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-01-mar-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/qtfkwk/unidown&#34;&gt;unidown&lt;/a&gt; is a Rust CLI tool that converts Markdown to Unicode characters - useful for LinkedIn.&lt;/li&gt;
&lt;li&gt;3 years into Nestle, Sangeeta Talwar (who was selling Maggi soup cubes) took the &amp;ldquo;Maggi Instant Noodles&amp;rdquo; (popular in Malaysia), changed it to &amp;ldquo;2-minutes&amp;rdquo;, realized that noodles are fun for kids to play with, invented the masala flavor, positioned it as easy for moms, distributed hanging baskets (rodent-safe, brand visibility) at stores, &lt;a href=&#34;https://www.youtube.com/watch?v=8_D-nQSTn-E&#34;&gt;marketed on TV&lt;/a&gt; and in stores, etc. &lt;a href=&#34;https://gemini.google.com/share/f923af221e41&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.google/innovation-and-ai/technology/ai/nano-banana-2/&#34;&gt;Nano Banana Pro 2&lt;/a&gt; is out. Better text, better instruction following.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lobste.rs/s/nddlyy/codespelunker_cli_code_search_tool&#34;&gt;codespelunker&lt;/a&gt; is a fast CLI code search tool. Just run &lt;code&gt;cs&lt;/code&gt; for an interactive search. It feels light and fast, like &lt;code&gt;ug&lt;/code&gt;. &lt;a href=&#34;https://lobste.rs/s/nddlyy/codespelunker_cli_code_search_tool&#34;&gt;lobste.rs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Shadow IT is unpaid R&amp;amp;D, not a security threat. When frustrated marketing or sales teams secretly buy their own software tools and bypass the IT department, traditional companies try to ban them. Transformed companies study them. &amp;ldquo;Shadow IT&amp;rdquo; is a highly accurate heat map pointing exactly to where your current systems are failing and where the immediate business value lies. &lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&#34;https://www.cio.com/article/222428/shadow-it-the-cio-s-perspective.html&#34;&gt;CIO.com&lt;/a&gt;, &lt;a href=&#34;https://thepisa.org/wp-content/uploads/2025/06/BizLedIT-GARTNER-Executive-Summary-Business-Feb2021.pdf&#34;&gt;Gartner: Business-Led IT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Coding agents have introduced a &amp;ldquo;Usage&amp;rdquo; page to check your usage: &lt;a href=&#34;https://claude.ai/settings/usage&#34;&gt;Claude usage&lt;/a&gt; and &lt;a href=&#34;https://chatgpt.com/codex/settings/usage&#34;&gt;ChatGPT usage&lt;/a&gt;. Both have weekly limits and 5 hour rolling limits - with Codex&amp;rsquo;s being more generous. This aggregates usage across the coding agents as well. Codex has a separate &lt;a href=&#34;https://developers.openai.com/codex/integrations/github/&#34;&gt;GitHub Code Review&lt;/a&gt; quota separate from this, however.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 22 Feb 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-22-feb-2026/</link>
      <pubDate>Sun, 22 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-22-feb-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/tree-sitter/tree-sitter&#34;&gt;tree-sitter&lt;/a&gt; is a fast incremental parser generator. That means you can use it to create a parser for &lt;em&gt;any&lt;/em&gt; language that works even if there are errors, e.g. malformed JSON, Python, etc. It&amp;rsquo;s used by most editors. For example, &lt;a href=&#34;https://github.com/tree-sitter/tree-sitter-python&#34;&gt;tree-sitter-python&lt;/a&gt; is a fast forgiving Python parser. There are &lt;a href=&#34;https://github.com/tree-sitter/tree-sitter/wiki/List-of-parsers&#34;&gt;official parsers&lt;/a&gt; and &lt;a href=&#34;https://github.com/tree-sitter-grammars&#34;&gt;community parsers&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Programming Languages:&lt;/strong&gt; All popular ones, less popular ones like Ada, Fortran, Lua, Zig, &amp;hellip; and even niche / domain-specific languages (Gleam, TLA⁺).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markup &amp;amp; Data Formats:&lt;/strong&gt; HTML, XML, Markdown, JSON, YAML, TOML, CSV, &amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Query, Scripting &amp;amp; Config:&lt;/strong&gt; SQL, GraphQL, Bash, Dockerfile, Regex, Terraform (HCL), &amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ligature fonts are nice, but it might not be worth forming a habit out of. &lt;a href=&#34;https://claude.ai/share/3cb9d834-b85a-4aa6-bf9f-e7051101d5c6&#34;&gt;Claude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cloudflare introduced &lt;a href=&#34;https://blog.cloudflare.com/markdown-for-agents/&#34;&gt;Markdown for Agents&lt;/a&gt;. This converts websites from HTML to Markdown via &lt;code&gt;Accept: text/markdown&lt;/code&gt; for any Cloudflare endpoint which has enabled this feature. This requires a Pro account.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/nayafia/microgrants&#34;&gt;Microgrants&lt;/a&gt; is a list of microgrants programs - where you can give small amounts of money, e.g. $50 - $1K as well as large fellowships over $100K. This includes student grants, creative &amp;amp; community grants, tech grants, social &amp;amp; policy grants, etc.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Animated web formats are simply video codecs &amp;hellip; stripped of their most powerful feature.&amp;rdquo; A &lt;code&gt;.webm&lt;/code&gt; file is likely to compress &lt;em&gt;much&lt;/em&gt; better than an animated &lt;code&gt;.webp&lt;/code&gt;, etc. &lt;a href=&#34;https://gemini.google.com/share/a83f37623107&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;esbuild can compile CSS files to support old browsers, e.g. nested rules, custom properties, etc. Usage: &lt;code&gt;esbuild input.css --target=chrome90 --outfile=output.css&lt;/code&gt;. &lt;a href=&#34;https://jvns.ca/til/esbuild-can-build-css/&#34;&gt;Julia Evans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;New jargon I learnt: &lt;a href=&#34;https://tools.s-anand.net/askai/?q=What+is+Human+On+The+Loop+vs+Human+In+The+Loop%3F+Give+it+to+me+in+a+sentence.&#34;&gt;Human-On-The-Loop&lt;/a&gt;. &lt;a href=&#34;https://tools.s-anand.net/askai/?q=What%27s+Treasure+In+Treasure+Out+-+as+opposed+to+Garbage+In+Garbage+Out%3F+Give+it+to+me+in+a+sentence.&#34;&gt;Treasure In Treasure Out&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;VS Code&amp;rsquo;s GitHub Copilot extension supports a &lt;code&gt;github.copilot.chat.commitMessageGeneration.instructions&lt;/code&gt; setting that lets you add a &lt;code&gt;[{&amp;quot;text&amp;quot;: ...}]&lt;/code&gt; or &lt;code&gt;[{&amp;quot;file&amp;quot;: &amp;quot;path/to/file.ext&amp;quot;}]&lt;/code&gt; prompt to the commit message generation. I&amp;rsquo;ve pointed this to my &lt;a href=&#34;https://github.com/sanand0/scripts/blob/main/agents/custom-prompts/git-commit.md&#34;&gt;&lt;code&gt;git-commit.md&lt;/code&gt;&lt;/a&gt; custom prompt.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 15 Feb 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-15-feb-2026/</link>
      <pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-15-feb-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ffmpeg&lt;/code&gt; lets you concatenate files without needing a separate input file. &lt;code&gt;ffmpeg -i &amp;quot;concat:input1.ext|input2.ext|input3.ext&amp;quot; -c copy output.ext&lt;/code&gt; works as long as the files use the same codecs and parameters.&lt;/li&gt;
&lt;li&gt;There is a psychological phenomenon where we &amp;ldquo;overlay&amp;rdquo; old images of people we haven&amp;rsquo;t seen in decades onto their current selves, making it hard to distinguish between someone who is 30 and someone who is 70. &lt;a href=&#34;https://gemini.google.com/share/1348ea514d1e&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Most modern &lt;code&gt;ls&lt;/code&gt; tools like &lt;a href=&#34;https://github.com/eza-community/eza&#34;&gt;&lt;code&gt;eza --icons&lt;/code&gt;&lt;/a&gt; or &lt;a href=&#34;https://github.com/lsd-rs/lsd&#34;&gt;&lt;code&gt;lsd&lt;/code&gt;&lt;/a&gt; support icons if the terminal font supports icons, like &lt;a href=&#34;https://www.nerdfonts.com/&#34;&gt;Nerd Fonts&lt;/a&gt;. For example, this: &lt;code&gt;&lt;/code&gt; shows up as a GitHub icon and &lt;code&gt;󰌻&lt;/code&gt; as a LinkedIn icon. The &lt;a href=&#34;https://www.nerdfonts.com/cheat-sheet&#34;&gt;Nerd Fonts Cheat Sheet&lt;/a&gt; is a good place to search for these. You may need to download a &lt;a href=&#34;https://www.nerdfonts.com/font-downloads&#34;&gt;supporting font&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I just replaced &lt;a href=&#34;https://github.com/tonsky/FiraCode&#34;&gt;Fira Code&lt;/a&gt; with &lt;a href=&#34;https://font.subf.dev/en/&#34;&gt;Maple Mono&lt;/a&gt; as my default font on VS Code. Like Fira Code, the ligatures are great, but there are extra ligatures like [TODO] or [ERROR], &lt;em&gt;connected italics&lt;/em&gt;, nerd font support, variable font weights, and more. Via &lt;a href=&#34;https://lobste.rs/s/ahca9t/maple_mono_open_source_monospace_font&#34;&gt;lobste.rs&lt;/a&gt;. (&lt;strong&gt;Update&lt;/strong&gt;: Maple Mono is &lt;em&gt;much&lt;/em&gt; harder to read than Fira Code, so I switched back. But it&amp;rsquo;s a nice idea.)&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 08 Feb 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-08-feb-2026/</link>
      <pubDate>Sun, 08 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-08-feb-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://ploum.net/2026-01-31-offline-git-send-email.html&#34;&gt;The Disconnected Git Workflow&lt;/a&gt; explains how to use the &lt;a href=&#34;https://git-send-email.io/&#34;&gt;&lt;code&gt;git send-email&lt;/code&gt;&lt;/a&gt; workflow. That&amp;rsquo;s like using email instead of GitHub as the collaboration mechanism - decentralizing and reducing dependencies.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://grok.com/&#34;&gt;Grok&lt;/a&gt; throws a &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/431&#34;&gt;HTTP 431&lt;/a&gt; when you pass it a query over 6,890 characters in the URL. Here&amp;rsquo;s &lt;a href=&#34;https://grok.com/?q=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&#34;&gt;an example with 6,900 characters&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;As of now, there&amp;rsquo;s no way to tell &lt;code&gt;uv&lt;/code&gt; to use the cache and install only missing repos (&lt;a href=&#34;https://github.com/astral-sh/uv/issues/15454&#34;&gt;#15454&lt;/a&gt;). But this is &lt;a href=&#34;https://docs.deno.com/runtime/fundamentals/modules/#reloading-modules&#34;&gt;Deno&amp;rsquo;s default behavior&lt;/a&gt;, making Deno a slightly better choice in this regard.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://julialang.org/blog/2012/03/shelling-out-sucks/&#34;&gt;Shelling Out Sucks&lt;/a&gt; shares common pitfalls when calling the shell from programs. Suggestion: Shell-escape ALL inputs. Use &lt;code&gt;set -o pipefail&lt;/code&gt; to detect failures in the middle of a pipe chain. Explicitly check the error code, not just stderr.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/dsherret/dax&#34;&gt;dax&lt;/a&gt;, which is based on &lt;a href=&#34;https://github.com/google/zx&#34;&gt;zx&lt;/a&gt;, is a simpler Deno-based alternative to shell scripts. &lt;a href=&#34;https://matklad.github.io/2026/01/27/make-ts.html&#34;&gt;See examples&lt;/a&gt;. &lt;a href=&#34;https://chatgpt.com/share/69814971-d900-8003-a36c-9b656c83b0b2&#34;&gt;ChatGPT&lt;/a&gt;. However, scripting language matters more when humans maintain shell scripts. Since I&amp;rsquo;m using AI, it&amp;rsquo;s easier to use &lt;code&gt;bash&lt;/code&gt; scripts and let it handle any complexities.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git push --force-with-lease&lt;/code&gt; is like &lt;code&gt;git push --force&lt;/code&gt; but won&amp;rsquo;t overwrite if others have pushed in the meantime. Default to this instead of &lt;code&gt;--force&lt;/code&gt; &amp;ndash; it&amp;rsquo;s safer.&lt;/li&gt;
&lt;li&gt;Microsoft&amp;rsquo;s &lt;a href=&#34;https://github.com/microsoft/docfind&#34;&gt;docfind&lt;/a&gt; generates a WASM search index for documents, building a dependency free browser based compact and fast search.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://diffs.com/docs&#34;&gt;diffs&lt;/a&gt; seems a promising library for rendering diffs in the browser.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bsky.app/profile/did:plc:flxq4uyjfotciovpw3x3fxnu/post/3mdlhstvnjc2r&#34;&gt;Genie 3 seems pretty good&lt;/a&gt;. We should expect to see World Models becoming usable in a few months.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 01 Feb 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-01-feb-2026/</link>
      <pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-01-feb-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Android screen recorder is the easiest way to record phone and WhatsApp calls. But that won&amp;rsquo;t work for Google Meet, Teams, Zoom, etc. &lt;a href=&#34;https://gemini.google.com/share/1aee78cf4e15&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://exiftool.org/&#34;&gt;exiftool&lt;/a&gt; remains the best media metadata extractor (music, images, &amp;hellip;) though it&amp;rsquo;s old, slow, and Perl-based. &lt;code&gt;exiftool -csv -r ~/Music/ &amp;gt; music.csv&lt;/code&gt; exports all metadata as CSV. Installing the source via &lt;a href=&#34;https://sourceforge.net/projects/exiftool/files/latest/download&#34;&gt;https://sourceforge.net/projects/exiftool/files/latest/download&lt;/a&gt; seems best. It&amp;rsquo;s a good alternative to mp3tag / puddletag UI-based exports. &lt;a href=&#34;https://chatgpt.com/share/697c398a-5dac-8003-93a2-fabcd15d6b2e&#34;&gt;ChatGPT&lt;/a&gt; &lt;a href=&#34;https://gemini.google.com/share/4e95924dfac4&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;⭐ Some questions are for us to learn. Some are Socratic, and meant for the answerer to learn. When working with AI agents and interns, I find myself asking them several questions that I don&amp;rsquo;t want to know the answer for, but is important for them along their journey. Roughly the equivalent of &amp;ldquo;Think step by step&amp;rdquo; converted into the Socratic method. For example:
&lt;ul&gt;
&lt;li&gt;Instead of &amp;ldquo;Build a demo for this client&amp;rdquo;, ask &amp;ldquo;Who is the audience? What&amp;rsquo;s their objective?&amp;rdquo; and THEN ask for a demo.&lt;/li&gt;
&lt;li&gt;Instead of &amp;ldquo;Generate a dummy dataset for X&amp;rdquo;, ask &amp;ldquo;What interesting insights would we want when analyzing X?&amp;rdquo; and THEN ask for a dataset.&lt;/li&gt;
&lt;li&gt;Instead of &amp;ldquo;Write this code&amp;rdquo;, ask &amp;ldquo;What&amp;rsquo;s the best architecture for this?&amp;rdquo; and THEN ask for code.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://news.ycombinator.com/item?id=46549444&#34;&gt;Executable Markdown files with Unix pipes&lt;/a&gt; sounds like a clever idea. Prefix Markdown files with &lt;code&gt;#!/usr/bin/env codex&lt;/code&gt; (or &lt;code&gt;claude -p&lt;/code&gt;). Then, just write programs by describing them.&lt;/li&gt;
&lt;li&gt;Quotes from &lt;a href=&#34;https://www.goodreads.com/book/show/210300489-isles-of-the-emberdark&#34;&gt;Isles of the Emberdark&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;Really, he should have known better than to punch a senator. Important people had underlings you punched on their behalf, and he should have found one of those.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://help.openai.com/en/articles/9930697-what-is-the-canvas-feature-in-chatgpt-and-how-do-i-use-it&#34;&gt;ChatGPT Canvas&lt;/a&gt; has a cool feature for editing documents or code. Just select a portion, ask for changes, and it edits it. Importantly, it&amp;rsquo;s very fast.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.nationalgeographic.com/podcasts/greeking-out&#34;&gt;Greeking Out&lt;/a&gt; is a kid-friendly National Geographic podcast about ancient Greece and its influence on modern life.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://fly.io/blog/code-and-let-live/&#34;&gt;fly.io containers&lt;/a&gt; at &lt;a href=&#34;https://sprites.dev/&#34;&gt;sprites.dev&lt;/a&gt; seem impressive. You can SSH into them. They have public &amp;amp; private HTTPS URLs. It auto-sleeps after 30s. You can checkpoint any time and restore the ENTIRE system. It&amp;rsquo;s FAST! This is great for agents. Just install Claude Code / Codex and other tools. Checkpoint it. Then &lt;code&gt;ssh&lt;/code&gt; into it and use as required. The cost is typically ~12c/hour - which is expensive to run forever but great for bursts. &lt;a href=&#34;https://simonwillison.net/2026/Jan/9/sprites-dev/&#34;&gt;Simon Willison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;m seeing the Collider Bias in action (on a small sample). The developers who can communicate well don&amp;rsquo;t code as well, and vice versa. Not because there&amp;rsquo;s a negative correlation - but because I&amp;rsquo;m eliminating people who can &lt;em&gt;neither&lt;/em&gt; code nor communicate. But interestingly, over a 1-3 month horizon, the ones who code start communicating much better but the ones who communicate well don&amp;rsquo;t start coding much better. My theory is that the developers I work are communication-bottlenecked (e.g. lack of confidence) than unskilled (e.g. poor communicators).&lt;/li&gt;
&lt;li&gt;Prefer &lt;a href=&#34;https://zod.dev/&#34;&gt;Zod&lt;/a&gt; for TypeScript validation and &lt;a href=&#34;https://ajv.js.org/&#34;&gt;Ajv&lt;/a&gt; for schema validation. Typing has a lot of value, but don&amp;rsquo;t overdo it. It&amp;rsquo;s best used at fragile &lt;em&gt;boundaries&lt;/em&gt;. &lt;a href=&#34;https://chatgpt.com/share/69770709-c238-8003-899a-b8286a0e5474&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;⭐ Notes from &lt;a href=&#34;https://hollisrobbinsanecdotal.substack.com/p/llm-poetry-and-the-greatness-question&#34;&gt;LLM poetry and the &amp;ldquo;greatness&amp;rdquo; question&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;Gwern follows this process to create good poetry. It&amp;rsquo;s a good structure for ANY kind of expert workflow with LLMs today:
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Analyze&lt;/strong&gt; the style, content, and intent of the original.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Brainstorm 10+ different directions&lt;/strong&gt; the poem could go. Emphasize diversity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Critique each&lt;/strong&gt; direction. Rate 1-5 stars.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Write the best&lt;/strong&gt; one.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Critique and edit line by line&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generate a new clean draft&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repeat&lt;/strong&gt; at least twice.&lt;/li&gt;
&lt;li&gt;Print final version.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;As a poet and scholar of poetry I feel comfortable arguing that Gwern’s work engineering prompts is, in effect, writing poetry.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Mercor uses expert poets to creates rubric. Models generate poem that experts grades, which refines the rubric, which trains the model.&lt;/li&gt;
&lt;li&gt;But models tend to the mean and need nudges (from humans?) to surface outliers and ascribe meaning (uniquely human?), which is where greatness lies.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bsky.app/profile/emollick.bsky.social/post/3m5abr5vs5s23&#34;&gt;Ethan Mollick&lt;/a&gt;: &amp;ldquo;I keep warning that so many of our systems are still built around the assumption that quality writing and analysis are costly and therefore meaningful signals. Our systems are very much not ready for the revelation that this is no longer true, as this planning objection AI shows.&amp;rdquo;
Basically, AI lowers the cost of Government and Corporate interactions. It&amp;rsquo;d be a cool hack to agent-ify these to death, i.e. do all kinds of Government / Corporate interactions that were painful earlier, but now are much easier.&lt;/li&gt;
&lt;li&gt;I just realized: &amp;ldquo;Will AI take my job?&amp;rdquo; is a variant of &amp;ldquo;Will immigrants take my job?&amp;rdquo; or &amp;ldquo;Will affirmative action take my job?&amp;rdquo; &lt;em&gt;Any&lt;/em&gt; increase in labor capacity is a threat.
But then, the &lt;strong&gt;only&lt;/strong&gt; way to get promoted is if someone takes your job. So, maybe we should ask: &amp;ldquo;How do I become their boss?&amp;rdquo; Better yet, tell your boss &amp;ldquo;I created a 4-agent team and got 2X done. Give me a new title.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Some simple yet powerful AI adoption principles from &lt;a href=&#34;https://lethain.com/company-ai-adoption/&#34;&gt;Will Larson&lt;/a&gt; - that I&amp;rsquo;ve seen work rather well:
&lt;ul&gt;
&lt;li&gt;Make tools accessible&lt;/li&gt;
&lt;li&gt;Document tips &amp;amp; tricks&lt;/li&gt;
&lt;li&gt;Highlight how people (especially senior leaders) are using it&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;An &lt;a href=&#34;https://www.playbookatlas.com/research/ai-adoption-explorer&#34;&gt;analysis of 1,250 Claude user interviews&lt;/a&gt; indicates that:
&lt;ul&gt;
&lt;li&gt;Adoption of Creatives &amp;gt; Workforce &amp;gt; Scientists. Interestingly, the identity threat and guilt of Creatives &amp;gt; Workforce &amp;gt; Scientists!&lt;/li&gt;
&lt;li&gt;Creatives they feel they&amp;rsquo;re cheating, lazy, or not adding value! Scientists use it less, but it&amp;rsquo;s more a tool and THEY verify.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sceptical verification&lt;/strong&gt; is the strongest thread.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Mintlify is &lt;a href=&#34;https://www.mintlify.com/blog/skill-md&#34;&gt;proposing &lt;code&gt;.well-known/skills/&lt;/code&gt;&lt;/a&gt; as the directory to store LLM skills sites want to publish. This could be an extension of the &lt;code&gt;llms.txt&lt;/code&gt; mechanism.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.openresponses.org/&#34;&gt;Open Responses&lt;/a&gt; is the open version of OpenAI&amp;rsquo;s Responses API. &lt;a href=&#34;https://openrouter.ai/docs/api/reference/responses/overview&#34;&gt;OpenRouter&lt;/a&gt; and &lt;a href=&#34;https://huggingface.co/blog/open-responses&#34;&gt;HuggingFace&lt;/a&gt; support is a big deal, and though Google, Anthropic, Meta etc. don&amp;rsquo;t yet support it, they might.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://rest.sh/&#34;&gt;Restish&lt;/a&gt; converts OpenAPI specs into CLI tools - with shell completion. Combined with an OAuth CLI like &lt;a href=&#34;https://github.com/SecureAuthCorp/oauth2c&#34;&gt;oauth2c&lt;/a&gt; this is a great way to conert APIs to CLI commands. &lt;a href=&#34;https://walters.app/blog/composing-apis-clis&#34;&gt;Via&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Vercel&amp;rsquo;s &lt;a href=&#34;https://github.com/vercel-labs/agent-browser&#34;&gt;agent-browser&lt;/a&gt; seems a good CLI choice for browser automation, alongside &lt;a href=&#34;https://github.com/microsoft/playwrite-cli&#34;&gt;playwright-cli&lt;/a&gt;. It may be work switching from direct Playwright coding (on CDP). &lt;a href=&#34;https://chatgpt.com/share/69770999-5d50-8003-8795-d297a1bb0c09&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Capturing actions using HAR and passing it to LLMs seems like another clever way of using AI coding agents for browser automation. &lt;a href=&#34;https://walters.app/blog/composing-apis-clis&#34;&gt;Via&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Open a browser.&lt;/li&gt;
&lt;li&gt;Open Devtools &amp;gt; Network and filter to HTML, XHR, WS, Other.&lt;/li&gt;
&lt;li&gt;Do what you want to automate, i.e. load LinkedIn, search, scroll, fetch next pages, etc.&lt;/li&gt;
&lt;li&gt;Devtools &amp;gt; Network &amp;gt; right click &amp;gt; “Save All As HAR”.&lt;/li&gt;
&lt;li&gt;Run the file through a HAR-sanitizer&lt;/li&gt;
&lt;li&gt;Prompt: “Create a Python client to automate the actions I captured in file.har&amp;quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;When any AI coding agent can build apps, value will probably migrate away from software to data, network (distribution and users), trust, taste, and physical goods. Owning these controls value. Also, infrastructure to run vibe-coded apps (e.g. auth, hosting, DB, LLM APIs, etc. bundled) will likely lead to Medium / WordPress like platforms.&lt;/li&gt;
&lt;li&gt;After 30 years of learning (and teaching) statistics, I finally found a good explanation of R². R²=80% means that ~80% of the change is because of the other variable. &lt;a href=&#34;https://gemini.google.com/share/f3dfa6cfaf89&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;⭐ People think numbers create trust; often they create attack surfaces.
&lt;ul&gt;
&lt;li&gt;Goodhart&amp;rsquo;s Law: &amp;ldquo;When a measure becomes a target, it ceases to be a good measure.&amp;rdquo; By providing a number, you invite people to &amp;ldquo;game&amp;rdquo; the system or find the flaws in how that number was manufactured.&lt;/li&gt;
&lt;li&gt;The Precision Trap: While precise numbers can increase &lt;em&gt;perceived&lt;/em&gt; credibility initially, they also lead to &amp;ldquo;anchoring.&amp;rdquo; If the number is even slightly off, the entire foundation of trust collapses more violently than it would for a general estimate.&lt;/li&gt;
&lt;li&gt;Statistical Literacy Gap: Most people don&amp;rsquo;t argue with &amp;ldquo;vibes,&amp;rdquo; but many will argue with &amp;ldquo;averages&amp;rdquo; if their personal experience represents an outlier. The number creates a surface for anecdotal rebuttal.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.eraser.io/&#34;&gt;Eraser.io&lt;/a&gt; offers an &lt;a href=&#34;https://www.eraser.io/ai/architecture-diagram-generator&#34;&gt;AI architecture diagram generator&lt;/a&gt; that creates reasonable architectures. It uses its own &lt;a href=&#34;https://www.eraser.io/guides/best-diagram-as-code-tools-in-2025&#34;&gt;diagram-as-code DSL&lt;/a&gt;, competing with &lt;a href=&#34;https://d2lang.com/&#34;&gt;D2&lt;/a&gt;, &lt;a href=&#34;https://plantuml.com/&#34;&gt;PlantUML&lt;/a&gt;, &lt;a href=&#34;https://mermaid-js.github.io/&#34;&gt;Mermaid&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;Exposing your workflow as a software interface productizes services businesses. For example, my auditors and immigration lawyers have portals where I can fill out forms, upload documents, see my status, etc. This standardizes their delivery, and creates a &amp;ldquo;product&amp;rdquo; moat.&lt;/li&gt;
&lt;li&gt;⭐ Your &amp;ldquo;villains&amp;rdquo; or enemies are often alternatives/backups that have a role in the ecosystem, offering diversity/resilience when you&amp;rsquo;re wrong. Create roles and incentives for them rather than eliminating them. For example:
&lt;ul&gt;
&lt;li&gt;Don&amp;rsquo;t make LLMs do all the work. Create a role for the clunky SQL whose resilience saves the day when LLMs hallucinate.&lt;/li&gt;
&lt;li&gt;Make the person who hates your prototype the Red Team Lead - to catch the flaws you miss.&lt;/li&gt;
&lt;li&gt;Make the people who reject your product the scouts / innovators - to find alternatives you miss.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://neon.com&#34;&gt;Neon.com&lt;/a&gt; is like Supabase but without auth, functions, etc. It&amp;rsquo;s just Postgres as a service. An alternative for prototypes (that I haven&amp;rsquo;t tried yet.) &lt;a href=&#34;https://chatgpt.com/share/69763727-0628-8003-9a99-896a055a8b6e&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://supertokens.com/&#34;&gt;SuperTokens&lt;/a&gt; is an open-source self-hosted auth service that I&amp;rsquo;m hearing about more often, but haven&amp;rsquo;t tested. Seems to be ahead of alternatives like &lt;a href=&#34;https://authjs.dev/&#34;&gt;Auth.js&lt;/a&gt; / &lt;a href=&#34;https://www.better-auth.com/&#34;&gt;Better Auth&lt;/a&gt;. &lt;a href=&#34;https://chatgpt.com/share/69763779-9150-8003-bb9f-081685c99dc2&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kontinentalist.com/stories/bollywood-falls-out-of-love&#34;&gt;Bollywood Falls Out Of Love&lt;/a&gt; is a great visual data story on &lt;a href=&#34;https://kontinentalist.com/&#34;&gt;The Kontinentalist&lt;/a&gt; by &lt;a href=&#34;https://www.linkedin.com/in/surbhi-bhatia/&#34;&gt;Surbhi&lt;/a&gt; about the decline of romance and growth of nationalism on bollywood genres.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://recharts.github.io/&#34;&gt;Recharts&lt;/a&gt; is a React charting library with some &lt;a href=&#34;https://recharts.github.io/en-US/examples/&#34;&gt;slick capabilities&lt;/a&gt; like &lt;a href=&#34;https://recharts.github.io/en-US/storybook/&#34;&gt;brushing&lt;/a&gt;, &lt;a href=&#34;https://recharts.github.io/en-US/storybook/&#34;&gt;customizable tooltips&lt;/a&gt;, and &lt;a href=&#34;https://www.dataforindia.com/population-growth/&#34;&gt;bar chart races&lt;/a&gt;. Via &lt;a href=&#34;https://www.linkedin.com/in/rukmini-s-553483b9/&#34;&gt;Rukmini&lt;/a&gt; - &lt;a href=&#34;https://www.dataforindia.com/&#34;&gt;Data for India&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/QwenLM/Qwen3-TTS&#34;&gt;Qwen3 TTS&lt;/a&gt; is impressive. It voice-clones, streams, and the tone/style can be controlled via prompts. The model is small. I ran it locally without &lt;code&gt;flash-attn&lt;/code&gt; (which I couldn&amp;rsquo;t get to work) and took ~14 seconds to generate an audio file for 10 words on my GPU machine. Environment setup:
&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 venv --python 3.12
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;UV_TORCH_BACKEND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;auto uv pip install -U qwen-tts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;DeepSeek created an external memory system for LLMs that lets them look up (instead of computing to remember) knowledge. That means CPU RAM can be used instead of GPU, models can become smaller, and training can become faster. This looks like an example of how algorithms/ideas can continue the scaling laws. &lt;a href=&#34;https://gemini.google.com/share/a94760cc5e2e&#34;&gt;Gemini&lt;/a&gt; via &lt;a href=&#34;https://bsky.app/profile/eugenevinitsky.bsky.social/post/3mcap4nt5ms2g&#34;&gt;Jeremy Howard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 25 Jan 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-25-jan-2026/</link>
      <pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-25-jan-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://indieweb.org/POSSE&#34;&gt;POSSE&lt;/a&gt; - &amp;ldquo;Publish (on your) Own Site, Share Everywhere&amp;rdquo; - is a self-explanatory content sharing approach. &lt;a href=&#34;https://www.youtube.com/watch?v=X3SrZuH00GQ&amp;amp;t=835s&#34;&gt;1 minute video introduction&lt;/a&gt;. Alternatives are:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://web.archive.org/web/20140517203502/http://www.programmableweb.com/news/cope-create-once-publish-everywhere/2009/10/13&#34;&gt;COPE&lt;/a&gt;: Create once, publish everywhere.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://indieweb.org/POSE&#34;&gt;POSE&lt;/a&gt;: Publish once, syndicate everywhere.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://indieweb.org/PESOS&#34;&gt;PESOS&lt;/a&gt;: Publish elsewhere, syndicate to own site.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://indieweb.org/PESETAS&#34;&gt;PESETAS&lt;/a&gt;: Publish elsewhere, syndicate everything to a silo (one of the &amp;ldquo;elsewhere&amp;quot;s).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Cory Doctorow&amp;rsquo;s essay on &lt;a href=&#34;https://pluralistic.net/2026/01/21/cod-marxism/&#34;&gt;how Google will use AI against shoppers&lt;/a&gt; is a great lesson on several lessons in behavioral economics. Fighting it is hard, but here is generally good advice: &lt;a href=&#34;https://chatgpt.com/share/69746734-a770-8003-ae4a-3168fd4428ae&#34;&gt;ChatGPT&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Never buy when rushed.&lt;/li&gt;
&lt;li&gt;Set a max price.&lt;/li&gt;
&lt;li&gt;Compare 2+ options (TOTAL price) early.&lt;/li&gt;
&lt;li&gt;Shop logged-out for big purchases.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/vortex-data/vortex&#34;&gt;Vortex&lt;/a&gt; is supported by &lt;a href=&#34;https://duckdb.org/2026/01/23/duckdb-vortex-extension&#34;&gt;DuckDB&lt;/a&gt;. It&amp;rsquo;s a better format than parquet for analysis and querying remotely. &lt;a href=&#34;https://gemini.google.com/share/f83ec3ef584a&#34;&gt;Gemini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Research suggests that insight emerges when we struggle with a problem, get stuck, then DISENGAGE (to inhibit distractions). EEGs can predict insight ~8 seconds before it happens using this pattern. &lt;a href=&#34;https://www.s-anand.net/blog/notes/gemini-neuroscience-of-aha-moments/&#34;&gt;Gemini&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Books that have suggested this are:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/17226604-the-art-of-thought&#34;&gt;The Art of Thought (1926)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/30676.The_Act_of_Creation&#34;&gt;The Act of Creation (1964)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/905.The_Inner_Game_of_Tennis&#34;&gt;The Inner Game of Tennis (1974)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/599317.Hare_Brain_Tortoise_Mind&#34;&gt;Hare Brain, Toroise Mind (1997)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Wu_wei&#34;&gt;Taoism&amp;rsquo;s Wu Wei&lt;/a&gt;: &amp;ldquo;muddy water, let stand, becomes clear&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Koan&#34;&gt;Zen Koans&lt;/a&gt;: giving students impossible riddles&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Books that have argued (probably incorrectly) that an impasse is a signal to push harder, not step back, are:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/74176.The_Protestant_Ethic_and_the_Spirit_of_Capitalism&#34;&gt;The Protestant Ethic and the Spirit of Capitalism (1905)&lt;/a&gt; by Max Weber, &lt;a href=&#34;https://quoteinvestigator.com/2012/12/14/genius-ratio/&#34;&gt;Edison&amp;rsquo;s 99% perspiration quote&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/10339170-the-10x-rule&#34;&gt;The 10X Rule (2011)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/27213329-grit&#34;&gt;Grit (2016)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/41721428-can-t-hurt-me&#34;&gt;Can&amp;rsquo;t Hurt Me (2018)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;We are starting to talk like LLMs. &lt;a href=&#34;https://gemini.google.com/share/fa763d406046&#34;&gt;Empirical evidence of Large Language Model&amp;rsquo;s influence on human spoken communication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.caniemail.com/features/image-avif/&#34;&gt;Email support for animated AVIF is limited&lt;/a&gt;. Though it&amp;rsquo;s perhaps the best compression format, and Apple Mail supports it well, Outlook on Windows does not support it. GMail converts it to GIF. Also, Google Groups does not yet support it. When I sent an &lt;a href=&#34;https://files.s-anand.net/images/2026-01-20-gemini-scraper-add-bookmarklet.avif&#34;&gt;animated AVIF&lt;/a&gt; in a Google Group email, it was replaced by the content proxy to &lt;a href=&#34;https://ci5.googleusercontent.com/proxy/IczfXXBzWZpSMU4zGPAy7i2QIiloAnCy9P2rvA4PX6CZU8m1-ZZP_2CBDN9oySrlTgm4lsNEKDbFsSwIDMcPm-C9k2iLSYTaPQnedmoaglIGOgI9R9l-AjGd_Ms7taUaerE=s0-d-e1-ft#https://files.s-anand.net/images/2026-01-20-gemini-scraper-add-bookmarklet.avif&#34;&gt;this nonexistent URL&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/portkey-ai/models&#34;&gt;Portkey Models&lt;/a&gt; is a repo of model related data (e.g. price, max tokens, capabilities, etc.) for a large number of models. Somewhat similar to Simon Willison&amp;rsquo;s &lt;a href=&#34;https://github.com/simonw/llm-prices&#34;&gt;LLM Prices&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/newren/git-filter-repo&#34;&gt;git-filter-repo&lt;/a&gt; is a &lt;em&gt;surprisingly&lt;/em&gt; easy way to rewrite your git history to remove specific files (e.g. large files, sensitive files). It can preserve timestamps, messages, etc. It just filters out specific files as if they were never committed. This can reduce the size of repos dramatically.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
  </channel>
</rss>
