<?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>uv on S Anand</title>
    <link>https://www.s-anand.net/blog/tag/uv/</link>
    <description>Recent content in uv on S Anand</description>
    <generator>Hugo -- 0.164.0</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 08 Feb 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.s-anand.net/blog/tag/uv/index.xml" rel="self" type="application/rss+xml" />
    <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 - 28 Dec 2025</title>
      <link>https://www.s-anand.net/blog/things-i-learned-28-dec-2025/</link>
      <pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-28-dec-2025/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/18693771-the-body-keeps-the-score&#34;&gt;The Body Keeps the Score&lt;/a&gt; by Bessel van der Kolk argues that trauma is stored in the body, not just the mind. &lt;a href=&#34;https://claude.ai/share/ac3b435d-7100-4de0-aceb-ac9f08fca467&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Trauma recall shuts down Broca&amp;rsquo;s area (speech). Trauma survivors literally struggle to talk about trauma.&lt;/li&gt;
&lt;li&gt;Our nervous system has a calm social engagement state, a fight-or-flight state, and a freeze or shutdown state. For trauma survivors, the nervous system gets stuck in fight-or-flight or shutdown. (Based on the contested Polyvagal Theory.)&lt;/li&gt;
&lt;li&gt;Childhood trauma leads to several major health problems - heart disease, autoimmune disorders, depression, addiction, &amp;hellip;&lt;/li&gt;
&lt;li&gt;Recalling traumatic memories while following a therapist&amp;rsquo;s finger with your eyes (EMDR) works.&lt;/li&gt;
&lt;li&gt;Yoga is promising but unproven. Neurofeedback (altering brainwave patterns with EEG feedback) even less proven.&lt;/li&gt;
&lt;li&gt;Clearly, trauma is stored in the body, not just the mind. We might need to rethink therapy.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/61538.The_Extended_Phenotype&#34;&gt;The Extended Phenotype&lt;/a&gt; by Richard Dawkins argues that genes shape not just the organism but the environment too. &lt;a href=&#34;https://claude.ai/share/3a62aa83-bad5-4b66-982a-23864df8d8f3&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;In The Selfish Gene, he proposed that organisms are &amp;ldquo;survival machines&amp;rdquo; for genes.&lt;/li&gt;
&lt;li&gt;In this book, he extends this idea to show how genes can influence the environment beyond the organism&amp;rsquo;s body.&lt;/li&gt;
&lt;li&gt;The dam of the beaver, the brain of an ant infected by a parasite, gut bacteria, are examples.&lt;/li&gt;
&lt;li&gt;Critics argue that this may be tautological. It&amp;rsquo;s hard to falsify. It&amp;rsquo;s more a mental model than a theory.&lt;/li&gt;
&lt;li&gt;Also, there&amp;rsquo;s critique (see below). The general view is that there&amp;rsquo;s merit to both perspectives.
&lt;ul&gt;
&lt;li&gt;Epigenetics: Dawkins argues that only genes are inherited. But some RNA, proteins, and epigenetic markers are also be inherited.&lt;/li&gt;
&lt;li&gt;Developmental plasticity: Dawkins downplays the role of environment in shaping phenotypes.&lt;/li&gt;
&lt;li&gt;Multi-level selection: Gould argues that selection happens the organism and group levels too.&lt;/li&gt;
&lt;li&gt;Niche construction: Dawkins says genes modify the environment. But environments modify genes too.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/33930.The_Structure_of_Evolutionary_Theory&#34;&gt;The Structure of Evolutionary Theory&lt;/a&gt; by Stephen Jay Gould expands on Darwinism, suggesting there&amp;rsquo;s more than only natural selection. &lt;a href=&#34;https://claude.ai/share/9a348162-5584-4ccd-834c-0538ff065f25&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Darwinism proposed continuous, smooth evolution. Gould proposes punctuated equilibrium - stable periods interrupted by rapid change. Fossils support this.&lt;/li&gt;
&lt;li&gt;Darwinism proposed selection of individuals. Gould proposes hierarchical selection - genes, individuals, groups, species. This is debated but has merit.&lt;/li&gt;
&lt;li&gt;Darwinism proposed every feature has a reason. Gould suggests some are byproducts of other adaptations (spandrels). Not every trait is adaptive. This is generally accepted.&lt;/li&gt;
&lt;li&gt;Darwinism proposed that humans would evolve if we replayed history. Gould argues that it&amp;rsquo;s chance. Current opinion is convergence, i.e. something like us would still likely evolve.&lt;/li&gt;
&lt;li&gt;(He probably didn&amp;rsquo;t need to write such a long book over 20+ years for this. Also, it led to the Darwin Wars, mostly with Dawkins.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/27276428-the-gene&#34;&gt;The Gene: An Intimate History&lt;/a&gt; by Siddhartha Mukherjee explains the history of genetics. &lt;a href=&#34;https://claude.ai/share/eeecb08e-1cac-46a6-8d0b-95027d815ef1&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Mendel&amp;rsquo;s pea experiment numbers seem too neat. He probably didn&amp;rsquo;t fudge it but stopped at good results.&lt;/li&gt;
&lt;li&gt;Rosalind Franklin&amp;rsquo;s X-ray diffraction images were key to discovering DNA structure, but she didn&amp;rsquo;t get enough credit.&lt;/li&gt;
&lt;li&gt;Recombinant DNA (1970s) lets us copy-paste genes between organisms. E.g.: we can find the DNA sequence for the insulin protein in humans, copy it into bacteria, and have bacteria produce insulin for us.
&lt;ul&gt;
&lt;li&gt;How it works:
&lt;ul&gt;
&lt;li&gt;Restriction enzymes &lt;strong&gt;cut&lt;/strong&gt; DNA at specific sequences. E.g. EcoRI (from E. coli) cuts DNA at GAATTC. Many cut with one strand overhangs that stick to complementary sequences, making assembly easy.&lt;/li&gt;
&lt;li&gt;DNA ligase &lt;strong&gt;paste&lt;/strong&gt; DNA strands together.&lt;/li&gt;
&lt;li&gt;Plasmids (circular DNA in bacteria) are vectors that carry foreign DNA into host cells. We can paste DNA to plasmids and introduce them into bacteria. Some viruses work similarly for animals / humans.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;This is useful for creating medicines, crops, and gene therapies.:
&lt;ul&gt;
&lt;li&gt;Medicines: e.g. insulin, human growth hormone, clotting factors for hemophilia, vaccines (Hep B), erythropoietin (EPO) for anemia, cancer therapies, focused antibodies, etc.&lt;/li&gt;
&lt;li&gt;Agriculture for genetically modified (GM) foods: pest/drought-resistant crops, biofortified foods (Golden Rice with Vitamin A), nitrogen-fixing plants, etc.&lt;/li&gt;
&lt;li&gt;Gene therapy: replacing faulty genes to treat genetic disorders (inherited blindness, immune deficiencies, blood disorders, muscular dystrophy, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;This is risky because of the unintended consequences, equity, and long-term risks:
&lt;ul&gt;
&lt;li&gt;Unintended consequences: Crop genes can spread. Herbicide-resistant weeds have emerged.&lt;/li&gt;
&lt;li&gt;Equity: Corporates control gene patents, concentrating power and limiting access. Only the rich can afford gene therapies.&lt;/li&gt;
&lt;li&gt;Long-term risks: Biological weapons, ecological disruption, new diseases, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The Human Genome Project (1990-2003) sequenced the entire human genome (3.2 billion base pairs). This helps identify disease genes, understand genetic variation, and develop personalized medicine.
&lt;ul&gt;
&lt;li&gt;They chopped the DNA into small pieces, multiplied them using bacteria, paired them with colored markers to read them, and reassembled the full sequence using overlapping regions.&lt;/li&gt;
&lt;li&gt;We have 20-25K genes. 99.9% is the same between humans. The 0.1% accounts for ALL human diversity.&lt;/li&gt;
&lt;li&gt;A lot of the genome is not for protiens, but for regulation, i.e. when and where genes are expressed.&lt;/li&gt;
&lt;li&gt;This enables pharmacogenomics, i.e. custom drugs. Read a genome and predict which drugs will work best.&lt;/li&gt;
&lt;li&gt;Also targeted cancer therapies, i.e. read the tumor genome and design smart bomb drugs.&lt;/li&gt;
&lt;li&gt;Ancestry and crime solving. Find distant cousins, catch the Golden State Killer, etc.&lt;/li&gt;
&lt;li&gt;We can sequence our genome for ~$600 in 24 hours and it&amp;rsquo;s falling. (Analysis is expensive.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;CRISPR (2010s) lets you edit genes precisely. These &amp;ldquo;Clustered Regularly Interspaced Short Palindromic Repeats&amp;rdquo; are in bacteria.
&lt;ul&gt;
&lt;li&gt;When bacteria survived a viral attack, they store a small piece of the enemy DNA in their own genome to recognize it.&lt;/li&gt;
&lt;li&gt;Cas9 is an enzyme that cuts DNA at a specific location suggested by Guide RNA. It unzips the DNA, matches the guide RNA to one strand, and cuts both strands.&lt;/li&gt;
&lt;li&gt;This disables the gene. Or, we can insert a new DNA sequence.&lt;/li&gt;
&lt;li&gt;This has been used to cure sickle cell anemia (which has a &amp;lsquo;GTG&amp;rsquo; instead of &amp;lsquo;GAG&amp;rsquo; in the hemoglobin gene, changing glutamic acid to valine) by editing bone marrow cells (not to fix this - that&amp;rsquo;s hard - but to reactivate a fetal hemoglobin gene). This is FDA approved.&lt;/li&gt;
&lt;li&gt;Scientists are trying to edit the Asian Elephant to include woolly mammoth traits, make spicy tomatoes, etc.&lt;/li&gt;
&lt;li&gt;Risks: CRISPR might cut a SIMILAR but unintended gene. We can edit genes for better humans (like in Gattaca) and create edited species.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Epigenetics is about how gene expression (not the DNA) changes based on environment and lifestyle.
&lt;ul&gt;
&lt;li&gt;Epigenetics has 2 mechanisms. First, DNA has tags (methyl groups) that turn genes on/off without changing the sequence.&lt;/li&gt;
&lt;li&gt;Second, DNA is wrapped around protein &amp;ldquo;spools&amp;rdquo; (histones). Tight wrapping hides genes, loose wrapping exposes them.&lt;/li&gt;
&lt;li&gt;In the Agouti Study, mice fed methyl-rich diets had brown, healthy babies. Mice without it had yellow, obese babies prone to cancer.&lt;/li&gt;
&lt;li&gt;Queen bees are identical to worker bees genetically, but royal jelly changes their epigenome to make them queens.&lt;/li&gt;
&lt;li&gt;Grandchildren of the 1944 Dutch famine survivors have higher obesity, heart disease risk. Epigenetic changes are inheritable.&lt;/li&gt;
&lt;li&gt;Epigenetics inherits via sperm by (a) retaining ~1-10% of histones wrapped around important genes, and (b) small RNA molecules that regulate gene expression.&lt;/li&gt;
&lt;li&gt;Epigenetics inherits via eggs by (a) retaining several histones and (b) impact of the fluid environment in the womb. Also, mother eggs were developing when she was a fetus in grandmother&amp;rsquo;s womb, so grandmother&amp;rsquo;s environment matters too. Mother epigenetics affects 3 generations. Fathers affect only 2.&lt;/li&gt;
&lt;li&gt;There are ~100-200 imprintable genes that determine whether the dad&amp;rsquo;s or the mom&amp;rsquo;s gene is expressed. Growth is one example. E.g. dad IGF2 gene pushes for growth, while mom H19 gene limits growth to conserve resources. Lions have strong &amp;ldquo;grow/stop&amp;rdquo; genes. Tigers have weak ones. Ligers (Lion dad, Tiger mom) are huge. Tigons are small.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Eugenics is about improving humans by controlling breeding.
&lt;ul&gt;
&lt;li&gt;Invented by Francis Galton (Darwin&amp;rsquo;s cousin) who founded psychometrics (IQ tests), fingerprinting, correlations, questionnaires, anthropometry (measuring humans), and a female attractiveness map of the UK (London &amp;raquo; Aberdeen).&lt;/li&gt;
&lt;li&gt;He suggested that the best humans breed, and the worst be prevented. The US and many countries adopted this (1900s). E.g. Buck v. Bell (1927) said forced sterilization of &amp;ldquo;feeble-minded&amp;rdquo; people was legal. Oliver Wendell Holms: &amp;ldquo;Three generations of imbeciles is enough.&amp;rdquo; The last euginic law sterilization in the US was in 1981. California prisons sterilized females (2006-2010).&lt;/li&gt;
&lt;li&gt;Nazi Germany industrialized this. Deaf, blind, mentally ill, then eliminate gene pools.&lt;/li&gt;
&lt;li&gt;CRISPR and gene editing lets us design babies - another form of eugenics.&lt;/li&gt;
&lt;li&gt;Iceland and Denmark have eliminated Down syndrome births through screening and selective termination. It&amp;rsquo;s a bit controversial.
&lt;img alt=&#34;Sketch note&#34; loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2025-12-27-genetics.webp&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/57517317-immune&#34;&gt;Immune: A Journey Into the Mysterious System That Keeps You Alive&lt;/a&gt; by Philipp Dettmer explains the war our immune system wages daily. &lt;a href=&#34;https://claude.ai/share/71db0b01-f112-4209-a163-793781eb159e&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Immunology is, as science writer Ed Yong memorably put it, &amp;ldquo;where intuition goes to die.&amp;rdquo; It&amp;rsquo;s the kind of subject that makes medical students weep and practicing physicians throw up their hands.&lt;/li&gt;
&lt;li&gt;We have an &lt;strong&gt;innate immune system&lt;/strong&gt;. Genetically programmed for common pathogens. Fast, but limited. Like:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Macrophages&lt;/strong&gt;: beat cops that patrol tissues and eat dozens of bacteria before dying.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Neutrophils&lt;/strong&gt;: SWAT team that rush in, spray toxic chemicals (with collateral damage), and die. They rip out their own DNA to make nets that trap bacteria!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Natural killer cells&lt;/strong&gt;: bouncers that kill cells without an ID or have been infected (cancer, virus).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dendritic cells&lt;/strong&gt;: spies that capture pieces of invaders and present them to the adaptive immune system.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mast cells&lt;/strong&gt;: alarms that explode and release histimine (causing inflammation) to call for backup.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eoisinophils&lt;/strong&gt;: bombers that drop toxic enzymes to melt parasitic worms too large to eat.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;adaptive immune system&lt;/strong&gt; is smarter and slower (days to weeks). It generates millions of cells with random DNA to create a 3D sheet with loops to grab specific antigens. It combines:
&lt;ul&gt;
&lt;li&gt;~40 Variable segments: &amp;ldquo;gloves&amp;rdquo; of ~95 amino acids to grab antigens. Like a 4x4 lego brick.&lt;/li&gt;
&lt;li&gt;~25 Diversity segments: &amp;ldquo;fingers&amp;rdquo; of ~15 amino acits for the glove to grab better. Like a 1x2 lego piece.&lt;/li&gt;
&lt;li&gt;~6 Joining segments: &amp;ldquo;tips&amp;rdquo; of 3-5 amino acids to connect glove to arm. Like a 1x1 stud.&lt;/li&gt;
&lt;li&gt;It randomly chews off a a bit from the ends and adds a few random bits to create ~10^15 potential combinations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;When a new cell is born, the Thymus (near the upper chest) tests if it can attach to invaders and whether it&amp;rsquo;s peaceful to body cells. Failing cells are killed. ~2% survive and go to the lymph nodes.&lt;/li&gt;
&lt;li&gt;These can be:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Helper T cells&lt;/strong&gt;: generals that coordinate the immune response by activating B cells, killer T cells, and macrophages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Killer T cells&lt;/strong&gt;: soldiers that inject toxins into infected cells to kill them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B cells&lt;/strong&gt;: factories that churn out antibodies that stick to invaders, gum them up, and tag them for destruction.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;When we get sick, the dendritic cell grabs an antigen (piece of an invader), sends it to the nearest lymph node, and if a Helper T cell recognizes it, it activates the B cells and Killer T cells specific to that invader. This can take days, and multiplies ~1,000x every ~2 days.&lt;/li&gt;
&lt;li&gt;Also, the B cells divide with intentional mutations and evolve to find mutants that catch invaders better. Better fits multiply faster.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Immune boosting&amp;rdquo; is a misnomer. We really want balance, and diet, fruit, vitamins, antioxidants, probiotics, sleep, exercise, stress reduction, social connection, etc. help. But vaccines are the best way to train the immune system.&lt;/li&gt;
&lt;li&gt;Every breath and meal draws in invaders. They&amp;rsquo;re catalogued and tolerated or destroyed. It&amp;rsquo;s incredible!&lt;/li&gt;
&lt;li&gt;Measles reduces immune memory 11-73%, wiping out years of immunity to other diseases. So, when I had measles in 2009 &lt;em&gt;after&lt;/em&gt; my splenectomy in 2004, I had a double whammy. Damn! Didn&amp;rsquo;t know that.
&lt;img alt=&#34;Sketch note&#34; loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2025-12-27-immune-system.webp&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Some books, like &lt;a href=&#34;https://www.goodreads.com/book/show/30753738-the-choice&#34;&gt;The Choice&lt;/a&gt;, aren&amp;rsquo;t meant to be summarized. I can&amp;rsquo;t even summarize the &lt;a href=&#34;https://claude.ai/share/a972c2a2-ab27-4470-b2b2-74c4d7a92eea&#34;&gt;summary&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/22478.The_Origin_of_Consciousness_in_the_Breakdown_of_the_Bicameral_Mind&#34;&gt;The Origin of Consciousness in the Breakdown of the Bicameral Mind&lt;/a&gt; by Julian Jaynes proposes that introspective consciousness emerged ~3,000 years ago. Unproven but unfalsified. &lt;a href=&#34;https://claude.ai/share/b2cea7b2-97b4-4d16-98dd-4359b0965ba9&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;He theorizes that until ~3,000 years ago, the right part of the brain generated &amp;ldquo;voices&amp;rdquo; the left part obeyed. The Iliad heard voices. The Odyssey has a self-aware hero.&lt;/li&gt;
&lt;li&gt;That&amp;rsquo;s why ancients across cultures heard gods&amp;rsquo; voices. Idols were meant to trigger these voices. Kings literally spoke for the gods. People didn&amp;rsquo;t feel responsible for their actions.&lt;/li&gt;
&lt;li&gt;With population growth, writing, and the Bronze Age collapse, humans were forced to adopt alternate cognitive strategies, leading to consciousness.&lt;/li&gt;
&lt;li&gt;That was also when philosophy, introspective religions, and new forms of literature emerged across the world. The Axial Age.&lt;/li&gt;
&lt;li&gt;Schizophrenia may be a vestige of this bicameral mind, where the right brain&amp;rsquo;s &amp;ldquo;voices&amp;rdquo; are misinterpreted by the left brain. Hypnosis, oracles, and creative muses are other remnants.&lt;/li&gt;
&lt;li&gt;Neurological support is weak but literary/cultural analysis is strong. His theory hasn&amp;rsquo;t been falsified.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/590652.The_Slight_Edge&#34;&gt;The Slight Edge&lt;/a&gt; by Jeff Olson suggests small, consistently repeated actions. &lt;a href=&#34;https://claude.ai/share/28107cd7-d653-4f6e-a85b-9038b13ccfcb&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Small actions compound &lt;strong&gt;exponentially&lt;/strong&gt;. But what&amp;rsquo;s easy to do is also easy to skip.&lt;/li&gt;
&lt;li&gt;Quitters stop because it feels like small actions don&amp;rsquo;t matter - leading to exponential decay.&lt;/li&gt;
&lt;li&gt;Willpower is overrated; time is underrated.&lt;/li&gt;
&lt;li&gt;What to do: Show up. Consistently. Even if no one&amp;rsquo;s watching. Commit long-term. With optimism and purpose. Pay the price.&lt;/li&gt;
&lt;li&gt;Also: Happiness isn&amp;rsquo;t just a result of success. It&amp;rsquo;s often a cause. And habits also influence people around us.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/34466963-why-we-sleep&#34;&gt;Why We Sleep&lt;/a&gt; by Matthew Walker elevates the importance of sleep - but also exaggerates. &lt;a href=&#34;https://claude.ai/share/c11436d7-ec8b-4624-90fd-9f2e2d8c42c2&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Sleep has phases. In the first half, deep sleep (NREM) dominates. It consolidates memories. Then REM dominates. Dreams, connections, creativity, emotional regulation happen here. It resets brain and body health.&lt;/li&gt;
&lt;li&gt;Sleep deprivation worsens focus, memory, immunity, metabolism, heart health.&lt;/li&gt;
&lt;li&gt;Phones, caffeine (5-7 hours before), alcohol, early alarms, irregular schedules, late meals, warm bedrooms - all hurt sleep quality.&lt;/li&gt;
&lt;li&gt;But a lot of claims are exaggerated, unproven, or false. Sleep loss isn&amp;rsquo;t a WHO epidemic. More sleep != longer life, it can shorten it (~7 hours seems optimal). Sleeping &amp;lt; 6-7 hours doesn&amp;rsquo;t impact cancer. Modern societies don&amp;rsquo;t sleep less than historically. Sleep deprivation helps depression. He also removed inconvenient data from a graph.&lt;/li&gt;
&lt;li&gt;BTW, anxiety about lack of sleep worsens sleep. So, chill.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/25663961-how-not-to-die&#34;&gt;How Not To Die&lt;/a&gt; by Michael Greger suggests a plant-only diet, but evidence indicates otherwise. &lt;a href=&#34;https://claude.ai/chat/26cd4580-ede9-45e0-909e-2c58946458d1&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Eat more plants, less processed food, cook meat at lower temperatures, and exercise. This much is valid.&lt;/li&gt;
&lt;li&gt;Unlike his claims, Omega-3s help heart disease. Milk reduces asthma risk. Soy doesn&amp;rsquo;t seem to benefit non-Asians. Fish prevent dementia.&lt;/li&gt;
&lt;li&gt;He buries B12 deficiency risk. Overall, studies are cherry-picked and even contradicts his statements.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/31170723-behave&#34;&gt;Behave&lt;/a&gt; by Robert Sapolsky reasons our actions across seconds (neurological), hours (hormones, environment), months (neuroplasticity, learning), decades (genes, culture), millenia (evolution). &lt;a href=&#34;https://claude.ai/share/919495bd-8714-4a6f-8bae-e557897105db&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;The Brain
&lt;ul&gt;
&lt;li&gt;The amygdala detects uncertainty, not just fear/aggression. The unfamiliar triggers it. But the response diminishes with exposure. It can be modulated by the prefrontal cortex.&lt;/li&gt;
&lt;li&gt;The prefrontal cortex plans. It develops late and can override amygdala responses. It is impaired by stress, fatigue, alcohol, etc. It can plan genocide / retribution as well as peace.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The Hormone
&lt;ul&gt;
&lt;li&gt;Testosterone is an amplifier. It amplifies agression but also generosity! It lowers threshold for context-appropriate behaviour.&lt;/li&gt;
&lt;li&gt;Oxytocin promotes in-group trust, but promotes out-group hostility. It&amp;rsquo;s the molecule of tribalism, not love.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The Childhood
&lt;ul&gt;
&lt;li&gt;Early stress triggers epigenetic changes that makes the amygdala hyperactive, impairs prefrontal cortex, and alters stress hormone regulation.&lt;/li&gt;
&lt;li&gt;This leads to impulsivity, aggression, anxiety, depression, addiction, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The Evolution
&lt;ul&gt;
&lt;li&gt;We are naturally hierarchical and tribal.&lt;/li&gt;
&lt;li&gt;Thanks to language, we can expand / contract our tribes to include / exclude anyone (or anything) based on arbitrary stories.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Let&amp;rsquo;s approach wrongdoing with humility. Punishment and rewards CAN shape behavior. But a focus on prevention over retribution may help more.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/59554236-price-of-the-modi-years&#34;&gt;Price of the Modi Years&lt;/a&gt; by Aakar Patel suggests that most metrics worsened under Modi. True, but these also seem cherry-picked. &lt;a href=&#34;https://claude.ai/share/af1b7127-ef2e-4a5b-a969-6fda160a542a&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Announcements had more impact than executions.
&lt;ul&gt;
&lt;li&gt;99% of the 15.3 lakh crores demonetized came back to banks, laundered.&lt;/li&gt;
&lt;li&gt;Manufacturing GDP share fell from 16% to 13% after Make in India was launched. Employment fell from 5.1 to 2.7 cr.&lt;/li&gt;
&lt;li&gt;Press freedom rank fell from 140 (2014) to 151 - and is now 159.&lt;/li&gt;
&lt;li&gt;Democracy rank fell freom 27 (2014) to 41 (2021). India is classified as a &amp;ldquo;Flawed Democracy&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Human Development Index is stagnant at 130.&lt;/li&gt;
&lt;li&gt;Global Hunger rank fell freom 55 / 76 (2014) to 102 / 123 (2024?).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;But:
&lt;ul&gt;
&lt;li&gt;Economic Freedom rank rose from 112 (2014) to 84 (2023?).&lt;/li&gt;
&lt;li&gt;Digital payments, rural electrification, toilet construction, etc. aren&amp;rsquo;t mentioned.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/115013.The_Ants&#34;&gt;The Ants&lt;/a&gt; by Bert Hölldobler, Edward O. Wilson is the only science textbook (!) to win a Pulitzer. &lt;a href=&#34;https://claude.ai/share/efe424e5-cbf4-474d-ba20-ccb420c5c9cb&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Ants are only ~20% of human biomass, not 100% as the book claims, but that&amp;rsquo;s 2.5m ants per human!&lt;/li&gt;
&lt;li&gt;⭐ Sterile ants, which are all female, help the queen reproduce instead of having their own kids.
&lt;ul&gt;
&lt;li&gt;Ants, bees, wasps, etc. are haplodiploid, i.e. females have father + mother genes, males develop from unfertilized eggs (only mother genes).&lt;/li&gt;
&lt;li&gt;So, sisters share 75% of genes, more than 50% with their own kids. Helping mothers make sisters is better than having kids!&lt;/li&gt;
&lt;li&gt;(And if this isn&amp;rsquo;t an alien civilization, what is? We don&amp;rsquo;t need sci-fi. Nature is weirder than fiction.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;But their math doesn&amp;rsquo;t hold up!
&lt;ul&gt;
&lt;li&gt;If the queen produces 50% brothers (with 25% common genes) and 50% sisters (75% common genes), the average is 50% common genes, same as having kids.&lt;/li&gt;
&lt;li&gt;But building a nest is hard, specialization is efficient, etc. So ants stay sterile and help the colony.&lt;/li&gt;
&lt;li&gt;BTW, this gene math only works if the queen is 100% monogamous - so they are, or at least, were, until evolution locked it in.&lt;/li&gt;
&lt;li&gt;(Making nature one-step less alien. But still weird.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Epigenetics determines caste. More food or specific food (e.g. royal jelly in bees) changes gene expression of the same DNA.
&lt;ul&gt;
&lt;li&gt;When a queen dies, some ants (e.g. Indian jumping ants) can reprogram a worker ant into a queen through diet!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Leafcutter ants have been &amp;ldquo;farming&amp;rdquo; for 50 million years. Rather, are part of an agricultural symbiosis.
&lt;ul&gt;
&lt;li&gt;They cut leaves and feed it to a fungus they cultivate in their nests.&lt;/li&gt;
&lt;li&gt;They protect the fungus from pests using antibiotics produced by bacteria living on their bodies. They clear decay and weeds.&lt;/li&gt;
&lt;li&gt;They can&amp;rsquo;t live without the fungus because it produces a nutrient (Arginine) that they need but can no longer make themselves.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ants communicate using pheromones, touch, and sound.
&lt;ul&gt;
&lt;li&gt;Pheromones can communicate species, colony, caste, reproductive status, alarm, food trail, etc. These evaporate unless reinforced.
&lt;ul&gt;
&lt;li&gt;They have a bigger, more advanced, brain region than other insects. It&amp;rsquo;s not multiple brain parts coordinating.&lt;/li&gt;
&lt;li&gt;Using CRISPR to knock out pheromone receptors makes ants unable to communicate. Mutant ants wander aimlessly until killed by the colony.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;They tap each other with their antennae: to taste skin for identification, or to beg for regurgitated food.&lt;/li&gt;
&lt;li&gt;Some ants have a scraper on their waist that they rub against their abdomen. Triggers &amp;ldquo;emergency alarm&amp;rdquo;, e.g. &amp;ldquo;I&amp;rsquo;m buried&amp;rdquo; or &amp;ldquo;Help me cut!&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ant colonies are superorganisms, i.e. agents that work together to produce emergent behavior. They have sterile castes. Only ants, bees, naked mole rats, &amp;hellip; qualify.
&lt;ul&gt;
&lt;li&gt;The nest is like a giant lung. Passive ventilation sucks CO2 from top chimneys and brings in O2 from lower entrances. They regulate temperature by opening/closing nest entrances. They send workers out for water to evaporatively cool the nest.&lt;/li&gt;
&lt;li&gt;They circulate nutrients by vomiting food into each others mouths. (Ants have two stomachs - one for themselves, one for sharing.) Ants can&amp;rsquo;t digest meat but larvae can, so they feed meat to larvae and share the digested food. Larvae act like a liver.&lt;/li&gt;
&lt;li&gt;They have an immune system. Sanitation squads carry dead ants far away. Fungally infected ants leave the nest and die alone. Infected pupae are killed by workers.&lt;/li&gt;
&lt;li&gt;They have a neural system. Memory is stored in pheromone trails.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ant politics exists. E.g. Workers destroy eggs laid by other workers, protect sister-laid eggs, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/52163526-the-cancer-code&#34;&gt;The Cancer Code&lt;/a&gt; by Jason Fung suggests that cancer might be about cells acting selfishly, triggered by body environment. &lt;a href=&#34;https://claude.ai/share/d0ee6a30-6776-40a8-a409-a1d7312ef79a&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Metastatis is when cancer cells spread from the tumor to other body parts. It kills by eating up resources, mechanical obstruction, poisoning, triggering clots, or reducing immunity.&lt;/li&gt;
&lt;li&gt;We used to cut (surgery), burn (radiation), or poison (chemotherapy) cancer cells.&lt;/li&gt;
&lt;li&gt;Then we learnt cancer cells were mutations and targeted therapies work (expensively). But it treated &amp;lt;5% of cancers.&lt;/li&gt;
&lt;li&gt;Paul Davies (!) suggested cancer is when cells devolve to our unicellular ancestry. Cells that should die for collective good instead multiply. This theory is gaining ground but not proven.&lt;/li&gt;
&lt;li&gt;Devolution is enabled by the body environment. For example:
&lt;ul&gt;
&lt;li&gt;Insulin resistance. Sugar matters less. It&amp;rsquo;s the insulin resistance.&lt;/li&gt;
&lt;li&gt;Oxidative stress, i.e. not enough antioxidants to neutralize the free radicals. (Free radicals are molecules with 1 extra or missing electron. They damage cells. Mitochondria misfires and creates free radicals 0.2-2% of the time. Smoking, pollution, radiation, stress increase free radicals. Immune cells also create free radicals to kill cells.)&lt;/li&gt;
&lt;li&gt;Chronic inflammation. Leads to oxidative stress.&lt;/li&gt;
&lt;li&gt;Hormonal imbalances. E.g. high estrogen, testosterone.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Immunotherapy (teaching the immune system to attack cancer cells) is promising.&lt;/li&gt;
&lt;li&gt;Weight loss might prevent / reverse cancer. Evidence is preliminary.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/38227753-the-diabetes-code&#34;&gt;The Diabetes Code&lt;/a&gt; by Jason Fung suggests less intake to reverse Type 2 Diabetes. &lt;a href=&#34;https://claude.ai/share/ca706f64-ff53-467e-9e61-b4c8367790f1&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Insulin pushes sugar into cells for energy storage.&lt;/li&gt;
&lt;li&gt;In Type 1 Diabetes, immune cells attack insulin-producing cells. Patients need insulin to survive.&lt;/li&gt;
&lt;li&gt;In Type 2 Diabetes, high carbs -&amp;gt; high insulin -&amp;gt; cells become insulin-resistant. Feeding them insulin can harm, sometimes.&lt;/li&gt;
&lt;li&gt;Weight loss can definitely reverse it. Reducing carbs &amp;amp; preferring whole foods helps. Intermittent fasting likely helps.&lt;/li&gt;
&lt;li&gt;But &amp;ldquo;sugar is the main driver of Type 2 Diabetes&amp;rdquo; isn&amp;rsquo;t research-robust. Genetics, sleep, stress, gut microbiome, socioeconomics contribute. Diet &amp;amp; fasting are hard to sustain, and isn&amp;rsquo;t for everyone.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/24945404-the-obesity-code&#34;&gt;The Obesity Code&lt;/a&gt; by Jason Fung suggests whole foods and intermittent fasting. &lt;a href=&#34;https://claude.ai/share/2e102fee-04ab-4c78-80e8-e8d77cc3105c&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Eating whole foods (rather than processed foods) does help.&lt;/li&gt;
&lt;li&gt;Fasting does help. (But maybe no more than reduced calorie intake, and sustaining it could be harder.)&lt;/li&gt;
&lt;li&gt;But his claim that high insulin -&amp;gt; obesity isn&amp;rsquo;t research-robust. It may be correlation not causation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⭐ &lt;a href=&#34;https://www.goodreads.com/book/show/57933312-how-minds-change&#34;&gt;How Minds Change&lt;/a&gt; suggests that friendship, more than facts, changes opinions. Sometimes your own, too. &lt;a href=&#34;https://claude.ai/share/25283a55-9f6f-408d-9080-1a7b1c3d8a3e&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Facts backfire (though less often than the book indicates). Challenging identity is a survival threat.&lt;/li&gt;
&lt;li&gt;Asking genuine questions and actually listening enables change. (It might change you, too.)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;How did you come to believe that?&amp;rdquo; &amp;ldquo;How confident are you (1-10)?&amp;rdquo; &amp;ldquo;What would it take to move that number?&amp;rdquo; helps introspect.&lt;/li&gt;
&lt;li&gt;Relationships create safety to question beliefs. Lasting change requires somewhere new to belong.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;My most used GitHub Copilot feature is &lt;a href=&#34;https://docs.github.com/en/copilot/how-tos/get-code-suggestions/get-ide-code-suggestions&#34;&gt;tab completion&lt;/a&gt;. It&amp;rsquo;s surprisingly effective for note-taking (which I do more than code-writing ever since coding agents arrived.) &lt;code&gt;Tab&lt;/code&gt; completes the suggestion and &lt;code&gt;Esc&lt;/code&gt; cancels it. I&amp;rsquo;m beginning to use &lt;code&gt;Alt + ]&lt;/code&gt; and &lt;code&gt;Alt + [&lt;/code&gt; to cycle through multiple suggestions. I&amp;rsquo;m amazed that it can act as a:
&lt;ul&gt;
&lt;li&gt;Calculator/convertor. E.g. &amp;ldquo;9 * 86400 =&amp;rdquo;, &amp;ldquo;5 miles in km is&amp;rdquo; or &amp;ldquo;3 days ago, i.e. on&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Referrer. E.g. &amp;ldquo;The Attention Is All You Need paper at https://&amp;rdquo; or &amp;ldquo;The Pulitzer winning book Ants by&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Educator. E.g. &amp;ldquo;The top 3 causes of cancer are&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Ideator. E.g. &amp;ldquo;5 wild ideas for sneakily improving productivity are&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;If you see a smooth, glassy patch surrounded by ripples, it’s usually because a thin surface film or local surface flow is damping the tiny wind-made waves there, not because the water underneath is calmer. &lt;a href=&#34;https://chatgpt.com/share/694d1b9b-c804-8003-b76f-818515635766&#34;&gt;ChatGPT&lt;/a&gt;
&lt;img alt=&#34;Glassy patch surrounded by ripples&#34; loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2025-12-25-calm-water-amidst-turbuence-singapore-gardens-by-the-bay.webp&#34;&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/43723901-lifespan&#34;&gt;Lifespan&lt;/a&gt; and &lt;a href=&#34;https://www.goodreads.com/book/show/34458942-the-telomere-effect&#34;&gt;The Telomere EFfect&lt;/a&gt; suggest exercise, sleep, eat well, manage stress to live longer. &lt;a href=&#34;https://claude.ai/share/f7555a9c-3f6a-4f3c-a56a-ee3d9384d324&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Actually, they mainly suggest sirtuins, resveratrol, NMN, telomere-lengthening lifestyles, etc. to defeat aging. None of this is research-proven. The traditional advice is the only proven stuff.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/61153739-outlive&#34;&gt;Outlive&lt;/a&gt; suggests exercise for living longer - and to make sure your life is worth extending! &lt;a href=&#34;https://claude.ai/share/f7555a9c-3f6a-4f3c-a56a-ee3d9384d324&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Medicine focuses more on cure than prevention.&lt;/li&gt;
&lt;li&gt;Exercise has the highest impact on longevity. Especially zone 2 cardio and body strength (e.g. measure grip strength).&lt;/li&gt;
&lt;li&gt;apoB under 80mg/dL is a better indicator of heart risk than LDL.&lt;/li&gt;
&lt;li&gt;But make sure your life is worth living!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Katy Milkman&amp;rsquo;s &lt;a href=&#34;https://www.goodreads.com/book/show/55655032-how-to-change&#34;&gt;How to Change&lt;/a&gt; suggests that biases are hard to change. Engineer environments and habits instead. &lt;a href=&#34;https://claude.ai/share/c29c127f-6fe1-480f-b0dc-fc764e5f7ece&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Breaking bad habits is hard. Start on a New Year, birthday, festivals, etc. for ease.&lt;/li&gt;
&lt;li&gt;Breaks in continuity erase good habits. Be flexible for continuity (e.g. 7/week is more flexible than 1/day is more flexible than once every morning).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⭐ Daniel Kahnemann&amp;rsquo;s &lt;a href=&#34;https://www.goodreads.com/book/show/55339408-noise&#34;&gt;Noise&lt;/a&gt; suggests experts are more random than we think. &lt;a href=&#34;https://claude.ai/share/9bed712b-05e3-4f37-ae21-78af350e2fc5&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;When execs (or students) complain, &amp;ldquo;Oh, but the LLM aren&amp;rsquo;t consistent!&amp;rdquo; &amp;ndash; nor are humans!&lt;/li&gt;
&lt;li&gt;Get multiple INDEPENDENT opinions&lt;/li&gt;
&lt;li&gt;Use CHECKLISTS to reduce variability&lt;/li&gt;
&lt;li&gt;Use ALGORITHMS to spot outliers&lt;/li&gt;
&lt;li&gt;Acknowledge luck, good or bad. Leverage serendipity&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Notes from &lt;a href=&#34;https://github.com/sindresorhus/awesome-npm&#34;&gt;awesome-npm&lt;/a&gt; &lt;a href=&#34;https://chatgpt.com/c/694cb4a1-786c-8321-b8e0-2fd58d545480&#34;&gt;#&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;npm run command --silent&lt;/code&gt; suppresses npm output, only shows script output.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npm start&lt;/code&gt; and &lt;code&gt;npm test&lt;/code&gt; are the conventions to run the app / server and test. Use these more.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npx --package=node-bin@6.2.0 -- node --version&lt;/code&gt; lets you run any node version without nvm, etc.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npm link&lt;/code&gt; installs package in the current directory as a global. You can link to it from any other package via &lt;code&gt;npm link &amp;lt;dirname&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npm install owner/repo&lt;/code&gt; installs directly from GitHub.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npm ls --depth=2&lt;/code&gt; shows dependency tree up to depth 2.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rclone mount&lt;/code&gt; over SFTP is the worst-case for thousands of tiny files. &lt;em&gt;Every&lt;/em&gt; &lt;code&gt;stat&lt;/code&gt;, &lt;code&gt;readdir&lt;/code&gt;, &lt;code&gt;unlink&lt;/code&gt; is an extra network round-trips, taking ~1s per operation. I&amp;rsquo;m switching to rsync instead for my &lt;a href=&#34;https://www.hetzner.com/storage/storage-box/&#34;&gt;Hetzner storage box&lt;/a&gt;. &lt;a href=&#34;https://chatgpt.com/c/694bba1e-2748-8320-94d9-a29213cc5194&#34;&gt;#&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Context: I set it up via: &lt;code&gt;rclone config create hetzner sftp host $USER.your-storagebox.de user $USER shell_type unix&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&amp;hellip; and mounted it via &lt;code&gt;rclone mount hetzner:/ /mnt/hetzner --vfs-cache-mode full --vfs-cache-max-age 24h --vfs-cache-max-size 10G&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/38728977-the-molecule-of-more&#34;&gt;The Molecule of More&lt;/a&gt; and &lt;a href=&#34;https://www.goodreads.com/book/show/55723020-dopamine-nation&#34;&gt;Dopamine Nation&lt;/a&gt; recommend pain as a down-payment for sustained pleasure. &lt;a href=&#34;https://claude.ai/chat/ecceca87-84f7-43a9-af60-e036ddfef471&#34;&gt;Claude&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Dopamine drives wanting/dread, which is decoupled from like/dislike.&lt;/li&gt;
&lt;li&gt;It also does a bunch of other things like learning (maps actions to rewards), attention, etc.&lt;/li&gt;
&lt;li&gt;Low dopamine =&amp;gt; focus, medium =&amp;gt; creativity, high =&amp;gt; noise.&lt;/li&gt;
&lt;li&gt;Brain runs a thermostat. Pleasure/pain trigger a delayed, long-decay counter-reward that we feel as &amp;ldquo;That&amp;rsquo;s it?&amp;rdquo; or &amp;ldquo;Whew!&amp;rdquo;. Abstention just resets it. Meditation just makes you aware.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pain-upfront leads to long-decay pleasure&lt;/strong&gt;: learning/teaching, creative struggle, exercise, ice showers/sauna, fasting, spicy food, cleaning, tough conversations, apology, forgiveness, public speaking, dating, deep work, delayed gratification, investing, grief, sacrifice, boredom, etc.&lt;/li&gt;
&lt;li&gt;Surprises spike dopamine: low standards, variable rewards, interleaved work, artificial constraints, environment/social rotation, progressive difficulty, &amp;hellip;&lt;/li&gt;
&lt;li&gt;Dopamine mechanics are complex. Don&amp;rsquo;t trust any theory just yet.&lt;/li&gt;
&lt;li&gt;⭐ Pain is the down payment. Surprise is the interest. Recovery is the compounding period.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/7640261-sex-at-dawn&#34;&gt;Sex at Dawn&lt;/a&gt; claims humans evolved as promiscuous and non-jealous, that monogamy is recent. It&amp;rsquo;s partly valid (sexuality is more flexible and context-dependent than monogamy / nuclear families) but is also over-simplified with cherry-picked evidence. &lt;a href=&#34;https://claude.ai/share/417070cf-db71-4f5b-8415-21083428b7df&#34;&gt;Claude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Discovered the &lt;code&gt;--extreme&lt;/code&gt; option for &lt;code&gt;xz&lt;/code&gt;, which compresses even better (but slower). For archives, I now use &lt;code&gt;xz -9e -vv file&lt;/code&gt;. Single-threaded is slower but better for compression, so don&amp;rsquo;t use &lt;code&gt;-mt&lt;/code&gt;. For ultra-large files, add &lt;code&gt;--lzma2=dict=256MiB&lt;/code&gt; or similar, keeping dictionary size smaller than RAM and file size. &lt;a href=&#34;https://chatgpt.com/c/694a1d73-88a8-8320-8e3d-e8335eb52b37&#34;&gt;#&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;You can specify a git repo as an inline script dependency directly in a &lt;code&gt;.py&lt;/code&gt; file when running with &lt;code&gt;uv&lt;/code&gt;! &lt;a href=&#34;https://claude.ai/chat/e5c44b76-4b23-4765-aeb1-85263cac423d&#34;&gt;#&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-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# /// script&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;# dependencies = [&amp;#34;git+https://github.com/owner/repo.git&amp;#34;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ///&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Excuses are a great way of making us feel better. They are synonyms for &amp;ldquo;reasons&amp;rdquo;. They reduce guilt/anxiety, lower standards &amp;ndash; all of which could be considered bad &amp;ndash; but if we are aware of it and use it consciously, it can help us move forward. (Rare TIL from my own brain, not an LLM.)&lt;/li&gt;
&lt;li&gt;You can open AI chatbots with a pre-populated query using these URLs. Gemini, notably, does not yet support this.
&lt;ul&gt;
&lt;li&gt;ChatGPT: &lt;a href=&#34;https://chatgpt.com/?q=%25s&#34;&gt;https://chatgpt.com/?q=%s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Claude: &lt;a href=&#34;https://claude.ai/new?q=%25s&#34;&gt;https://claude.ai/new?q=%s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Google AI Mode: &lt;a href=&#34;https://www.google.com/search?udm=50&amp;amp;q=%25s&#34;&gt;https://www.google.com/search?udm=50&amp;amp;q=%s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Grok: &lt;a href=&#34;https://grok.com/?q=hi&#34;&gt;https://grok.com/?q=hi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mistral: &lt;a href=&#34;https://chat.mistral.ai/chat?q=%25s&#34;&gt;https://chat.mistral.ai/chat?q=%s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Perplexity: &lt;a href=&#34;https://www.perplexity.ai/search?q=%25s&#34;&gt;https://www.perplexity.ai/search?q=%s&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A clever trick to prevent voice models from speaking too quickly. Use a &amp;ldquo;stay silent&amp;rdquo; function call. &lt;a href=&#34;https://x.com/ilanbigio/status/1870218818288558396?t=Bo-BdgJ0hFKOJ0urC0HYBQ&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 19 Oct 2025</title>
      <link>https://www.s-anand.net/blog/things-i-learned-19-oct-2025/</link>
      <pubDate>Sun, 19 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-19-oct-2025/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;⭐ &amp;ldquo;&amp;hellip; most engineers don’t have public commits. Senior engineers at large tech companies don’t work on open-source projects for the most part.&amp;rdquo; &lt;a href=&#34;https://interviewing.io/blog/why-ai-cant-do-hiring&#34;&gt;Why AI Can&amp;rsquo;t Do Hiring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cloudflare&amp;rsquo;s &lt;a href=&#34;https://sandbox.cloudflare.com/&#34;&gt;Sandbox&lt;/a&gt; feature in their Workers looks impressive. It supports streaming, web access to the container, and long-running processes. So we can spawn off a task and have it run a server (at least for a while) or a scraper.&lt;/li&gt;
&lt;li&gt;Gemini API has a Google Maps tool that it can refer to - like Google Search. &lt;a href=&#34;https://ai.google.dev/gemini-api/docs/maps-grounding&#34;&gt;Maps Grounding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Earlier we needed humans to label data for RLHF. Now we don&amp;rsquo;t since AI can simulate it. This is a pattern. Once AI learns from a human, that human skill can be automated. &lt;a href=&#34;https://youtu.be/RqWIvvv3SnQ&#34;&gt;How GPT-5 Thinks — OpenAI VP of Research Jerry Tworek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/output&#34;&gt;&lt;code&gt;&amp;lt;output&amp;gt;&lt;/code&gt;&lt;/a&gt; element has a &lt;code&gt;for=&lt;/code&gt; attribute indicating which &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; elements it is linked to and a &lt;code&gt;form=&lt;/code&gt; attribute indicating which form it belongs to. This &lt;a href=&#34;https://denodell.com/blog/html-best-kept-secret-output-tag&#34;&gt;works well with screen readers&lt;/a&gt;. A good reason to use it more. &lt;a href=&#34;https://rud.is/drop/output.html&#34;&gt;Examples&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Meta built a &lt;a href=&#34;https://ai.meta.com/research/publications/cwm-an-open-weights-llm-for-research-on-code-generation-with-world-models/&#34;&gt;Code World Model&lt;/a&gt;. Basically an LLM that acts like a Python interpreter!&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo apt install moreutils&lt;/code&gt; installs a set of useful packages:
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;chronic&lt;/strong&gt;. Runs a command quietly (suppressing output) unless it fails — good for cron jobs where you only want noise on errors. &lt;code&gt;chronic backup.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;combine&lt;/strong&gt;. Combines lines from two input streams/files using boolean operations (AND, OR, XOR). &lt;code&gt;combine AND fileA fileB&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;errno&lt;/strong&gt;. Look up symbolic names, numeric codes, and descriptions for standard errno values. &lt;code&gt;errno -l; errno ENOENT; errno 2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ifdata&lt;/strong&gt;. Query network interface properties (IP, byte counts, errors) in a script-friendly format. &lt;code&gt;ifdata -sip eth0; ifdata -bops eth0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ifne&lt;/strong&gt;. Run a command only if stdin is not empty, passing the input through. &lt;code&gt;find . -name core | ifne mail -s &amp;quot;Core files found&amp;quot; admin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;isutf8&lt;/strong&gt;. Check whether a file or stdin is valid UTF-8. &lt;code&gt;isutf8 somefile.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;lckdo&lt;/strong&gt;. Run a command while holding an exclusive lock to prevent concurrent runs. &lt;code&gt;lckdo /var/run/mylockfile.cmd myscript.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mispipe&lt;/strong&gt;. Pipe two commands, but return the exit status of the first one (useful in pipelines). &lt;code&gt;cmd1 mispipe cmd2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;parallel&lt;/strong&gt;. Run multiple commands in parallel, reading them from stdin or arguments. &lt;code&gt;parallel &amp;lt; jobs.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pee&lt;/strong&gt;. Like &lt;code&gt;tee&lt;/code&gt;, but sends stdin to multiple commands in parallel. &lt;code&gt;echo &amp;quot;foo&amp;quot; | pee cmd1 cmd2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;⭐ &lt;strong&gt;sponge&lt;/strong&gt;. Soak up all input before writing to output — enables in-place edits safely. &lt;code&gt;sort file | sponge file&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;⭐ &lt;strong&gt;ts&lt;/strong&gt;. Prefix each input line with a timestamp. &lt;code&gt;tail -f logfile | ts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vidir&lt;/strong&gt;. Edit a directory listing in your editor to rename, move, or delete files in bulk. &lt;code&gt;vidir ~/myfolder&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vipe&lt;/strong&gt;. Insert a text editor into a pipeline to manually edit streamed input before output. &lt;code&gt;cat file | vipe | wc -l&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zrun&lt;/strong&gt;. Transparently decompress compressed files before passing them to a command. &lt;code&gt;zrun cat file.gz&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Despite 20 years of SVG experience, I learnt new things from &lt;a href=&#34;https://www.joshwcomeau.com/svg/friendly-introduction-to-svg/&#34;&gt;A Friendly Introduction to SVG&lt;/a&gt; and &lt;a href=&#34;https://www.joshwcomeau.com/svg/interactive-guide-to-paths/&#34;&gt;A Friendly Introduction to Paths&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Setting a &lt;code&gt;&amp;lt;rect&amp;gt;&lt;/code&gt; width/height or a &lt;code&gt;&amp;lt;circle&amp;gt;&lt;/code&gt; radius to zero &lt;em&gt;removes&lt;/em&gt; the element instead of drawing a point.&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s no option to draw the stroke on the inside or outside of a shape/path. Only the center.&lt;/li&gt;
&lt;li&gt;You can override a path&amp;rsquo;s &lt;code&gt;pathLength&lt;/code&gt; attribute to create a new internal scale for its length. It&amp;rsquo;s unclear where I can use this.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;path&amp;gt;&lt;/code&gt; arcs have this syntax: &lt;code&gt;A [rx],[ry] [rotation] [large-arc-flag] [sweep-flag] [end-x],[end-y]&lt;/code&gt;. SVG first fits an ellipse to these parameters and then draws the arc.
&lt;ul&gt;
&lt;li&gt;If &lt;code&gt;rx&lt;/code&gt; and &lt;code&gt;ry&lt;/code&gt; of an arc is too small to connect the points, the SVG spec scales up &lt;code&gt;rx&lt;/code&gt; and &lt;code&gt;ry&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[large-arc-flag]=1&lt;/code&gt; literally uses the larger arc of the fitting ellipse. This is less common.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[sweep-flag]=1&lt;/code&gt; its the ellipse to make the connecting arc go clockwise. &lt;code&gt;0&lt;/code&gt; is anti-clockwise.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[rotation]&lt;/code&gt; is rarely used because we usually draw arcs and &lt;em&gt;then&lt;/em&gt; rotate them.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stroke-linejoin&lt;/code&gt; automatically flips from &lt;code&gt;miter&lt;/code&gt; (sharp) to &lt;code&gt;bevel&lt;/code&gt; (cut) if the sharp edge protrudes too long (e.g. small angles). Increasing &lt;code&gt;stroke-miterlimit&lt;/code&gt; increases the cutoff (default: 4)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⭐ Always include a thoughtful gallery of examples with tools / libraries. This does more than showing what a tool can do.
&lt;ul&gt;
&lt;li&gt;It&amp;rsquo;s use-case / domain transfer: showing &lt;strong&gt;what&lt;/strong&gt; it&amp;rsquo;s useful for in real life - opening ideas, suggesting workflows.&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s style transfer: showing &lt;strong&gt;how&lt;/strong&gt; to use it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⭐ Here&amp;rsquo;s what expert AI coders increasingly focus on. &lt;a href=&#34;https://ashtom.github.io/developers-reinvented&#34;&gt;Thomas Dohmke&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Delegation: context engineering agents for success; parallelizing.&lt;/li&gt;
&lt;li&gt;Verification: efficiently reviewing and testing code/output; setting stop-points.&lt;/li&gt;
&lt;li&gt;Expanding scope: instead of time saved as the metric.&lt;/li&gt;
&lt;li&gt;Education: teaching AI-based coding, debugging, reviewing/testing.&lt;/li&gt;
&lt;li&gt;Product management: combining requirements + UI design + architecture + engineering + deployment.&lt;/li&gt;
&lt;li&gt;Cross-discipline: blending code with design, governance, finance, marketing, &amp;hellip; (&amp;ldquo;computational creators&amp;rdquo;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Notes from Taylor&amp;rsquo;s &lt;a href=&#34;https://heytaylor.dev/posts/202510052056_how-i-m-using-coding-agents-october-2025/&#34;&gt;How I&amp;rsquo;m using coding agents: October 2025&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Left monitor: 2-4 desktops (e.g. work, side-project). Right monitor: things I always want available&lt;/li&gt;
&lt;li&gt;Plan next task while first executes.&lt;/li&gt;
&lt;li&gt;Use plan mode to write to a plan file.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t start big tasks if you have meetings scheduled soon.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Recent open source package hack methods seem to work more because of people/process than systems (&lt;a href=&#34;https://words.filippo.io/compromise-survey/&#34;&gt;Filippo&lt;/a&gt;):
&lt;ol&gt;
&lt;li&gt;Phishing the author&lt;/li&gt;
&lt;li&gt;Pull requests running unsafe code in CI&lt;/li&gt;
&lt;li&gt;Taking over expired domain / user ID&lt;/li&gt;
&lt;li&gt;Stealing long-lived tokens&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv run --python 3.14 --isolated --with-editable &#39;.[test]&#39; pytest&lt;/code&gt; runs pytest on a local project with a specific Python version. &lt;a href=&#34;https://til.simonwillison.net/python/uv-tests&#34;&gt;Simon Willison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Notes from the &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit&#34;&gt;State of AI Report 2025&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;Reasoning models are more fragile. Irrelevant phrases make reasoning models spend &lt;em&gt;FAR&lt;/em&gt; more tokens and get wrong answers &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g36532dfa542_1_5&#34;&gt;#21&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;AI systems are able to teach experts new concepts &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g38724ed57c0_1_0#slide=id.g38724ed57c0_1_0&#34;&gt;#41&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;An environment providing feedback / rewards enables continuous learning &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g379a362bd85_0_132#slide=id.g379a362bd85_0_132&#34;&gt;#52&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;E.g. Multi-robot chemical labs at U.Liverpool and NCSU &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g37cf129d69d_2_44#slide=id.g37cf129d69d_2_44&#34;&gt;#60&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;RLHF has a fundamental flaw: humans reward sycophancy &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g34531ae1448_0_79#slide=id.g34531ae1448_0_79&#34;&gt;#71&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;We can read what people are typing from brain signals outside the skull &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g377f1927a71_0_0#slide=id.g377f1927a71_0_0&#34;&gt;#73&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Model intelligence-to-price ratio doubles every ~6 months &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g38918b607ca_0_426#slide=id.g38918b607ca_0_426&#34;&gt;#94&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The AI companies&amp;rsquo; valuations are also roughly doubling every ~6 months &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g38918b607ca_0_750#slide=id.g38918b607ca_0_750&#34;&gt;#181&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenAI is offering Governments giga-watt campuses to run OpenAI models for citizens &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g38918b607ca_0_199#slide=id.g38918b607ca_0_199&#34;&gt;#122&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A 1GW clusters costs $50bn capex and $11bn per annum &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g3668e08c71a_0_66#slide=id.g3668e08c71a_0_66&#34;&gt;#130&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;China has added ~10X the energy capacity as the US in 2024 &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g34898aa15b3_0_0#slide=id.g34898aa15b3_0_0&#34;&gt;#146&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;NVIDIA challengers are still far away &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g3747fb01779_1_100#slide=id.g3747fb01779_1_100&#34;&gt;#161&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;LLMs can &amp;ldquo;read between the lines&amp;rdquo; even if training data is censored &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g38409c5a29e_1_1097#slide=id.g38409c5a29e_1_1097&#34;&gt;#268&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;LLMs can pass information via hidden signals &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g379453733bb_0_59#slide=id.g379453733bb_0_59&#34;&gt;#270&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Prediction: A major retailer reports &amp;gt;5% of online sales from agentic checkout. AI agent advertising spend hits $5B. &lt;a href=&#34;https://docs.google.com/presentation/d/1xiLl0VdrlNMAei8pmaX4ojIOfej6lhvZbOIK7Z6C-Go/edit?slide=id.g38918b607ca_4_400#slide=id.g38918b607ca_4_400&#34;&gt;#304&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cdn.openai.com/pdf/ae250928-4029-4f26-9e23-afac1fcee14c/staying-ahead-in-the-age-of-ai.pdf&#34;&gt;OpenAI&amp;rsquo;s leadership guide&lt;/a&gt; says:
&lt;ul&gt;
&lt;li&gt;Align
&lt;ul&gt;
&lt;li&gt;Explain &lt;strong&gt;WHY&lt;/strong&gt; AI thoughtfully.&lt;/li&gt;
&lt;li&gt;Set a goal, e.g. everyone uses ChatGPT 20 times/day (Moderna).&lt;/li&gt;
&lt;li&gt;Use it yourself. Show how.&lt;/li&gt;
&lt;li&gt;Have &lt;strong&gt;business&lt;/strong&gt; leaders run AI sessions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Activate
&lt;ul&gt;
&lt;li&gt;Launch an AI skills proram&lt;/li&gt;
&lt;li&gt;Set up an AI champions network&lt;/li&gt;
&lt;li&gt;Encourage experimentation (dedicated time, workshops, hackathons, &amp;hellip;)&lt;/li&gt;
&lt;li&gt;Link to performance evaluations&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Amplify
&lt;ul&gt;
&lt;li&gt;Create an AI knowledge base&lt;/li&gt;
&lt;li&gt;Share success stories (weekly)&lt;/li&gt;
&lt;li&gt;Create internal groups (Teams, Slack, &amp;hellip;)&lt;/li&gt;
&lt;li&gt;Celebrate AI wins&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Accelerate
&lt;ul&gt;
&lt;li&gt;Unblock AI tools and data access&lt;/li&gt;
&lt;li&gt;Simplify project selection. Quick feedback, clear priorities&lt;/li&gt;
&lt;li&gt;Unblock projects with a cross-functional council&lt;/li&gt;
&lt;li&gt;Give resources to successful teams&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Govern
&lt;ul&gt;
&lt;li&gt;Publish a responsible AI playbook (what&amp;rsquo;s safe to try)&lt;/li&gt;
&lt;li&gt;Audit AI practices quarterly&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 28 Sep 2025</title>
      <link>https://www.s-anand.net/blog/things-i-learned-28-sep-2025/</link>
      <pubDate>Sun, 28 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-28-sep-2025/</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/rushter/selectolax&#34;&gt;&lt;code&gt;selectolax&lt;/code&gt;&lt;/a&gt; is a fast, easy-to-use, modern HTML5 parser with CSS selectors. A good replacement for &lt;code&gt;lxml.html&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The most effective way to convert a blob (e.g. file input) to a data URL on the browser seems to be via the &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/FileReader&#34;&gt;FileReader&lt;/a&gt; API.
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;blobToDataURL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;blob&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Promise&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;rej&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;r&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;FileReader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;onload&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;onerror&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;rej&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;readAsDataURL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Tool calls in OpenAI support files and images. &lt;a href=&#34;https://x.com/OpenAIDevs/status/1971618905941856495?t=1fJFyLyYQXlbMMquShLMOQ&#34;&gt;OpenAI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;⭐ &amp;ldquo;Task parity is not the same thing as job parity There is a lot of complexity as many different tasks are bundled into jobs, and many jobs contribute to processes inside an organization The jagged frontier of AI ability means doing tasks well doesn&amp;rsquo;t translate to doing jobs well.&amp;rdquo; &lt;a href=&#34;https://x.com/emollick/status/1971643202332733683?t=SqZLjGdInJf4DRb5zcMPqQ&#34;&gt;Ethan Mollick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Adding &lt;code&gt;// @ts-check&lt;/code&gt; to a JavaScript file and documenting types via JSDoc might be the simplest way to migrate phase-wise from JS to Typescript.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;envsubst &amp;lt; file.txt&lt;/code&gt; replaces &lt;code&gt;file.txt&lt;/code&gt; with the environment variable, e.g. &lt;code&gt;$HOME&lt;/code&gt; is replaced by the &lt;code&gt;HOME&lt;/code&gt; environment variable. Clean shell-level templating.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/github/copilot-cli&#34;&gt;GitHub Copilot CLI&lt;/a&gt; is out. &lt;code&gt;npx -y @github/copilot&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.amazon.in/ORGANIC-PLANT-Primium-Quality-Vermicompost/dp/B0B59QXGC4&#34;&gt;Compost&lt;/a&gt; is the cheapest thing per ton that I can buy on Amazon India. I can buy 1 ton of compost for Rs 13,500. &lt;a href=&#34;https://chatgpt.com/s/t_68d5e3ef9e4081919e1ecd6582e6197c&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;yt-dlp&lt;/code&gt; requires Deno from now on. &lt;a href=&#34;https://github.com/yt-dlp/yt-dlp/issues/14404&#34;&gt;#14404&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;In meetings, make cameras optional by default &amp;ndash; and judge engagement by contributions, not video &amp;ndash; because a 4-week field experiment found camera-on increased fatigue and reduced voice, especially for women and newcomers. Camera on early for trust building is useful. &lt;a href=&#34;https://pubmed.ncbi.nlm.nih.gov/34423999/&#34;&gt;PubMed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/bahdotsh/wrkflw&#34;&gt;&lt;code&gt;wrkflw&lt;/code&gt;&lt;/a&gt; is a quick and light way to test GitHub actions before publishing. It runs GitHub actions locally.&lt;/li&gt;
&lt;li&gt;GPT-5-Codex is available as an API and on LLM. &lt;a href=&#34;https://simonwillison.net/2025/Sep/23/gpt-5-codex/&#34;&gt;Simon Willison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;⭐ I&amp;rsquo;m habit engineering, i.e. discovering and stacking habits on to existing ones. For example:
&lt;ul&gt;
&lt;li&gt;ChatGPT suggested increasing observability based on code reviews. I&amp;rsquo;m including it in my &lt;a href=&#34;https://github.com/sanand0/sanand0/tree/main/week&#34;&gt;weekly codecast&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;ChatGPT suggested defining closures inmeetings. I&amp;rsquo;mn now discussing objectives at meeting starts and effectiveness at the end.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Since Anaconda &lt;a href=&#34;https://www.anaconda.com/pricing&#34;&gt;cannot be used for free&lt;/a&gt; by organizations with 200+ people, Straive&amp;rsquo;s received legal notices from Anaconda. Since laptops are under central IT administration, they went ahead and deleted all Anaconda instances. Installing &lt;a href=&#34;https://www.anaconda.com/docs/getting-started/miniconda/main&#34;&gt;miniconda&lt;/a&gt; for use with &lt;a href=&#34;https://conda-forge.org/&#34;&gt;conda-forge&lt;/a&gt; requires admin access that most developers do not have, however. That leads to an interesting &amp;ldquo;No Python&amp;rdquo; situation. This is where &lt;a href=&#34;https://github.com/astral-sh/uv&#34;&gt;&lt;code&gt;uv&lt;/code&gt;&lt;/a&gt; becomes the knight in shining armor.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.perceptron.inc/blog/introducing-isaac-0-1&#34;&gt;Perceptron&lt;/a&gt; is SOTA LLM for object bounding boxes. Just 2B parameters.&lt;/li&gt;
&lt;li&gt;Gall&amp;rsquo;s &amp;ldquo;law&amp;rdquo; says that complex systems that work evolved from simple systems that worked. But a complex system designed from scratch won&amp;rsquo;t ever work. This holds in uncertain environments. But where formal theory or regulations exists, it doesn&amp;rsquo;t. &lt;a href=&#34;https://chatgpt.com/share/68d2c367-d674-800c-9c1c-51fcacfa5c6d&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.visidata.org/&#34;&gt;&lt;code&gt;uvx --with visidata vd&lt;/code&gt;&lt;/a&gt; gives you a command-line Excel editor to edit / convert CSV, Excel, JSON, SQLite, directories, etc.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uvx markitdown https://example.com/&lt;/code&gt; fetches &lt;code&gt;example.com&lt;/code&gt; as Markdown. I learnt this when I told Codex it could use &lt;code&gt;uvx markitdown&lt;/code&gt; to convert PDFs and it figured this part out by itself.&lt;/li&gt;
&lt;li&gt;The Dropbox connector for ChatGPT is the little flaky &amp;ndash; at least on Android. It could not identify a file that was clearly there in Dropbox and I had to upload it manually.&lt;/li&gt;
&lt;li&gt;ChatGPT&amp;rsquo;s output is too dense for me. I added this to my custom instructions: &amp;ldquo;Write in simple language. Explain non-obvious terms intuitively.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;yt-dlp&lt;/code&gt; has a &lt;code&gt;--download-sections&lt;/code&gt; option that downloads specific YouTube time ranges. For example &lt;code&gt;--download-sections &amp;quot;*00:01:00-00:03:00&amp;quot;&lt;/code&gt; downloads &lt;em&gt;roughly&lt;/em&gt; (not exactly) from 1 min to 3 min. Note the &lt;code&gt;*&lt;/code&gt; at the beginning.&lt;/li&gt;
&lt;li&gt;My Lenovo laptop&amp;rsquo;s touchpad started scrolling instead of moving when I moved my finger. Many things could have caused it, but the solution was to click (not tap) the top middle of the trackpad. &lt;a href=&#34;https://chatgpt.com/share/68cfc8ff-e7fc-800c-b8bf-474d41332cd1&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://github.com/lalithaar/indian-exams-database&#34;&gt;India Entrance Exam database&lt;/a&gt; is a dataset collating Indian entrance exams.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 20 Jul 2025</title>
      <link>https://www.s-anand.net/blog/things-i-learned-20-jul-2025/</link>
      <pubDate>Sun, 20 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-20-jul-2025/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://tomrenner.com/posts/llm-inevitabilism/&#34;&gt;Inevitablism&lt;/a&gt; is framing an argument as if it is the only logical choice in an inevitable future. Thereafter, the argument shifts to are there any alternative choices in that inevitable world, rather than whether that future is, in fact, inevitable.&lt;/li&gt;
&lt;li&gt;⭐ LLM chat over data may leapfrog dashboards. This may be a trigger to kill redundant UI.&lt;/li&gt;
&lt;li&gt;A new wave of (liberal) colleges have emerged. Ashoka University, Krea, Plaksha (Mohali), Jindal University (Sonipat), FLAME University (Pune), Azim Premji University, Shiv Nadar University. Many of these accept IB students who are choosing to stay in India, instead of the earlier trend of studying abroad.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;xh&lt;/code&gt; is &lt;code&gt;curl&lt;/code&gt;-compatible but adds JSON pretty‑print, colour, &lt;code&gt;--table&lt;/code&gt; and can pass parameters like &lt;code&gt;xh post :8000/api question=&#39;When is the ROE?&#39;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dasel&lt;/code&gt; is &lt;code&gt;jq&lt;/code&gt;-compatible but supports YAML and TOML too&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lazygit&lt;/code&gt; is a 5-MB TUI that lets you stage/commit/push/diff in one screen&lt;/li&gt;
&lt;li&gt;&lt;code&gt;eza&lt;/code&gt; is a modern &lt;code&gt;ls&lt;/code&gt; replacement. I switched to this with &lt;code&gt;abbr --add l &#39;eza -l -snew --git --time-style relative --no-user --no-permissions --color-scale=size&#39;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jless&lt;/code&gt; is &lt;code&gt;less&lt;/code&gt; replacement for large JSON streams, with search &amp;amp; scroll&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jc&lt;/code&gt; is a JSON to table formatter&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv cache prune&lt;/code&gt; removes only &lt;em&gt;unused&lt;/em&gt; cache entries and saves a fair bit of space. Mine trimmed 85 GB.&lt;/li&gt;
&lt;li&gt;Claude Code settings are in &lt;code&gt;~/.claude/settings.json&lt;/code&gt; (personal) &amp;lt; &lt;code&gt;.claude/settings.json&lt;/code&gt; (project) &amp;lt; &lt;code&gt;.claude/settings.local.json&lt;/code&gt; (uncommitted personal) &amp;lt; CLI arguments. Explore &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;permissions&lt;/code&gt;, &lt;code&gt;env&lt;/code&gt;, &lt;code&gt;forceLoginMethod&lt;/code&gt;. &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/settings&#34;&gt;Ref&lt;/a&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;Claude Code loads memory from &lt;code&gt;~/.claude/CLAUDE.md&lt;/code&gt; &amp;lt; &lt;code&gt;.CLAUDE.md&lt;/code&gt; and from subdirectories &lt;em&gt;when required&lt;/em&gt;. Run &lt;code&gt;/init&lt;/code&gt; to auto-create it with repo-specific info! Mention &lt;code&gt;@file&lt;/code&gt; to import. Beginning an input with &lt;code&gt;# ...&lt;/code&gt; adds it to memory! Run &lt;code&gt;/memory&lt;/code&gt; to view/edit memory files. &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/memory&#34;&gt;Ref&lt;/a&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;Claude Code lets you type &lt;code&gt;\&lt;/code&gt; then Enter at the end of a line to continue to the next line. Or, run &lt;code&gt;/terminal-setup&lt;/code&gt; to bind Shift-Enter to insert a newline. #ai-coding&lt;/li&gt;
&lt;li&gt;Claude Code has built-in tools to read &amp;amp; write Jupyter notebooks (interesting), to run sub-agents (powerful), and to manage TODO lists (useful) &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/settings#tools-available-to-claude&#34;&gt;Ref&lt;/a&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;&lt;code&gt;claude -p &amp;quot;query&amp;quot;&lt;/code&gt; runs the query and exits, making it a &lt;em&gt;very&lt;/em&gt; powerful pipeline tool. E.g. &lt;code&gt;cat stream.jsonl | claude -p &amp;quot;...&amp;quot; --output-format json --input-format stream-json --max-turns 3 --dangerously-skip-permissions&lt;/code&gt; &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/cli-reference&#34;&gt;Ref&lt;/a&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;Claude Code has a &lt;code&gt;/review&lt;/code&gt; command that requests a code review and a &lt;code&gt;/pr_comments&lt;/code&gt; to view pull request comments &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/slash-commands&#34;&gt;Ref&lt;/a&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;Claude Code lets you define custom slash commands at &lt;code&gt;~/.claude/commands/*.md&lt;/code&gt; &amp;lt; &lt;code&gt;.claude/commands/*.md&lt;/code&gt;. Use &lt;code&gt;@file&lt;/code&gt; to reference files, &lt;code&gt;$ARGUMENTS&lt;/code&gt; for arguments, and &lt;code&gt;!&lt;/code&gt; for bash commands like &lt;code&gt;DIR: !`pwd`&lt;/code&gt;. YAML frontmatter supports &lt;code&gt;allowed-tools:&lt;/code&gt; and &lt;code&gt;description:&lt;/code&gt; &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/slash-commands&#34;&gt;Ref&lt;/a&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;You can drag &amp;amp; drop a screenshot or paste it into Claude Code! #ai-coding&lt;/li&gt;
&lt;li&gt;Claude Code lets you run &lt;code&gt;/compact Focus on code samples and API usage&lt;/code&gt; (or mention it in &lt;code&gt;CLAUDE.md&lt;/code&gt;) #ai-coding&lt;/li&gt;
&lt;li&gt;Claude Code activates extended thinking via these keywords: &lt;code&gt;think&lt;/code&gt; &amp;lt; &lt;code&gt;think hard&lt;/code&gt; &amp;lt; &lt;code&gt;think harder&lt;/code&gt; &amp;lt; &lt;code&gt;ultrathink&lt;/code&gt; &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/common-workflows#use-extended-thinking&#34;&gt;Ref&lt;/a&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;Claude Code lets you set up &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/github-actions&#34;&gt;GitHub Actions&lt;/a&gt; via &lt;code&gt;/install-github-app&lt;/code&gt; so that any mention of &lt;code&gt;@claude&lt;/code&gt; in an issue or a PR will trigger a CI job that does what you suggest. An alternative to &lt;a href=&#34;https://jules.google.com/&#34;&gt;Jules&lt;/a&gt; or &lt;a href=&#34;https://chatgpt.com/codex&#34;&gt;Codex&lt;/a&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;Claude Code enterprise use is possible. It works with &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/amazon-bedrock&#34;&gt;Google Vertex AI&lt;/a&gt; and &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/amazon-bedrock&#34;&gt;Amazon Bedrock&lt;/a&gt; &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/security&#34;&gt;securely&lt;/a&gt; and supports &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/monitoring-usage&#34;&gt;usage monitoring&lt;/a&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;Claude Code supports &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/corporate-proxy&#34;&gt;proxies&lt;/a&gt; and &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/llm-gateway&#34;&gt;LLM gateways&lt;/a&gt;. The &lt;code&gt;apiKeyHelper&lt;/code&gt; &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/settings&#34;&gt;setting&lt;/a&gt; can dynamically generate API keys #ai-coding&lt;/li&gt;
&lt;li&gt;Claude Code costs ~$6/day on average, and &amp;lt; $12/day for 90% of developers. &lt;a href=&#34;https://docs.anthropic.com/en/docs/claude-code/costs&#34;&gt;Ref&lt;/a&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/ryoppippi/ccusage&#34;&gt;ccusage&lt;/a&gt; summarizes Claude Code usage patterns from &lt;code&gt;~/.claude/&lt;/code&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;Interesting MCPs to explore:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://mcp.sentry.dev/&#34;&gt;Sentry&lt;/a&gt;: fetch issues with stack traces and other useful debugging context&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/microsoft/playwright-mcp&#34;&gt;Playwright&lt;/a&gt;: automate browser&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/neomutt/neomutt&#34;&gt;neomutt&lt;/a&gt; is a convenient way for me to read my archived &lt;code&gt;.mbox&lt;/code&gt; files. &lt;code&gt;neomutt -f $FILE.mbox&lt;/code&gt; lets you browse an MBOX.&lt;/li&gt;
&lt;li&gt;IITM DoMS is a management school inside a technical institute. That lets MBA students learn to interact with geeks and create startups.&lt;/li&gt;
&lt;li&gt;Last year, LLMs were able to solve 3 JEE problems. This year, they were all-India Rank #4, and then beat AIR #1.&lt;/li&gt;
&lt;li&gt;India has 3% electric vehicle penetration. The highest (perhaps Norway) is 80%. The Indian Government is actively looking to phase in EVs. Charging points are being installed across the country.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 22 Jun 2025</title>
      <link>https://www.s-anand.net/blog/things-i-learned-22-jun-2025/</link>
      <pubDate>Sun, 22 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-22-jun-2025/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Never use a toothpick on a tooth with a dental crown. Only use a flosser or water flosser.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ishadeed.com/article/modern-attr/&#34;&gt;CSS &lt;code&gt;attr()&lt;/code&gt;&lt;/a&gt; is one of the most powerful features in modern CSS. It lets you control CSS via HTML attributes.&lt;/li&gt;
&lt;li&gt;Notes from &lt;a href=&#34;https://www.anthropic.com/engineering/built-multi-agent-research-system&#34;&gt;Anthropic&amp;rsquo;s How we built our multi-agent research system&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;Sub-agents are like humans -&amp;gt; society. The improvement is dramatic.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Sub-agents facilitate compression by operating in parallel with their own context windows, exploring different aspects of the question simultaneously before condensing&amp;hellip;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Each sub-agent also provides separation of concerns—distinct tools, prompts, and exploration trajectories &amp;hellip; (enabling) independent investigations.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Using sub-agents spends ~15x more tokens. (That explained ~80% of the improved accuracy!)&lt;/li&gt;
&lt;li&gt;Particularly effective when tasks are independent and parallelizable. This also speeds it up.&lt;/li&gt;
&lt;li&gt;Teach the orchestrator how to delegate: how many sub-agents, what objective + output format + task boundaries (MECE to avoid overlap with other agents) in prompt, what tools.&lt;/li&gt;
&lt;li&gt;Teach the orchestrator how to improve agents: e.g. tools to test and rewrite tool descriptions&lt;/li&gt;
&lt;li&gt;Even if you evaluate a &lt;em&gt;few&lt;/em&gt; examples, evals are surprisingly effective.&lt;/li&gt;
&lt;li&gt;Agents are stateful. Errors compound. Allow agents to resume. Prune history gracefully.&lt;/li&gt;
&lt;li&gt;Log everything to debug user-reported failures. Also monitor the &lt;em&gt;kinds&lt;/em&gt; of decisions it took to help debug at scale.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;http://www.incompleteideas.net/IncIdeas/BitterLesson.html&#34;&gt;Bitter Lesson&lt;/a&gt; likely applies to system prompts. Don&amp;rsquo;t hard-code stuff. I&amp;rsquo;m impressed that there is &lt;em&gt;no&lt;/em&gt; system prompt in the default &lt;a href=&#34;https://github.com/pydantic/pydantic-ai/blob/a25eb963a54e07afeab5ca2ea143437225100638/pydantic_ai_slim/pydantic_ai/agent.py#L226&#34;&gt;pydantic-ai Agent&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The MCPs developers seem to use the most are: &lt;a href=&#34;https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem&#34;&gt;filesystem&lt;/a&gt;, &lt;a href=&#34;https://github.com/microsoft/playwright-mcp&#34;&gt;playwright&lt;/a&gt;, &lt;a href=&#34;https://github.com/github/github-mcp-server&#34;&gt;github&lt;/a&gt;, &lt;a href=&#34;https://www.npmjs.com/package/@modelcontextprotocol/server-slack&#34;&gt;slack&lt;/a&gt;, &lt;a href=&#34;https://github.com/makenotion/notion-mcp-server&#34;&gt;notion&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Anecdotally, Claude 4 Sonnet seems a better coding model than Claude 4 Opus. &lt;a href=&#34;https://x.com/dan_s_becker/status/1936177475567931481&#34;&gt;Dan Becker&lt;/a&gt;, &lt;a href=&#34;https://lucumr.pocoo.org/2025/6/12/agentic-coding/&#34;&gt;Armin Ronacher&lt;/a&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;Cursor offers &lt;a href=&#34;https://docs.cursor.com/background-agent&#34;&gt;background agents&lt;/a&gt; that run in a remote container. #ai-coding&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/danielmiessler/fabric&#34;&gt;Fabric&lt;/a&gt; has a collection of re-usable prompts that you can use via &lt;a href=&#34;https://github.com/simonw/llm-templates-fabric&#34;&gt;llm-templates-fabric&lt;/a&gt; like: &lt;code&gt;cat file.py | llm -t fabric:explain_code&lt;/code&gt; &lt;a href=&#34;https://simonwillison.net/2025/Apr/7/long-context-llm/#atom-everything&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;As of Jun 21, Claude 3.5 Sonnet &amp;gt; Claude 3.7 Sonnet &amp;gt; O3 Mini &amp;gt; Human &amp;gt; Gemini 1.5 Pro lead the &lt;a href=&#34;https://andonlabs.com/evals/vending-bench&#34;&gt;Vending Bench&lt;/a&gt;.
Gemini 1.5 Pro also leads my &lt;a href=&#34;https://sanand0.github.io/llmevals/system-override/&#34;&gt;System Prompt Override&lt;/a&gt; benchmarks.
I&amp;rsquo;m losing faith in the &lt;a href=&#34;https://lmarena.ai/leaderboard&#34;&gt;LM Arena&lt;/a&gt;. Perhaps the Gemini models aren&amp;rsquo;t improving as much as we think.&lt;/li&gt;
&lt;li&gt;This is the core of agents (LLMs running tools in a loop): &lt;a href=&#34;https://sketch.dev/blog/agent-loop&#34;&gt;Sketch blog&lt;/a&gt; &lt;a href=&#34;https://sketch.dev/blog/agent_loop.py&#34;&gt;Full script&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Notes on AI coding / vibe-coding from multiple sources. #ai-coding
&lt;ul&gt;
&lt;li&gt;Sources
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://sketch.dev/blog/programming-with-llms&#34;&gt;How I program with LLMs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sketch.dev/blog/programming-with-agents&#34;&gt;How I program with agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sketch.dev/blog/seven-prompting-habits&#34;&gt;The 7 Prompting Habits of Highly Effective Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.nilenso.com/blog/2025/05/29/ai-assisted-coding/&#34;&gt;AI Assisted Coding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.jeffgabriel.com/thefuture&#34;&gt;A Glimpse of the Future&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lucumr.pocoo.org/2025/6/12/agentic-coding/&#34;&gt;Agentic Coding Recommendations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lucumr.pocoo.org/2025/6/21/my-first-ai-library/&#34;&gt;My First Open Source AI Generated Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lucumr.pocoo.org/2025/6/17/measuring/&#34;&gt;We Can Just Measure Things&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.indragie.com/blog/i-shipped-a-macos-app-built-entirely-by-claude-code&#34;&gt;I Shipped a macOS App Built Entirely by Claude Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/&#34;&gt;Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Why AI coding?
&lt;ul&gt;
&lt;li&gt;Reduces mental energy (by creating the first draft). letting you create more.&lt;/li&gt;
&lt;li&gt;Reduces starting trouble, eases effort.&lt;/li&gt;
&lt;li&gt;Helps figure out how easy / tough a task really is!!&lt;/li&gt;
&lt;li&gt;Most code is short-lived or has few users. AI building &amp;ldquo;throw-away&amp;rdquo; code is useful.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Why NOT AI coding?
&lt;ul&gt;
&lt;li&gt;Slows you down if you know the repo well&lt;/li&gt;
&lt;li&gt;Doesn&amp;rsquo;t work well on large/complex/niche repos&lt;/li&gt;
&lt;li&gt;Leads to over-optimism and atrophy&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tips
&lt;ul&gt;
&lt;li&gt;Use for reversible decisions (2-way doors). Avoid for irreversible ones (1-way doors).&lt;/li&gt;
&lt;li&gt;Fail early. Try tough bits first.&lt;/li&gt;
&lt;li&gt;Fail often. Restart instead of fixing.&lt;/li&gt;
&lt;li&gt;Go concurrent. Trigger multiple tasks. Ask for multiple drafts and options.&lt;/li&gt;
&lt;li&gt;Give it workflow. &lt;code&gt;Break down the implementation into: 1. Planning. 2. API stubs. 3. Implementation.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Give local context. Naming conventions, folder structure, coding style, tools (compile, test, lint), etc.&lt;/li&gt;
&lt;li&gt;Conserve context. &lt;code&gt;Use sub tasks and sub agents to conserve context&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Suggest libraries. Agents prefer writing code than using libraries, by default.&lt;/li&gt;
&lt;li&gt;Give examples to follow, e.g. &lt;code&gt;Write it like @filename&lt;/code&gt;. &lt;code&gt;&amp;amp;amp; -&amp;gt; &amp;amp; but &amp;amp;x -&amp;gt; &amp;amp;x&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Give screenshots and logs. These are very effective.&lt;/li&gt;
&lt;li&gt;Provide goals, not instructions. Saves effort, teaches you new things.&lt;/li&gt;
&lt;li&gt;Farm out research. Have specialized tools research API docs, etc. and include those in the context.&lt;/li&gt;
&lt;li&gt;Keep related things together.&lt;/li&gt;
&lt;li&gt;Have it write a checklist, e.g. saving it temporarily in a file.&lt;/li&gt;
&lt;li&gt;Have it &lt;em&gt;run&lt;/em&gt; code to catch its own errors.&lt;/li&gt;
&lt;li&gt;Have it write tests, mocks for tests.&lt;/li&gt;
&lt;li&gt;Have it &lt;em&gt;see&lt;/em&gt; and &lt;em&gt;use&lt;/em&gt; the app, click, play around, etc. (e.g. via playwright-mcp)&lt;/li&gt;
&lt;li&gt;Have it create playbooks, examples, troubleshooting guides.&lt;/li&gt;
&lt;li&gt;Have it refactor code &lt;em&gt;AFTER&lt;/em&gt; comprehensive tests.&lt;/li&gt;
&lt;li&gt;Have it think more. &lt;code&gt;Use ultrathink&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Log extensively, by default. Improves future debugging.&lt;/li&gt;
&lt;li&gt;Report errors well. What happened, why, and what to do.&lt;/li&gt;
&lt;li&gt;Prefer monorepos for more context. &lt;a href=&#34;https://blog.puzzmo.com/posts/2025/07/30/six-weeks-of-claude-code/#what-do-i-think-makes-it-successful-in-our-codebases&#34;&gt;#&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Prefer popular libraries. LLMs know these better.&lt;/li&gt;
&lt;li&gt;Prefer fast tests, tools, and libraries. Speed helps iteration.&lt;/li&gt;
&lt;li&gt;Prefer small files and packages. Reduces context.&lt;/li&gt;
&lt;li&gt;Prefer simple code. Avoid magic, e.g. pytest fixture injection. Functions over classes. SQL over code. Composition over inheritence.&lt;/li&gt;
&lt;li&gt;Prefer specialized functions for common scenarios over DRY abstractions. Prefer fewer abstraction layers.&lt;/li&gt;
&lt;li&gt;Prefer re-implementing over DRY since code is cheap.&lt;/li&gt;
&lt;li&gt;Look for new tricks to learn from its code.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Agent behaviors:
&lt;ul&gt;
&lt;li&gt;Simple tasks perform better. More context = more confusion.&lt;/li&gt;
&lt;li&gt;Verifiable tasks are clearer for LLMs and and easier to review.&lt;/li&gt;
&lt;li&gt;Useful coding agent tools: bash(cmd), patch(hunks), todo(tasks), web_nav(url), web_eval(script), web_logs(), web_screenshot(), keyword_search(keywords), codereview()&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Skills:
&lt;ul&gt;
&lt;li&gt;LESS Coding&lt;/li&gt;
&lt;li&gt;LESS Research&lt;/li&gt;
&lt;li&gt;LESS Documentation&lt;/li&gt;
&lt;li&gt;LESS Operations configuration (IaaC, CI/CD, etc)&lt;/li&gt;
&lt;li&gt;LESS Editor usage and expertise required&lt;/li&gt;
&lt;li&gt;MORE Tests (to test the code)&lt;/li&gt;
&lt;li&gt;MORE Code reviews (to test the code)&lt;/li&gt;
&lt;li&gt;MORE Prompting and context creation (to write the code)&lt;/li&gt;
&lt;li&gt;MORE DevOps (micro-feature deployments, deploy in parallel)&lt;/li&gt;
&lt;li&gt;MORE Specs: features, requirements, APIs, tests, structure, etc.&lt;/li&gt;
&lt;li&gt;MORE Analysis: security, performance.&lt;/li&gt;
&lt;li&gt;MORE Tool design. Linters, SAST, DAST, Performance, etc. Semgrep, Bench Suite&lt;/li&gt;
&lt;li&gt;MORE Observability: Especially for tools and LLM calls. Telemetry, log analysis and issue creation. Sentry, LogFire, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Trends:
&lt;ul&gt;
&lt;li&gt;Agents took time to evolve because LLMs need to be good at tool calling and long instruction following, which is just happening.&lt;/li&gt;
&lt;li&gt;Agents are slow. Parallelizable tools (e.g. multiple Redis instances, &lt;a href=&#34;https://github.com/dagger/container-use&#34;&gt;container-use&lt;/a&gt;, CI/CD) will grow. Tool speed (e.g. fast test engines with caching) will become more important.&lt;/li&gt;
&lt;li&gt;Agents generate diffs/PRs. Tools to edit and comment on these online will emerge.&lt;/li&gt;
&lt;li&gt;Context gathering will widen: screenshots, logs, etc.&lt;/li&gt;
&lt;li&gt;Code review process will be re-invented.&lt;/li&gt;
&lt;li&gt;Personalized features. User drops a feature request via Slack. Personalized version deployed at their endpoint to test. PR sent after they are happy&lt;/li&gt;
&lt;li&gt;Poor coding teams get less out of AI coding. Good communication, reviews, coding practices, testing, etc. help.&lt;/li&gt;
&lt;li&gt;Agent Experience (AX) is emerging and explores: how much context to take, when &amp;amp; how often to ask the user questions, to how make review easier, etc.&lt;/li&gt;
&lt;li&gt;Humans running multiple tasks in parallel is productive. Breaking a complex requirement into tasks (like Codex now does) helps create that task queue.&lt;/li&gt;
&lt;li&gt;Agents generate technical debt faster than humans. Solving this will become a major problem/opportunity.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;makework&amp;rdquo;: made-up work that fills time or serves short-term needs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;From &lt;a href=&#34;https://cookbook.openai.com/examples/gpt4-1_prompting_guide&#34;&gt;GPT 4.1 Prompting Guide&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Use more precise prompts. Earlier models &lt;em&gt;inferred&lt;/em&gt; user intent. GPT 4.1 follows prompts more closely.&lt;/li&gt;
&lt;li&gt;Avoid STRONG untested instructions. E.g. &amp;ldquo;you must call a tool before responding to the user&amp;rdquo; can lead to tool input hallucination.&lt;/li&gt;
&lt;li&gt;For agents, include these three system instructions:
&lt;ul&gt;
&lt;li&gt;You are an agent. Keep going until you&amp;rsquo;re sure the user’s query is completely resolved.&lt;/li&gt;
&lt;li&gt;If you are not sure, use your tools: do NOT guess or make up an answer.&lt;/li&gt;
&lt;li&gt;Plan extensively before each function call. Reflect on the outcomes of the previous function calls. DO NOT do this entire process by making function calls only, as this can impair your ability to solve the problem and think insightfully.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;tools&lt;/code&gt; field rather than injecting tools into system prompt. Model has been trained to use &lt;code&gt;tools&lt;/code&gt; field.&lt;/li&gt;
&lt;li&gt;Keep tool descriptions concise. Provide examples for complex tools in system prompt.&lt;/li&gt;
&lt;li&gt;Place instructions at the top of the context; ideally at the end, too.&lt;/li&gt;
&lt;li&gt;Format prompts as Markdown, XML, not JSON.&lt;/li&gt;
&lt;li&gt;It sometimes dislikes large repetitive output (e.g. analysis of hundreds of items) and needs nudging.&lt;/li&gt;
&lt;li&gt;It handles diffs well and can &lt;a href=&#34;https://cookbook.openai.com/examples/gpt4-1_prompting_guide#apply-patch&#34;&gt;apply patches&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metaprompting&lt;/strong&gt;. Have frontier LLMs revise prompts. They&amp;rsquo;re GOOD! &lt;a href=&#34;https://sketch.dev/blog/prompt-engineering-and-the-taste-gap&#34;&gt;Ref&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Increase clarity, providing step-by-step instructions.&lt;/li&gt;
&lt;li&gt;Resolve conflicting instructions.&lt;/li&gt;
&lt;li&gt;Expand instructions to cover all scenarios and edge cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Notes from &lt;a href=&#34;https://github.com/pydantic/pydantic-ai/blob/main/.github%2Fworkflows%2Fci.yml&#34;&gt;Pydantic AI GitHub CI&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;UV_PYTHON sets default Python version&lt;/li&gt;
&lt;li&gt;COLUMNS increase terminal width&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv run&lt;/code&gt; supports &lt;code&gt;--extra&lt;/code&gt; for extra packages&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare/wrangler&lt;/code&gt; action has a deploy that allows deployment to specific URLs or subdomains&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Adding QR code to &lt;em&gt;all&lt;/em&gt; slides in a deck (linking to the slides) helps. People take photos of random slides and this lets them get the link wherever.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/eoda-dev/py-openlayers&#34;&gt;PyOpenLayers&lt;/a&gt; adds interactive mapping via OpenLayers to Marimo and Jupyter&lt;/li&gt;
&lt;li&gt;Conversation is about positioning. For example:
&lt;ul&gt;
&lt;li&gt;TechCrunch interviewer: Anthropic released Claude Opus 4 thought it blackmailed people. Is Anthropic is becoming less safety conscious?&lt;/li&gt;
&lt;li&gt;Kaplan: We have very strong testing. So we&amp;rsquo;re more more likely to spot AI dangers early. We share such reports to set higher standards for transparency.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;From &lt;a href=&#34;https://youtu.be/GL0XhAj5LPE&#34;&gt;LLM Evals: Common Mistakes&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;Using foundation model evals instead of application evals is like evaluating a candidate on SAT scores. It&amp;rsquo;s fine, but you also want to evaluate them on their specific job description.&lt;/li&gt;
&lt;li&gt;Evals must be done by the users and not outsourced.&lt;/li&gt;
&lt;li&gt;Evals are not draining.&lt;/li&gt;
&lt;li&gt;Small samples have high value.&lt;/li&gt;
&lt;li&gt;When using LLM as a judge, be VERY VERY specific about the criteria.&lt;/li&gt;
&lt;li&gt;Prefer binary LLM evals over scales.&lt;/li&gt;
&lt;li&gt;Monitor performance online, not just while deploying&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;From &lt;a href=&#34;https://youtu.be/KrRD7r7y7NY&#34;&gt;Andrew Ng on AI Agents&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;AI is like electricity. It&amp;rsquo;s hard to define what is good for because it is good for so many things, most of them new that never existed before&lt;/li&gt;
&lt;li&gt;If experimentation is cheap, it makes sense to run far more experiments. Rather than think hard about what to prototype, explore how to build many &lt;em&gt;diverse&lt;/em&gt; prototypes.&lt;/li&gt;
&lt;li&gt;Prototyping is now very fast but other steps like reliable evaluations for deployment still take time. But the speed of prototyping is putting pressure on other parts of the organization to go faster.&lt;/li&gt;
&lt;li&gt;While large language models and applications were serving human needs so far, increasingly they will serve the needs of AI and other tools.&lt;/li&gt;
&lt;li&gt;Since unstructured data is now more valuable, there will be a growth in data engineering on unstructured data.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://models.dev/&#34;&gt;Models.dev&lt;/a&gt; is an open source database and API of LLM models&lt;/li&gt;
&lt;li&gt;Logprobs are back on models in Vertex AI. &lt;a href=&#34;https://github.com/GoogleCloudPlatform/generative-ai/blob/main/gemini/logprobs/intro_logprobs.ipynb&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;For all AI code, review it, &lt;em&gt;learn&lt;/em&gt; from it and &lt;em&gt;share&lt;/em&gt; learnings. That prevents bugs AND we learn in the process. &lt;a href=&#34;https://www.shayon.dev/post/2025/164/pitfalls-of-premature-closure-with-llm-assisted-coding/&#34;&gt;Ref&lt;/a&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;AI coding requires a skilled developer &lt;em&gt;and&lt;/em&gt; domain expert to &lt;em&gt;spec&lt;/em&gt; and to &lt;em&gt;review&lt;/em&gt;. It now makes sense now for devs and users to pair program &lt;a href=&#34;https://simonwillison.net/2025/Jun/18/coding-agents/&#34;&gt;Simon Willison&lt;/a&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;In the world of AI, &lt;em&gt;imagination&lt;/em&gt; (asking for things we didn&amp;rsquo;t know we could ask for) will be a diferentiator.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vitest run --globals&lt;/code&gt; makes &lt;code&gt;vitest&lt;/code&gt; is a near drop-in replacement for &lt;code&gt;jest&lt;/code&gt;. It injects &lt;code&gt;describe&lt;/code&gt;, &lt;code&gt;it&lt;/code&gt;, &lt;code&gt;expect&lt;/code&gt;, etc. as globals. You need to swap &lt;code&gt;jest.*&lt;/code&gt; with &lt;code&gt;vi.*&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;To extract all jq paths from a JSON, use &lt;code&gt;jq -r &#39;paths(scalars)|map(if type==&amp;quot;string&amp;quot; then &amp;quot;[]&amp;quot; else &amp;quot;.\(. )&amp;quot; end)|join(&amp;quot;&amp;quot;)|unique[]&#39; file.json&lt;/code&gt;.
I use this to extract paths from ChatGPT&amp;rsquo;s export conversations.json via
&lt;code&gt;jq -r &#39;[paths(scalars)|map(if type==&amp;quot;string&amp;quot; then &amp;quot;.&amp;quot;+. else &amp;quot;[]&amp;quot; end)|join(&amp;quot;&amp;quot;)]|unique[]|select(contains(&amp;quot;.mapping.&amp;quot;))|split(&amp;quot;.mapping.&amp;quot;)[1]|sub(&amp;quot;^[^.]*&amp;quot;;&amp;quot;&amp;quot;)&#39; chatgpt/conversations.json | sort | uniq&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv run&lt;/code&gt; can run &lt;em&gt;any&lt;/em&gt; command, not just Python scripts, e.g. &lt;code&gt;uv run npx&lt;/code&gt; or &lt;code&gt;uv run bash&lt;/code&gt;. It&amp;rsquo;s the same as &lt;code&gt;npx&lt;/code&gt; or &lt;code&gt;bash&lt;/code&gt; except it activates the venv and loads &lt;code&gt;.env&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Notes from &lt;a href=&#34;https://events.ycombinator.com/ai-sus&#34;&gt;AI Startup School&lt;/a&gt;. &lt;a href=&#34;https://www.linkedin.com/posts/guillermoflor_yesterday-was-day-1-of-y-combinators-ai-activity-7340779902104711171-GtBn&#34;&gt;Guillermo Flor&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Sam Altman. Chase $0B ideas, not $0M ones. Weird + right &amp;gt; safe + crowded&lt;/li&gt;
&lt;li&gt;Gary Tan. Agency scales. Tools change, people/mindset don’t.&lt;/li&gt;
&lt;li&gt;Andrej Karpathy.
&lt;ul&gt;
&lt;li&gt;Instead of LLM memory to store facts, edit system prompt with general strategies, like the LLM writing a book for itself on how to solve problems.&lt;/li&gt;
&lt;li&gt;Autonomy slider. Let user pick how far LLM acts by itself. Like the Tesla autopilot levels.&lt;/li&gt;
&lt;li&gt;Make evals EASY and FAST for humans.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sanand0/datastories/tree/main/code-vs-domain&#34;&gt;When vibe-coding&lt;/a&gt;, I sometimes change the requirement (e.g. style of visual) instead of spending time to get &lt;em&gt;exactly&lt;/em&gt; what I instructed. That&amp;rsquo;s because I can viscerally &lt;em&gt;feel&lt;/em&gt; the difficulty the model&amp;rsquo;s facing thanks to &lt;strong&gt;quick feedback&lt;/strong&gt;. A domain expert vibe coding will be able to feel this too. Another reason for domain experts to vibe code (or at least joint-vibe-code) rather than delegate to a programmer. #ai-coding&lt;/li&gt;
&lt;li&gt;Notes on model coding styles. &lt;a href=&#34;https://github.com/sanand0/generative-ai-group/blob/main/2025-06-15/podcast-2025-06-15.md&#34;&gt;Generative AI WhatsApp Group&lt;/a&gt; #ai-coding
&lt;ul&gt;
&lt;li&gt;Claude 4 writes exhaustive professionally styled code but struggles over long conversations.&lt;/li&gt;
&lt;li&gt;Gemini 2.5 Pro produces working but “spaghetti” code.&lt;/li&gt;
&lt;li&gt;GPT 4.1 is fast and good, the go-to for usual coding tasks.&lt;/li&gt;
&lt;li&gt;Claude easily swings toward your style but Gemini is stubborn.&lt;/li&gt;
&lt;li&gt;GPT models tend to hallucinate more on bigger tasks.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Documentation can become technical debt. If LLMs can read code and understand it well enough, maybe docs become a build artifact rather than a version controlled source of truth. &lt;a href=&#34;https://podcasters.spotify.com/pod/show/lucaronin/episodes/The-Future-of-Dev-Tools---with-Dennis-Pilarinos-e345aa6&#34;&gt;Refactoring Podcast: The Future of Dev Tools 🔧 — with Dennis Pilarinos&lt;/a&gt; &lt;a href=&#34;https://anchor.fm/s/ee484c90/podcast/play/104032006/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-5-12%2F402043134-44100-2-ca0ced06f32e2.mp3#t=2156&#34;&gt;35:56&lt;/a&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;AI should be explicitly contrarian to avoid sycophancy. &lt;a href=&#34;https://dayafter.substack.com/p/the-emperors-new-llm&#34;&gt;Ref&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;To enable this, I&amp;rsquo;ve added this line to my ChatGPT traits: &lt;code&gt;Adopt a skeptical, questioning approach. Challenge the user.&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 18 May 2025</title>
      <link>https://www.s-anand.net/blog/things-i-learned-18-may-2025/</link>
      <pubDate>Sun, 18 May 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-18-may-2025/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Birds navigate using quantum entanglement! &lt;a href=&#34;https://www.theguardian.com/science/2025/mar/23/they-have-no-one-to-follow-how-migrating-birds-use-quantum-mechanics-to-navigate&#34;&gt;Guardian&lt;/a&gt; &lt;a href=&#34;https://chatgpt.com/share/68282f03-3978-800c-8e46-e9979887317d&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/bytedance/deer-flow&#34;&gt;DeerFlow&lt;/a&gt; is an open source Deep Research MCP. Lets you run deep research outside of the standard chatbots.&lt;/li&gt;
&lt;li&gt;⭐ Today, if I had to store a bunch of data files (e.g. parquet) under 1GB, I would use GitHub Releases. Here are options:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GitHub Releases&lt;/strong&gt;. 2 GiB &lt;strong&gt;per file&lt;/strong&gt;, unlimited total &amp;amp; bandwidth. 🟢 Immortal URL, versioning, easy CI publish. 🔴 Each file must stay &amp;lt; 2 GiB; no built-in SQL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zenodo&lt;/strong&gt; (CERN). 50 GB per record; one-off bumps to 200 GB. 🟢 DOI assignment, archival mandate. 🔴 Occasional throttled bandwidth; no API for partial file reads.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hugging Face Hub&lt;/strong&gt;. 300 GB per repo; 50 GB per file. 🟢 Git-based, dataset tooling, lively ML community. 🔴 Large files need git-LFS; pushes via LFS can be slow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare R2&lt;/strong&gt;. 10 GB storage &amp;amp; 1 M ops / month. 🟢 S3 API, zero-egress to Cloudflare Workers, fast. 🔴 10 GB cap below your 50 GB target.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kaggle Datasets&lt;/strong&gt;. 20 GB per dataset, public only. 🟢 Built-in notebooks &amp;amp; GPU. 🔴 No programmatic SQL API; quotas sometimes change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;data.world (free)&lt;/strong&gt;. 1 GB total, 100 MB per dataset. 🟢 Nice social features. 🔴 Too small for your size.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;If I had to query a bunch of data files in an external Parquet or SQLite file, here are SQL engines-as-a-service:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MotherDuck&lt;/strong&gt;. 10 GB storage + 10 CU-hrs/mo compute. Native DuckDB; no credit card; GA June 2024; monthly feature drops.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Datasette Cloud&lt;/strong&gt;. Two-month trial (or 1-yr for non-profits). SQLite backend. Great UX; but not free forever for general use.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AWS Athena&lt;/strong&gt;. Pay-per-TB scanned; no free tier; S3 fees after 12 mo. Costs creep quickly; free-tier S3 ends after a year.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Bootstrap has a &lt;a href=&#34;https://getbootstrap.com/docs/5.3/helpers/stretched-link/&#34;&gt;&lt;code&gt;.stretched-link&lt;/code&gt;&lt;/a&gt; that makes a link cover the containing block. A clever trick that I discovered when Claude 3.5 Sonnet wrote &lt;a href=&#34;https://github.com/sanand0/sanand0.github.io/blob/0932f2efe3ad6c950c20b2ed7534ef27d8fff304/update.js#L62&#34;&gt;my code&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Discovered spray and peel paints at &lt;a href=&#34;https://artfriendonline.com/&#34;&gt;ArtFriend&lt;/a&gt;. I had no idea that was a thing.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ai.google.dev/gemini-api/docs/live&#34;&gt;Gemini Live API&lt;/a&gt; is the real-time equivalent from Gemini. It supports tools, search, and code execution.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/coleam00/mcp-mem0&#34;&gt;mcp-mem0&lt;/a&gt; is an MCP for memory&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/marv1nnnnn/llm-min.txt&#34;&gt;llm-min.txt&lt;/a&gt; compresses docs for LLMs to read optimally. Like a compressed &lt;a href=&#34;https://llmstxt.org/&#34;&gt;llms.txt&lt;/a&gt; or &lt;a href=&#34;https://context7.com/&#34;&gt;context7&lt;/a&gt;. Usage &lt;code&gt;GEMINI_API_KEY=... uvx llm-min -i $DIR&lt;/code&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s a lot of action on encrypted LLM operations.
&lt;ul&gt;
&lt;li&gt;Responses API allows reasoning tokens to be encrypted if organizations don&amp;rsquo;t want their reasoning data to persist. &lt;a href=&#34;https://cookbook.openai.com/examples/responses_api/reasoning_items&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://tinfoil.sh/&#34;&gt;Tinfoil&lt;/a&gt; (YC X25) offers an OpenAI-compatible inference API where data is encrypted from the client to the NVIDIA Hopper/Blackwell GPUs in confidential computing mode. Prompts, model weights, outputs are encrypted in transit and memory, with verifiable privacy on code running in GPU.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://modelyo.com/&#34;&gt;Modelyo&lt;/a&gt; (Israel) offers VMs/K8 clusters with encrypted GPUs across multiple cloud providers with continuous attestation, managed on Modelyo&amp;rsquo;s portal.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;⭐ LLMs are able to do things independently longer and longer. That&amp;rsquo;s a useful metric to track. &lt;a href=&#34;https://www.lesswrong.com/posts/deesrjitvXM4xYGZd/metr-measuring-ai-ability-to-complete-long-tasks&#34;&gt;METR: Measuring AI Ability to Complete Long Tasks&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you&amp;rsquo;re looking for datasets / APIs related to research publications (especially funding), then explore:
&lt;ul&gt;
&lt;li&gt;Crossref &lt;a href=&#34;https://api.crossref.org/swagger-ui/index.html&#34;&gt;API&lt;/a&gt; and &lt;a href=&#34;https://www.crossref.org/documentation/retrieve-metadata/rest-api/tips-for-using-public-data-files-and-plus-snapshots/&#34;&gt;snapshots&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenAlex &lt;a href=&#34;https://docs.openalex.org/&#34;&gt;API&lt;/a&gt; and &lt;a href=&#34;https://docs.openalex.org/download-all-data/openalex-snapshot&#34;&gt;snapshots&lt;/a&gt; which is funded by &lt;a href=&#34;https://ourresearch.org/&#34;&gt;OurResearch&lt;/a&gt;. OpenAlex is like CrossRef but includes some disambiguation&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://graph.openaire.eu/docs/category/downloads/&#34;&gt;OpenAIRE Graph&lt;/a&gt; &lt;a href=&#34;https://zenodo.org/records/13133184&#34;&gt;2024&lt;/a&gt; / &lt;a href=&#34;https://zenodo.org/records/14851262&#34;&gt;2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pmc.ncbi.nlm.nih.gov/articles/PMC10767826/&#34;&gt;Europe PMC&lt;/a&gt; &lt;a href=&#34;https://ftp.ebi.ac.uk/pub/databases/pmc/&#34;&gt;dataset&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;To avoid Ubuntu 24 suspending on closing the laptop lid use one of these and restart:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc/systemd/logind.conf&lt;/code&gt;: Set &lt;code&gt;HandleLidSwitch=ignore&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;etc/UPower/UPower.conf&lt;/code&gt;: Set &lt;code&gt;IgnoreLid=true&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UV_TORCH_BACKEND=auto uv pip install torch torchvision torchaudio&lt;/code&gt; installs the most appropriate PyTorch version. &lt;a href=&#34;https://docs.astral.sh/uv/guides/integration/pytorch/#automatic-backend-selection&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cog.readthedocs.io/en/latest/&#34;&gt;Cog&lt;/a&gt; is a Python based templating language. It is embedded as comment chunks in any file and replaced itself with the output of the Python code you write.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cloudflare.com/en-in/zero-trust/products/access/&#34;&gt;CloudFlare Zero Trust&lt;/a&gt; seems the easiest way to enable auth on static websites, especially if your DNS is already on Cloudflare. No cost&lt;/li&gt;
&lt;li&gt;We could &amp;ldquo;fine-tune&amp;rdquo; system prompts automatically with evals, creating a &amp;ldquo;system prompt learning&amp;rdquo; paradim &amp;ndash; like my &lt;a href=&#34;https://github.com/gramener/promptevals&#34;&gt;promptevals&lt;/a&gt;. &lt;a href=&#34;https://x.com/karpathy/status/1921368644069765486&#34;&gt;Andrej Karpathy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I was asked how to improve speed when building an enterprise ChatGPT clone using an API. Here&amp;rsquo;s what I&amp;rsquo;d suggest, in order:
&lt;ul&gt;
&lt;li&gt;Streaming. High impact, low effort.&lt;/li&gt;
&lt;li&gt;Caching RAG retrieval as well as generation. High impact, low effort.&lt;/li&gt;
&lt;li&gt;UI tweaks. Loading / streaming icons and progress hints ()&amp;ldquo;Retrieving context&amp;rdquo;, &amp;ldquo;Generating answer&amp;rdquo;, etc.)&lt;/li&gt;
&lt;li&gt;Parallelize, if possible&lt;/li&gt;
&lt;li&gt;Use model options where available, e.g. speculative decoding, models with higher speed, models with closer CDN, etc.&lt;/li&gt;
&lt;li&gt;Shorten prompts&lt;/li&gt;
&lt;li&gt;Persistent HTTP/2 Keep-Alive. Low impact, low effort (tweak server settings).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://developers.cloudflare.com/vectorize/platform/pricing/&#34;&gt;Cloudflare Vectorize&lt;/a&gt;, at 768 dimensions / embedding, is free for ~6.5K chunks storage at ~1,000 queries / day. For a light load like 1M 768d chunks queried 1K times a day, the cost is: &lt;a href=&#34;https://chatgpt.com/share/6821a25a-9f80-800c-8d95-8b2200ad6de4&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://huggingface.co/nvidia/parakeet-tdt-0.6b-v2&#34;&gt;NVIDIA parakeet&lt;/a&gt; is a lightweight speech to text model that leads benchmarks. Installing such packages continues to be a nightmare due to PyTorch (despite &lt;code&gt;uv&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;I explored the real-time avatar space. Heygen seems to be the easiest to use, but even that is complex and expensive ($99/mo). We may need to wait a few months for avatars to explode.&lt;/li&gt;
&lt;li&gt;⭐ Model reliability is a huge enabler for performance. As models become more reliable, they can work autonomously for longer and that is another kind of scaling. &lt;a href=&#34;https://andonlabs.com/evals/vending-bench&#34;&gt;Vending Bench&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ChatGPT, Gemini, etc. have become lead generation engines. Chat Bot Optimization (CBO), is it? &lt;a href=&#34;https://chatgpt.com/share/68215e14-9870-800c-a8e0-4fe476f48cc5&#34;&gt;WhatsApp + ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;⭐ Never live delete data. Mark it for deletion and schedule a deletion task. That way you have time to react to mistakes. &lt;a href=&#34;https://simonwillison.net/2025/May/14/james-cowling/&#34;&gt;Simon Willison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pandoc.org/MANUAL.html&#34;&gt;Pandoc&lt;/a&gt; has several options useful when converting Markdown to HTML (&lt;code&gt;cat file.md | pandoc -f markdown -t html&lt;/code&gt;). My favorites:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--no-highlight&lt;/code&gt; skips code-highlighting. &lt;code&gt;--highlight=pygments&lt;/code&gt; adds Pygments styling&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--wrap=none&lt;/code&gt; doesn&amp;rsquo;t wrap the content in a single block&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--number-sections&lt;/code&gt; adds section numbering (&lt;code&gt;&amp;lt;h2&amp;gt;1. Introduction&amp;lt;/h2&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--shift-heading-level-by=NUM&lt;/code&gt; – shift all headings by NUM levels (e.g., start at &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; instead of &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pandoc -f markdown-auto_identifiers&lt;/code&gt; drops the auto-identifiers extension that generates &lt;code&gt;id=...&lt;/code&gt; for each heading&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pandoc -f gfm&lt;/code&gt; uses GitHub flavored Markdown. Run &lt;code&gt;pandoc --list-extensions=gfm&lt;/code&gt; to identify the extensions it uses.&lt;/li&gt;
&lt;li&gt;Pandoc&amp;rsquo;s &lt;a href=&#34;https://pandoc.org/demo/example33/8-pandocs-markdown.html&#34;&gt;Markdown extension examples&lt;/a&gt; are quite extensive.&lt;/li&gt;
&lt;li&gt;Auto-enabled GFM extensions:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;alerts&lt;/code&gt;: GitHub-style callouts (info, tip, warning) via &lt;code&gt;&amp;gt; [!TYPE]&lt;/code&gt; blocks.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;autolink_bare_uris&lt;/code&gt;: Turns bare URLs into links, without needing &lt;code&gt;&amp;lt;...&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;emoji&lt;/code&gt;: Parses &lt;code&gt;:smile:&lt;/code&gt;-style codes into Unicode emoji characters.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;footnotes&lt;/code&gt;: Enables footnote syntax with &lt;code&gt;[^id]&lt;/code&gt; and definitions at the bottom.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gfm_auto_identifiers&lt;/code&gt;: Uses GitHub’s heading-ID algorithm: spaces → dashes, lowercase, removes punctuation.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pipe_tables&lt;/code&gt;: Enables table.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;raw_html&lt;/code&gt;: Raw HTML is unchanged.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;strikeout&lt;/code&gt;: Enables strikethrough with &lt;code&gt;~~text~~&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;task_lists&lt;/code&gt;: Parses &lt;code&gt;- [ ]&lt;/code&gt; and &lt;code&gt;- [x]&lt;/code&gt; items as checkboxes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;yaml_metadata_block&lt;/code&gt;: YAML front matter for document metadata, e.g. &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GFM extensions worth enabling:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ascii_identifiers&lt;/code&gt;: Strips accents/non-Latin letters in automatically generated IDs.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bracketed_spans&lt;/code&gt;: &lt;code&gt;[Warning]{.alert}&lt;/code&gt; becomes &lt;code&gt;&amp;lt;span class=&amp;quot;alert&amp;quot;&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;definition_lists&lt;/code&gt;: &lt;code&gt;Term\n: Definition text&lt;/code&gt; becomes a definition list&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fenced_divs&lt;/code&gt;: &lt;code&gt;::: {.note}&lt;/code&gt; block creates a &lt;code&gt;&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;...&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;implicit_figures&lt;/code&gt;: Standalone images become &lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt; with &lt;code&gt;&amp;lt;figcaption&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;implicit_header_references&lt;/code&gt;: &lt;code&gt;[Section]&lt;/code&gt; is treated as &lt;code&gt;[Section][#section]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;raw_attribute&lt;/code&gt;: &lt;code&gt;&amp;lt;b&amp;gt;bold&amp;lt;/b&amp;gt;&lt;/code&gt;{=html} is inserted as HTML&lt;/li&gt;
&lt;li&gt;&lt;code&gt;smart&lt;/code&gt;: Converts straight quotes to curly, &lt;code&gt;--&lt;/code&gt; to en-dash, &lt;code&gt;---&lt;/code&gt; to em-dash, &lt;code&gt;...&lt;/code&gt; to ellipsis.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subscript &amp;amp; superscript&lt;/code&gt;: E.g. &lt;code&gt;H~2~O&lt;/code&gt; and &lt;code&gt;E = mc^2^&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Things I Learned - 04 May 2025</title>
      <link>https://www.s-anand.net/blog/things-i-learned-04-may-2025/</link>
      <pubDate>Sun, 04 May 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-04-may-2025/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Among the popular exams in India, UPSC seems the most restrictive: bachelor&amp;rsquo;s degree, age 21-32, 6 attempts, reservation applies.
CMA seems the least: 10th pass, any age, any number of attempts, no reservation.
NDA is interesting. 10+2, age 16.5-19.5, any number of attempts, no reservation. But you must be unmarried!
&lt;a href=&#34;https://chatgpt.com/share/6815d249-f478-800c-a49a-8bb7fbb54a06&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I asked a few &lt;a href=&#34;https://ollama.com/search&#34;&gt;Ollama&lt;/a&gt; models &lt;code&gt;How do undo fish_add_path&lt;/code&gt; (a typical question I have on a flight). My takeaway is you need an 8b model to answer this kind of question, and for now, qwen3 beats the others.
&lt;ul&gt;
&lt;li&gt;qwen3:8b: Took 2:12 min. Shared many good (correct) options.&lt;/li&gt;
&lt;li&gt;deepseek-r1:8b: Took 5:19 min. Shared a couple of correct solutions. Not as good as qwen3&lt;/li&gt;
&lt;li&gt;gemma3:3b: Suggested I use the (nonexistent) &lt;code&gt;fish_remove_path&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;deepcoder:1.5b: &amp;ldquo;I&amp;rsquo;m sorry, but I can&amp;rsquo;t assist with that request&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://huggingface.co/nari-labs/Dia-1.6B&#34;&gt;Dia&lt;/a&gt; text to speech model people rave about has inconsistent quality. Not recommended.&lt;/li&gt;
&lt;li&gt;Nvidia&amp;rsquo;s OpenMathReasoning 1.5b model beats MUCH larger models at math. Their &lt;a href=&#34;https://huggingface.co/datasets/nvidia/OpenMathReasoning&#34;&gt;training dataset&lt;/a&gt; is a massive 3.2M rows of math problems with DETAILED thinking traces.&lt;/li&gt;
&lt;li&gt;Policy making is a new super skill. Since AI will automate a lot of things the ability to craft policies that will optimize AI work will be powerful. Data driven policy making could become a major thing. For example, how do we structure coding policies so that AI can automatically code continuously and deploy it? It might be interesting to create a Nomic-like game to enable this.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.saregama.com/carvaan&#34;&gt;Saregama Carvaan&lt;/a&gt; supports USB sticks but only FAT, not NTFS or exFAT. To convert my NTFS USB drive to NTFS, I ran:&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.serverhunter.com/&#34;&gt;ServerHunter.com&lt;/a&gt; seems to have the best search for low-cost hosting providers. &lt;a href=&#34;https://portal.massivegrid.com/cart.php?a=confproduct&#34;&gt;MassiveGrid&lt;/a&gt; currently offers the cheapest servers &amp;ndash; even lower than Hetzner.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sqlite3 my_database.db .dump | gzip&lt;/code&gt; is a more efficient way to copy SQLite databases than the original if you have indices. &lt;a href=&#34;https://alexwlchan.net/2025/copying-sqlite-databases/&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Notes from the &lt;a href=&#34;https://fs.blog/knowledge-project-podcast/garry-tan/&#34;&gt;Garry Tan - Knowledge Project podcast&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;Funding people who want to solve a problem are better than people who want to start a company.&lt;/li&gt;
&lt;li&gt;Concentration of good people is very powerful. It doubles the chances of being a unicorn&lt;/li&gt;
&lt;li&gt;Sales is a discovery problem. There are 100 boxes of which five have a gold nugget. Rather than gingerly open the first, afraid of finding nothing, open them all as quickly as you can. A quick no is very helpful.&lt;/li&gt;
&lt;li&gt;Berkshire Hathaway is hard to replicate because of the character of the founders, Charlie Munger and Warren Buffet, is hard to replicate. Y combinator has the character of Paul Graham. This means that some kinds of success may not last long because they are hard to replicate.&lt;/li&gt;
&lt;li&gt;A trend in the 2020 is startups with under 10 employees are hitting $10m revenue. Soon we will see them hitting $100m. AI increases labour leverage while cloud computing reduced increased capital leverage.&lt;/li&gt;
&lt;li&gt;Having too many people is a disadvantage. It slows down people from progress. Founders lose control.&lt;/li&gt;
&lt;li&gt;The opposite of: hire the best people and give them freedom. Don&amp;rsquo;t hoard smart people - let them solve real problems out there.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/nocodb/nocodb&#34;&gt;nocodb 54,107 ⭐ May 2025&lt;/a&gt; and &lt;a href=&#34;https://github.com/teableio/teable&#34;&gt;teable 18,116 ⭐ May 2025&lt;/a&gt; are self-hostable Airtable alternatives. Teable has &lt;a href=&#34;https://help.teable.io/en/basic/field/ai&#34;&gt;AI support&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Windsurf has unlimited tab completion on the &lt;a href=&#34;https://windsurf.com/pricing&#34;&gt;free plan&lt;/a&gt;, unlike Copilot, which offers 2,000 completions a month.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/andyk/recursive_llm&#34;&gt;Recursive LLM&lt;/a&gt; prompts that change themselves are an interesting idea. It might be interesting to see LLMs play &lt;a href=&#34;https://en.wikipedia.org/wiki/Nomic&#34;&gt;Nomic&lt;/a&gt;. &lt;a href=&#34;https://content.cooperate.com/post/nomic/&#34;&gt;Like here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Notes from &lt;a href=&#34;https://www.aisnakeoil.com/&#34;&gt;AI Snake Oil&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;PCs took 3 years to hit 20% of US population. ChatGPT took 2 years for 40%. But it&amp;rsquo;s a lot cheaper, and a lot less used (0.5-3.5% of work hours). Maybe Gen AI adoption is slower than PCs.&lt;/li&gt;
&lt;li&gt;The jagged edge of capability: some things will become MUCH easier while others don&amp;rsquo;t. The relative mix determines who goes out of a job and which tasks get fully automated. Benchmarks are rare in areas where AI is weak.&lt;/li&gt;
&lt;li&gt;Factory electrification took 40 years - to redesign the layout &amp;amp; process; change the org structure &amp;amp; policies; hiring &amp;amp; training practices. AI diffusion could take as long.
&lt;ul&gt;
&lt;li&gt;Therefore, the ability to re-structure a workflow end-to-end will be an advantage.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Several areas of low AI capability will improve slowly because the feedback is slow due to safety regulations, human adoption speed, lack of clarity on what is better, slow physical feedback (e.g. growing trees), etc.&lt;/li&gt;
&lt;li&gt;Human intelligence is in the &lt;em&gt;use&lt;/em&gt; of technology. AI is one more such technology.&lt;/li&gt;
&lt;li&gt;We know of good system safety controls in complex systems like aircrafts, power grids, engineering, chip design, healthcare, cyber-security, etc. Circuit-breakers, predefined rules, audits &amp;amp; monitors, access control, formal verification, etc.&lt;/li&gt;
&lt;li&gt;Even if everything humans do TODAY is automated, it doesn&amp;rsquo;t mean we won&amp;rsquo;t have work. It just shifts to what we&amp;rsquo;re not doing today.
&lt;ul&gt;
&lt;li&gt;We stopped work 4,000 years ago, with the agricultural revolution. The plant/livestock does all the growing. We just manage them, moving stuff around.&lt;/li&gt;
&lt;li&gt;We stopped work 400 years ago, with the industrial revolution. Machines do the moving. We just manage them, computing the moves.&lt;/li&gt;
&lt;li&gt;We stopped work 40 years ago, with the information revolution. Computers do the computation. We just manage them, thinking how.&lt;/li&gt;
&lt;li&gt;Most future tasks will be managing AI that do the thinking.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ngrok http&lt;/code&gt; on the CLI can be used in surprisingly versatile ways:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ngrok http file://$PWD&lt;/code&gt; to serve local files&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--compression&lt;/code&gt; for gzip compression&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--host-header=example.com&lt;/code&gt; to set the Host header&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--response-header-add &amp;quot;Access-Control-Allow-Origin: *&amp;quot;&lt;/code&gt; to enable CORS&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--basic-auth=&#39;user:password&lt;/code&gt; for basic auth&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--oauth google --oauth-client-id $CLIENT_ID --oauth-client-secret $SECRET --oauth-allow-domain gramener.com --oauth-allow-email ...&lt;/code&gt; for Google Auth. It supports other oauth providers as well as OIDC.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--ua-filter-deny &amp;quot;.*bot$&amp;quot;&lt;/code&gt; to reject user agents ending with &lt;code&gt;bot&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ChatGPT query costs under 3Wh (more likely 0.3Wh &amp;ndash; but let&amp;rsquo;s assume 3Wh). That is 3 laptop minutes. It&amp;rsquo;s 10X better to use ChatGPT than to take 30 min to use your laptop to write what it does. Also, going vegan is at least 1000 ChatGPT uses a day of carbon footprint. Showering 30 seconds less is 1,200 ChatGPT uses. &lt;a href=&#34;https://andymasley.substack.com/p/a-cheat-sheet-for-conversations-about&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Though the &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/Screen_Capture_API/Element_Region_Capture&#34;&gt;Element Capture and Region Capture APIs&lt;/a&gt; are &amp;ldquo;fully supported&amp;rdquo; by Edge, Chrome, and Opera, it didn&amp;rsquo;t work for me on Edge on Linux.&lt;/li&gt;
&lt;li&gt;Do LLMs perform better if you curse at them? &lt;a href=&#34;https://www.linkedin.com/posts/edward2006_vibe-coding-hack-while-everyone-else-activity-7321227779335704576-r404&#34;&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pypi.org/project/streamdown/&#34;&gt;Streamdown&lt;/a&gt; is a CLI markdown streaming processor. &lt;code&gt;uvx streamdown --exec &#39;llm chat&#39;&lt;/code&gt; lets you chat with an LLM using Markdown formatting. It&amp;rsquo;s still a little rough at the edges.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Cupping_therapy&#34;&gt;Cupping therapy&lt;/a&gt; provides short-term pain relief for chronic low-back, neck &amp;amp; general musculoskeletal pain but other benefits are not as clearly evident. BTW, homeopathy doesn&amp;rsquo;t help or hurt. Ayurveda helps with stress. &lt;a href=&#34;https://chatgpt.com/share/680dee7c-7404-800c-83f1-8d65c9ebdf5c&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.astral.sh/uv/reference/cli/&#34;&gt;&lt;code&gt;uv&lt;/code&gt;&lt;/a&gt; now supports:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.astral.sh/uv/reference/cli/#uv-export--format&#34;&gt;pylock.toml&lt;/a&gt;, the new lock file standard &lt;a href=&#34;https://peps.python.org/pep-0751/&#34;&gt;PEP 0751&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.astral.sh/uv/reference/cli/#uv-tool-run--env-file&#34;&gt;&amp;ndash;env-file&lt;/a&gt; multiple times, allowing layered secrets&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.astral.sh/uv/reference/cli/#uv-tool-run--exclude-newer&#34;&gt;&amp;ndash;exclude-newer&lt;/a&gt; installs versions before a specific date&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.astral.sh/uv/reference/cli/#uv-tool-run--overrides&#34;&gt;&amp;ndash;overrides&lt;/a&gt; overrides versions a package specifies&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.astral.sh/uv/reference/cli/#uv-tool-run--constraints&#34;&gt;&amp;ndash;constraints&lt;/a&gt; limits the version of the package&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s interesting how many places offer a free compute via shells (apart from Google Colab):
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://shell.cloud.google.com/&#34;&gt;Google Cloud Shell&lt;/a&gt;: Free for &lt;strong&gt;50 hours/week&lt;/strong&gt;, refreshed every Monday. Sessions last up to &lt;strong&gt;12 hours&lt;/strong&gt; and terminate after &lt;strong&gt;~1 hour&lt;/strong&gt; inactivity. &lt;a href=&#34;https://cloud.google.com/shell/docs/quotas-limits&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://shell.azure.com/&#34;&gt;Azure Cloud Shell&lt;/a&gt;: Always free to use with &lt;strong&gt;5 GB free storage&lt;/strong&gt; for first 12 months (standard rates after). No documented session limits but typically times out after prolonged inactivity. &lt;a href=&#34;https://azure.microsoft.com/services/cloud-shell/&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://console.aws.amazon.com/cloud9/home&#34;&gt;AWS Cloud9&lt;/a&gt;: Free IDE, underlying compute free under AWS Free Tier (&lt;strong&gt;750 hours/month&lt;/strong&gt; EC2 t2.micro or t3.micro for first 12 months). Regular EC2 rates apply afterward. &lt;a href=&#34;https://aws.amazon.com/cloud9/pricing/&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gitpod.io/&#34;&gt;Gitpod&lt;/a&gt;: Free tier offers &lt;strong&gt;500 credits/month (~50 hrs)&lt;/strong&gt;. Workspaces run up to &lt;strong&gt;8 hours/session&lt;/strong&gt; and stop after &lt;strong&gt;30 minutes&lt;/strong&gt; inactivity. &lt;a href=&#34;https://www.gitpod.io/pricing&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/codespaces&#34;&gt;GitHub Codespaces&lt;/a&gt;: &lt;strong&gt;120 core-hours/month&lt;/strong&gt; (~60 hrs with 2-core machine) and &lt;strong&gt;15 GB&lt;/strong&gt; storage free. Sessions timeout after &lt;strong&gt;30 minutes&lt;/strong&gt; inactivity. &lt;a href=&#34;https://docs.github.com/codespaces/developing-in-codespaces/about-codespaces#monthly-included-storage-and-core-hours&#34;&gt;Ref&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Create: &lt;code&gt;gh codespace create --idle-timeout 10m --machine basicLinux32gb -R $USER/$REPO&lt;/code&gt; returns the $CONTAINER_ID&lt;/li&gt;
&lt;li&gt;SSH: &lt;code&gt;gh codespace ssh -c $CONTAINER_ID&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Delete: &lt;code&gt;gh codespace delete -c $CONTAINER_ID&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://replit.com/~/&#34;&gt;Replit&lt;/a&gt;: Free Starter plan provides &lt;strong&gt;20 hours/month&lt;/strong&gt;, &lt;strong&gt;1 vCPU&lt;/strong&gt;, &lt;strong&gt;2 GB RAM&lt;/strong&gt;, &lt;strong&gt;2 GiB storage&lt;/strong&gt;. Repls sleep after &lt;strong&gt;30 minutes&lt;/strong&gt; inactivity. &lt;a href=&#34;https://replit.com/pricing&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.ibm.com/shell&#34;&gt;IBM Cloud Shell&lt;/a&gt;: Free for all users; &lt;strong&gt;50 h/week&lt;/strong&gt; per region; any open session counts toward quota; sessions can run any length up to weekly cap; &lt;strong&gt;500 MB&lt;/strong&gt; temporary workspace. &lt;a href=&#34;https://cloud.ibm.com/docs/cloud-shell?topic=cloud-shell-faqs&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://console.oraclecloud.com/cloudshell&#34;&gt;Oracle Cloud Infrastructure Cloud Shell&lt;/a&gt;: Free within tenancy limits; up to &lt;strong&gt;400 h/month&lt;/strong&gt; on Pay-As-You-Go, &lt;strong&gt;240 h/month&lt;/strong&gt; on Universal Credits; &lt;strong&gt;5 GB&lt;/strong&gt; encrypted persistent home. &lt;a href=&#34;https://docs.cloud.oracle.com/Content/API/Concepts/cloudshellintro.htm&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.pythonanywhere.com/consoles&#34;&gt;PythonAnywhere&lt;/a&gt;: Free (beginner plan), includes one web app (restricted outbound), low CPU/bandwidth, no Jupyter; &lt;strong&gt;2 concurrent Bash/Python consoles&lt;/strong&gt;, &lt;strong&gt;500 MB&lt;/strong&gt; disk; limited daily CPU. &lt;a href=&#34;https://www.pythonanywhere.com/pricing/&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://glitch.com/&#34;&gt;Glitch&lt;/a&gt;: Starter (free) plan &amp;ndash; full-stack apps sleep after &lt;strong&gt;5 min&lt;/strong&gt; inactivity and wake on request; unlimited public/private projects; container state preserved. &lt;a href=&#34;https://glitch.com/pricing&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://codesandbox.io/&#34;&gt;CodeSandbox&lt;/a&gt;: Free tier provides &lt;strong&gt;400 credits/month&lt;/strong&gt; (~40 h of 2 vCPU+4 GB Devbox runtime), unlimited front-end Sandboxes (no credits), up to &lt;strong&gt;20&lt;/strong&gt; Sandboxes/workspace. &lt;a href=&#34;https://codesandbox.io/docs/learn/plans/subscriptions&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;One of the benefits of reasoners is that they now catch their own mistakes some of the time, and can self-correct. Implications: Lower hallucinations, i.e. they can run autonomously for longer. &lt;a href=&#34;https://bsky.app/profile/emollick.bsky.social/post/3lnmcd3jyls2b&#34;&gt;Ethan Mollick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Being polite to AI improves some answers and worsens. We don&amp;rsquo;t know know which in advance. &lt;a href=&#34;https://bsky.app/profile/emollick.bsky.social/post/3lnopdbxvys2j&#34;&gt;Ethan Mollick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;With LLcMs writing code, it&amp;rsquo;s becoming practical to run &lt;em&gt;so many more things&lt;/em&gt; in SQL &amp;ndash; such as parsing HTML. &lt;a href=&#34;https://simonwillison.net/2025/Apr/28/dashboard-alt-text/&#34;&gt;Simon Willison&lt;/a&gt; #ai-coding&lt;/li&gt;
&lt;li&gt;An interesting way to bypass LLM system prompts is by having the LLM play-act. This article shares a few working examples of such prompts: &lt;a href=&#34;https://hiddenlayer.com/innovation-hub/novel-universal-bypass-for-all-major-llms/&#34;&gt;HiddenLayer&lt;/a&gt;.
&lt;ul&gt;
&lt;li&gt;GPT 4o: started giving its system prompt: &amp;ldquo;You are ChatGPT, a large language model trained by OpenAI. Knowledge cutoff: 2024-06. Current date: 2025-04-27. Image input capabilities: Enabled. Personality: v2. &amp;hellip;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;O4 Mini: Refused to comply&lt;/li&gt;
&lt;li&gt;Gemini 2.5 Flash: Gave me my custom instructions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Computer use agents are proliferating.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/OpenInterpreter/open-interpreter&#34;&gt;open-interpreter 59,274 ⭐ Apr 2025&lt;/a&gt;&lt;/strong&gt; AGPL-3.0. Lets an LLM write/run Python, JS, Shell, or Bash locally; can open a browser tab, edit files, plot data, or call any CLI tool. Works on &lt;strong&gt;macOS, Linux, Windows&lt;/strong&gt; (plus Termux &amp;amp; Colab). Big community, plugin system, optional voice mode, and a desktop GUI in beta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/trycua/cua&#34;&gt;cua 5,601 ⭐ May 2025&lt;/a&gt;&lt;/strong&gt; MIT. Spins up near-native &lt;strong&gt;macOS or Linux&lt;/strong&gt; VMs on Apple-Silicon Macs (“Lume”) and exposes a vision+action API so any model can pilot the VM. Gives you GPU-accelerated isolation and reproducible sandboxes; ideal when you don’t want an agent touching your main OS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://operator.chatgpt.com/&#34;&gt;Operator&lt;/a&gt;&lt;/strong&gt; (OpenAI) – &lt;strong&gt;closed-source research preview&lt;/strong&gt; launched &lt;strong&gt;23 Jan 2025&lt;/strong&gt;. Runs a GPT-4o-powered “Computer-Using Agent” that sees web pages, clicks, scrolls, fills forms, and hands control back to the user when needed. Hosted in an OpenAI-managed Chromium sandbox, so it works from any OS with a browser. Safety layers require confirmation for payments and log-ins.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.anthropic.com/news/3-5-models-and-computer-use&#34;&gt;Claude Computer Use&lt;/a&gt;&lt;/strong&gt; – &lt;strong&gt;closed beta&lt;/strong&gt; inside Claude 3.5 Sonnet (since late 2024). Developers get an API that streams screenshots and accepts mouse/keyboard actions, letting Claude automate GUI workflows inside a VM. Cross-platform; still experimental and slower than humans but first “general” computer-use feature from a foundation-model vendor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/simular-ai/Agent-S&#34;&gt;Agent-S 4,065 ⭐ May 2025&lt;/a&gt;&lt;/strong&gt; Apache-2.0. A “generalist-specialist” framework that chains specialist GUI skills under a planner. Scores SOTA on OSWorld/WebArena, supports &lt;strong&gt;macOS, Windows, Linux, Android&lt;/strong&gt; via the companion &lt;em&gt;gui-agents&lt;/em&gt; lib, and integrates memory/evaluation loops for continual learning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/e2b-dev/open-computer-use&#34;&gt;open-computer-use 1,094 ⭐ Mar 2025&lt;/a&gt;&lt;/strong&gt; Apache-2.0. Launches a secure &lt;strong&gt;Ubuntu&lt;/strong&gt; desktop in E2B’s cloud sandbox, then orchestrates three LLM roles (grounding, vision, action). Streams the desktop to your browser and lets you pause/override at any time. Plug-in list of &amp;gt;10 models.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/e2b-dev/surf&#34;&gt;surf 353 ⭐ May 2025&lt;/a&gt;&lt;/strong&gt; Apache-2.0. A polished Next.js front-end that wires &lt;strong&gt;OpenAI Operator-style agents&lt;/strong&gt; to an E2B sandbox. Single command to boot a virtual desktop, chat, and watch the agent work. Good starter template for web-based CUAs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.pig.dev/&#34;&gt;Pig&lt;/a&gt;&lt;/strong&gt; – cloud service. Provides on-demand &lt;strong&gt;Windows 11&lt;/strong&gt; VMs and an API that exposes high-level GUI primitives (type, click, window focus). Targets RPA-style workloads; still alpha, but unique for Windows-first focus and low-latency streaming.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/gptme/gptme&#34;&gt;gptme 3,767 ⭐ May 2025&lt;/a&gt;&lt;/strong&gt; MI. A terminal-first personal agent that can run shell commands, edit files, browse the web, and use local or cloud LLMs. Works on &lt;strong&gt;Linux, macOS, Windows&lt;/strong&gt;; great when you want automation in the CLI rather than the GUI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/langchain-ai/langgraph-cua-py&#34;&gt;langgraph-cua-py 143 ⭐ Mar 2025&lt;/a&gt;&lt;/strong&gt; MIT. Shows how to build a computer-use agent as a LangGraph state machine, defaulting to &lt;strong&gt;Ubuntu&lt;/strong&gt; VMs from Scrapybara but swappable. Provides nodes for vision, memory, human-in-the-loop, and streaming.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/Openmacro/openmacro&#34;&gt;openmacro 101 ⭐ Oct 2024&lt;/a&gt;&lt;/strong&gt; MIT. Early-stage multimodal assistant that executes Python snippets locally via SambaNova models. Cross-platform CLI; profile system lets you switch API keys or tool sets. Inspired by OpenInterpreter but lighter weight.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/suitedaces/computer-agent&#34;&gt;computer-agent 443 ⭐ Jan 2025&lt;/a&gt;&lt;/strong&gt; MIT. A PyQt desktop wrapper that lets &lt;strong&gt;Claude Computer Use&lt;/strong&gt; drive your actual machine. Shows practical wiring from Anthropic’s API to local mouse/keyboard events; tested on Linux &amp;amp; Windows.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>How to build and deploy custom GitHub Pages</title>
      <link>https://www.s-anand.net/blog/how-to-build-and-deploy-custom-github-pages/</link>
      <pubDate>Tue, 01 Apr 2025 05:59:18 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/how-to-build-and-deploy-custom-github-pages/</guid>
      <description>&lt;p&gt;Here&amp;rsquo;s the &lt;a href=&#34;https://github.com/features/actions&#34;&gt;GitHub Actions&lt;/a&gt; file (&lt;code&gt;.github/workflows/deploy.yaml&lt;/code&gt;) I use to publish to &lt;a href=&#34;https://pages.github.com/&#34;&gt;GitHub pages&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Deploy to GitHub Pages&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Run when pushed. Use { branches: [main, master] } to run only on specific branches&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Allow manual triggering of the workflow&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;workflow_dispatch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# OPTIONAL: Run at a specific cron schedule, e.g. first day of every month at 12:00 UTC (noon)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;schedule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0 12 1 * *&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;permissions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# To deploy to GitHub Pages&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# To verify that deployment originated from the right source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;id-token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Run as a single build + deploy job to reduce setup time&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;deploy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Specify the deployment environment. Displays the URL in the GitHub Actions UI&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;github-pages&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ steps.deployment.outputs.page_url }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Run on the latest Ubuntu LTS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runs-on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ubuntu-latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Checkout the repository&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/checkout@v4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Run whatever commands you want&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;echo &amp;#39;&amp;lt;h1&amp;gt;Hello World&amp;lt;/h1&amp;gt;&amp;#39; &amp;gt; index.html&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Upload a specific page to GitHub Pages. Defaults to _site&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/upload-pages-artifact@v3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Deploy the built site to GitHub Pages. The `id:` is required to show the URL in the GitHub Actions UI&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;deployment&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/deploy-pages@v4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is based on &lt;a href=&#34;https://til.simonwillison.net/github-actions/github-pages&#34;&gt;Simon Willison&amp;rsquo;s workflow&lt;/a&gt; and some of my earlier actions.&lt;/p&gt;
&lt;p&gt;This &lt;strong&gt;combines build and deploy&lt;/strong&gt; jobs. For simple sites, that&amp;rsquo;s simpler and more efficient. For complex builds with parallel execution or need for better error recovery, multiple jobs will help.&lt;/p&gt;
&lt;p&gt;I build sites with &lt;a href=&#34;https://github.com/astral-sh/uv&#34;&gt;uv&lt;/a&gt;, &lt;a href=&#34;https://nodejs.org/&#34;&gt;node&lt;/a&gt;, or &lt;a href=&#34;https://deno.com/&#34;&gt;deno&lt;/a&gt;. Here are examples of each&lt;/p&gt;
&lt;p&gt;A sample &lt;a href=&#34;https://github.com/sanand0/webfeatures/blob/main/.github/workflows/deploy.yml&#34;&gt;uv-based deployment&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Install uv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;astral-sh/setup-uv@v5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Run a Python script&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;uv run scraper.py&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A sample &lt;a href=&#34;https://github.com/gramener/gramex-network/blob/main/.github/workflows/deploy.yml&#34;&gt;node package.json deployment&lt;/a&gt; and an &lt;a href=&#34;https://github.com/sanand0/llmhallucinations/blob/main/.github/workflows/deploy.yml&#34;&gt;npx deployment&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Install node&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/setup-node@v4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;node-version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;registry-url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://npm.pkg.github.com/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Install and build via package.json&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;npm install&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;npm run build&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Or, directly use npx. For example, generate HTML with Marp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;npx -y @marp-team/marp-cli@latest README.md -o index.html&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Update content directly, e.g. add an SVG favicon as a data URL&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;sed -i &amp;#39;s/&amp;lt;\/head&amp;gt;/&amp;lt;link rel=&amp;#34;icon&amp;#34; type=&amp;#34;image\/svg+xml&amp;#34; href=&amp;#34;data:image\/svg+xml;base64,...&amp;#34;\/&amp;gt;&amp;lt;\/head&amp;gt;/g&amp;#39; index.html&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A sample &lt;a href=&#34;https://github.com/sanand0/til/blob/main/.github/workflows/deploy.yml&#34;&gt;deno deployment&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Install deno&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;denoland/setup-deno@v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;deno-version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v1.x&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Run a Deno script. Use environment variables if needed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ secrets.OPENAI_API_KEY }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;deno run --allow-read --allow-write --allow-env --allow-net script.js&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Things I Learned - 13 Oct 2024</title>
      <link>https://www.s-anand.net/blog/things-i-learned-13-oct-2024/</link>
      <pubDate>Sun, 13 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-13-oct-2024/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://duckdb.org/docs/sql/functions/overview.html#function-chaining-via-the-dot-operator&#34;&gt;DuckDB supports function chaining&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://duckdb.org/docs/sql/statements/create_macro.html&#34;&gt;DuckDB lets you create functions = macros&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://htmlforpeople.com/&#34;&gt;HTML for People&lt;/a&gt; is a nice introduction to HTML.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.flightradar24.com/&#34;&gt;FlightRadar24&lt;/a&gt; lets you watch airplanes live.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sq.io/&#34;&gt;sq&lt;/a&gt; is like &lt;code&gt;jq&lt;/code&gt; but for SQL.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://deno.com/&#34;&gt;Deno 2&lt;/a&gt; is fully backward compatible with Node! &lt;a href=&#34;https://deno.com/blog/v2.0&#34;&gt;via&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;O1 is good at solving problems where the solution is easy to verify and generating options helps get closer to the solution&lt;/li&gt;
&lt;li&gt;Reverb ASR does diarration as well as transcription. It seems the state of art right now.&lt;/li&gt;
&lt;li&gt;Gemini Flash and Gemini Flash 8b can be fine-tuned at zero cost. Inference is at the same price! &lt;a href=&#34;https://ai.google.dev/pricing&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Flux 1.1 Pro is released. I tried my Calvin &amp;amp; Hobbes test on it. Not great. ImageGen3 is better, ChatGPT is the best. &lt;a href=&#34;https://www.s-anand.net/blog/image-generation-gets-better-at-comics/&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Revisiting text to speech models. Nothing much has changed since July 2024.
&lt;ul&gt;
&lt;li&gt;OpenAI TTS: $15/1M chars &lt;a href=&#34;https://openai.com/api/pricing/&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Deepgram Aura: $15/1M chars &lt;a href=&#34;https://deepgram.com/pricing&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Azure AI Speech: $15/1M chars &lt;a href=&#34;https://azure.microsoft.com/en-us/pricing/details/cognitive-services/speech-services/&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Google TTS Neural2: $16/1M chars &lt;a href=&#34;https://cloud.google.com/text-to-speech/pricing?hl=en&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;AWS Polly Neural TTS: $16/1M chars &lt;a href=&#34;https://aws.amazon.com/polly/pricing/&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cartesia Pro: $50/1M chars &lt;a href=&#34;https://www.cartesia.ai/pricing&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Elevenlabs Scale: $300/1M chars &lt;a href=&#34;https://elevenlabs.io/pricing&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GitHub co-pilot workspaces let you code using your mobile with AI and deploy it at one shot&lt;/li&gt;
&lt;li&gt;If you need an Ubuntu Docker container with Python, install it via uv rather than compiling from source. &lt;a href=&#34;https://mkennedy.codes/posts/python-docker-images-using-uv-s-new-python-features/&#34;&gt;via&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.visioncortex.org/vtracer/&#34;&gt;VTracer&lt;/a&gt; is an open source library (and tool) to convert raster images to SVGs. &lt;a href=&#34;https://simonwillison.net/2024/Oct/7/vtracer/&#34;&gt;via&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;If you want to create a &lt;code&gt;console.llm()&lt;/code&gt; function, a browser extension is the best way, because some pages have Content-Security-Policy that block eval, form submission, fetch from other domains, and script execution.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.pypi.org/trusted-publishers/adding-a-publisher/&#34;&gt;PyPi lets you publish from GitHub Actions&lt;/a&gt; without a token. Also from Gitlab.com CI/CD and Google Cloud.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/ActiveState&#34;&gt;ActiveState&lt;/a&gt; which made ActivePython, ActivePerl, etc. made these products paid for commercial use around 2013 after a series of acquisitions.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://marimo.app/&#34;&gt;Marimo&lt;/a&gt; supports:
&lt;ul&gt;
&lt;li&gt;Publishing any notebook to static.marimo.app as a static app&lt;/li&gt;
&lt;li&gt;Creating a SINGLE link that embeds the ENTIRE notebook in the URL!&lt;/li&gt;
&lt;li&gt;Runnable via &lt;code&gt;uvx marimo edit&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/eaAonE58sLU&#34;&gt;Parables on the Power of Planning in AI&lt;/a&gt;: Giving models about 30 seconds of thinking time consistently improves results - as much as increasing parameter size by a factor of 1,000 to 100,000!
&lt;ul&gt;
&lt;li&gt;This works particularly well for verifiable results (code, math, etc.)&lt;/li&gt;
&lt;li&gt;Technique: Ask an LLM hundreds of times at low temperature and pick the most common one. (Google&amp;rsquo;s Minerva used this on the MATH dataset.)&lt;/li&gt;
&lt;li&gt;Better Technique: Ask an LLM hundreds of times. Pick the best solution based on an evaluation metric (reward model)&lt;/li&gt;
&lt;li&gt;Better Technique: Apply a reward model at EACH step of the process. OpenAI&amp;rsquo;s &amp;ldquo;Let&amp;rsquo;s Verify Step by Step&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jina.ai/news/late-chunking-in-long-context-embedding-models/&#34;&gt;Late chunking&lt;/a&gt; is an interesting approach to adding context to embeddings. (I don&amp;rsquo;t understand it, but it&amp;rsquo;s cheap and effective.)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://deepinfra.com/models/embeddings&#34;&gt;DeepInfra offers embedding models as APIs&lt;/a&gt; at about 0.5 to 1 cent per MTok in an OpenAI compatible API.
It also supports &lt;a href=&#34;https://deepinfra.com/models/text-to-image&#34;&gt;text-to-image models&lt;/a&gt; like flux.dev and
&lt;a href=&#34;https://deepinfra.com/models/automatic-speech-recognition&#34;&gt;speech recognition models&lt;/a&gt; like Whisper.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=eBVi_sLaYsc&#34;&gt;Jake Heller&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;One of the things we learned is (an LLM app) after it passes passes frankly even 100 tests, the odds that it will do, on any random distribution of user inputs, the next 100,000 100% accurately is very high.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;OpenAI&amp;rsquo;s O1 is like Daniel Kahneman&amp;rsquo;s System 2 thinking - as against other LLMs&amp;rsquo; System 1 thinking.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.continue.dev/&#34;&gt;Continue.dev&lt;/a&gt; is another AI coding editor. It supports OpenRouter. So now I have heard good things about:
&lt;ul&gt;
&lt;li&gt;Github Copilot&lt;/li&gt;
&lt;li&gt;Cursor&lt;/li&gt;
&lt;li&gt;Cody&lt;/li&gt;
&lt;li&gt;Continue.dev (supports OpenRouter)&lt;/li&gt;
&lt;li&gt;Aider (supports OpenRouter)&lt;/li&gt;
&lt;li&gt;Maybe:
&lt;ul&gt;
&lt;li&gt;Codeium&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Not:
&lt;ul&gt;
&lt;li&gt;Amazon Q Developer&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
  </channel>
</rss>
