<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Things I Learned</title>
    <link>https://til.s-anand.net/</link>
    <description>Weekly collected notes and learnings</description>
    <language>en-us</language>
    
        <item>
          <title>Things I Learned: Week of 2026-05-10</title>
          <link>https://til.s-anand.net/2026-05-10.html</link>
          <guid>https://til.s-anand.net/2026-05-10.html</guid>
          <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
          <description><![CDATA[<ul>
<li>Notes from <a href="https://simonwillison.net/2026/May/6/code-w-claude-2026/">Simon Willison&#39;s notes from the Claude Code event</a>: <a href="ai-coding.html"><code>#ai-coding</code></a> <a href="code-agents.html"><code>#code-agents</code></a> <a href="future.html"><code>#future</code></a><ul>
<li>&quot;Design for the next model&quot;. Build things that don&#39;t quite work today on the assumption that they&#39;ll start working with a model upgrade in the future.</li>
<li>&quot;The advisor strategy&quot;. Instead of using a smarter model to plan, use smaller models to ask Opus for advice-on-demand.</li>
<li>Dreaming looks really interesting. You can run a task over night which examines previous sessions and creates new memories.</li>
<li>A <a href="https://code.claude.com/docs/en/routines">routine</a> 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.</li>
</ul>
</li>
</ul>

<ul>
<li>I added <code>approvals_reviewer = &quot;auto_review&quot;</code> to my <code>~/.codex/config.toml</code>. This enables <a href="https://alignment.openai.com/auto-review">auto review</a> which uses an LLM to figure out whether to ask a human to approve or not. It&#39;s a lot less intrusive than asking every time. Not perfectly safe, though. <a href="automation.html"><code>#automation</code></a></li>
</ul>

<ul>
<li>Copilot supports a <a href="https://docs.github.com/en/copilot/how-tos/copilot-cli/use-copilot-cli/chronicle"><code>/chronicle</code></a> command that suggest tips and improvements when using Copilot. It&#39;s like <code>/insights</code> on Claude Code and</li>
</ul>

<ul>
<li>I&#39;m evaluating <a href="https://github.com/rtk-ai/rtk">rtk</a> - a CLI proxy to reduce tokens. For example <code>rtk ls</code> or <code>rtk git status</code> shows agent-friendly compact output. I just added one like to my AGENTS.md: &quot;Always prefix shell commands with <code>rtk</code>. Examples: <code>rtk git status</code>, <code>rtk pytest -q</code>, etc.&quot; instead of using <code>rtk init -g</code>. I am testing it out, so I don&#39;t know the impact, but it seems harmless. (Based on 2 days&#39; usage, across 216 commands, it saved ~50% of 37K tokens. Not much, but harmless.) <a href="code-agents.html"><code>#code-agents</code></a></li>
</ul>

<ul>
<li>I&#39;m experimenting with <a href="https://tauonmusicbox.rocks/">Tauon MusicBox</a> as an alternative to VLC as a music player.</li>
</ul>

<ul>
<li><code>xz</code> is pretty slow by default. <code>xz -T0</code> uses all available threads and speeds it up ~3X. Enabling &quot;Performance mode&quot; (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.</li>
</ul>

<ul>
<li>Overheard: &quot;VCs say, &#39;OpenAI wants to get into commerce, so why are you getting into commerce?&#39; A few weeks later, &#39;OpenAI no longer wants to get into commerce, so why are you?&quot;</li>
</ul>

<ul>
<li>Delightful discovery of the day: Super + Shift + Arrow keys to move windows between monitors on Ubuntu.</li>
</ul>

<ul>
<li><a href="https://github.com/alexpasmantier/television">television</a> is a fast, portable fuzzy finder. Like <code>fzf</code> but faster, useful for files, text, git repos, docker images, etc. <a href="github.html"><code>#github</code></a></li>
</ul>

<ul>
<li><a href="https://github.com/fathyb/carbonyl/releases">Carbonyl</a> is a CLI Chromium browser. Sort of like Lynx, but supports audio/video, JavaScript, even WASM, etc. This was the <a href="https://fathy.fr/carbonyl">author&#39;s first Rust project</a>. <a href="github.html"><code>#github</code></a> <a href="html.html"><code>#html</code></a></li>
</ul>

<ul>
<li>I tried <a href="https://zed.dev/">Zed</a> as an alternative to VS Code. It&#39;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&#39; experience. <a href="https://chatgpt.com/share/69f703b4-409c-83ea-a9fd-0c601de973f3">ChatGPT</a> <!-- https://chatgpt.com/c/69f6cf11-f870-83ea-b9bb-e35402db3226 --> <a href="chatgpt.html"><code>#chatgpt</code></a> <a href="github.html"><code>#github</code></a> <a href="markdown.html"><code>#markdown</code></a></li>
</ul>

<ul>
<li><a href="https://github.com/localsend/localsend">LocalSend</a> is a pretty quick way to share files between phone and laptop even if you don&#39;t have a network - if you connect the laptop to the phone hotspot. <a href="networking.html"><code>#networking</code></a></li>
</ul>

<ul>
<li><a href="https://flathub.org/en/apps/org.gnome.NetworkDisplays">GNOME Network Displays</a> works pretty well if you want to screencast your screen to a network display - e.g. a Smart TV with Miracast or Chromecast support.</li>
</ul>
]]></description>
        </item>

        <item>
          <title>Things I Learned: Week of 2026-05-03</title>
          <link>https://til.s-anand.net/2026-05-03.html</link>
          <guid>https://til.s-anand.net/2026-05-03.html</guid>
          <pubDate>Sun, 03 May 2026 00:00:00 GMT</pubDate>
          <description><![CDATA[<ul>
<li>Always add indecisiveness, inaction, &quot;other&quot;, &quot;not applicable&quot;, etc. as an option to LLMs. They are trained for decisive responses and pattern matching, so we need to guide the the other way. <a href="https://martinfowler.com/fragments/2026-04-14.html">Martin Fowler</a> <a href="future.html"><code>#future</code></a> <a href="llm-ops.html"><code>#llm-ops</code></a></li>
</ul>

<ul>
<li>Claude Code stores the logged in OAuth token at <code>~/.claude/.credentials.json</code>. We can use that to fetch <code>https://api.anthropic.com/api/oauth/usage</code> and retrieve Claude usage and reset times. <code>uvx ccusage</code> does this automatically, but I prefer my own script.</li>
</ul>

<ul>
<li>Ontology matters in the AI era. But some stuff matters more, and some less. <!-- https://claude.ai/chat/2f6fdf7e-9d32-4c45-ac8d-603d029aed5b --> <a href="code-agents.html"><code>#code-agents</code></a><ul>
<li>🟢 MORE: Definitions: what &quot;customer&quot; means</li>
<li>🟢 MORE: Constraints: e.g. &quot;don&#39;t reclassify loans&quot;</li>
<li>🟢 MORE: Interactions: how to verify, coordinate, delegate, ...</li>
<li>🔴 LESS: Creating ontologies: agents can do that.</li>
<li>🔴 LESS: Completeness and rigor: agents tolerate uncertainty.</li>
<li>🔴 LESS: Proprietary: agents can reverse-engineer.</li>
</ul>
</li>
</ul>

<ul>
<li><a href="https://claude.ai/share/91688f52-e31b-4d74-a4fc-00478f88d8fa">Research: Does making an emotional decision before learning create a stronger cross-domain knowledge transfer than making a rational one?</a> <!-- https://claude.ai/chat/42bfa8f6-6beb-4581-8a0b-3757b0ae7e6e --> <a href="future.html"><code>#future</code></a></li>
</ul>

<ul>
<li>&quot;... the eigenquestion is the question where, if answered, it likely answers the subsequent questions as well.&quot; <a href="https://coda.io/@shishir/eigenquestions-the-art-of-framing-problems/eigenquestions-3">Shishir Mehrotra &amp; Matt Hudson</a> <a href="future.html"><code>#future</code></a></li>
</ul>

<ul>
<li>There are several industries / markets that MBA case studies rarely cover (<a href="https://chatgpt.com/share/69efcf7a-6bf0-83ea-86dd-36e115e7540c">ChatGPT</a>): Kirana stores; Care (child care, elder care, domestic work); Faith (finance, food, media, education); Remittances; Gambling (lottery, sports betting, gacha); Scams &amp; organized fraud; Counterfeiting; ... <!-- https://chatgpt.com/c/69efa7bb-f918-83ea-9bc5-e3f7231c75da + https://gemini.google.com/app/dc5ac9f4a4f44cf0 --> <a href="business.html"><code>#business</code></a> <a href="future.html"><code>#future</code></a></li>
</ul>
]]></description>
        </item>

        <item>
          <title>Things I Learned: Week of 2026-04-26</title>
          <link>https://til.s-anand.net/2026-04-26.html</link>
          <guid>https://til.s-anand.net/2026-04-26.html</guid>
          <pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
          <description><![CDATA[<ul>
<li><a href="https://openai.com/index/introducing-gpt-5-5/">GPT 5.5</a> seems to be especially better than GPT 5.4 and running for long, with tool calls, without losing focus. That&#39;s something OpenAI models are good at anyway, so this takes it a step further. <a href="https://chatgpt.com/share/69eaccb0-b9e0-8399-be3f-6bd73906d0ec">ChatGPT</a> <a href="chatgpt.html"><code>#chatgpt</code></a></li>
</ul>

<ul>
<li>I added <a href="https://developers.openai.com/api/docs/models/gpt-image-2">gpt-image-2</a> to my <a href="https://sanand0.github.io/llmartstyle/">LLM Art Style gallery</a>. It is notably better with text accuracy. For example, on <a href="https://sanand0.github.io/llmartstyle/?category=text">Rock - Paper - Scissors - Lizard - Spock</a> it consistently lists all 10 rules, which Nano Banana 2 does not.</li>
</ul>

<ul>
<li>Running <code>/insights</code> on Claude Code helped me add these two instructions to my <a href="https://github.com/sanand0/scripts/blob/main/agents/code/SKILL.md">code skill</a>: <a href="ai-coding.html"><code>#ai-coding</code></a> <a href="code-agents.html"><code>#code-agents</code></a> <a href="github.html"><code>#github</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a><ul>
<li>Test web pages with screenshots (for layout, overlaps, contrast) AND CDP (for interactions, navigation) before finalizing</li>
<li>Prefer icon libraries over unicode/emoji icons.</li>
</ul>
</li>
</ul>

<ul>
<li>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%. <a href="image-generation.html"><code>#image-generation</code></a></li>
</ul>

<ul>
<li>Creating an authenticated <a href="https://developers.openai.com/api/docs/mcp">MCP Server for ChatGPT</a> 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&#39;t connect. An easier option is to run temporary tunnels with <code>cloudflared</code> or <code>ngrok</code> or <code>localtunnel</code>. <a href="chatgpt.html"><code>#chatgpt</code></a> <a href="networking.html"><code>#networking</code></a></li>
</ul>

<ul>
<li><code>mdq</code> is pretty useful to extract Markdown sections. For example <code>cat *.md | mdq &#39;# Title&#39;</code> extracts all sections where the header contains &#39;Title&#39; (case-insensitive). <a href="markdown.html"><code>#markdown</code></a></li>
</ul>

<ul>
<li><a href="https://developers.cloudflare.com/browser-run/">CloudFlare Browser Run</a> is, roughly, a browser as a service. <a href="https://developers.cloudflare.com/browser-run/pricing/">Pricing</a>: 10 hours free per month, then 9c per hour. I had Codex run a small <a href="https://github.com/sanand0/research/tree/main/cloudflare-browser-run">research</a> to explore it, and it seems simple to set it up and use it. <a href="cloud.html"><code>#cloud</code></a> <a href="hosting.html"><code>#hosting</code></a></li>
</ul>

<ul>
<li>World leaders do keep us entertained. <!-- https://gemini.google.com/app/240186d320b283d8 --> <ul>
<li>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.</li>
<li>Idi Amin (Uganda) declared himself the &quot;Uncrowned King of Scotland&quot; and sent baffling, unsolicited telegrams to world leaders - advising Richard Nixon to recover from Watergate, or offering food aid to a struggling Britain.</li>
<li>François &quot;Papa Doc&quot; 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.</li>
<li>Francisco Macías Nguema (Equatorial Guinea) banned the word &quot;intellectual&quot;, 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&#39;s remaining foreign currency under his bed.</li>
<li>Kim Jong-il (North Korea) claimed he invented the hamburger (calling it &quot;double bread with meat&quot;) and shot 11 holes-in-one his first time playing golf.</li>
<li>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.</li>
</ul>
</li>
</ul>

<ul>
<li>Git repositories inside git repositories (without using sub-modules) don&#39;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 <code>.git/</code> (e.g. rename to <code>.git.bak/</code>, which I&#39;ve added to my <code>~/.config/git/ignore</code>) for this to work. <a href="https://gemini.google.com/share/1a89ad8cf6da">Gemini</a> <a href="github.html"><code>#github</code></a></li>
</ul>

<ul>
<li>To run a script in the background (without logs) and detach / disown it, use <code>nohup your-script &gt;/dev/null 2&gt;&amp;1 &amp; disown</code></li>
</ul>

<ul>
<li>Pandoc Markdown to Word DOCX supports sidebar comments. You can use this Markdown: Here is <code>[comment in sidebar]{.comment-start id=&quot;c1&quot; author=&quot;Anand&quot; date=&quot;2026-01-01T12:00:00Z&quot;}commented text[]{.comment-end id=&quot;c1&quot;} inline.</code> <a href="https://gemini.google.com/share/430e7556ad69">Gemini</a>. In fact, Pandoc supports lots of other things, like: <!-- https://gemini.google.com/app/0fe9e7b12650f7f2 --> <a href="document-conversion.html"><code>#document-conversion</code></a> <a href="html.html"><code>#html</code></a> <a href="markdown.html"><code>#markdown</code></a><ul>
<li>Custom styles via block <code>::: {custom-style=&quot;Custom Style Name&quot;}</code></li>
<li>Track changes via <code>[inserted text]{.insertion author=&quot;Name&quot; date=&quot;2026-04-20T12:00:00Z&quot;}</code> and <code>[deleted text]{.deletion author=&quot;Name&quot;}</code></li>
<li>Page breaks via <code>\newpage</code> (a LaTeX command that Pandoc supports in Markdown)</li>
<li>CSS styles via <code>![Alt Text](image.png){width=&quot;5.5in&quot; height=&quot;3in&quot;}</code></li>
</ul>
</li>
</ul>

<ul>
<li><a href="https://offpunk.net/">Offpunk</a> is a CLI offline-first browser. Interesting idea, but installation is a problem. 
After <code>sudo apt uninstall offpunk</code> running <code>offpunk</code> failed with <code>ImportError: lxml.html.clean module is now a separate project lxml_html_clean.</code>
After a <code>git clone</code> it reported <code>HTML document detected. Please install python-bs4 and python-readability</code>.
These are easy to fix, but I wasn&#39;t inclined.</li>
</ul>
]]></description>
        </item>

        <item>
          <title>Things I Learned: Week of 2026-04-19</title>
          <link>https://til.s-anand.net/2026-04-19.html</link>
          <guid>https://til.s-anand.net/2026-04-19.html</guid>
          <pubDate>Sun, 19 Apr 2026 00:00:00 GMT</pubDate>
          <description><![CDATA[<ul>
<li>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 &quot;localhost:3000&quot; or a &quot;replit.app&quot; 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 &quot;Look ma, no hands!&quot; and it&#39;s delightful they&#39;ve learnt. Part of the value is &quot;There&#39;s gold in them thar hills!&quot; and use-case discovery is important. <a href="web-dev.html"><code>#web-dev</code></a></li>
</ul>

<ul>
<li><a href="https://wavacity.com/">WaveCity</a> is a WASM build of Audacity, i.e. Audacity running in the browser! <a href="https://audiomass.co/">Audiomass</a> is a similar but simpler audio editor - again, WASM-based. <a href="https://gemini.google.com/share/54d4778ed7bd">Gemini</a> <a href="web-dev.html"><code>#web-dev</code></a></li>
</ul>
]]></description>
        </item>

        <item>
          <title>Things I Learned: Week of 2026-04-12</title>
          <link>https://til.s-anand.net/2026-04-12.html</link>
          <guid>https://til.s-anand.net/2026-04-12.html</guid>
          <pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate>
          <description><![CDATA[<ul>
<li>A good collection of practices on automated AI code reviews by <a href="https://www.latent.space/p/reviews-dead">Ankit Jain</a>: <a href="ai-coding.html"><code>#ai-coding</code></a> <a href="automation.html"><code>#automation</code></a> <a href="best-practices.html"><code>#best-practices</code></a> <a href="code-agents.html"><code>#code-agents</code></a> <a href="github.html"><code>#github</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a><ul>
<li>Compare multiple options. Whichever passes the most tests wins.</li>
<li>Deterministic guardrails. Use linters, type-checkers, SAST/DAST checks, test scripts, etc.</li>
<li>Humans define acceptance criteria. Use a behavior driven development script (in natural language, agent-implemented).</li>
<li>Permission Systems as Architecture. Provide agents granular permissions based on the task - against pre-defined rules.</li>
<li>Adversarial Verification. Have one agent break the others&#39; work.</li>
</ul>
</li>
</ul>

<ul>
<li>From <a href="https://lalitm.com/post/building-syntaqlite-ai/">Lalit Maganti</a>: <a href="future.html"><code>#future</code></a> <a href="optimization.html"><code>#optimization</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a><ul>
<li>Knowing what you want is a valuable skill.</li>
<li>Wanting things others will also want is valuable.</li>
<li>Learn good software management. It is similar to managing agents.</li>
</ul>
</li>
</ul>

<ul>
<li>For better results, just continue your AI chat, or break the problem up. More tokens lead to better solutions even now. <a href="https://joelbkr.substack.com/p/many-benchmarks-scores-would-appear">Joel Baker</a> <a href="ai-coding.html"><code>#ai-coding</code></a> <a href="optimization.html"><code>#optimization</code></a></li>
</ul>

<ul>
<li>Since <a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=6513481">companies using AI outperform competition</a> and <a href="https://arxiv.org/abs/2604.01363">capital might win more than labour</a> but <a href="https://forecastingresearch.substack.com/p/forecasting-the-economic-effects-of-ai">GDP growth may not be too high</a>, it might be good to invest in AI-using companies than in index funds. <a href="future.html"><code>#future</code></a></li>
</ul>

<ul>
<li>Nicholas Carlini&#39;s <a href="https://sockpuppet.org/blog/2026/03/30/vulnerability-research-is-cooked/">prompt</a> to find vulnerabilities is to run: &quot;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&quot; <em>across multiple repos</em> in parallel. Then &quot;I got an inbound vulnerability report; it’s in ${FILE}.vuln.md. Verify for me that this is actually exploitable&quot;. That was almost 100% successful. <a href="github.html"><code>#github</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a></li>
</ul>

<ul>
<li>When planning with AI coding agents, <a href="https://martinfowler.com/articles/reduce-friction-ai/design-first-collaboration.html">Martin Fowler recommends</a> discussing <em>each</em> of these in <em>sequence</em> before coding: <a href="ai-coding.html"><code>#ai-coding</code></a> <a href="automation.html"><code>#automation</code></a> <a href="best-practices.html"><code>#best-practices</code></a> <a href="code-agents.html"><code>#code-agents</code></a> <a href="future.html"><code>#future</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a><ul>
<li>Capabilities / functionality</li>
<li>Components: Services, modules, major abstractions.</li>
<li>Interactions: Data flow, API calls, events.</li>
<li>Interfaces: Function signatures, types, schemas.</li>
</ul>
</li>
</ul>

<ul>
<li>Planning with agents using <a href="https://blog.fsck.com/2026/03/09/superpowers-5/#visual-brainstorming">Visual Brainstorming</a>, i.e. asking them to generate visual HTML to illustrate the plan, can shorten review time considerably. <a href="code-agents.html"><code>#code-agents</code></a> <a href="future.html"><code>#future</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a></li>
</ul>

<ul>
<li>I enabled CloudFlare&#39;s new dynamic <a href="https://blog.cloudflare.com/client-side-security-open-to-everyone/">Client-Side Security</a> monitor. If someone hacks my <a href="https://www.s-anand.net/">website</a> 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&#39;s safe, <em>then</em> serves the content. This pattern of deterministic with LLM fallback works for <a href="https://martinfowler.com/articles/harness-engineering.html">most reviews</a>. <a href="cloud.html"><code>#cloud</code></a> <a href="code-agents.html"><code>#code-agents</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a> <a href="web-dev.html"><code>#web-dev</code></a></li>
</ul>

<ul>
<li>Harness = Agent minus Model: everything in an AI agent except the model itself. <a href="https://martinfowler.com/articles/harness-engineering.html">Nice definition</a> <a href="automation.html"><code>#automation</code></a> <a href="code-agents.html"><code>#code-agents</code></a> <a href="future.html"><code>#future</code></a></li>
</ul>

<ul>
<li>Update feature-level summaries as you go in <code>context/$FEATURE.md</code> with user prompt, summary of WHY from agent&#39;s responses for future learning, my comments. Like Architectural Decision Records (ADRs) for humans and agents. <a href="https://martinfowler.com/articles/reduce-friction-ai/context-anchoring.html">Context Anchoring</a> <a href="code-agents.html"><code>#code-agents</code></a> <a href="features.html"><code>#features</code></a> <a href="future.html"><code>#future</code></a> <a href="markdown.html"><code>#markdown</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a></li>
</ul>

<ul>
<li><a href="https://www.bassimeledath.com/blog/levels-of-agentic-engineering">8 levels of Agentic Engineering</a>. <a href="https://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04">8 levels of Gas Town</a>. I&#39;m still only at level 6 on both. 🙁 <a href="prompt-engineering.html"><code>#prompt-engineering</code></a></li>
</ul>

<ul>
<li>&quot;It&#39;s important to watch the loop as that is where your personal development and learning will come from.&quot; <a href="https://ghuntley.com/loop/">Geoff Huntley</a>, originator of the Ralph (Wiggum) loop. <a href="future.html"><code>#future</code></a></li>
</ul>

<ul>
<li>Google has an <a href="https://github.com/google-ai-edge/gallery">Edge Gallery</a> app that runs Gemma 4 on mobile. The main advantage is that you can use it on a flight. It&#39;s not too bad as a model either. Transcription quality is average. It doesn&#39;t run in the background, only one chat at a time, etc. So, it&#39;s useful only as a last resort. <a href="chatgpt.html"><code>#chatgpt</code></a> <a href="gpu.html"><code>#gpu</code></a></li>
</ul>

<ul>
<li><a href="https://resend.com/">Resend</a> is a simple way to send emails via an API.</li>
</ul>

<ul>
<li><a href="https://martinfowler.com/articles/mechanical-sympathy-principles.html">Principles of Mechanical Sympathy</a> has some practical hardware-driven optimization tips. <a href="best-practices.html"><code>#best-practices</code></a> <a href="optimization.html"><code>#optimization</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a><ul>
<li>Prefer accessing memory sequentially. CPU access to RAM and cache is optimized for this.</li>
<li>Natural batching: flush the buffer when you reach the maximum buffer size <em>or when the queue is empty</em>. This avoids buffers waiting unnecessarily.</li>
</ul>
</li>
</ul>

<ul>
<li>The core argument in <a href="https://www.goodreads.com/book/show/18736925-capital-in-the-twenty-first-century">Capital in the Twenty-First Century (Thomas Piketty, 2013/2014)</a> is <code>r &gt; g</code>. The interest on capital (<code>r</code>) is always greater than the economic growth (<code>g</code>). Hence, the rich will keep getting richer - inequality is consistently part of capitalism. (Not surprising, but well supported by data.)</li>
</ul>

<ul>
<li>Based on a quick exploration of the AT protocol (<a href="https://jakelazaroff.com/words/building-more-resilient-local-first-software-with-atproto/">via Jake Lazaroff</a>), I am yet to see a viable use for it. It&#39;s a decentralized distributed data network. OK... what will <strong>I</strong> use it for?</li>
</ul>

<ul>
<li>When I asked Claude if any of my work is patentable, it said &quot;Comicgen is the sole candidate, but you only get one year grace after it&#39;s public. But why do <em>you</em> want to patent? Your edge is prototyping speed, taste, and knowledge. Patents don&#39;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.&quot; Oh! Ah! <!-- https://claude.ai/chat/539996da-f0a2-48d9-99dc-c3fac929199f --></li>
</ul>

<ul>
<li><a href="https://github.com/chenglou/pretext">pretex</a> 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. <a href="html.html"><code>#html</code></a> <a href="markdown.html"><code>#markdown</code></a> <a href="speech-to-text.html"><code>#speech-to-text</code></a> <a href="web-dev.html"><code>#web-dev</code></a></li>
</ul>

<ul>
<li>Because AI bots scan deeply rather than &quot;browse&quot; popular pages, CDN cache invalidation strategies designed for humans (like LRU - Least Recently Used) no longer work. They&#39;re exploring new caching algorithms like <a href="https://cachemon.github.io/SIEVE-website/">SIEVE</a> and <a href="https://s3fifo.com/">FIFO</a> <a href="https://blog.cloudflare.com/rethinking-cache-ai-humans/">CloudFlare</a> <a href="ai-coding.html"><code>#ai-coding</code></a> <a href="cloud.html"><code>#cloud</code></a></li>
</ul>

<ul>
<li>I enabled CloudFlare&#39;s new dynamic <a href="https://blog.cloudflare.com/client-side-security-open-to-everyone/">Client-Side Security</a> monitor. If someone hacks my <a href="https://www.s-anand.net/">website</a> 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&#39;s safe, <em>then</em> serves the content. <a href="cloud.html"><code>#cloud</code></a> <a href="code-agents.html"><code>#code-agents</code></a> <a href="web-dev.html"><code>#web-dev</code></a></li>
</ul>

<ul>
<li>CloudFlare practically rewrote WordPress into a new Astro-based CMS: <a href="https://blog.cloudflare.com/emdash-wordpress/">EmDash</a>! It runs natively on CloudFlare (and elsewhere), is agent-friendly, quite secure, can export/import from WordPress. <a href="cloud.html"><code>#cloud</code></a> <a href="web-dev.html"><code>#web-dev</code></a></li>
</ul>

<ul>
<li>Linux optimization settings I noted from a <a href="https://blog.fsck.com/2026/03/30/linux-power-tuning-meteor-lake/">deleted post</a> <a href="optimization.html"><code>#optimization</code></a><pre><code class="language-bash">gsettings set org.gnome.desktop.interface enable-animations false
gsettings set org.gnome.desktop.interface cursor-blink false
gsettings set org.gnome.settings-daemon.plugins.power idle-dim true
gsettings set org.gnome.desktop.notifications show-in-lock-screen false
gsettings set org.gnome.desktop.session idle-delay 300
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout 900
# gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 1200
```cd ~
</code></pre>
</li>
</ul>

<ul>
<li><a href="https://github.com/MestreLion/git-tools">git-restore-mtime</a> is part of the git-tools package and sets the modified time of files to their last committed time. Useful when cloning repos. <a href="github.html"><code>#github</code></a></li>
</ul>

<ul>
<li>UNIX has a <code>script</code> command that runs a shell and logs it. For example: <ul>
<li><code>script -c fish session.log</code> starts a new <code>fish</code> shell and logs it to <code>session.log</code>.</li>
<li><code>script -c &quot;uv run app.py&quot; -q -a app.log</code> will append to app.log, suppressing &quot;Script started...&quot; and &quot;Script done...&quot; messages.</li>
<li><code>script --timing=time.txt session.log</code> logs the timing, which you can replay with <code>scriptreplay --timing=time.txt session.log</code>. Similar to asciinema.</li>
<li>A quick way to strip out the ANSI escape sequences (weird Unicode characters) is to pipe it through <code>npx strip-ansi-cli</code>.</li>
</ul>
</li>
</ul>
]]></description>
        </item>

        <item>
          <title>Things I Learned: Week of 2026-04-05</title>
          <link>https://til.s-anand.net/2026-04-05.html</link>
          <guid>https://til.s-anand.net/2026-04-05.html</guid>
          <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
          <description><![CDATA[<ul>
<li>It&#39;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: <ul>
<li>Ctrl + Alt + Left/Right Arrow: Move desktops</li>
<li>Ctrl + Alt + Shift + Left/Right Arrow: Move window to desktop</li>
<li>Super + Shift + Arrow: Move window to another monitor</li>
<li>Super + Drag: Drag window from anywhere</li>
</ul>
</li>
</ul>

<ul>
<li><a href="https://social.jvns.ca/@b0rk/116297197345549083">How Diffie Hellman Key Exchange Works</a> by Julia Evans is an <em>excellent</em> explanation. Share a random number. A multiplies it by their private key and shares S<em>A. B multiplies it by their private key and shares S</em>B. They multiply the others&#39; key with their secret key and they get S<em>A</em>B = S<em>B</em>A. Now <em>both</em> of them have the same <em>new</em> secret they can encrypt/decrypt with, but no one else knows, even though they shared everything publicly! This may be one of the <strong>best</strong> cool uses of math I&#39;ve seen in a long time.</li>
</ul>

<ul>
<li><a href="https://blog.hofstede.it/shell-tricks-that-actually-make-life-easier-and-save-your-sanity/">Shell tricks</a> I didn&#39;t know: <a href="markdown.html"><code>#markdown</code></a> <a href="write.html"><code>#write</code></a><pre><code class="language-bash"># ALT + . cycles through the last arguments typed
mv file.{txt,md}    # Move file.txt to file.md
ls |&amp; tee file.txt  # Pipe both stdout and stderr to tee
</code></pre>
</li>
</ul>
]]></description>
        </item>

        <item>
          <title>Things I Learned: Week of 2026-03-29</title>
          <link>https://til.s-anand.net/2026-03-29.html</link>
          <guid>https://til.s-anand.net/2026-03-29.html</guid>
          <pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate>
          <description><![CDATA[<ul>
<li>&quot;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.&quot; <a href="https://www.dwarkesh.com/p/terence-tao#:~:text=gather%20large%2Dscale%20data">Terence Tao</a> <a href="automation.html"><code>#automation</code></a></li>
</ul>

<ul>
<li>As of today, a <a href="https://www.linkedin.com/search/results/people/?keywords=%22llm%20psychologist%22">LinkedIn search for &quot;llm psychologist&quot;</a> lists 9 people. I&#39;m not alone! <a href="llm-ops.html"><code>#llm-ops</code></a><ul>
<li><a href="https://www.linkedin.com/in/sanand0/">Anand S</a>, LLM Psychologist, Singapore, Singapore</li>
<li><a href="https://www.linkedin.com/in/analyticsanshul/">Anshul Saxena, PhD</a>, AI Advisor &amp; Trainer | Technology Strategist | LLM Psychologist | Currently teaching humans, machines &amp; business to work smarter through Generative AI and Quantum Computing | 15+ Years Experience, Pune, Maharashtra, India</li>
<li><a href="https://www.linkedin.com/in/chadofficial/">Charitarth (Chad) Sindhu</a>, LLM Psychologist / Fractional Business &amp; AI Workflow Consultant/ Digital Nomad, Tokyo, Japan</li>
<li><a href="https://www.linkedin.com/in/lancelotsalavert/">Lancelot Salavert</a>, LLM Psychologist, Barcelona, Catalonia, Spain</li>
<li><a href="https://www.linkedin.com/in/lior-durahly/">Lior Dor(Durahly)</a>, Team Lead | Bug Banisher | Ex 8200, Tel Aviv District, Israel. Past: R&amp;D Team Lead and <strong>LLM</strong> <strong>Psychologist</strong> at Superwise | A Blattner Tech Company</li>
<li><a href="https://www.linkedin.com/in/maximebodereau/">maxime bodereau</a>, Lead Creative Art Director | UX Forensics | Ai LLM Psychologist | Visual Alchemist | Codesmith | Brandologist | Full Stack Designer, Nantes, Pays de la Loire, France</li>
<li><a href="https://www.linkedin.com/in/chenml/">Mei Chen 🦋</a>, LLM Psychologist | Lead Product Engineer | Delivering Agentic Experiences, Toronto, Ontario, Canada</li>
<li><a href="https://www.linkedin.com/in/shoshannahtekofsky/">Shoshannah Tekofsky</a>, LLM Psychologist at AI Digest, Zwolle, Overijssel, Netherlands</li>
<li>LinkedIn Member, LLM, psychologist, mediator, Prague, Czechia</li>
</ul>
</li>
</ul>

<ul>
<li><a href="https://posttrainbench.thoughtfullab.com/">LLMs are able post-train LLMs on new topics</a>. They&#39;re improving fast. <a href="https://jack-clark.net/2026/03/16/importai-449-llms-training-other-llms-72b-distributed-training-run-computer-vision-is-harder-than-generative-text/">Jack Clark</a> <a href="llm-ops.html"><code>#llm-ops</code></a></li>
</ul>

<ul>
<li><a href="https://www.linkedin.com/search/results/people/?keywords=vibe+coding+fixer">Vibe Coding Fixer</a> and <a href="https://www.linkedin.com/search/results/people/?keywords=ai+slop+cleaner">AI Slop Cleaner</a> are real job descriptions - which are morphing into enterprise offerings. But I still seem to be the only official <a href="https://www.linkedin.com/search/results/people/?keywords=llm+psychologist">LLM Psychologist</a> <a href="llm-ops.html"><code>#llm-ops</code></a></li>
</ul>

<ul>
<li>Notes from <a href="https://mtrajan.substack.com/p/ai-services-wrong-mental-models-right">AI Services - Wrong Mental Models, Right Moment</a>: <ul>
<li>AI services has 3 markets. Automatable work: vanishes in 2 years. Human-in-the-loop work: sustains. Judgement-driven: grows in importance.</li>
<li>YC: don’t sell access to a tool for $50 a month, use the AI yourself and sell the finished work for $5,000.</li>
<li>Sell output. Price on outcome. Sell to business, not IT.</li>
<li>Sell accountability: proven success, with your guarantee.</li>
<li>Sell authenticity: a brand story representing uniqueness, character, ... or whatever... something people respect.</li>
</ul>
</li>
</ul>

<ul>
<li>Data transfer between GPU and memory is a bottleck and three approaches are emerging. <a href="https://mtrajan.substack.com/p/inference-blindness">#</a> <a href="gpu.html"><code>#gpu</code></a><ul>
<li><a href="https://taalas.com/the-path-to-ubiquitous-ai/">Taalas</a> is etching LLMs into the chip. Llama 8b runs at 17,000 tok/s (H200 is at 230 tok/s).</li>
<li><a href="https://www.d-matrix.ai/announcements/d-matrix-unveils-corsair-the-worlds-most-efficient-ai-computing-platform-for-inference-in-datacenters/">d-Matrix</a> is moving compute into SRAM memory chips. 30,000 tok/s for Llama 70b. Cerebras and MatX are similar: memory-oriented.</li>
<li><a href="https://furiosa.ai/blog/lg-ai-research-taps-furiosaai-to-achieve-2-25x-better-llm-inference-in-production-vs-gpus">FuriosaAI</a> minimizes data movement. Groq and Sambanova are similar.</li>
<li>But in the long run, commodity technology usually beats integrated stacks.</li>
</ul>
</li>
</ul>

<ul>
<li><a href="https://openai.com/index/introducing-gpt-5-4-mini-and-nano/">GPT 5.4 Nano ($0.2/MTok) and Mini ($0.75/MTok)</a> are good options for bulk OCR, transcription, etc. as cost and quality comparable alternatives to Gemini Flash Lite and Gemini Flash. <a href="https://simonwillison.net/2026/Mar/17/mini-and-nano/">They can describe 75K photos for $50</a>. Both models are better than GPT-5 Mini on most benchmarks. <a href="chatgpt.html"><code>#chatgpt</code></a> <a href="gpu.html"><code>#gpu</code></a></li>
</ul>

<ul>
<li>Cool <a href="https://simonwillison.net/guides/agentic-engineering-patterns/using-git-with-coding-agents/">AI coding agent git prompt fragments</a>: <a href="ai-coding.html"><code>#ai-coding</code></a> <a href="code-agents.html"><code>#code-agents</code></a> <a href="github.html"><code>#github</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a><ul>
<li>Use git bisect to find when this bug was introduced: ...</li>
<li>Find and recover my code that does ...</li>
<li>Sort out this git mess for me.</li>
<li>Rewrite history removing ...</li>
<li>Split the last commit into multiple commits grouped logically.</li>
<li>Start a new repo at ... and build just this module ... based on ... with a similar commit history copying the author and commit dates.</li>
</ul>
</li>
</ul>

<ul>
<li><a href="https://matthodges.com/posts/2026-01-07-ai-agents-campaigns/">Campaigns Are Knowledge Workers and the Tools Just Caught Up</a>. 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. <a href="automation.html"><code>#automation</code></a> <a href="code-agents.html"><code>#code-agents</code></a></li>
</ul>

<ul>
<li>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.</li>
</ul>

<ul>
<li><a href="https://claude.ai/share/08b1e235-0073-4de1-bdb6-27307ef3174f">Confessional AI training for honest model behaviour</a>. Research probing for &quot;absence&quot;, i.e. what the model is NOT saying <!-- https://claude.ai/chat/d5a4e1e9-595d-4062-ab95-817d57bfdf9d --> <a href="ai-coding.html"><code>#ai-coding</code></a> <a href="future.html"><code>#future</code></a> <a href="voice-cloning.html"><code>#voice-cloning</code></a></li>
</ul>

<ul>
<li><a href="https://thekidshouldseethis.com/">The Kids Should See This</a> - great collection of videos for curious people. <a href="https://thejeshgn.com/2026/03/27/weekly-notes-13-2026/">Thej</a></li>
</ul>

<ul>
<li>A jury fined Meta and YouTube $4.2m and $1.8m for building addictive features in their products. That&#39;s a first. <a href="https://www.nytimes.com/2026/03/25/technology/social-media-trial-verdict.html">NY Times</a></li>
</ul>

<ul>
<li>The <a href="https://en.wikipedia.org/wiki/Hedonic_treadmill">hedonic treadmill</a> (which roughly quantifies a Buddhist principle) says that we revert to a <a href="https://en.wikipedia.org/wiki/Hedonic_treadmill#Happiness_set_point">happiness set point</a> (which varies by individual). Worse, those who experience a high kick (e.g. a lottery) don&#39;t get enough kick from normal wins (contrast effect) -- <a href="https://gemini.google.com/share/9e8a904b34bb">Interactive explainer</a>. <!-- https://gemini.google.com/app/b676e7571e5cbc85 --> The happiness neutral <a href="future.html"><code>#future</code></a></li>
</ul>

<ul>
<li><a href="https://simonwillison.net/2026/Mar/19/openai-acquiring-astral/">OpenAI acquired Astral!</a>. This will likely slow down the new wonderful tools accelerating the Python ecosystem. Like with <a href="https://openai.com/index/openai-to-acquire-promptfoo/">PromptFoo</a> and <a href="https://steipete.me/posts/2026/openclaw">OpenClaw</a>, this seems to be about talent. The &quot;acqui-hire&quot; mode seems a <em>clear</em> 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).</li>
</ul>

<ul>
<li><a href="https://www.npmjs.com/package/quickjs-emscripten">quickjs-emscripten</a> 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. <a href="https://github.com/simonw/research/tree/main/javascript-sandboxing-research">Simon Willison</a> <a href="github.html"><code>#github</code></a> <a href="html.html"><code>#html</code></a> <a href="markdown.html"><code>#markdown</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a></li>
</ul>

<ul>
<li><a href="https://bramcohen.com/p/manyana">Manyana</a> is a CRDT based version control system. It sounds like a good idea but I&#39;m sceptical because merge conflicts are a &quot;what should I do&quot; problem more than &quot;how&quot;. With <a href="https://simonwillison.net/guides/agentic-engineering-patterns/using-git-with-coding-agents/">agents doing more merge conflict management</a>, I am not sure this will offer a concrete benefit - but probably no harm either. <a href="code-agents.html"><code>#code-agents</code></a> <a href="github.html"><code>#github</code></a></li>
</ul>

<ul>
<li><a href="https://www.google.com/search?q=EARS+(Easy+Approach+to+Requirements+Syntax)&oq=EARS+(Easy+Approach+to+Requirements+Syntax)">EARS (Easy Approach to Requirements Syntax)</a> is a simple structure for requirements. For <a href="https://github.com/github/spec-kit/issues/1356">example</a>, &quot;Users should be able to drag tasks between columns. The app needs to work offline too. Handle errors gracefully.&quot; becomes the following - which AI can convert to and is easier to spot errors in. State machines and decision tables are useful alternatives, too. <a href="automation.html"><code>#automation</code></a><ul>
<li><strong>REQ-001</strong> (Event): When the user drags a task card to a different column, the system shall update the task status to match the destination column.</li>
<li><strong>REQ-002</strong> (State): While the application is offline, the system shall store task updates in local storage.</li>
<li><strong>REQ-003</strong> (Event): When the application reconnects, the system shall synchronize locally stored updates with the server.</li>
<li><strong>REQ-004</strong> (Unwanted): If synchronization conflicts occur, then the system shall display a resolution dialog to the user.</li>
</ul>
</li>
</ul>
]]></description>
        </item>

        <item>
          <title>Things I Learned: Week of 2026-03-22</title>
          <link>https://til.s-anand.net/2026-03-22.html</link>
          <guid>https://til.s-anand.net/2026-03-22.html</guid>
          <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
          <description><![CDATA[<ul>
<li>New skill unlocked: how to demo without knowing what you&#39;re demo-ing. STEP 1: Copy-paste all demo pages as Markdown. STEP 2: Tell AI &quot;Here is a demo I&#39;ll be showing. (Add context.) Tell me how I should explain this and what I should point out as specific examples. Use concise bullets.&quot; <a href="markdown.html"><code>#markdown</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a></li>
</ul>

<ul>
<li>We&#39;ve learnt not to do things we don&#39;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&#39;s faster. Learning can come later. <a href="automation.html"><code>#automation</code></a> <a href="learning.html"><code>#learning</code></a></li>
</ul>

<ul>
<li>The Internet is forking into a human internet vs an agent web <a href="https://www.linkedin.com/posts/saamnaghshineh_automate-faster-activity-7431817567536627712-vkLz/">LinkedIn</a> <a href="code-agents.html"><code>#code-agents</code></a> <a href="future.html"><code>#future</code></a> <a href="networking.html"><code>#networking</code></a> <a href="web-dev.html"><code>#web-dev</code></a></li>
</ul>

<ul>
<li><a href="https://samgeo.gishub.org/">SamGeo</a> is a Python Package for geospatial image processing. While <a href="https://allenai.org/olmoearth">OlmoEarth</a> provides geospatial embeddings, SamGeo can convert geospatial data to vector data! So you can do things like: <ul>
<li>Create the outer boundary of all apartments with swimming pools in a city</li>
<li>Extract the shape of all lakes across the years to find out how they&#39;re changing.</li>
</ul>
</li>
</ul>

<ul>
<li>Terence started Foundation for Science and AI Research (SAIR) to use AI in science research. Verifiable proofs (e.g. <a href="https://lean-lang.org/">LEAN</a>) are a big part of this.</li>
</ul>

<ul>
<li>Since AI needs to run on phones and that needs GPUs, a lot of phones might need replacement in the next few years.</li>
</ul>

<ul>
<li><a href="https://claude.ai/share/087a929c-c8bf-4231-9dcc-3c13c9b93591">The Human-Verified Match Campaign</a>. Unique physical QR codes in events to prove to corporate matching program sponsors that the human donors were actually present at the event, and fund-match only human donors from the event. <!-- https://claude.ai/chat/1ceac89c-ae06-4430-990e-697a731683e0 --></li>
</ul>

<ul>
<li>Psychological operations in design by <a href="https://www.linkedin.com/in/narendraghate/">Narendra Ghate</a> <ul>
<li>When lights are dimmed people speak softer. So, dimming lights reduces sound levels in noisy offices.</li>
<li>Rather than reduce the size of shampoo sachets (which customers and business both hate), include 2 shampoos in one sachet, tearable in the middle.</li>
<li>Price saches at 95p with a 5p deposit for the sachet - which rag-pickers can collect and return to the retailer.</li>
<li>People think of stains like wounds on cloth. So a &quot;stain band-aid&quot; where you stick a strip, and remove it after 5 min to remove the stain, is catchy.</li>
<li>A mechanical wind-up fish that stirs the water in the bucket while clothes are soaking speeds up the process.</li>
</ul>
</li>
</ul>

<ul>
<li>Senthil &amp; Amutha, founders of <a href="https://www.payir.org/">Payir</a> demonstrated a <a href="https://thinaistore.myinstamojo.com/product/fabric-calendar-hanging-model-reusable">re-usable fabric calendar</a> that converts into a bag for re-use. Pretty clever! Their message at the <a href="https://www.chennaidesignfestival.com/">Chennai Design Festival</a> was that good design can be <em>for</em> the masses and <em>by</em> the masses to reclaim their time, energy, and joy.</li>
</ul>

<ul>
<li>The urinary bladder works based on <em>involuntary</em> muscular contractions towards the end, to clear out the last bits of fluid. It&#39;s not fluid flow, it&#39;s muscle contractions. (Oh, the things I learn!) <a href="https://gemini.google.com/share/87351b16e4b6">Gemini</a></li>
</ul>

<ul>
<li>Indigo bans ghee in cabin baggage. Also coconuts, pickles, oily foods, gooey cakes, spices (masala, powders), strong-smelling food. <a href="https://chatgpt.com/share/69bc0652-bdbc-8003-9326-b48a91d5bd2c">ChatGPT</a></li>
</ul>

<ul>
<li>I keep forgetting that QR codes need a white border for them to work.</li>
</ul>

<ul>
<li><a href="https://github.com/JamesLMilner/terra-draw">TerraDraw</a> provides a unified API across multiple mapping libraries. (In the vibe-coding era, this is not as useful.)</li>
</ul>

<ul>
<li>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. <a href="https://claude.ai/share/183cd28a-be7e-4857-a6ff-6c919e3a9c15">Claude</a></li>
</ul>

<ul>
<li><a href="https://pytorch.org/blog/automated-trace-collection/">PyTorch Tracing</a> watches one forward pass and freezes the path into a portable recipe. But it silently ignores branches your example didn&#39;t take. <a href="https://claude.ai/share/7d970eff-56a5-4502-9afd-3fcf8648df2a">Claude</a></li>
</ul>
]]></description>
        </item>

        <item>
          <title>Things I Learned: Week of 2026-03-15</title>
          <link>https://til.s-anand.net/2026-03-15.html</link>
          <guid>https://til.s-anand.net/2026-03-15.html</guid>
          <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
          <description><![CDATA[<ul>
<li>&quot;Use <code>(some-command) --help</code> to ...&quot; is an efficient prompt prefix that tells agents to read the docs and use a CLI tool to solve a problem. For example, &quot;Use <code>uvx rodney --help</code> and <code>ffmpeg</code> for a demo video of GitHub PRs&quot;.</li>
</ul>

<ul>
<li>As agents improve, we&#39;ll have more mediorce output (e.g. dashboards) since people won&#39;t know to ask for better, or validate the result. They&#39;ll hire experts who know to ask better and verify better. <a href="best-practices.html"><code>#best-practices</code></a> <a href="code-agents.html"><code>#code-agents</code></a> <a href="future.html"><code>#future</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a> <a href="prediction.html"><code>#prediction</code></a></li>
</ul>

<ul>
<li>Claude Opus 4.6 solved a problem Knuth was working on! <a href="https://www-cs-faculty.stanford.edu/~knuth/papers/claude-cycles.pdf">Knuth</a></li>
</ul>

<ul>
<li><a href="https://simonwillison.net/tags/cognitive-debt/">Cognitive debt</a> is what Simon Willison calls it when we build (or, in my case, say/write) stuff we don&#39;t understand. The debt framing is apt. One solution is to generate a version intended for AI to read, and another for us. <a href="https://simonwillison.net/2026/Feb/17/release-notes-webcomic/">#</a> <a href="ai-coding.html"><code>#ai-coding</code></a> <a href="future.html"><code>#future</code></a></li>
</ul>

<ul>
<li>OpenAI released <a href="https://developers.openai.com/api/docs/models/gpt-realtime-1.5">gpt-realtime-1.5</a> and <a href="https://developers.openai.com/api/docs/models/gpt-audio-1.5">gpt-audio-1.5</a>. Buth are ~20% cheaper than the 4o versions, but 6.7x more expensive than <a href="https://developers.openai.com/api/docs/models/gpt-realtime-mini">gpt-realtime-mini</a>. 1 second is about 10 tokens, so an hour of audio input at $32/MTok is about $1.15. <a href="chatgpt.html"><code>#chatgpt</code></a> <a href="tts.html"><code>#tts</code></a></li>
</ul>

<ul>
<li>OpenAI has a <a href="https://developers.openai.com/api/docs/guides/websocket-mode/">Websocket mode</a> <a href="future.html"><code>#future</code></a></li>
</ul>

<ul>
<li><a href="https://github.github.com/gh-aw/setup/creating-workflows/">GitHub Agentic Workflows</a> lets you &quot;compile&quot; 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. <a href="https://gemini.google.com/share/d604275d42d7">Gemini</a> <a href="https://claude.ai/share/e4beeed2-e49e-49be-99bd-d6ce5678a7a7">Claude</a> <a href="ai-coding.html"><code>#ai-coding</code></a> <a href="automation.html"><code>#automation</code></a> <a href="code-agents.html"><code>#code-agents</code></a> <a href="github.html"><code>#github</code></a> <a href="markdown.html"><code>#markdown</code></a></li>
</ul>

<ul>
<li><a href="https://en.wikipedia.org/wiki/Timsort">Timsort</a> is one of the <a href="https://simonwillison.net/2026/Mar/11/sorting-algorithms/">fastest sorting algorithms</a>.</li>
</ul>

<ul>
<li>Switching from <a href="https://github.com/sharkdp/bat"><code>bat</code></a> to <a href="https://github.com/walles/moor"><code>moor</code></a> as a pager, since <code>bat</code> doesn&#39;t support wrapping via keyboard shortcuts. <a href="https://gemini.google.com/share/812da811d636">Gemini</a> <a href="github.html"><code>#github</code></a> <a href="markdown.html"><code>#markdown</code></a></li>
</ul>

<ul>
<li>How can an innovator learn accountability? &quot;I&#39;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?&quot; ANS: First, accountability is high value, so <strong>do it</strong>! Second, prefer a partner over building muscle. Build muscle only if output is checkable, has value, and customers will pay. <a href="https://claude.ai/share/d2c6a479-3aaf-402d-a2b9-318532158a92">Claude</a> | <a href="https://chatgpt.com/share/69b0e234-64b8-8003-93b5-f244b05a7545">ChatGPT</a> | <a href="https://gemini.google.com/share/38f8bab88751">Gemini</a> <a href="best-practices.html"><code>#best-practices</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a><ul>
<li>Commit publicly. Put your name on the output.</li>
<li>Commit to process (or narrowly defined output) rather than outcome.</li>
<li>Optimize with data, code, checklists, workflows, culture, etc.</li>
</ul>
</li>
</ul>

<ul>
<li>The &quot;Effort&quot; setting for AVIF files on <a href="https://squoosh.app/">Squoosh</a> doesn&#39;t reduce file size - it increases quality slightly (for a tiny <em>increase</em> in file size). So, set the quality to whatever file size you need and increase the effort for a slightly better quality. <a href="optimization.html"><code>#optimization</code></a></li>
</ul>

<ul>
<li><a href="https://en.wikipedia.org/wiki/George_P%C3%B3lya">Polya</a> believed in teaching problem-solving rather than solutions, i.e. teach <a href="https://en.wikipedia.org/wiki/How_to_Solve_It">How to Solve It</a>, not just <em>what</em> you get at the end. To me, this includes: <ul>
<li>Understand the problem (from different perspectives)</li>
<li>Plan (with different mental models)</li>
<li>Execute (the easy bit)</li>
<li>Look back (post-mortem, retrospectives, etc.)</li>
</ul>
</li>
</ul>

<ul>
<li><a href="https://github.com/browserless/browserless">Browserless</a> lets you run browsers via an API. Useful when you don&#39;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. <a href="https://gemini.google.com/share/3c547e57030b">Gemini</a> <a href="html.html"><code>#html</code></a> <a href="web-dev.html"><code>#web-dev</code></a></li>
</ul>
]]></description>
        </item>

        <item>
          <title>Things I Learned: Week of 2026-03-08</title>
          <link>https://til.s-anand.net/2026-03-08.html</link>
          <guid>https://til.s-anand.net/2026-03-08.html</guid>
          <pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate>
          <description><![CDATA[<ul>
<li>&quot;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.&quot; <a href="https://jack-clark.net/about/">Jack Clark</a> <a href="ai-coding.html"><code>#ai-coding</code></a> <a href="automation.html"><code>#automation</code></a> <a href="future.html"><code>#future</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a></li>
</ul>

<ul>
<li>Observability is more than logging. It&#39;s agents watching feeds and signalling insights! <a href="code-agents.html"><code>#code-agents</code></a></li>
</ul>

<ul>
<li>The <a href="https://developers.openai.com/api/docs/guides/prompt-guidance">GPT 5.4 prompt guidance</a> is a bit complex, but here&#39;s what it&#39;s broadly saying: (<a href="https://gemini.google.com/share/b359f1e5fb50">Gemini</a>) <a href="chatgpt.html"><code>#chatgpt</code></a> <a href="prompt-engineering.html"><code>#prompt-engineering</code></a><ul>
<li>It&#39;ll over-complicate answers and front-end design unless you tell it exactly how you want it</li>
<li>It&#39;ll keep checking with you or give up (e.g. on errors) unless you tell it otherwise, e.g. with checklists or rules</li>
</ul>
</li>
</ul>

<ul>
<li>Claude Code supports <a href="https://code.claude.com/docs/en/settings">32K output tokens</a> by default. Since I generate large data stories, I usually hit this limit and lose an entire session. Setting the environment variable <code>CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000</code> (which is the maximum) reduces this problem.</li>
</ul>

<ul>
<li><a href="https://github.com/googleworkspace/cli">Google Workspace CLI</a> lets you run <code>npx -y @googleworkspace/cli</code> as a single unified service for all Google Workspace APIs. It follows <a href="https://justin.poehnelt.com/posts/rewrite-your-cli-for-ai-agents/">agent-friendly CLI practices</a> which I turned into a <a href="https://github.com/sanand0/scripts/blob/live/agents/agent-friendly-cli/SKILL.md">SKILL.md</a>.</li>
</ul>

<ul>
<li>With AI now writing almost all of my code, I don&#39;t see much need to format it. Code formatters like <code>ruff</code>, <code>dprint</code>, <code>biome</code>, etc. are not relevant when AI will be reading and writing the code, not humans. I just format the prompts in Markdown. <a href="ai-coding.html"><code>#ai-coding</code></a> <a href="code-agents.html"><code>#code-agents</code></a> <a href="github.html"><code>#github</code></a> <a href="markdown.html"><code>#markdown</code></a></li>
</ul>

<ul>
<li>IITM has launched a <a href="https://study.iitm.ac.in/mg/">4 year degree in management &amp; data science</a>.</li>
</ul>

<ul>
<li>I&#39;ve been using <code>mise use -g ubi:owner/repo</code> to install GitHub packages. The <a href="https://mise.jdx.dev/dev-tools/backends/ubi.html"><code>ubi</code> backend</a> is now <a href="https://github.com/jdx/mise/discussions/7727">deprecated</a> in favor of the new <a href="https://mise.jdx.dev/dev-tools/backends/github.html"><code>github</code> backend</a>. This works fine for most repos, with edge cases like <a href="https://github.com/jtroo/kanata/">jtroo/kanata</a> which still require <code>ubi:jtroo/kanata</code> as of now. <a href="github.html"><code>#github</code></a></li>
</ul>

<ul>
<li>On the margin, I&#39;ll likely switch to <a href="https://github.com/casey/just"><code>just</code></a> as my task runner. <a href="https://claude.ai/share/9ec242a3-e0e8-4d82-b80b-fa8bac036ed4">Claude</a> <a href="future.html"><code>#future</code></a> <a href="github.html"><code>#github</code></a> <a href="markdown.html"><code>#markdown</code></a></li>
</ul>
]]></description>
        </item>
  </channel>
</rss>