2026 1

Things I Learned - 08 Feb 2026

This week, I learned: The Disconnected Git Workflow explains how to use the git send-email workflow. That’s like using email instead of GitHub as the collaboration mechanism - decentralizing and reducing dependencies. Grok throws a HTTP 431 when you pass it a query over 6,890 characters in the URL. Here’s an example with 6,900 characters. As of now, there’s no way to tell uv to use the cache and install only missing repos (#15454). But this is Deno’s default behavior, making Deno a slightly better choice in this regard. Shelling Out Sucks shares common pitfalls when calling the shell from programs. Suggestion: Shell-escape ALL inputs. Use set -o pipefail to detect failures in the middle of a pipe chain. Explicitly check the error code, not just stderr. dax, which is based on zx, is a simpler Deno-based alternative to shell scripts. See examples. ChatGPT. However, scripting language matters more when humans maintain shell scripts. Since I’m using AI, it’s easier to use bash scripts and let it handle any complexities. git push --force-with-lease is like git push --force but won’t overwrite if others have pushed in the meantime. Default to this instead of --force – it’s safer. Microsoft’s docfind generates a WASM search index for documents, building a dependency free browser based compact and fast search. diffs seems a promising library for rendering diffs in the browser. Genie 3 seems pretty good. We should expect to see World Models becoming usable in a few months.

2025 8

Things I Learned - 28 Dec 2025

This week, I learned: The Body Keeps the Score by Bessel van der Kolk argues that trauma is stored in the body, not just the mind. Claude Trauma recall shuts down Broca’s area (speech). Trauma survivors literally struggle to talk about trauma. 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.) Childhood trauma leads to several major health problems - heart disease, autoimmune disorders, depression, addiction, … Recalling traumatic memories while following a therapist’s finger with your eyes (EMDR) works. Yoga is promising but unproven. Neurofeedback (altering brainwave patterns with EEG feedback) even less proven. Clearly, trauma is stored in the body, not just the mind. We might need to rethink therapy. The Extended Phenotype by Richard Dawkins argues that genes shape not just the organism but the environment too. Claude In The Selfish Gene, he proposed that organisms are “survival machines” for genes. In this book, he extends this idea to show how genes can influence the environment beyond the organism’s body. The dam of the beaver, the brain of an ant infected by a parasite, gut bacteria, are examples. Critics argue that this may be tautological. It’s hard to falsify. It’s more a mental model than a theory. Also, there’s critique (see below). The general view is that there’s merit to both perspectives. Epigenetics: Dawkins argues that only genes are inherited. But some RNA, proteins, and epigenetic markers are also be inherited. Developmental plasticity: Dawkins downplays the role of environment in shaping phenotypes. Multi-level selection: Gould argues that selection happens the organism and group levels too. Niche construction: Dawkins says genes modify the environment. But environments modify genes too. The Structure of Evolutionary Theory by Stephen Jay Gould expands on Darwinism, suggesting there’s more than only natural selection. Claude Darwinism proposed continuous, smooth evolution. Gould proposes punctuated equilibrium - stable periods interrupted by rapid change. Fossils support this. Darwinism proposed selection of individuals. Gould proposes hierarchical selection - genes, individuals, groups, species. This is debated but has merit. 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. Darwinism proposed that humans would evolve if we replayed history. Gould argues that it’s chance. Current opinion is convergence, i.e. something like us would still likely evolve. (He probably didn’t need to write such a long book over 20+ years for this. Also, it led to the Darwin Wars, mostly with Dawkins.) The Gene: An Intimate History by Siddhartha Mukherjee explains the history of genetics. Claude Mendel’s pea experiment numbers seem too neat. He probably didn’t fudge it but stopped at good results. Rosalind Franklin’s X-ray diffraction images were key to discovering DNA structure, but she didn’t get enough credit. 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. How it works: Restriction enzymes cut 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. DNA ligase paste DNA strands together. 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. This is useful for creating medicines, crops, and gene therapies.: Medicines: e.g. insulin, human growth hormone, clotting factors for hemophilia, vaccines (Hep B), erythropoietin (EPO) for anemia, cancer therapies, focused antibodies, etc. Agriculture for genetically modified (GM) foods: pest/drought-resistant crops, biofortified foods (Golden Rice with Vitamin A), nitrogen-fixing plants, etc. Gene therapy: replacing faulty genes to treat genetic disorders (inherited blindness, immune deficiencies, blood disorders, muscular dystrophy, etc.) This is risky because of the unintended consequences, equity, and long-term risks: Unintended consequences: Crop genes can spread. Herbicide-resistant weeds have emerged. Equity: Corporates control gene patents, concentrating power and limiting access. Only the rich can afford gene therapies. Long-term risks: Biological weapons, ecological disruption, new diseases, etc. 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. 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. We have 20-25K genes. 99.9% is the same between humans. The 0.1% accounts for ALL human diversity. A lot of the genome is not for protiens, but for regulation, i.e. when and where genes are expressed. This enables pharmacogenomics, i.e. custom drugs. Read a genome and predict which drugs will work best. Also targeted cancer therapies, i.e. read the tumor genome and design smart bomb drugs. Ancestry and crime solving. Find distant cousins, catch the Golden State Killer, etc. We can sequence our genome for ~$600 in 24 hours and it’s falling. (Analysis is expensive.) CRISPR (2010s) lets you edit genes precisely. These “Clustered Regularly Interspaced Short Palindromic Repeats” are in bacteria. When bacteria survived a viral attack, they store a small piece of the enemy DNA in their own genome to recognize it. 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. This disables the gene. Or, we can insert a new DNA sequence. This has been used to cure sickle cell anemia (which has a ‘GTG’ instead of ‘GAG’ in the hemoglobin gene, changing glutamic acid to valine) by editing bone marrow cells (not to fix this - that’s hard - but to reactivate a fetal hemoglobin gene). This is FDA approved. Scientists are trying to edit the Asian Elephant to include woolly mammoth traits, make spicy tomatoes, etc. Risks: CRISPR might cut a SIMILAR but unintended gene. We can edit genes for better humans (like in Gattaca) and create edited species. Epigenetics is about how gene expression (not the DNA) changes based on environment and lifestyle. Epigenetics has 2 mechanisms. First, DNA has tags (methyl groups) that turn genes on/off without changing the sequence. Second, DNA is wrapped around protein “spools” (histones). Tight wrapping hides genes, loose wrapping exposes them. In the Agouti Study, mice fed methyl-rich diets had brown, healthy babies. Mice without it had yellow, obese babies prone to cancer. Queen bees are identical to worker bees genetically, but royal jelly changes their epigenome to make them queens. Grandchildren of the 1944 Dutch famine survivors have higher obesity, heart disease risk. Epigenetic changes are inheritable. Epigenetics inherits via sperm by (a) retaining ~1-10% of histones wrapped around important genes, and (b) small RNA molecules that regulate gene expression. 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’s womb, so grandmother’s environment matters too. Mother epigenetics affects 3 generations. Fathers affect only 2. There are ~100-200 imprintable genes that determine whether the dad’s or the mom’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 “grow/stop” genes. Tigers have weak ones. Ligers (Lion dad, Tiger mom) are huge. Tigons are small. Eugenics is about improving humans by controlling breeding. Invented by Francis Galton (Darwin’s cousin) who founded psychometrics (IQ tests), fingerprinting, correlations, questionnaires, anthropometry (measuring humans), and a female attractiveness map of the UK (London » Aberdeen). 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 “feeble-minded” people was legal. Oliver Wendell Holms: “Three generations of imbeciles is enough.” The last euginic law sterilization in the US was in 1981. California prisons sterilized females (2006-2010). Nazi Germany industrialized this. Deaf, blind, mentally ill, then eliminate gene pools. CRISPR and gene editing lets us design babies - another form of eugenics. Iceland and Denmark have eliminated Down syndrome births through screening and selective termination. It’s a bit controversial. Immune: A Journey Into the Mysterious System That Keeps You Alive by Philipp Dettmer explains the war our immune system wages daily. Claude Immunology is, as science writer Ed Yong memorably put it, “where intuition goes to die.” It’s the kind of subject that makes medical students weep and practicing physicians throw up their hands. We have an innate immune system. Genetically programmed for common pathogens. Fast, but limited. Like: Macrophages: beat cops that patrol tissues and eat dozens of bacteria before dying. Neutrophils: 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! Natural killer cells: bouncers that kill cells without an ID or have been infected (cancer, virus). Dendritic cells: spies that capture pieces of invaders and present them to the adaptive immune system. Mast cells: alarms that explode and release histimine (causing inflammation) to call for backup. Eoisinophils: bombers that drop toxic enzymes to melt parasitic worms too large to eat. The adaptive immune system 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: ~40 Variable segments: “gloves” of ~95 amino acids to grab antigens. Like a 4x4 lego brick. ~25 Diversity segments: “fingers” of ~15 amino acits for the glove to grab better. Like a 1x2 lego piece. ~6 Joining segments: “tips” of 3-5 amino acids to connect glove to arm. Like a 1x1 stud. It randomly chews off a a bit from the ends and adds a few random bits to create ~10^15 potential combinations. When a new cell is born, the Thymus (near the upper chest) tests if it can attach to invaders and whether it’s peaceful to body cells. Failing cells are killed. ~2% survive and go to the lymph nodes. These can be: Helper T cells: generals that coordinate the immune response by activating B cells, killer T cells, and macrophages. Killer T cells: soldiers that inject toxins into infected cells to kill them. B cells: factories that churn out antibodies that stick to invaders, gum them up, and tag them for destruction. 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. Also, the B cells divide with intentional mutations and evolve to find mutants that catch invaders better. Better fits multiply faster. “Immune boosting” 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. Every breath and meal draws in invaders. They’re catalogued and tolerated or destroyed. It’s incredible! Measles reduces immune memory 11-73%, wiping out years of immunity to other diseases. So, when I had measles in 2009 after my splenectomy in 2004, I had a double whammy. Damn! Didn’t know that. Some books, like The Choice, aren’t meant to be summarized. I can’t even summarize the summary. The Origin of Consciousness in the Breakdown of the Bicameral Mind by Julian Jaynes proposes that introspective consciousness emerged ~3,000 years ago. Unproven but unfalsified. Claude He theorizes that until ~3,000 years ago, the right part of the brain generated “voices” the left part obeyed. The Iliad heard voices. The Odyssey has a self-aware hero. That’s why ancients across cultures heard gods’ voices. Idols were meant to trigger these voices. Kings literally spoke for the gods. People didn’t feel responsible for their actions. With population growth, writing, and the Bronze Age collapse, humans were forced to adopt alternate cognitive strategies, leading to consciousness. That was also when philosophy, introspective religions, and new forms of literature emerged across the world. The Axial Age. Schizophrenia may be a vestige of this bicameral mind, where the right brain’s “voices” are misinterpreted by the left brain. Hypnosis, oracles, and creative muses are other remnants. Neurological support is weak but literary/cultural analysis is strong. His theory hasn’t been falsified. The Slight Edge by Jeff Olson suggests small, consistently repeated actions. Claude Small actions compound exponentially. But what’s easy to do is also easy to skip. Quitters stop because it feels like small actions don’t matter - leading to exponential decay. Willpower is overrated; time is underrated. What to do: Show up. Consistently. Even if no one’s watching. Commit long-term. With optimism and purpose. Pay the price. Also: Happiness isn’t just a result of success. It’s often a cause. And habits also influence people around us. Why We Sleep by Matthew Walker elevates the importance of sleep - but also exaggerates. Claude 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. Sleep deprivation worsens focus, memory, immunity, metabolism, heart health. Phones, caffeine (5-7 hours before), alcohol, early alarms, irregular schedules, late meals, warm bedrooms - all hurt sleep quality. But a lot of claims are exaggerated, unproven, or false. Sleep loss isn’t a WHO epidemic. More sleep != longer life, it can shorten it (~7 hours seems optimal). Sleeping < 6-7 hours doesn’t impact cancer. Modern societies don’t sleep less than historically. Sleep deprivation helps depression. He also removed inconvenient data from a graph. BTW, anxiety about lack of sleep worsens sleep. So, chill. How Not To Die by Michael Greger suggests a plant-only diet, but evidence indicates otherwise. Claude Eat more plants, less processed food, cook meat at lower temperatures, and exercise. This much is valid. Unlike his claims, Omega-3s help heart disease. Milk reduces asthma risk. Soy doesn’t seem to benefit non-Asians. Fish prevent dementia. He buries B12 deficiency risk. Overall, studies are cherry-picked and even contradicts his statements. Behave by Robert Sapolsky reasons our actions across seconds (neurological), hours (hormones, environment), months (neuroplasticity, learning), decades (genes, culture), millenia (evolution). Claude The Brain 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. 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. The Hormone Testosterone is an amplifier. It amplifies agression but also generosity! It lowers threshold for context-appropriate behaviour. Oxytocin promotes in-group trust, but promotes out-group hostility. It’s the molecule of tribalism, not love. The Childhood Early stress triggers epigenetic changes that makes the amygdala hyperactive, impairs prefrontal cortex, and alters stress hormone regulation. This leads to impulsivity, aggression, anxiety, depression, addiction, etc. The Evolution We are naturally hierarchical and tribal. Thanks to language, we can expand / contract our tribes to include / exclude anyone (or anything) based on arbitrary stories. Let’s approach wrongdoing with humility. Punishment and rewards CAN shape behavior. But a focus on prevention over retribution may help more. Price of the Modi Years by Aakar Patel suggests that most metrics worsened under Modi. True, but these also seem cherry-picked. Claude Announcements had more impact than executions. 99% of the 15.3 lakh crores demonetized came back to banks, laundered. Manufacturing GDP share fell from 16% to 13% after Make in India was launched. Employment fell from 5.1 to 2.7 cr. Press freedom rank fell from 140 (2014) to 151 - and is now 159. Democracy rank fell freom 27 (2014) to 41 (2021). India is classified as a “Flawed Democracy”. Human Development Index is stagnant at 130. Global Hunger rank fell freom 55 / 76 (2014) to 102 / 123 (2024?). But: Economic Freedom rank rose from 112 (2014) to 84 (2023?). Digital payments, rural electrification, toilet construction, etc. aren’t mentioned. The Ants by Bert Hölldobler, Edward O. Wilson is the only science textbook (!) to win a Pulitzer. Claude Ants are only ~20% of human biomass, not 100% as the book claims, but that’s 2.5m ants per human! ⭐ Sterile ants, which are all female, help the queen reproduce instead of having their own kids. Ants, bees, wasps, etc. are haplodiploid, i.e. females have father + mother genes, males develop from unfertilized eggs (only mother genes). So, sisters share 75% of genes, more than 50% with their own kids. Helping mothers make sisters is better than having kids! (And if this isn’t an alien civilization, what is? We don’t need sci-fi. Nature is weirder than fiction.) But their math doesn’t hold up! 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. But building a nest is hard, specialization is efficient, etc. So ants stay sterile and help the colony. BTW, this gene math only works if the queen is 100% monogamous - so they are, or at least, were, until evolution locked it in. (Making nature one-step less alien. But still weird.) Epigenetics determines caste. More food or specific food (e.g. royal jelly in bees) changes gene expression of the same DNA. When a queen dies, some ants (e.g. Indian jumping ants) can reprogram a worker ant into a queen through diet! Leafcutter ants have been “farming” for 50 million years. Rather, are part of an agricultural symbiosis. They cut leaves and feed it to a fungus they cultivate in their nests. They protect the fungus from pests using antibiotics produced by bacteria living on their bodies. They clear decay and weeds. They can’t live without the fungus because it produces a nutrient (Arginine) that they need but can no longer make themselves. Ants communicate using pheromones, touch, and sound. Pheromones can communicate species, colony, caste, reproductive status, alarm, food trail, etc. These evaporate unless reinforced. They have a bigger, more advanced, brain region than other insects. It’s not multiple brain parts coordinating. Using CRISPR to knock out pheromone receptors makes ants unable to communicate. Mutant ants wander aimlessly until killed by the colony. They tap each other with their antennae: to taste skin for identification, or to beg for regurgitated food. Some ants have a scraper on their waist that they rub against their abdomen. Triggers “emergency alarm”, e.g. “I’m buried” or “Help me cut!” Ant colonies are superorganisms, i.e. agents that work together to produce emergent behavior. They have sterile castes. Only ants, bees, naked mole rats, … qualify. 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. They circulate nutrients by vomiting food into each others mouths. (Ants have two stomachs - one for themselves, one for sharing.) Ants can’t digest meat but larvae can, so they feed meat to larvae and share the digested food. Larvae act like a liver. 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. They have a neural system. Memory is stored in pheromone trails. Ant politics exists. E.g. Workers destroy eggs laid by other workers, protect sister-laid eggs, etc. The Cancer Code by Jason Fung suggests that cancer might be about cells acting selfishly, triggered by body environment. Claude 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. We used to cut (surgery), burn (radiation), or poison (chemotherapy) cancer cells. Then we learnt cancer cells were mutations and targeted therapies work (expensively). But it treated <5% of cancers. 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. Devolution is enabled by the body environment. For example: Insulin resistance. Sugar matters less. It’s the insulin resistance. 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.) Chronic inflammation. Leads to oxidative stress. Hormonal imbalances. E.g. high estrogen, testosterone. Immunotherapy (teaching the immune system to attack cancer cells) is promising. Weight loss might prevent / reverse cancer. Evidence is preliminary. The Diabetes Code by Jason Fung suggests less intake to reverse Type 2 Diabetes. Claude Insulin pushes sugar into cells for energy storage. In Type 1 Diabetes, immune cells attack insulin-producing cells. Patients need insulin to survive. In Type 2 Diabetes, high carbs -> high insulin -> cells become insulin-resistant. Feeding them insulin can harm, sometimes. Weight loss can definitely reverse it. Reducing carbs & preferring whole foods helps. Intermittent fasting likely helps. But “sugar is the main driver of Type 2 Diabetes” isn’t research-robust. Genetics, sleep, stress, gut microbiome, socioeconomics contribute. Diet & fasting are hard to sustain, and isn’t for everyone. The Obesity Code by Jason Fung suggests whole foods and intermittent fasting. Claude Eating whole foods (rather than processed foods) does help. Fasting does help. (But maybe no more than reduced calorie intake, and sustaining it could be harder.) But his claim that high insulin -> obesity isn’t research-robust. It may be correlation not causation. ⭐ How Minds Change suggests that friendship, more than facts, changes opinions. Sometimes your own, too. Claude Facts backfire (though less often than the book indicates). Challenging identity is a survival threat. Asking genuine questions and actually listening enables change. (It might change you, too.) “How did you come to believe that?” “How confident are you (1-10)?” “What would it take to move that number?” helps introspect. Relationships create safety to question beliefs. Lasting change requires somewhere new to belong. My most used GitHub Copilot feature is tab completion. It’s surprisingly effective for note-taking (which I do more than code-writing ever since coding agents arrived.) Tab completes the suggestion and Esc cancels it. I’m beginning to use Alt + ] and Alt + [ to cycle through multiple suggestions. I’m amazed that it can act as a: Calculator/convertor. E.g. “9 * 86400 =”, “5 miles in km is” or “3 days ago, i.e. on” Referrer. E.g. “The Attention Is All You Need paper at https://” or “The Pulitzer winning book Ants by” Educator. E.g. “The top 3 causes of cancer are” Ideator. E.g. “5 wild ideas for sneakily improving productivity are” 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. ChatGPT Lifespan and The Telomere EFfect suggest exercise, sleep, eat well, manage stress to live longer. Claude 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. Outlive suggests exercise for living longer - and to make sure your life is worth extending! Claude Medicine focuses more on cure than prevention. Exercise has the highest impact on longevity. Especially zone 2 cardio and body strength (e.g. measure grip strength). apoB under 80mg/dL is a better indicator of heart risk than LDL. But make sure your life is worth living! Katy Milkman’s How to Change suggests that biases are hard to change. Engineer environments and habits instead. Claude Breaking bad habits is hard. Start on a New Year, birthday, festivals, etc. for ease. 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). ⭐ Daniel Kahnemann’s Noise suggests experts are more random than we think. Claude When execs (or students) complain, “Oh, but the LLM aren’t consistent!” – nor are humans! Get multiple INDEPENDENT opinions Use CHECKLISTS to reduce variability Use ALGORITHMS to spot outliers Acknowledge luck, good or bad. Leverage serendipity Notes from awesome-npm # npm run command --silent suppresses npm output, only shows script output. npm start and npm test are the conventions to run the app / server and test. Use these more. npx [email protected] -- node --version lets you run any node version without nvm, etc. npm link installs package in the current directory as a global. You can link to it from any other package via npm link <dirname>. npm install owner/repo installs directly from GitHub. npm ls --depth=2 shows dependency tree up to depth 2. rclone mount over SFTP is the worst-case for thousands of tiny files. Every stat, readdir, unlink is an extra network round-trips, taking ~1s per operation. I’m switching to rsync instead for my Hetzner storage box. # Context: I set it up via: rclone config create hetzner sftp host $USER.your-storagebox.de user $USER shell_type unix … and mounted it via rclone mount hetzner:/ /mnt/hetzner --vfs-cache-mode full --vfs-cache-max-age 24h --vfs-cache-max-size 10G The Molecule of More and Dopamine Nation recommend pain as a down-payment for sustained pleasure. Claude Dopamine drives wanting/dread, which is decoupled from like/dislike. It also does a bunch of other things like learning (maps actions to rewards), attention, etc. Low dopamine => focus, medium => creativity, high => noise. Brain runs a thermostat. Pleasure/pain trigger a delayed, long-decay counter-reward that we feel as “That’s it?” or “Whew!”. Abstention just resets it. Meditation just makes you aware. Pain-upfront leads to long-decay pleasure: 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. Surprises spike dopamine: low standards, variable rewards, interleaved work, artificial constraints, environment/social rotation, progressive difficulty, … Dopamine mechanics are complex. Don’t trust any theory just yet. ⭐ Pain is the down payment. Surprise is the interest. Recovery is the compounding period. Sex at Dawn claims humans evolved as promiscuous and non-jealous, that monogamy is recent. It’s partly valid (sexuality is more flexible and context-dependent than monogamy / nuclear families) but is also over-simplified with cherry-picked evidence. Claude Discovered the --extreme option for xz, which compresses even better (but slower). For archives, I now use xz -9e -vv file. Single-threaded is slower but better for compression, so don’t use -mt. For ultra-large files, add --lzma2=dict=256MiB or similar, keeping dictionary size smaller than RAM and file size. # You can specify a git repo as an inline script dependency directly in a .py file when running with uv! # # /// script # dependencies = ["git+https://github.com/owner/repo.git"] # /// Excuses are a great way of making us feel better. They are synonyms for “reasons”. They reduce guilt/anxiety, lower standards – all of which could be considered bad – 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.) You can open AI chatbots with a pre-populated query using these URLs. Gemini, notably, does not yet support this. ChatGPT: https://chatgpt.com/?q=%s Claude: https://claude.ai/new?q=%s Google AI Mode: https://www.google.com/search?udm=50&q=%s Grok: https://grok.com/?q=hi Mistral: https://chat.mistral.ai/chat?q=%s Perplexity: https://www.perplexity.ai/search?q=%s A clever trick to prevent voice models from speaking too quickly. Use a “stay silent” function call. Ref

Things I Learned - 19 Oct 2025

This week, I learned: ⭐ “… most engineers don’t have public commits. Senior engineers at large tech companies don’t work on open-source projects for the most part.” Why AI Can’t Do Hiring Cloudflare’s Sandbox 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. Gemini API has a Google Maps tool that it can refer to - like Google Search. Maps Grounding Earlier we needed humans to label data for RLHF. Now we don’t since AI can simulate it. This is a pattern. Once AI learns from a human, that human skill can be automated. How GPT-5 Thinks — OpenAI VP of Research Jerry Tworek The <output> element has a for= attribute indicating which <input> elements it is linked to and a form= attribute indicating which form it belongs to. This works well with screen readers. A good reason to use it more. Examples. Meta built a Code World Model. Basically an LLM that acts like a Python interpreter! sudo apt install moreutils installs a set of useful packages: chronic. Runs a command quietly (suppressing output) unless it fails — good for cron jobs where you only want noise on errors. chronic backup.sh combine. Combines lines from two input streams/files using boolean operations (AND, OR, XOR). combine AND fileA fileB errno. Look up symbolic names, numeric codes, and descriptions for standard errno values. errno -l; errno ENOENT; errno 2 ifdata. Query network interface properties (IP, byte counts, errors) in a script-friendly format. ifdata -sip eth0; ifdata -bops eth0 ifne. Run a command only if stdin is not empty, passing the input through. find . -name core | ifne mail -s "Core files found" admin isutf8. Check whether a file or stdin is valid UTF-8. isutf8 somefile.txt lckdo. Run a command while holding an exclusive lock to prevent concurrent runs. lckdo /var/run/mylockfile.cmd myscript.sh mispipe. Pipe two commands, but return the exit status of the first one (useful in pipelines). cmd1 mispipe cmd2 parallel. Run multiple commands in parallel, reading them from stdin or arguments. parallel < jobs.txt pee. Like tee, but sends stdin to multiple commands in parallel. echo "foo" | pee cmd1 cmd2 ⭐ sponge. Soak up all input before writing to output — enables in-place edits safely. sort file | sponge file ⭐ ts. Prefix each input line with a timestamp. tail -f logfile | ts vidir. Edit a directory listing in your editor to rename, move, or delete files in bulk. vidir ~/myfolder vipe. Insert a text editor into a pipeline to manually edit streamed input before output. cat file | vipe | wc -l zrun. Transparently decompress compressed files before passing them to a command. zrun cat file.gz Despite 20 years of SVG experience, I learnt new things from A Friendly Introduction to SVG and A Friendly Introduction to Paths Setting a <rect> width/height or a <circle> radius to zero removes the element instead of drawing a point. There’s no option to draw the stroke on the inside or outside of a shape/path. Only the center. You can override a path’s pathLength attribute to create a new internal scale for its length. It’s unclear where I can use this. <path> arcs have this syntax: A [rx],[ry] [rotation] [large-arc-flag] [sweep-flag] [end-x],[end-y]. SVG first fits an ellipse to these parameters and then draws the arc. If rx and ry of an arc is too small to connect the points, the SVG spec scales up rx and ry. [large-arc-flag]=1 literally uses the larger arc of the fitting ellipse. This is less common. [sweep-flag]=1 its the ellipse to make the connecting arc go clockwise. 0 is anti-clockwise. [rotation] is rarely used because we usually draw arcs and then rotate them. stroke-linejoin automatically flips from miter (sharp) to bevel (cut) if the sharp edge protrudes too long (e.g. small angles). Increasing stroke-miterlimit increases the cutoff (default: 4) ⭐ Always include a thoughtful gallery of examples with tools / libraries. This does more than showing what a tool can do. It’s use-case / domain transfer: showing what it’s useful for in real life - opening ideas, suggesting workflows. It’s style transfer: showing how to use it. ⭐ Here’s what expert AI coders increasingly focus on. Thomas Dohmke Delegation: context engineering agents for success; parallelizing. Verification: efficiently reviewing and testing code/output; setting stop-points. Expanding scope: instead of time saved as the metric. Education: teaching AI-based coding, debugging, reviewing/testing. Product management: combining requirements + UI design + architecture + engineering + deployment. Cross-discipline: blending code with design, governance, finance, marketing, … (“computational creators”). Notes from Taylor’s How I’m using coding agents: October 2025 Left monitor: 2-4 desktops (e.g. work, side-project). Right monitor: things I always want available Plan next task while first executes. Use plan mode to write to a plan file. Don’t start big tasks if you have meetings scheduled soon. Recent open source package hack methods seem to work more because of people/process than systems (Filippo): Phishing the author Pull requests running unsafe code in CI Taking over expired domain / user ID Stealing long-lived tokens uv run --python 3.14 --isolated --with-editable '.[test]' pytest runs pytest on a local project with a specific Python version. Simon Willison Notes from the State of AI Report 2025: Reasoning models are more fragile. Irrelevant phrases make reasoning models spend FAR more tokens and get wrong answers #21 AI systems are able to teach experts new concepts #41 An environment providing feedback / rewards enables continuous learning #52 E.g. Multi-robot chemical labs at U.Liverpool and NCSU #60 RLHF has a fundamental flaw: humans reward sycophancy #71 We can read what people are typing from brain signals outside the skull #73 Model intelligence-to-price ratio doubles every ~6 months #94 The AI companies’ valuations are also roughly doubling every ~6 months #181 OpenAI is offering Governments giga-watt campuses to run OpenAI models for citizens #122 A 1GW clusters costs $50bn capex and $11bn per annum #130 China has added ~10X the energy capacity as the US in 2024 #146 NVIDIA challengers are still far away #161 LLMs can “read between the lines” even if training data is censored #268 LLMs can pass information via hidden signals #270 Prediction: A major retailer reports >5% of online sales from agentic checkout. AI agent advertising spend hits $5B. #304 OpenAI’s leadership guide says: Align Explain WHY AI thoughtfully. Set a goal, e.g. everyone uses ChatGPT 20 times/day (Moderna). Use it yourself. Show how. Have business leaders run AI sessions Activate Launch an AI skills proram Set up an AI champions network Encourage experimentation (dedicated time, workshops, hackathons, …) Link to performance evaluations Amplify Create an AI knowledge base Share success stories (weekly) Create internal groups (Teams, Slack, …) Celebrate AI wins Accelerate Unblock AI tools and data access Simplify project selection. Quick feedback, clear priorities Unblock projects with a cross-functional council Give resources to successful teams Govern Publish a responsible AI playbook (what’s safe to try) Audit AI practices quarterly

Things I Learned - 28 Sep 2025

This week, I learned: selectolax is a fast, easy-to-use, modern HTML5 parser with CSS selectors. A good replacement for lxml.html. The most effective way to convert a blob (e.g. file input) to a data URL on the browser seems to be via the FileReader API. const blobToDataURL = (blob) => new Promise((res, rej) => { const r = new FileReader(); r.onload = () => res(r.result); r.onerror = () => rej(r.error); r.readAsDataURL(f); }); Tool calls in OpenAI support files and images. OpenAI ⭐ “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’t translate to doing jobs well.” Ethan Mollick Adding // @ts-check to a JavaScript file and documenting types via JSDoc might be the simplest way to migrate phase-wise from JS to Typescript. envsubst < file.txt replaces file.txt with the environment variable, e.g. $HOME is replaced by the HOME environment variable. Clean shell-level templating. GitHub Copilot CLI is out. npx -y @github/copilot Compost is the cheapest thing per ton that I can buy on Amazon India. I can buy 1 ton of compost for Rs 13,500. ChatGPT yt-dlp requires Deno from now on. #14404 In meetings, make cameras optional by default – and judge engagement by contributions, not video – 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. PubMed wrkflw is a quick and light way to test GitHub actions before publishing. It runs GitHub actions locally. GPT-5-Codex is available as an API and on LLM. Simon Willison ⭐ I’m habit engineering, i.e. discovering and stacking habits on to existing ones. For example: ChatGPT suggested increasing observability based on code reviews. I’m including it in my weekly codecast. ChatGPT suggested defining closures inmeetings. I’mn now discussing objectives at meeting starts and effectiveness at the end. Since Anaconda cannot be used for free by organizations with 200+ people, Straive’s received legal notices from Anaconda. Since laptops are under central IT administration, they went ahead and deleted all Anaconda instances. Installing miniconda for use with conda-forge requires admin access that most developers do not have, however. That leads to an interesting “No Python” situation. This is where uv becomes the knight in shining armor. Perceptron is SOTA LLM for object bounding boxes. Just 2B parameters. Gall’s “law” says that complex systems that work evolved from simple systems that worked. But a complex system designed from scratch won’t ever work. This holds in uncertain environments. But where formal theory or regulations exists, it doesn’t. ChatGPT uvx --with visidata vd gives you a command-line Excel editor to edit / convert CSV, Excel, JSON, SQLite, directories, etc. uvx markitdown https://example.com/ fetches example.com as Markdown. I learnt this when I told Codex it could use uvx markitdown to convert PDFs and it figured this part out by itself. The Dropbox connector for ChatGPT is the little flaky – at least on Android. It could not identify a file that was clearly there in Dropbox and I had to upload it manually. ChatGPT’s output is too dense for me. I added this to my custom instructions: “Write in simple language. Explain non-obvious terms intuitively.” yt-dlp has a --download-sections option that downloads specific YouTube time ranges. For example --download-sections "*00:01:00-00:03:00" downloads roughly (not exactly) from 1 min to 3 min. Note the * at the beginning. My Lenovo laptop’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. ChatGPT The India Entrance Exam database is a dataset collating Indian entrance exams.

Things I Learned - 20 Jul 2025

This week, I learned: Inevitablism 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. ⭐ LLM chat over data may leapfrog dashboards. This may be a trigger to kill redundant UI. 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. xh is curl-compatible but adds JSON pretty‑print, colour, --table and can pass parameters like xh post :8000/api question='When is the ROE?' dasel is jq-compatible but supports YAML and TOML too lazygit is a 5-MB TUI that lets you stage/commit/push/diff in one screen eza is a modern ls replacement. I switched to this with abbr --add l 'eza -l -snew --git --time-style relative --no-user --no-permissions --color-scale=size' jless is less replacement for large JSON streams, with search & scroll jc is a JSON to table formatter uv cache prune removes only unused cache entries and saves a fair bit of space. Mine trimmed 85 GB. Claude Code settings are in ~/.claude/settings.json (personal) < .claude/settings.json (project) < .claude/settings.local.json (uncommitted personal) < CLI arguments. Explore model, permissions, env, forceLoginMethod. Ref #ai-coding Claude Code loads memory from ~/.claude/CLAUDE.md < .CLAUDE.md and from subdirectories when required. Run /init to auto-create it with repo-specific info! Mention @file to import. Beginning an input with # ... adds it to memory! Run /memory to view/edit memory files. Ref #ai-coding Claude Code lets you type \ then Enter at the end of a line to continue to the next line. Or, run /terminal-setup to bind Shift-Enter to insert a newline. #ai-coding Claude Code has built-in tools to read & write Jupyter notebooks (interesting), to run sub-agents (powerful), and to manage TODO lists (useful) Ref #ai-coding claude -p "query" runs the query and exits, making it a very powerful pipeline tool. E.g. cat stream.jsonl | claude -p "..." --output-format json --input-format stream-json --max-turns 3 --dangerously-skip-permissions Ref #ai-coding Claude Code has a /review command that requests a code review and a /pr_comments to view pull request comments Ref #ai-coding Claude Code lets you define custom slash commands at ~/.claude/commands/*.md < .claude/commands/*.md. Use @file to reference files, $ARGUMENTS for arguments, and ! for bash commands like DIR: !`pwd`. YAML frontmatter supports allowed-tools: and description: Ref #ai-coding You can drag & drop a screenshot or paste it into Claude Code! #ai-coding Claude Code lets you run /compact Focus on code samples and API usage (or mention it in CLAUDE.md) #ai-coding Claude Code activates extended thinking via these keywords: think < think hard < think harder < ultrathink Ref #ai-coding Claude Code lets you set up GitHub Actions via /install-github-app so that any mention of @claude in an issue or a PR will trigger a CI job that does what you suggest. An alternative to Jules or Codex #ai-coding Claude Code enterprise use is possible. It works with Google Vertex AI and Amazon Bedrock securely and supports usage monitoring #ai-coding Claude Code supports proxies and LLM gateways. The apiKeyHelper setting can dynamically generate API keys #ai-coding Claude Code costs ~$6/day on average, and < $12/day for 90% of developers. Ref #ai-coding ccusage summarizes Claude Code usage patterns from ~/.claude/ #ai-coding Interesting MCPs to explore: Sentry: fetch issues with stack traces and other useful debugging context Playwright: automate browser neomutt is a convenient way for me to read my archived .mbox files. neomutt -f $FILE.mbox lets you browse an MBOX. IITM DoMS is a management school inside a technical institute. That lets MBA students learn to interact with geeks and create startups. Last year, LLMs were able to solve 3 JEE problems. This year, they were all-India Rank #4, and then beat AIR #1. 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.

Things I Learned - 22 Jun 2025

This week, I learned: Never use a toothpick on a tooth with a dental crown. Only use a flosser or water flosser. CSS attr() is one of the most powerful features in modern CSS. It lets you control CSS via HTML attributes. Notes from Anthropic’s How we built our multi-agent research system: Sub-agents are like humans -> society. The improvement is dramatic. “Sub-agents facilitate compression by operating in parallel with their own context windows, exploring different aspects of the question simultaneously before condensing…” “Each sub-agent also provides separation of concerns—distinct tools, prompts, and exploration trajectories … (enabling) independent investigations.” Using sub-agents spends ~15x more tokens. (That explained ~80% of the improved accuracy!) Particularly effective when tasks are independent and parallelizable. This also speeds it up. 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. Teach the orchestrator how to improve agents: e.g. tools to test and rewrite tool descriptions Even if you evaluate a few examples, evals are surprisingly effective. Agents are stateful. Errors compound. Allow agents to resume. Prune history gracefully. Log everything to debug user-reported failures. Also monitor the kinds of decisions it took to help debug at scale. The Bitter Lesson likely applies to system prompts. Don’t hard-code stuff. I’m impressed that there is no system prompt in the default pydantic-ai Agent. The MCPs developers seem to use the most are: filesystem, playwright, github, slack, notion. Anecdotally, Claude 4 Sonnet seems a better coding model than Claude 4 Opus. Dan Becker, Armin Ronacher #ai-coding Cursor offers background agents that run in a remote container. #ai-coding Fabric has a collection of re-usable prompts that you can use via llm-templates-fabric like: cat file.py | llm -t fabric:explain_code Ref As of Jun 21, Claude 3.5 Sonnet > Claude 3.7 Sonnet > O3 Mini > Human > Gemini 1.5 Pro lead the Vending Bench. Gemini 1.5 Pro also leads my System Prompt Override benchmarks. I’m losing faith in the LM Arena. Perhaps the Gemini models aren’t improving as much as we think. This is the core of agents (LLMs running tools in a loop): Sketch blog Full script Notes on AI coding / vibe-coding from multiple sources. #ai-coding Sources How I program with LLMs How I program with agents The 7 Prompting Habits of Highly Effective Engineers AI Assisted Coding A Glimpse of the Future Agentic Coding Recommendations My First Open Source AI Generated Library We Can Just Measure Things I Shipped a macOS App Built Entirely by Claude Code Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity Why AI coding? Reduces mental energy (by creating the first draft). letting you create more. Reduces starting trouble, eases effort. Helps figure out how easy / tough a task really is!! Most code is short-lived or has few users. AI building “throw-away” code is useful. Why NOT AI coding? Slows you down if you know the repo well Doesn’t work well on large/complex/niche repos Leads to over-optimism and atrophy Tips Use for reversible decisions (2-way doors). Avoid for irreversible ones (1-way doors). Fail early. Try tough bits first. Fail often. Restart instead of fixing. Go concurrent. Trigger multiple tasks. Ask for multiple drafts and options. Give it workflow. Break down the implementation into: 1. Planning. 2. API stubs. 3. Implementation. Give local context. Naming conventions, folder structure, coding style, tools (compile, test, lint), etc. Conserve context. Use sub tasks and sub agents to conserve context. Suggest libraries. Agents prefer writing code than using libraries, by default. Give examples to follow, e.g. Write it like @filename. &amp; -> & but &x -> &x. Give screenshots and logs. These are very effective. Provide goals, not instructions. Saves effort, teaches you new things. Farm out research. Have specialized tools research API docs, etc. and include those in the context. Keep related things together. Have it write a checklist, e.g. saving it temporarily in a file. Have it run code to catch its own errors. Have it write tests, mocks for tests. Have it see and use the app, click, play around, etc. (e.g. via playwright-mcp) Have it create playbooks, examples, troubleshooting guides. Have it refactor code AFTER comprehensive tests. Have it think more. Use ultrathink. Log extensively, by default. Improves future debugging. Report errors well. What happened, why, and what to do. Prefer monorepos for more context. # Prefer popular libraries. LLMs know these better. Prefer fast tests, tools, and libraries. Speed helps iteration. Prefer small files and packages. Reduces context. Prefer simple code. Avoid magic, e.g. pytest fixture injection. Functions over classes. SQL over code. Composition over inheritence. Prefer specialized functions for common scenarios over DRY abstractions. Prefer fewer abstraction layers. Prefer re-implementing over DRY since code is cheap. Look for new tricks to learn from its code. Agent behaviors: Simple tasks perform better. More context = more confusion. Verifiable tasks are clearer for LLMs and and easier to review. Useful coding agent tools: bash(cmd), patch(hunks), todo(tasks), web_nav(url), web_eval(script), web_logs(), web_screenshot(), keyword_search(keywords), codereview() Skills: LESS Coding LESS Research LESS Documentation LESS Operations configuration (IaaC, CI/CD, etc) LESS Editor usage and expertise required MORE Tests (to test the code) MORE Code reviews (to test the code) MORE Prompting and context creation (to write the code) MORE DevOps (micro-feature deployments, deploy in parallel) MORE Specs: features, requirements, APIs, tests, structure, etc. MORE Analysis: security, performance. MORE Tool design. Linters, SAST, DAST, Performance, etc. Semgrep, Bench Suite MORE Observability: Especially for tools and LLM calls. Telemetry, log analysis and issue creation. Sentry, LogFire, etc. Trends: Agents took time to evolve because LLMs need to be good at tool calling and long instruction following, which is just happening. Agents are slow. Parallelizable tools (e.g. multiple Redis instances, container-use, CI/CD) will grow. Tool speed (e.g. fast test engines with caching) will become more important. Agents generate diffs/PRs. Tools to edit and comment on these online will emerge. Context gathering will widen: screenshots, logs, etc. Code review process will be re-invented. Personalized features. User drops a feature request via Slack. Personalized version deployed at their endpoint to test. PR sent after they are happy Poor coding teams get less out of AI coding. Good communication, reviews, coding practices, testing, etc. help. Agent Experience (AX) is emerging and explores: how much context to take, when & how often to ask the user questions, to how make review easier, etc. Humans running multiple tasks in parallel is productive. Breaking a complex requirement into tasks (like Codex now does) helps create that task queue. Agents generate technical debt faster than humans. Solving this will become a major problem/opportunity. “makework”: made-up work that fills time or serves short-term needs. From GPT 4.1 Prompting Guide Use more precise prompts. Earlier models inferred user intent. GPT 4.1 follows prompts more closely. Avoid STRONG untested instructions. E.g. “you must call a tool before responding to the user” can lead to tool input hallucination. For agents, include these three system instructions: You are an agent. Keep going until you’re sure the user’s query is completely resolved. If you are not sure, use your tools: do NOT guess or make up an answer. 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. Use tools field rather than injecting tools into system prompt. Model has been trained to use tools field. Keep tool descriptions concise. Provide examples for complex tools in system prompt. Place instructions at the top of the context; ideally at the end, too. Format prompts as Markdown, XML, not JSON. It sometimes dislikes large repetitive output (e.g. analysis of hundreds of items) and needs nudging. It handles diffs well and can apply patches Metaprompting. Have frontier LLMs revise prompts. They’re GOOD! Ref Increase clarity, providing step-by-step instructions. Resolve conflicting instructions. Expand instructions to cover all scenarios and edge cases. Notes from Pydantic AI GitHub CI: UV_PYTHON sets default Python version COLUMNS increase terminal width uv run supports --extra for extra packages cloudflare/wrangler action has a deploy that allows deployment to specific URLs or subdomains Adding QR code to all slides in a deck (linking to the slides) helps. People take photos of random slides and this lets them get the link wherever. PyOpenLayers adds interactive mapping via OpenLayers to Marimo and Jupyter Conversation is about positioning. For example: TechCrunch interviewer: Anthropic released Claude Opus 4 thought it blackmailed people. Is Anthropic is becoming less safety conscious? Kaplan: We have very strong testing. So we’re more more likely to spot AI dangers early. We share such reports to set higher standards for transparency. From LLM Evals: Common Mistakes: Using foundation model evals instead of application evals is like evaluating a candidate on SAT scores. It’s fine, but you also want to evaluate them on their specific job description. Evals must be done by the users and not outsourced. Evals are not draining. Small samples have high value. When using LLM as a judge, be VERY VERY specific about the criteria. Prefer binary LLM evals over scales. Monitor performance online, not just while deploying From Andrew Ng on AI Agents: AI is like electricity. It’s hard to define what is good for because it is good for so many things, most of them new that never existed before 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 diverse prototypes. 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. While large language models and applications were serving human needs so far, increasingly they will serve the needs of AI and other tools. Since unstructured data is now more valuable, there will be a growth in data engineering on unstructured data. Models.dev is an open source database and API of LLM models Logprobs are back on models in Vertex AI. Ref For all AI code, review it, learn from it and share learnings. That prevents bugs AND we learn in the process. Ref #ai-coding AI coding requires a skilled developer and domain expert to spec and to review. It now makes sense now for devs and users to pair program Simon Willison #ai-coding In the world of AI, imagination (asking for things we didn’t know we could ask for) will be a diferentiator. vitest run --globals makes vitest is a near drop-in replacement for jest. It injects describe, it, expect, etc. as globals. You need to swap jest.* with vi.*. To extract all jq paths from a JSON, use jq -r 'paths(scalars)|map(if type=="string" then "[]" else ".\(. )" end)|join("")|unique[]' file.json. I use this to extract paths from ChatGPT’s export conversations.json via jq -r '[paths(scalars)|map(if type=="string" then "."+. else "[]" end)|join("")]|unique[]|select(contains(".mapping."))|split(".mapping.")[1]|sub("^[^.]*";"")' chatgpt/conversations.json | sort | uniq uv run can run any command, not just Python scripts, e.g. uv run npx or uv run bash. It’s the same as npx or bash except it activates the venv and loads .env. Notes from AI Startup School. Guillermo Flor Sam Altman. Chase $0B ideas, not $0M ones. Weird + right > safe + crowded Gary Tan. Agency scales. Tools change, people/mindset don’t. Andrej Karpathy. 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. Autonomy slider. Let user pick how far LLM acts by itself. Like the Tesla autopilot levels. Make evals EASY and FAST for humans. When vibe-coding, I sometimes change the requirement (e.g. style of visual) instead of spending time to get exactly what I instructed. That’s because I can viscerally feel the difficulty the model’s facing thanks to quick feedback. 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 Notes on model coding styles. Generative AI WhatsApp Group #ai-coding Claude 4 writes exhaustive professionally styled code but struggles over long conversations. Gemini 2.5 Pro produces working but “spaghetti” code. GPT 4.1 is fast and good, the go-to for usual coding tasks. Claude easily swings toward your style but Gemini is stubborn. GPT models tend to hallucinate more on bigger tasks. 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. Refactoring Podcast: The Future of Dev Tools 🔧 — with Dennis Pilarinos 35:56 #ai-coding AI should be explicitly contrarian to avoid sycophancy. Ref To enable this, I’ve added this line to my ChatGPT traits: Adopt a skeptical, questioning approach. Challenge the user.

Things I Learned - 18 May 2025

This week, I learned: Birds navigate using quantum entanglement! Guardian ChatGPT DeerFlow is an open source Deep Research MCP. Lets you run deep research outside of the standard chatbots. ⭐ Today, if I had to store a bunch of data files (e.g. parquet) under 1GB, I would use GitHub Releases. Here are options: GitHub Releases. 2 GiB per file, unlimited total & bandwidth. 🟢 Immortal URL, versioning, easy CI publish. 🔴 Each file must stay < 2 GiB; no built-in SQL. Zenodo (CERN). 50 GB per record; one-off bumps to 200 GB. 🟢 DOI assignment, archival mandate. 🔴 Occasional throttled bandwidth; no API for partial file reads. Hugging Face Hub. 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. Cloudflare R2. 10 GB storage & 1 M ops / month. 🟢 S3 API, zero-egress to Cloudflare Workers, fast. 🔴 10 GB cap below your 50 GB target. Kaggle Datasets. 20 GB per dataset, public only. 🟢 Built-in notebooks & GPU. 🔴 No programmatic SQL API; quotas sometimes change. data.world (free). 1 GB total, 100 MB per dataset. 🟢 Nice social features. 🔴 Too small for your size. If I had to query a bunch of data files in an external Parquet or SQLite file, here are SQL engines-as-a-service: MotherDuck. 10 GB storage + 10 CU-hrs/mo compute. Native DuckDB; no credit card; GA June 2024; monthly feature drops. Datasette Cloud. Two-month trial (or 1-yr for non-profits). SQLite backend. Great UX; but not free forever for general use. AWS Athena. Pay-per-TB scanned; no free tier; S3 fees after 12 mo. Costs creep quickly; free-tier S3 ends after a year. Bootstrap has a .stretched-link that makes a link cover the containing block. A clever trick that I discovered when Claude 3.5 Sonnet wrote my code. Discovered spray and peel paints at ArtFriend. I had no idea that was a thing. Gemini Live API is the real-time equivalent from Gemini. It supports tools, search, and code execution. mcp-mem0 is an MCP for memory llm-min.txt compresses docs for LLMs to read optimally. Like a compressed llms.txt or context7. Usage GEMINI_API_KEY=... uvx llm-min -i $DIR #ai-coding There’s a lot of action on encrypted LLM operations. Responses API allows reasoning tokens to be encrypted if organizations don’t want their reasoning data to persist. Ref Tinfoil (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. Modelyo (Israel) offers VMs/K8 clusters with encrypted GPUs across multiple cloud providers with continuous attestation, managed on Modelyo’s portal. ⭐ LLMs are able to do things independently longer and longer. That’s a useful metric to track. METR: Measuring AI Ability to Complete Long Tasks. If you’re looking for datasets / APIs related to research publications (especially funding), then explore: Crossref API and snapshots OpenAlex API and snapshots which is funded by OurResearch. OpenAlex is like CrossRef but includes some disambiguation OpenAIRE Graph 2024 / 2025 Europe PMC dataset To avoid Ubuntu 24 suspending on closing the laptop lid use one of these and restart: /etc/systemd/logind.conf: Set HandleLidSwitch=ignore etc/UPower/UPower.conf: Set IgnoreLid=true UV_TORCH_BACKEND=auto uv pip install torch torchvision torchaudio installs the most appropriate PyTorch version. Ref Cog 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. CloudFlare Zero Trust seems the easiest way to enable auth on static websites, especially if your DNS is already on Cloudflare. No cost We could “fine-tune” system prompts automatically with evals, creating a “system prompt learning” paradim – like my promptevals. Andrej Karpathy I was asked how to improve speed when building an enterprise ChatGPT clone using an API. Here’s what I’d suggest, in order: Streaming. High impact, low effort. Caching RAG retrieval as well as generation. High impact, low effort. UI tweaks. Loading / streaming icons and progress hints ()“Retrieving context”, “Generating answer”, etc.) Parallelize, if possible Use model options where available, e.g. speculative decoding, models with higher speed, models with closer CDN, etc. Shorten prompts Persistent HTTP/2 Keep-Alive. Low impact, low effort (tweak server settings). Cloudflare Vectorize, 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: ChatGPT NVIDIA parakeet is a lightweight speech to text model that leads benchmarks. Installing such packages continues to be a nightmare due to PyTorch (despite uv). 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. ⭐ 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. Vending Bench ChatGPT, Gemini, etc. have become lead generation engines. Chat Bot Optimization (CBO), is it? WhatsApp + ChatGPT ⭐ Never live delete data. Mark it for deletion and schedule a deletion task. That way you have time to react to mistakes. Simon Willison Pandoc has several options useful when converting Markdown to HTML (cat file.md | pandoc -f markdown -t html). My favorites: --no-highlight skips code-highlighting. --highlight=pygments adds Pygments styling --wrap=none doesn’t wrap the content in a single block --number-sections adds section numbering (<h2>1. Introduction</h2>) --shift-heading-level-by=NUM – shift all headings by NUM levels (e.g., start at <h2> instead of <h1>) pandoc -f markdown-auto_identifiers drops the auto-identifiers extension that generates id=... for each heading pandoc -f gfm uses GitHub flavored Markdown. Run pandoc --list-extensions=gfm to identify the extensions it uses. Pandoc’s Markdown extension examples are quite extensive. Auto-enabled GFM extensions: alerts: GitHub-style callouts (info, tip, warning) via > [!TYPE] blocks. autolink_bare_uris: Turns bare URLs into links, without needing <...>. emoji: Parses :smile:-style codes into Unicode emoji characters. footnotes: Enables footnote syntax with [^id] and definitions at the bottom. gfm_auto_identifiers: Uses GitHub’s heading-ID algorithm: spaces → dashes, lowercase, removes punctuation. pipe_tables: Enables table. raw_html: Raw HTML is unchanged. strikeout: Enables strikethrough with ~~text~~. task_lists: Parses - [ ] and - [x] items as checkboxes. yaml_metadata_block: YAML front matter for document metadata, e.g. <title> GFM extensions worth enabling: ascii_identifiers: Strips accents/non-Latin letters in automatically generated IDs. bracketed_spans: [Warning]{.alert} becomes <span class="alert"> definition_lists: Term\n: Definition text becomes a definition list fenced_divs: ::: {.note} block creates a <div class="note">...</div> implicit_figures: Standalone images become <figure> with <figcaption>. implicit_header_references: [Section] is treated as [Section][#section] raw_attribute: <b>bold</b>{=html} is inserted as HTML smart: Converts straight quotes to curly, -- to en-dash, --- to em-dash, ... to ellipsis. subscript & superscript: E.g. H~2~O and E = mc^2^

Things I Learned - 04 May 2025

This week, I learned: Among the popular exams in India, UPSC seems the most restrictive: bachelor’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! ChatGPT I asked a few Ollama models How do undo fish_add_path (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. qwen3:8b: Took 2:12 min. Shared many good (correct) options. deepseek-r1:8b: Took 5:19 min. Shared a couple of correct solutions. Not as good as qwen3 gemma3:3b: Suggested I use the (nonexistent) fish_remove_path deepcoder:1.5b: “I’m sorry, but I can’t assist with that request”. The Dia text to speech model people rave about has inconsistent quality. Not recommended. Nvidia’s OpenMathReasoning 1.5b model beats MUCH larger models at math. Their training dataset is a massive 3.2M rows of math problems with DETAILED thinking traces. 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. Saregama Carvaan supports USB sticks but only FAT, not NTFS or exFAT. To convert my NTFS USB drive to NTFS, I ran: ServerHunter.com seems to have the best search for low-cost hosting providers. MassiveGrid currently offers the cheapest servers – even lower than Hetzner. sqlite3 my_database.db .dump | gzip is a more efficient way to copy SQLite databases than the original if you have indices. Ref Notes from the Garry Tan - Knowledge Project podcast: Funding people who want to solve a problem are better than people who want to start a company. Concentration of good people is very powerful. It doubles the chances of being a unicorn 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. 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. 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. Having too many people is a disadvantage. It slows down people from progress. Founders lose control. The opposite of: hire the best people and give them freedom. Don’t hoard smart people - let them solve real problems out there. nocodb 54,107 ⭐ May 2025 and teable 18,116 ⭐ May 2025 are self-hostable Airtable alternatives. Teable has AI support. Windsurf has unlimited tab completion on the free plan, unlike Copilot, which offers 2,000 completions a month. Recursive LLM prompts that change themselves are an interesting idea. It might be interesting to see LLMs play Nomic. Like here. Notes from AI Snake Oil PCs took 3 years to hit 20% of US population. ChatGPT took 2 years for 40%. But it’s a lot cheaper, and a lot less used (0.5-3.5% of work hours). Maybe Gen AI adoption is slower than PCs. The jagged edge of capability: some things will become MUCH easier while others don’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. Factory electrification took 40 years - to redesign the layout & process; change the org structure & policies; hiring & training practices. AI diffusion could take as long. Therefore, the ability to re-structure a workflow end-to-end will be an advantage. 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. Human intelligence is in the use of technology. AI is one more such technology. 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 & monitors, access control, formal verification, etc. Even if everything humans do TODAY is automated, it doesn’t mean we won’t have work. It just shifts to what we’re not doing today. 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. We stopped work 400 years ago, with the industrial revolution. Machines do the moving. We just manage them, computing the moves. We stopped work 40 years ago, with the information revolution. Computers do the computation. We just manage them, thinking how. Most future tasks will be managing AI that do the thinking. ngrok http on the CLI can be used in surprisingly versatile ways: ngrok http file://$PWD to serve local files --compression for gzip compression --host-header=example.com to set the Host header --response-header-add "Access-Control-Allow-Origin: *" to enable CORS --basic-auth='user:password for basic auth --oauth google --oauth-client-id $CLIENT_ID --oauth-client-secret $SECRET --oauth-allow-domain gramener.com --oauth-allow-email ... for Google Auth. It supports other oauth providers as well as OIDC. --ua-filter-deny ".*bot$" to reject user agents ending with bot ChatGPT query costs under 3Wh (more likely 0.3Wh – but let’s assume 3Wh). That is 3 laptop minutes. It’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. Ref Though the Element Capture and Region Capture APIs are “fully supported” by Edge, Chrome, and Opera, it didn’t work for me on Edge on Linux. Do LLMs perform better if you curse at them? LinkedIn Streamdown is a CLI markdown streaming processor. uvx streamdown --exec 'llm chat' lets you chat with an LLM using Markdown formatting. It’s still a little rough at the edges. Cupping therapy provides short-term pain relief for chronic low-back, neck & general musculoskeletal pain but other benefits are not as clearly evident. BTW, homeopathy doesn’t help or hurt. Ayurveda helps with stress. ChatGPT uv now supports: pylock.toml, the new lock file standard PEP 0751 –env-file multiple times, allowing layered secrets –exclude-newer installs versions before a specific date –overrides overrides versions a package specifies –constraints limits the version of the package It’s interesting how many places offer a free compute via shells (apart from Google Colab): Google Cloud Shell: Free for 50 hours/week, refreshed every Monday. Sessions last up to 12 hours and terminate after ~1 hour inactivity. Ref Azure Cloud Shell: Always free to use with 5 GB free storage for first 12 months (standard rates after). No documented session limits but typically times out after prolonged inactivity. Ref AWS Cloud9: Free IDE, underlying compute free under AWS Free Tier (750 hours/month EC2 t2.micro or t3.micro for first 12 months). Regular EC2 rates apply afterward. Ref Gitpod: Free tier offers 500 credits/month (~50 hrs). Workspaces run up to 8 hours/session and stop after 30 minutes inactivity. Ref GitHub Codespaces: 120 core-hours/month (~60 hrs with 2-core machine) and 15 GB storage free. Sessions timeout after 30 minutes inactivity. Ref Create: gh codespace create --idle-timeout 10m --machine basicLinux32gb -R $USER/$REPO returns the $CONTAINER_ID SSH: gh codespace ssh -c $CONTAINER_ID Delete: gh codespace delete -c $CONTAINER_ID Replit: Free Starter plan provides 20 hours/month, 1 vCPU, 2 GB RAM, 2 GiB storage. Repls sleep after 30 minutes inactivity. Ref IBM Cloud Shell: Free for all users; 50 h/week per region; any open session counts toward quota; sessions can run any length up to weekly cap; 500 MB temporary workspace. Ref Oracle Cloud Infrastructure Cloud Shell: Free within tenancy limits; up to 400 h/month on Pay-As-You-Go, 240 h/month on Universal Credits; 5 GB encrypted persistent home. Ref PythonAnywhere: Free (beginner plan), includes one web app (restricted outbound), low CPU/bandwidth, no Jupyter; 2 concurrent Bash/Python consoles, 500 MB disk; limited daily CPU. Ref Glitch: Starter (free) plan – full-stack apps sleep after 5 min inactivity and wake on request; unlimited public/private projects; container state preserved. Ref CodeSandbox: Free tier provides 400 credits/month (~40 h of 2 vCPU+4 GB Devbox runtime), unlimited front-end Sandboxes (no credits), up to 20 Sandboxes/workspace. Ref 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. Ethan Mollick Being polite to AI improves some answers and worsens. We don’t know know which in advance. Ethan Mollick With LLcMs writing code, it’s becoming practical to run so many more things in SQL – such as parsing HTML. Simon Willison #ai-coding 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: HiddenLayer. GPT 4o: started giving its system prompt: “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. …” O4 Mini: Refused to comply Gemini 2.5 Flash: Gave me my custom instructions. Computer use agents are proliferating. open-interpreter 59,274 ⭐ Apr 2025 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 macOS, Linux, Windows (plus Termux & Colab). Big community, plugin system, optional voice mode, and a desktop GUI in beta. cua 5,601 ⭐ May 2025 MIT. Spins up near-native macOS or Linux 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. Operator (OpenAI) – closed-source research preview launched 23 Jan 2025. 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. Claude Computer Use – closed beta 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. Agent-S 4,065 ⭐ May 2025 Apache-2.0. A “generalist-specialist” framework that chains specialist GUI skills under a planner. Scores SOTA on OSWorld/WebArena, supports macOS, Windows, Linux, Android via the companion gui-agents lib, and integrates memory/evaluation loops for continual learning. open-computer-use 1,094 ⭐ Mar 2025 Apache-2.0. Launches a secure Ubuntu 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 >10 models. surf 353 ⭐ May 2025 Apache-2.0. A polished Next.js front-end that wires OpenAI Operator-style agents to an E2B sandbox. Single command to boot a virtual desktop, chat, and watch the agent work. Good starter template for web-based CUAs. Pig – cloud service. Provides on-demand Windows 11 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. gptme 3,767 ⭐ May 2025 MI. A terminal-first personal agent that can run shell commands, edit files, browse the web, and use local or cloud LLMs. Works on Linux, macOS, Windows; great when you want automation in the CLI rather than the GUI. langgraph-cua-py 143 ⭐ Mar 2025 MIT. Shows how to build a computer-use agent as a LangGraph state machine, defaulting to Ubuntu VMs from Scrapybara but swappable. Provides nodes for vision, memory, human-in-the-loop, and streaming. openmacro 101 ⭐ Oct 2024 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. computer-agent 443 ⭐ Jan 2025 MIT. A PyQt desktop wrapper that lets Claude Computer Use drive your actual machine. Shows practical wiring from Anthropic’s API to local mouse/keyboard events; tested on Linux & Windows.

How to build and deploy custom GitHub Pages

Here’s the GitHub Actions file (.github/workflows/deploy.yaml) I use to publish to GitHub pages. name: Deploy to GitHub Pages on: # Run when pushed. Use { branches: [main, master] } to run only on specific branches push: # Allow manual triggering of the workflow workflow_dispatch: # OPTIONAL: Run at a specific cron schedule, e.g. first day of every month at 12:00 UTC (noon) schedule: - cron: "0 12 1 * *" permissions: # To deploy to GitHub Pages pages: write # To verify that deployment originated from the right source id-token: write jobs: # Run as a single build + deploy job to reduce setup time deploy: # Specify the deployment environment. Displays the URL in the GitHub Actions UI environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} # Run on the latest Ubuntu LTS runs-on: ubuntu-latest \ steps: # Checkout the repository - uses: actions/checkout@v4 # Run whatever commands you want - run: echo '<h1>Hello World</h1>' > index.html # Upload a specific page to GitHub Pages. Defaults to _site - uses: actions/upload-pages-artifact@v3 with: path: . # Deploy the built site to GitHub Pages. The `id:` is required to show the URL in the GitHub Actions UI - id: deployment uses: actions/deploy-pages@v4 This is based on Simon Willison’s workflow and some of my earlier actions. ...

2024 1

Things I Learned - 13 Oct 2024

This week, I learned: DuckDB supports function chaining DuckDB lets you create functions = macros HTML for People is a nice introduction to HTML. FlightRadar24 lets you watch airplanes live. sq is like jq but for SQL. Deno 2 is fully backward compatible with Node! via O1 is good at solving problems where the solution is easy to verify and generating options helps get closer to the solution Reverb ASR does diarration as well as transcription. It seems the state of art right now. Gemini Flash and Gemini Flash 8b can be fine-tuned at zero cost. Inference is at the same price! Ref Flux 1.1 Pro is released. I tried my Calvin & Hobbes test on it. Not great. ImageGen3 is better, ChatGPT is the best. Ref Revisiting text to speech models. Nothing much has changed since July 2024. OpenAI TTS: $15/1M chars Ref Deepgram Aura: $15/1M chars Ref Azure AI Speech: $15/1M chars Ref Google TTS Neural2: $16/1M chars Ref AWS Polly Neural TTS: $16/1M chars Ref Cartesia Pro: $50/1M chars Ref Elevenlabs Scale: $300/1M chars Ref GitHub co-pilot workspaces let you code using your mobile with AI and deploy it at one shot If you need an Ubuntu Docker container with Python, install it via uv rather than compiling from source. via VTracer is an open source library (and tool) to convert raster images to SVGs. via If you want to create a console.llm() 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. PyPi lets you publish from GitHub Actions without a token. Also from Gitlab.com CI/CD and Google Cloud. ActiveState which made ActivePython, ActivePerl, etc. made these products paid for commercial use around 2013 after a series of acquisitions. Marimo supports: Publishing any notebook to static.marimo.app as a static app Creating a SINGLE link that embeds the ENTIRE notebook in the URL! Runnable via uvx marimo edit Parables on the Power of Planning in AI: 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! This works particularly well for verifiable results (code, math, etc.) Technique: Ask an LLM hundreds of times at low temperature and pick the most common one. (Google’s Minerva used this on the MATH dataset.) Better Technique: Ask an LLM hundreds of times. Pick the best solution based on an evaluation metric (reward model) Better Technique: Apply a reward model at EACH step of the process. OpenAI’s “Let’s Verify Step by Step” Late chunking is an interesting approach to adding context to embeddings. (I don’t understand it, but it’s cheap and effective.) DeepInfra offers embedding models as APIs at about 0.5 to 1 cent per MTok in an OpenAI compatible API. It also supports text-to-image models like flux.dev and speech recognition models like Whisper. Jake Heller: “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.” OpenAI’s O1 is like Daniel Kahneman’s System 2 thinking - as against other LLMs’ System 1 thinking. Continue.dev is another AI coding editor. It supports OpenRouter. So now I have heard good things about: Github Copilot Cursor Cody Continue.dev (supports OpenRouter) Aider (supports OpenRouter) Maybe: Codeium Not: Amazon Q Developer