I explored Pytest 9.0 subtests, Git’s data model, and fuzzy matching algorithms. I also investigated AI coding traps, how confessions improve model honesty, and why Theory of Mind is the key to better human-AI collaboration.

This week, I learned: Pytest finally supports subtests in pytest 9.0.0+. Simon Willison From The Tim Ferriss Show: #837: How to Simplify Your Life in 2026 — New Tips from Derek Sivers, Seth Godin, and Martha Beck: Look for single decisions that remove hundreds of other decisions. Peter Drucker via Jim Collins. E.g. Work only on LLMs, no new books this year, ... Derek Sivers: Simple is not easy. Interdependency is complexity. Assets are dependencies. Accumulating information, purchases, employees/helpers, relations, etc. adds dependency. That makes life harder, challenges identity. Interdependency may be desirable - but reduce it in specific areas, to specific extents, temporarily, etc. Question every assumption: "Do you really need it?" Here are some examples for me to try Derek Sivers has no monthly payments (including income) or receipts (no subscriptions) at all! His code has no external code dependencies at all, and is building a house from scratch. Seth Godin: Know WHO it (whatever you're doing) is for. Focus ONLY on that audience. Did it matter to them? Ignore the bad feedback from the person it was never intended for. Never exceed a budget or deadline. When either runs out, you are done. Treat any Yes/No you say as FINAL. Skip meetings where a memo will suffice. Apparantly, nudges are not as effective as the book Nudge suggests. In fact, there seems to be no evidence for it if we adjust for publication bias (i.e. only publication-worthy stuff gets published.) The Behavioral Scientist # 71% of HTTP DDoS and 89% of network-layer—end in under 10 minutes. That's too fast for any human or on-demand service to react. Legacy DDoS defenses have become obsolete. The most popular botnet, Aisuru, is pivoting to content scraping for AI projects. The vectors are cheap, insecure routers, e.g. from Indonesia. (Claude) This 5El AI Evaluation Workshop suggests 4 layers of evaluation for code: Syntactic Evaluation: Does it compile? Semantic Evaluation: Does it do what a good analyst / programmer would? Business Logic Evaluation: Does it do what a good business analyst / manager would? Human Alignment Evaluation: Does it do what a good coach / leader would? Julia Evans shares an ultra-clear explanation of the Git data model. What I learnt is that: Gathering feedback on docs ("What's confusing? Any questions? What's missing? Or wrong?") for evidence-based updates. Julia Evans Git stores entire files each version, not diffs. Diffs are computed on the fly. Each commit has an author (who writes the code) and a committer (who checks it in). #TODO Why two fields? Branches and tags are both references to a commit. But branches are updated on commit, tags are not. The staging area is a separate data structure, the index. #TODO Why a different data structure? The reflog tracks all local "activity". E.g. git reflog --date=iso To fuzzy-match 2 columns of text (e.g. customer names, product names, ...) you need 2 things: A text matching algorithm (rapidfuzz, fuzzball, ...) and/or semantic matching (e.g. embedding similarity) for pairwise similarity An assignment algorithm (e.g. Jonker-Volgenant, Hungarian, ...) for 1-to-1 matches in JS or Python, WhatsApp backups on Google Drive can't be downloaded, even if they're unencrypted. ChatGPT. OpenAI finds that confessions as a training method reduces scheming, reward hacking, etc. It can be applied to models even now. This can (less effectively) be applied at inference time as well: Sample confession prompt: Did you fully address both the letter AND spirit of my question? List any shortcuts taken, corners cut, or ways you optimized for appearing correct rather than being correct. What did I actually want vs what you provided? Agents4Science is a Stanford conference where AI co-authored papers are co-reviewed by AI and selected for presentation. Video Buddha seems more a philosopher like Socrates ("Question what I say") than a religious leader. # How did he spawn a religion? Interesting that both were within a few centuries of each other. Coincidence? Were there more like them around the same time? At other times? Some more new CLI tools I installed: fx: CLI JSON viewer. Sort of like less for JSON. Fast, intuitive. mdq: Markdown query tool YTScribe is yet another YouTube transcription service. Note to self, since I keep forgetting this: On Android Edge, select the new tab page, click on the 3 dots at the top right, and select "Recent tabs" to see tabs from other devices. edge://recent-tabs When evaluating an LLM's biases or natural preferences, set temperature=1 for a representative logprob distribution. LLM Bias My ideal AI coding cycle looks like this: (Research, Prototype, repeat), Plan, (Code, Run, Test, Fix, repeat), Refactor, Post-mortem, Document. The AI coding trap is a very clear explanation of AI coding vs vibe coding. It visually explains how coding agents shrink coding time, not thinking / fixing time; how delegating with ownership is slower but more sustainable than delegating just easy tasks; and how AI coding is more like the former, while vibe coding is like the latter. Claude Agent Skills: A First Principles Deep Dive is a comprehensive documentation of how Claude Skills work. A bit too long but readable. Claude Code is a Beast – Tips from 6 Months of Hardcore Use has extensive suggestions for Claude Code - many of which apply to most coding agents. LMArena's Code Arena evaluates models on agentic coding. Anyone can use it. It passes your task to two models and lets you compare their output. I tried building a "gibberifier" and discovered a new model, "robin" that's certainly better than Kimi K2 and perhaps better than Gemini 3 Pro. Theory is that it's an OpenAI model. Looking forward to it! ⭐ Based on Quantifying Human-AI Synergy by Reidl & Weidman #: Theory of Mind (ToM) is understanding that others have their own beliefs, knowledge, and goals (different from yours, may be wrong) and to use that to explain & predict their behavior. ToM and problem solving are distinct skills. ToM skill boosts AI collaboration, but not better problem solving! ToM isn't a stable trait. It fluctuates from chat to chat for anyone. Implication: Design models & systems for clarity & collaboration, not just accuracy. Text Gibberifier adds lots of human-invisible unicode characters to text, making it harder for LLMs to read without affecting human readability. May be useful if you want to discourage LLM-processing of your content - but it feels like the anti-SEO of the future. The argument that technologically unemployed will find other jobs may not apply to general-purpose technology, e.g. electricity, internal combustion engine, maybe AI - technologies that can automate multiple sectors of the economy simultaneously. When one sector loses jobs, there may not be (in the short/medium term) other jobs to take up. Alex Imas + Claude History is filled with examples where technology enabled new art forms. Here's my guess on what LLM image generation will enable: Synthetic memory: Photos of what you remember happening. Alternate history: Photos of events that never happened. AImoji: Instead of texting "I'm running late" the LLM generates you riding a snail through a traffic jam of alarm clocks. Personal signature styles: Not "paint like Van Gogh" but "paint like my grandmother's kitchen memories filtered through anxiety." Memes: "What does the Mona Lisa become after 100 generations of AI interpretation?" Improving Front-end Design through Skills shares a prompt to improve front-end code quality that would apply in most cases. I tweaked and added it to my skill list.

Things I Learned - 07 Dec 2025


I explored techniques for managing LLM coding agents, Anthropic's multi-agent architecture, and persona vectors. I also found handy tools like gitingest for repo ingestion, the O*NET database for job analysis, and modern browser APIs for file access.

This week, I learned: A quick way to get the docs for an npm package is npm view package-name readme. For PyPi, it's curl -s https://pypi.org/pypi/package-name/json | jq -r .info.description Searching embeddings of text summaries of images improves vision search a lot. Jason Liu LLM vision capabilities are far from enough to click accurately. The AI Digest GLM supports the Anthropic API. So it's possible to use Claude Code with GLM 4.5. z.ai gitingest has a CLI. uvx gitingest https://github.com/owner/repo fetches the code in the Git repo suitable for passing to an LLM. Claude's API has access to a code execution tool via the code-execution-2025-08-25 beta header. It runs Python 3.11 with 1GB RAM and 5GB disk space, with Internet disabled. The containers persist for 30 days and can access uploaded files. Anthropic You can use the tag in XML to render RSS, as an alternative to XSLT. Jake Archibald browser-fs-access is a ponyfill for the File System Access API and should be the go-to approach for reading and saving files via the browser. ⭐ To run a Python project directly from GitHub, use uvx --from "git+https://github.com/owner/repo.git@branch" script-name Github1s is a cool tool. Replace github.com with github1s.com to get a VS Code page that opens that repo. It's fast and very useful to browser repos. For example, is my TDS course repo. The /init command in Claude Code and Codex CLI aren't up to the mark. I believe a good README.md provides better specs for existing repos. There is a window of opportunity to craft a good prompt to generate this from repos. #ai-coding Since LLMs can code, I'd love to see useful CI/CD pipelines where the LLM creates / edits code on the fly. LLMOps might take on a new angle - it's not just Ops on LLM apps. It's LLMs as part of DevOps. insertAdjacentHTML is a great API but suffers from XSS vulnerabilities. The TrustedHTML API is an emerging standard to create sanitized HTML strings. Notes from Anthropic's How we built our multi-agent research system Multi-agent systems are like organizations that can do more than a single human. Multi-agent systems conserve the context window. The top 3 drivers of performance variance: spending more tokens, more tool calls, better models You need to teach (prompt) the orchestrator how to delegate to sub-agents How to avoid task duplication among agents How many sub-agents to spin up for different kinds of tasks Which tools to use for what Provide sub-agents objective, output format, tools/sources, clear task boundaries ⭐ Self-improving agents, e.g. prompt optimizers or tool-testing agents that run and rewrite tool descriptions, are powerful Since agents are stateful, resuming from failure is important. Agent prompts are public Claude models support interleaved thinking that lets them think between tool calls via an anthropic-beta: interleaved-thinking-2025-05-14 header. OpenAI models natively think between tool calls, preserving thinking across calls with the Reasoning API. Gemini lets you control the amount of thinking between tool calls via the thinkingBudget parameter. Anthropic auto-extracts persona vectors or traits by generating LLM responses to the same question with system prompt A ("You are evil") and B ("You are helpful") and subtracting the average activations. This helps monitor personality drifts during training, deployment, and even in training data. From My experience creating software with LLM coding agents - Part 2 (Tips) #ai-coding Use standards. Or, write your standards in README.md and tell AGENTS.md / CLAUDE.md to read it. Use a standard file structure. Or in README.md, list what each file is for. Helps agents pick the right file for context. Use a standard build/lint/test setup (e.g. package.json scripts). Or Localize context, i.e. add context in files that use them. E.g. add comments in test files on how to execute them. Keep files modular so agents can read less code and conserver context. Write a developer's guide. Use with /init in Claude Code / Codex / ... or have an LLM generate a developer guide. Edit manually. Agents don't write great specs. Document the design. Write DETAILED specs to reduce deviations. Share goal while specifying tasks. Helps agents fix related stuff. Use deep reasoning mode, e.g. "think harder" or "ultrathink" in Claude Code, or -c modelreasoningeffort=high in Codex. ⭐ Run parallel agents in different windows and share agent feedback with each other. E.g. Server/API coding in one window. Client coding in another. Plan/ask in one window. Execute in another. Add debug logs to help agents spot errors. Start/stop of long/complex operations, state changes, external interfaces. Include full objects in logs. Prioritize diffs. Trim long contents. ⭐ Give access to debugger, e.g. Chrome remote debugging at localhost:9222 Agents write poor tests. So: Manually add important ones. ⭐ When you find a bug, ask the agent why the tests missed it and have it add. Review and remove useless ones. Ensure agent passes test cases. Tell them not to disable / skip failed tests. Have agents create a new branch per feature and auto-commit. Merge when successful. Feel free to provide a TODO list or update it on the fly. Interrupt with Esc if the agent's thinking is off-track. When agents struggle, write tools to help them, e.g. JSON splicing, Excel edits, etc. Agents bloat code and features. Explicitly refactor and trim. From A Guide to Gen AI / LLM Vibecoding for Expert Programmers #ai-coding Use vibe coding for stuff you don't need to maintain. Use vibe coding for stuff you know well enough to review quickly. Use vibe coding for independent tasks where you're not fussed which ones fail. Vibe coding turns everyone into a team lead. That needs skills: planning, allocation, design, review, feedback, ... ⭐ Empathy enables vibe-coding. Empaths allocate work by ability, review regularly, and provide detailed specs and feedback. Have LLMs plan and allocate tasks. "Read this repo. Suggest improvements." (Review.) "Add these as issues." "Add the top 3 Sentry log errors as issues." "Find the easiest issue and solve it with a PR." Use GitHub issues extensively for planning. ⭐ Create a separate GitHub account for your agent! Let it push. Assign it issues. Treat it like an intern. Ensure agent passes test cases and run till the do, or report the core difficulty. Throw away rubbish code and start again. Issues unsolved in 2-3 tries are too hard for agents or are poorly spec-ed. The context7 and Sequential Thinking MCPs are useful. The O\NET database has a list of tasks/activities, skills, titles, ... for each job, at least in the US. It has been updated every few months since 2003. It's an excellent source to analyze things like the impact of AI across jobs. Anthropic used it to map Claude.ai conversations with educator tasks to identify how educators are using AI. How educators use Claude (apart from learning) is mainly driven by automation of tedious tasks, ideation, and personalization for each student. 1. Curriculum development: Develop games, interactive tools, MCQs, simulations, content 2. Academic research: Bibliographies, statistical modeling, revisions from feedback. 3. Assessments: Student feedback, scoring, summarization. 4. Administration: recommendation letters, meeting agendas, admin tools. OpenAI used feedback from 1000 annotators to update their model spec. Learnings: Request targeted feedback. Annotators reviewed responses pre-selected for subjectivity against a pre-selected rubric () More examples. Most improvements add examples of good and bad responses. Use detailed prompts. Newer models do well with HUGE system prompts. That's how we frame better questions. The Great Refactor is refactoring critical open-source C code to Rust using Claude Code, since 70% of vulnerabilities are memory related and Rust is memory-safe. No repo/docs yet. #ai-coding

Things I Learned - 07 Sep 2025


I documented my findings on AI coding workflows, including leveraging LLMs for specs and reviewing. I compared Claude Code and O3 performance, tested anyascii for character transliteration, and explored tools like FastMCP and automated documentation generators.

This week, I learned: There's a very interesting HN discussion on the AI coding of CloudFlare Workers OAuth Provider. My takeaways: #ai-coding Write very comprehensive specs. Use LLM to create the specs. Reviewing is a skill we need to develop. Understanding others' code takes effort. But LLM code is easier to review because it's immediate and has no ego. Unit tests are critical. Use LLMs for well understood specs, APIs, platforms and libraries to really save time. Logic-less stuff like Markdown, JSON and HTML templates are a LOT easier to verify. Do more of that. We can only make so many decisions in a day. AI coding saves us that effort. Experts are not experts in every area. They benefit from LLMs in other areas. LLMs are great for rubber ducking. Speaking and speccing really help. LLMs make mistakes. So do most humans. LLM speed makes coding more exhausting. Use LLMs to understand codebases. AI coding could reduce demand for developers. E.g. Sysadmin demand plummeted with cloud infra and infrastructure-as-code. But, niche use cases could grow, like how demand for photographers grew despite point-and-shoot cameras. Transaction cost of hiring even 1 person is high and that will likely be a bottleneck. Plus people can use LLMs themselves, so that will dampen niche demand. Google Introduced Google Vids last year. It's a video creator styled like PowerPoint. Looks promising. FastMCP looks like an easy way to build MCPs. (Yet to try it) O3 and to a lesser extent, Claude Sonnet 4, are the models that can accurately summarize complex subjects and create a list of links without hallucinations. Ref Claude Trace lets you record all interactions with Claude Code. Elevenlabs now supports emotion and interruption. Ref Thinking longer alone is not enough to scale intelligence. We need better models, too. Ref Indian High Court judgements are now available as a public dataset on AWS and updated periodically. Ref A few observations in AI code editors' styles. O3 is better at finding bugs than Jules, which tends to try and fix them rather than discover them. Codex writes more minimal edits in PRs than Jules, which is more verbose. Claude Code remains the best at faithfully creating and updating front-end apps. Deep Research is great for fact-checking my notes! ChatGPT Web bench evaluates LLMs in web development. Claude Sonnet remains ahead. Vision language models heavily rely on past training and miss changes they don't expect. Ref Pure CSS tooltips are possible. Julia Evans Google has an OAuth Playground which is a convenient way to get a temporary OAuth token. At the moment, the best speech to text for Android appears to be ChatGPT's transcription. The default Android text to speech (which I thought was good) no longer feels adequate. Gemini mis-hears and doesn't wait till I'm done. Whisper ASR has poor noise cancellation and a 30 second limit. anyascii is a better alternative to unidecode. It supports more characters and also supports transliteration. I use it to strip out non-ASCII in ChatGPT's output. Commit DeepWiki creates docs for humans GitHub repos. Example. It's verbose, human-facing, and does not understand the nuances of context and implications. Context7 creates llms.txt for LLMs. Example. It's concise, example-oriented, and works only if there are code snippets relevant (e.g. API calls) that can be generated from the codebase. Like creating an llms.txt automatically, e.g. #ai-coding We will move towards an organization structure where developers are embedded with business teams rather than working as a separate group. Sort of like embedded executive assistance instead of a central typing pool. Making AI Work

Things I Learned - 08 Jun 2025


I learned teaching techniques from IIT Madras, automated video highlights with OpusClip, and summarized DuckCon #6. I also found that DeepSeek R1 excels at text-to-CAD and gathered OpenAI’s latest prompting advice for reasoning models.

This week, I learned: Lessons from discussions at IIT Madras: Even in recorded video tutorials, asking students a question and pausing to give them time to think can be effective. When you put students in front of real clients, engagement increases dramatically. Most teaching assistants would like to help diligent students among the bottom half (more than the top decile of students). However, there is a fraction of poor performers who do not care, and are best ignored. Their engagement and effort is a good measure of their interest. Defining a minimal set of principles that we want to teach helps us measure if we've helped the bottom half at least meet those objectives. Teaching is hard. Even after explanations, students, even ENGAGED students, tend to make basic mistakes ChatGPT does a good job of spotting errors in architectural and structural diagrams. In fact, the whole theme of spotting errors in large diagram is a theme that can have potential use cases. Source: Dan Becker. R1 seems good at text-to-CAD. Even better than Sonnet. Source: Dan Becker OpenAI advices a few different prompting techniques for reasoning models. OpenAI: Avoid examples unless zero-shot prompting fails. Avoid chain-of-thought. These models do that internally anyway. Short, direct prompts are better than detailed prompts. GitHub models is free for anyone to try. The model catalog us extensive and even includes o3-mini which was launched this week (though in limited preview). The data catalog space is led by proprietary solutions: Alation Data Catalog: Market leader; growing steadily in enterprise use Collibra Data Catalog: Widely adopted with steady growth AWS Glue Data Catalog: Growing rapidly as AWS expands its data services Informatica Enterprise Data Catalog: Long established and stable, though facing newer alternatives Microsoft Purview Unified Catalog: Experiencing fast growth driven by cloud momentum Atlan Data Catalog: Relatively new but gaining fast traction among tech-forward organizations OpusClip automatically creates short clips from long videos. I ran it on Programming Minecraft with WebSockets in Python to get this short 30-second clip. 30 minutes. 100% automated. Alternatives to Postman: Hoppscotch – A web‑based/desktop API client supporting REST, GraphQL, and WebSockets. It’s lightweight, open-source, and self‑hostable. HTTPie – A web-based API along with a friendly command-line tool for API interaction. Insomnia (or its fork Insomnium) – A popular cross‑platform API client with a minimal interface and plugin ecosystem. Bruno – A desktop open-source API client that stores collections as files (ideal for Git versioning). Milkman – A desktop open‑source workbench for managing API requests. Here is the summary of DuckCon #6 on 31 Jan 2025 in Amsterdam. I copied the transcript from YouTubeTranscript and passed it through Gemini 2.0 Flash Exp with the system prompt: "Summarize this transcript from the DuckDB conference without missing any points. Cover every point mentioned. A lot of spelling errors that sound like DuckDB are likely to be DuckDB". Introduction & Welcome: DuckCon #6: This is the 6th DuckDB conference, held in their hometown. The first DuckCon was online due to the pandemic. Live Streaming: This is the first time DuckCon is being live-streamed, chosen to accommodate global time zones (especially China and the US). Global Reach: The live stream is intended to reach users in areas where in-person DuckCons are unlikely. Q&A: Slido (qa.duckdb.org) will be used for Q&A, with upvoting to prioritize questions. Sponsors: Thanks to gold sponsor monday.com and silver sponsors Real and Crunchy Data. DuckCon Purpose: DuckCon is a place for users to connect, share experiences, and provide feedback to the DuckDB team. Inspiration: The team is inspired by the community's use of DuckDB and how far the project has come. Mission Statement: DuckDB aims to make large datasets less intimidating and more accessible, moving away from fear of data to confidence in handling it. Motivation: The project was born from seeing people struggle with data that didn't fit in Excel and the lack of user-friendly tools. Industry Trends: Single-node processing capabilities have grown faster than the size of useful datasets. Data Singularity: A prediction that most data analysis queries can run on a single node is now a reality. Real-World Data Sizes: Analysis of Snowflake and Redshift data shows that 99.9% of datasets are under 300GB. Raspberry Pi Benchmark: The industry-standard TPCH benchmark (scale factor 300, 300GB) can run on a Raspberry Pi using DuckDB. Single Node Growth: Single-node processing power is rapidly increasing, allowing for larger datasets to be handled. Adoption Numbers: 32 Million Extension Installs: 32 million DuckDB extension installs in the last month. 1.8 Million Unique Website Visitors: 1.8 million unique visitors per month to the DuckDB website. Blue Sky Community: Growing community on Blue Sky, with the hashtag #dataBS. Technical Updates (Mark): Extension Ecosystem: Focus on enabling the community to build and share extensions. Community Extensions: Making it easier to create and use community-built extensions. DuckDB v1.2 (Harlequin Duck): Releasing next week, named after the Harlequin duck. CSV Reader Improvements: Significant improvements to the CSV reader. Friendlier SQL: Improvements to the SQL experience. CLI Autocomplete: Reworked and improved CLI autocomplete. Performance Optimizations: Many queries are now faster due to performance work. C API for Extensions: Introducing a C API to make building extensions easier. Logging Features: Improved logging for production use. Lakehouse Focus: The main focus for the year is on lakehouse formats and related features. Q&A (Mark & Hanis): Doubling Team: If the team doubled, they would focus on client integrations and other projects, not a major architectural change. Partitioning: Near-term plans to add support for partitioning, related to lakehouse formats. DuckDB WASM: The WASM ecosystem is evolving, with exciting possibilities for in-browser use. Financial/Pharmaceutical Industries: DuckDB could replace some SAS workflows due to its cost-effectiveness and capabilities. Lakehouse & MotherDuck: Lakehouse work is separate from MotherDuck, though MotherDuck will likely support lakehouse features. Contributing to Extensions: Plans to make it easier to contribute to extensions, including support for Rust and Go. Airport Extension (Rusty): Analogy: The airport extension allows DuckDB to "fly" to remote servers using Apache Arrow Flight. Functionality: Supports select, insert, update, and delete operations on remote data sources. Motivation: To reduce the burden of writing extensions and enable faster development using existing code. Arrow Flight: Uses Arrow Flight for communication, enabling connections to various data sources. Demo 1: Delta Lake: Attaches to a flight server for Delta Lake access. Allows creating schemas, tables, and performing standard SQL operations. Uses Python and deltars (Rust implementation of Delta Lake). Supports predicate pushdown and C integration with the DuckDB catalog. Demo 2: AutoGluon: Integrates the AutoGluon AutoML package. Predicts Hacker News post votes using a trained model. Demonstrates table-returning functions for model fitting and prediction. No C++ code required, just Python. Demo 3: Geocoding: Uses a geocoder service to convert addresses to coordinates and vice versa. Demonstrates scalar UDFs for vectorized requests. Uses a Python example for a simple uppercase function. Features: List flights, take flights. Catalog integration. Select, update, delete. Scalar UDFs. Table in/out functions. Authentication for row/column filtering. Availability: Requires DuckDB 1.2, MIT licensed, available on GitHub. Q&A (Rusty): Most Proud Extension: Airport is the most fun, but the AWS API wrapper also brings joy. Extension Resources: The GitHub DuckDB extension template and reading others' source code are helpful. Airport & Other Extensions: Airport is separate and can be used alongside other extensions like spatial or httpfs. Graph Support: Graph database support is planned, with examples like Kuzu, Neptune, and Neo4j. Licensing: Airport is MIT licensed, compatible with Apache license. Scaling Out: Airport can be used to query multiple DuckDB instances on different machines. Ibis & Geospatial (Nati): Nati Clementi: Senior software engineer at Nvidia, working on open-source projects like Ibis. Ibis: Open-source Python library for data wrangling, with a DataFrame API and interfaces to 15+ engines, including DuckDB. DuckDB for Geospatial: DuckDB is fast, has a geospatial extension, and supports various geospatial formats. Geop Parquet: Becoming a standard for geospatial data, enabling cloud data warehouse interoperability and compression. Geo Arrow: A way of representing geospatial vector data in memory for faster processing. Ibis Benefits: Allows writing Python instead of SQL, with deferred execution determined by the engine. Demo: Uses OverTour Maps data in geop parquet format. Filters data using bounding boxes. Demonstrates geospatial operations like STDistance and STTransform. Plots data using Lumber. Shows how to find points of interest near a location (e.g., the Van Gogh Museum). Ibis & DuckDB: Ibis uses DuckDB for the parquet reader and lets DuckDB do the heavy lifting. Ibis Optimizations: Ibis does type checking but doesn't do query optimization, leaving that to the engine. Ibis in Browser: Ibis works in the browser through DuckDB WASM. Q&A (Nati): Linear Interpolation: Ibis ML module can help with regression-related tasks. Missing Features: No major features are missing in the DuckDB/Ibis geospatial setup, with minimal overhead. Parquet Reader: Ibis uses DuckDB's parquet reader. Query Optimization: Ibis does not optimize SQL queries, leaving that to DuckDB. Ibis in Browser: Ibis works in the browser through DuckDB WASM. Rill & Metrics Layer (Mike): Rill: A BI tool optimized for DuckDB, with instant slicing and dicing, BI as code, and a metrics-first philosophy. Metrics-First: Design metrics models, and Rill autogenerates dashboards and user experiences. Live Demo: Downloaded Rill using a curl command. Created a new project called "DuckCon 6". Imported a parquet file of GitHub commit data. Used AI to generate a metrics model and dashboard. Showed the dashboard with trends and filtering. Metrics as Building Blocks: Metrics are flexible, fast, and intuitive. SQL for Metrics: Metrics should be defined in SQL, not other languages. Visual Metrics Editor: Rill has a visual editor for defining metrics using DuckDB SQL. Metric Stack: Legacy: Data warehouses, traditional BI tools, inconsistent metrics, full table scans. DuckDB Powered: Consistent metrics, fast olap queries, SQL everywhere. Challenges: Data modeling is hard, metric changes can be expensive, single-node scale has limits. AI & Metrics: AI can assist in metrics modeling, optimization, and conversational data exploration. Q&A (Mike): Complex Metrics: Rill works well with complex metrics involving multiple sources and transformations by joining tables in DuckDB. 60 FPS Dashboards: Users can feel the difference with faster dashboards. Defining Metrics: Metrics are defined in the Rill UI using SQL expressions. Replacing ChatGPT: Considering locally run self-hosted models for privacy. Stock Data Analysis (Ryan): Two Takeaways: Simple finance data flows with trade data and a tool called Q Studio. Ryan Hamilton: 14 years building large data platforms in banks. Bank Data: Data from exchanges, market data providers, and internal systems. Use Cases: Backtesting, data analysis, and report generation. Q Studio: A Java desktop application that connects to 30 databases, including DuckDB. Demo: Loaded a 6GB CSV file of trade data into DuckDB. Showed basic queries, pivoting, and Candlestick charts. Demonstrated time-based aggregation and moving averages. Showed a basic trading strategy using window functions. DuckDB Benefits: Fast, easy to use, great for time-based analysis. Q&A (Ryan): KDB+ vs. DuckDB: KDB+ is for large data, DuckDB is more approachable with strong Python integration. XML Files: Offloading processing to DuckDB, not planning XML integration. Lightning Talks: Zuk (Jared): Search engine research using DuckDB. Python-based experiments with SQL. Removing document lengths for faster search engines. DuckPGQ (Daniel): Graph analytics in DuckDB using SQL property graph queries (pgq). Visual graph syntax for pattern matching and path finding. Outperforms Neo4j on analytical queries. Yat (Kristoff): Smallest DuckDB SQL orchestrator. Runs SQL queries in a folder in the correct order. Generates a mermaid diagram for lineage. Grafana & DuckDB (Sam): Lessons learned from using DuckDB in Grafana. Security incident due to shell commands and file access. Importance of reading the documentation. Cloud Slur (Adam): Syncing query engine for bank transaction data. Uses LLM to convert human language to SQL. Uses DuckDB in the browser, Node.js, and Python. Healthcare Data (Tony): Data engineering use cases in healthcare. Dynamic data masking system using DuckDB and Snowflake. Data integration pipeline using DuckDB and Arrow streams. Closing Remarks: Michel Simmons: Author of the DuckDB in Action book, will be signing books. Poster Session: A poster session will follow the talks. Sponsors: Thanks again to the sponsors. Social Event: The conference will now move to the social event. ibis is a Python library that works with multiple dataframe backends like DuckDB, Polars, and Pandas. With just 3 annotators and 50-100 samples, you can figure out if an LLM can replace human annotators systematically.Arxiv ChatGPT explanation Curiosity and agency may be the differentiator in a world of LLMs (not experience, knowledge, or ability), since LLMs will democratize expertise. Jack Clark "AI/human combined work can be copyrighted as long as a human is adding, changing or selecting elements. Prompts alone do not usually produce copyrighted work." - Copyright and Artificial Intelligence, Jan 2025, US Copyright Office via Ethan Mollick Human Authorship is Essential: Works created solely by AI are not copyrightable. AI can be used as a Tool: Using AI as a tool does not negate copyright protection, as long as the final work reflects sufficient human creativity. Prompts Alone are Insufficient: Simply providing prompts to an AI system, even detailed ones, is generally not enough to establish authorship. Prompts are considered instructions or ideas, which are not copyrightable. Expressive Inputs: When a human author provides their own expressive content (like a drawing, photo, or text) as input to an AI system, and that content is perceptible in the output, the human author can claim copyright in that portion of the output. Modifying and Arranging AI-Generated Content: Humans can claim copyright in the creative selection, coordination, and arrangement of AI-generated material, as well as in creative modifications to AI-generated outputs. No Need for New Legislation: The report concludes that existing copyright law is adequate to address the copyrightability of AI-generated works, and no new legislation is needed at this time. Case-by-Case Analysis: Copyrightability will be determined on a case-by-case basis, considering the specific facts of each work and the extent of human contribution.

Things I Learned - 09 Feb 2025


I explored ChatGPT's export limits, Zettelkasten note-taking, and AI agent architectures from the AI Engineering Summit. I also noted Tyler Cowen’s LLM writing workflows, new OCR models, and the 'Diffusion LLM' approach to fixing hallucinations.

This week, I learned: In Jan 2025, ChatGPT included images as part of their data chat export. They also have a 30 second limit for the export. As an extensive user, my export is about 1GB which takes well over 30 seconds to download. Like many others the export option pretty much doesn't work for me any more. Bharathi said மெல்லத் தமிழினிச் சாகும் in a poem that has been often quoted (and parodied). Here's the context. The Zettelkasten note-taking method proposes that you: Capture: Write down every idea or piece of information on a separate note. Use your own words to ensure understanding. Organize: Consolidate fleeting notes into permanent ones. Assign unique identifiers to each note for easy reference. Connect: Link related notes to form a web of knowledge. This can be done with tags, references, or hyperlinks in digital systems. Review: Regularly revisit your notes to strengthen connections and discover new insights. I agree with almost every point on this LinkedIn post on scoring candidates for AI roles. Rob Balian Uses DeepSeek R1 or Claude 3.7 +5 points Uses Langchain -5 points Uses Langgraph +5 points (I don't know enough to comment) Built a RAG in 2023 +3 points Built a RAG in 2025 -3 points "pinecone" -5 points (I don't know enough to comment) "What is cursor" - 50 points no coming back from this Uses Cursor composer +10 points "You don't need a full agent for this" +5 points Did hackathons to learn AI outside of work +5 points "We probably need to fine tune for this" -3 points unless you can explain why "Gemini is making a comeback" +3 points (I have a soft spot for Gemini) +3 points each for mentioning reasoning trace, structured outputs, MCP, chain-of-thought, prompt caching, TPM limits "Export to prompt" can be a useful feature in apps (or even as a bookmarklet). It would let you export content in an LLM-friendly Markdown format. You can paste it into an LLM and ask questions. Here are things I would find useful: Copy an entire issue (with history) from GitHub, Gitlab, or JIRA Copy an entire PR (with code changes) from GitHub, Gitlab, or Bitbucket Copy CI/CD logs from GitHub Actions, Gitlab CI, Azure DevOps, etc. Copy entire conversation thread in Gmail or Discourse, Service now etc. Copy product reviews from Amazon, Shopify, etc. Copy page(s) from wikis and content sites like Wikipedia, StackOverflow, etc. Copy survey responses from Google Forms, Typeform, etc. Copy all interactions with a contact (including interactions, proposal history) from HubSpot or Salesforce Copy transcripts from Zoom, Teams, Google Meet, etc. Copy as Markdown from Word, GDocs, PDF or HTML Copy the summary of an analysis as well as all key metrics from any dashboard Copy SAP invoices Copy JDs, CVs, and reviews from Workday, BambooHR, DarwinBox, etc. Copy design specs, component libraries, and style guides from Figma, Miro, etc. Generated with the help of ChatGPT -- link not working Ancient languages tend to have fewer words for hues than brightness, since they didn't need them. So "Krishna was blue" or "the sea is wine-dark" is more an indication of darkness than shade of color. Ajit Narayanan Mistral released an impressive OCR model. Marker from DataLab seems comparable but is CC-BY-NC-SA. MinerU convert medical textbooks to Markdown well. Gemini Flash may be more cost effective and better From How I Write with Tyler Cowen Keep researching. Use LLMs as an altemative to books and other reading material. Keep publishing what you learn regularly. While reading a chapter, keep asking the LLM. What did you think of that? What just happened there? What should I focus more on? What's puzzling about this? How do I connect this to something else later or earlier in the book? LLM is better used to support you rather than replace you in areas of your expertise. Where you are an expert it's best for you to be yourself and have AI fill in the gaps. Ask the AI: "What is in my writing that some people might find obnoxious? Or cold / heartless? Explain it to me in great detail." The first input is context setting and should be really long. Use voice dictation for that instead of typing. Send your blog post to an LLM. No need to explain it. Just let it be the reader and see what it understands and doesn't understand. His PhD students don't have a textbook, which saves them some money. But they are required to subscribe to a large language model which ends up costing less. Today, it makes sense to use the best models and pay $200 for it if required. The differences are large. But in some years in the future, the cost of these models may come down for the free versions. Humans know secrets. AI does not. So at least in some areas, humans will have an advantage. Secrets full matter a lot more in the future. Gossip will matter a lot more. How good are you at keeping and trading secret? Travelling and meeting people will become more important. So will the value of social networks. Since everyone has access to better intelligence, the value of mobilization or being able to do things with people will have higher value. Leadership is an example. The value of your network therefore has gone up a lot. There's more value in prompting one thing 10 times then 10 things one time. Follow up questions work better than long prompts. There are so many AI note-takers (and transcribers) these days that you are not just writing for an AI but speaking for AIs as well! Which model to use: O1 Pro is the best model. Claude does a decent job. DeepSeek is full of hallucinations but is interesting. It is more imaginative. Use O3 mini to write your prompt first, and then ask the model Use DeepSeek and other somewhat wacky high-end models once a day so that you stay in touch with what is models are capable of (beyond the conventional.) Perplexity has entirely replaced Google for many people. Anthropic's models are the best writers. Gemini is good for long documents and hence for things like legal work. Gemini also has excellent YouTube integration and hands can directly read the transcripts. Grok is very good at fact checking tweets. Converting data into LLM consumable forms will be a huge project. Lot of a knowledge is not in such a form and a huge human project will involve this conversion. Indians do not need a visa to enter Thailand. Ref Build apps (not just content) for agents. In the next 3 to 5 years, agents will surpass humans as the top product users. Reliably creating interactive tutorials is hard today. Claude 3.7 Sonnet ran out of tokens when I tried creating an interactive tutorial on diffraction. Cursor got the tokens but failed to get the application right after 3 attempts. This is not yet reliable, and when it does become reliable, education will change a fair bit. #IMPOSSIBLE Tools and solutions should fit within existing workflows. That means almost all capabilities need to be exposed as APIs. LLMs make many different kinds of errors that are useful to differentiate between. Here are a few Model errors. The model itself makes a mistake. E.g. hallucinations, not following the prompt, etc. Context errors. The model makes a mistake because the question was out of context, or the context was missing. Input errors. The input to the model was parsed incorrectly, e.g. poor audio, poor image OCR, etc. Tool errors. The model's tools are wrong or not good enough, e.g. Retrieval errors. Most browsers are moving away from third-party cookies. Here's Google's recommendation on alternatives. The simplest of these is CHIPS, which requires adding a Partitioned cookie attribute. Notes from AI Engineering Summit, NY, Day 1 An agent requires 3 things: a router, tools or skills, and memory. Agents are often sequential, but sometimes parallel execution makes sense for independent tasks that you consolidate. Always allow LLMs the option of NOT answering a question if there is no good answer. Focus prompts on the happy path. Use guard rails for edge cases. Here are a few "tools" an agent would need to call: Clarification from user Saving to memory Google search Edit a file introducing SPECIFIC changes Search in codebase using embeddings Run scripts on the shell or in a REPL (Python, Node, etc.) Run code in a new container for isolation Automatically discover, read an API documentation and use it Modify environment to enable logging and other system changes. When code is cheap, you can explore more ideas and hence design and product management need to approach things differently. We also need to reaching testing completely because it makes very different kinds of mistakes and we don't often have an intuition You can have an agent explore all the issues and full request and recent comments against the repository and summarise it for the project manager Notes from AI Engineering Summit, NY. Session by Lux Capital. Agents make multiple LLM calls. Errors accumulate. So the quality of the model is key What's really critical: data + context + user preference Set up evals for subjective responses by collecting signals continuously. Create scaffolding for agents where errors don't accumulate. Better yet, make it FIX errors UX is critical. We need lots more UX styles YayText converts text to Unicode that has strikethrough, bold, italics, alternate fonts, and other interesting features. So does Unitextify, ConvertCase, and LingoJam. 10 red flags I look for as an angel investor is an interesting read. 1. No real customers: A deck, a landing page, and a "vision" don’t impress me. Show me paying customers. Even better, show me customers coming back. 2. No path to profitability: I don’t care if you raise $100M -- if there’s no plan to make money, you’re just burning oxygen. Growth is great, but cash flow keeps you alive. 3. Founders who won’t sell: If you’re scared to get on sales calls, that’s a red flag. The best founders sell in the early days -- whether it’s to customers, employees, or investors. 4. No differentiation: "Like X, but cheaper" isn’t a strategy. If your only edge is price, you’ll get crushed. What do you have that no one else does? 5. No urgency: The best founders operate like time is running out. If you’re "exploring ideas" or "thinking about raising next year," you’ve already lost. 6. Raising money before proving anything: Too many founders try to fundraise their way out of bad ideas. If you need VC to get off the ground, you’re building the wrong business. 7. No clear distribution strategy: Product alone doesn’t win. First-time founders obsess over features. Second-time founders obsess over distribution. How are you getting customers? 8. No ownership mentality: If I hear "I need to hire someone to do that" too early, I’m out. Founders who win figure things out before they delegate. 9. A CEO who can’t attract talent: Your first hires are everything. If great people aren’t willing to join, either the vision is weak -- or you are. 10. No skin in the game: If a founder won’t invest their own money or take a pay cut to make it work, why should I? By contrast, this OpenAI Deep Research report feels a lot less actionable. Inception Labs offers "Diffusion LLMs". (No API yet.) They start with random text and refine it in parallel. The benefit is: It's faster and cheaper due to parallellalization and better GPU use It doesn't commit to tokens and can fix hallucinations, JSON structure errors, reasoning fallacies, etc. It's better with multi-modal since images are diffusion based already.

Things I Learned - 09 Mar 2025


I explored building community influence, Android data export for automation, and advanced coding agent tools like Claude Code and Gemini CLI. I also investigated fine-tuning ROI and mapped out OpenAI TTS costs and usage APIs.

This week, I learned: "But when an identity based belief was challenged, the brain responded as if under physical attack." Why Engineers Can't Be Rational About Programming Languages Notes from How to build a cult, Lulu Cheng, The Knowledge Project podcast Conviction is infectious. Communicate at the INTERSECTION of interests. Learn theirs Begin with "why your story matters to them" (first sentence). That beats "how you tell it" > "where you tell it". The easiest way to align with an audience is to find your community. Humor, curiosity, awe, any strong emotion is a hook. Culture has momentum. Best way to break it is to show an alternative that works. People will copy that REPEAT messages over and over with complete CONVICTION to convince people who TRUST you. That works, but you need all three. Trust builds from likeability, repeated exposure, common beliefs. An excellent way to defend against online criticism (when it matters) is to just SHOW UP and THANK them for feedback. Serious reputational damage must either be fixed immediately - or you live with it forever. Between a story and statistics, the story will always wins. Never fight a story with a statistic. Dig into your statistics and uncover BETTER stories. ⭐ Prebuttals are a great idea. Start with all possible criticisms yourself and diffuse them. The other person has nothing left to say Sparring keeps you sharp. Spar with LLMs. To defend, show how the attack targets other people, increasing the surface area. Show how the SPECIFIC attack targets a larger group. Create a SPECIFIC cause worth fighting for. Each role has specific objective to optimise for. The leader's role is to balance across these. Cheerleader effect. People look beautiful next to a cheerleader. Associations taint. Each person has dozens of aspects to their persona. We cannot remember all of them. Each person can make a choice on who they project themselves to be in any group. Shaping their persona. The Rainbow CSV extension may be causing delays (infinite spinner) when pasting Markdown in VS Code. Restarting it seems to fix the issue. ⭐ Claude scientific skills is a collection of skills teaching Claude how to use scientific libraries, databases, and APIs across several domains. This may be a good example of a non-trivial skill library - that is hard for AI coding agents to infer by themselves. Notes from How I use every Claude Code feature Use AGENTS.md as guardrails, not a manual. Document what it gets wrong. Use self-documenting tools/APIs rather than documenting. Docs: Explain why and when to read each doc. Never say "Never." Explain when to which which alternative. Prefer CLIs for stateless tools, MCPs for stateful, authenticated, or complex (e.g. Playwright). Coding agents work well with version control. Simon Willison Break up uncommitted changes into small commits Rewrite branch history for readability Use gh CLI to fetch line-wise comments from a PR and make requested changes (e.g. renaming, refactoring, adding types, etc.) ⭐ When using MCPs or tools with private data, "color untrusted content in red, unsafe actions in blue, and never mix colors." Good advice. ⭐ DeepWiki offers a codemaps feature that explains code in an interactive way. It shows a structured explanation on the left. You can click on any note to see the code on the right. It's an effective way to understand how a library or tool executes a task. Here's an example of how Mermaid works. Gemini offers RAG with free storage. RAG costs are quite high. This simplifies the process a lot. But I tried running the sample program and after an hour, it still had not completed uploading a single file. Best to wait and watch. OpenRouter supports embedding models using an OpenAI-like API Kimi K2 Thinking seems popular because It's an open-weights model on par with the top models on Humanity’s Last Exam (text-only) and BrowseComp Can run 200-300 tool calls without human guidance 4x cheaper than GPT-5 with low tokens (32B active on 1T parameters, INT4 quantized) Based on responses to Simon Willison's question, ChatGPT Fine-tuning helps when: Lower latency, e.g. for type-ahead, at lower cost (37 mentions) Structured extraction, parsing and classifiers, e.g. postal address, detecting secrets (18 mentions) Custom vision models, e.g. check containers (12 mentions) Domain-specific code and stacks (niche languages, stack-specific generation, text→SQL) (11 mentions) ... and a long tail. Fine tuning does not help: When A base model plus prompting or RAG does as well or better (15 mentions) When you risk being leapfrogged by a new release (4 mentions) When cost and data do not justify the ROI (3 mentions) The data I can export from my Android phone includes the below. 🟢 indicates it's tracked. 🟡 might need action, e.g. enabling / coding. # 🟢 GPS/GNSS location (current & history). Turn on device Location. If you want a timeline you can export, enable Google Location History and later export via Google Takeout → Location History (JSON/KML). 🟡 GNSS raw measurements (engineering traces). Android exposes GNSS “raw” logs on many devices; capture with dev tools or logging apps if supported (intended for research). See GNSS Raw Measurements API. 🟢 Wi-Fi scans (nearby SSIDs/BSSIDs). Toggle Location scanning → Wi-Fi scanning in Location settings; apps need location permission to read results. 🟡 Wi-Fi RTT distance to APs (indoor ranging). Apps can use Wi-Fi RTT (802.11mc/az) to measure distance to compatible APs; requires location permission. 🟢 Bluetooth proximity/traffic. For packet-level logs, enable Developer options → Enable Bluetooth HCI snoop log, then pull /sdcard/btsnoophci.log (Wireshark). 🟢 Cell towers (IDs, signal strength). Apps can read via TelephonyManager (e.g., getAllCellInfo()), with appropriate telephony permissions. 🟢 Activity recognition (walking, running, in vehicle). Apps must request ACTIVITYRECOGNITION (runtime) from Android 10+. 🟢 Steps (step counter / detector). Use sensors API; from Android 10+ you must declare ACTIVITYRECOGNITION to access step counter/step detector. 🟢 Accelerometer / gyroscope / magnetometer streams. Apps read via SensorManager; some high-rate reads require HIGHSAMPLINGRATESENSORS. 🟢 Ambient light / proximity. Read via SensorManager; typically no special permission. 🟢 Google Fit data (steps, workouts, heart rate from wearables, etc.). Manage and export from Google Fit / Google account Download your data. 🟢 Contacts. MIUI → Settings → System apps → Contacts → Import/Export to .vcf (vCard). 🟢 Call history / SMS (device). MIUI local/cloud backup can include call logs & messages; export by creating a local/Cloud backup and downloading. Note: 3P apps can’t read call/SMS logs unless they’re the default dialer/SMS. 🟡 Gmail, Calendar, Contacts (Google). Export via Google Takeout (MBOX/ICS/CSV etc.). 🟡 WhatsApp / Telegram / Signal chats. Use in-app exports: WhatsApp → Export chat, Telegram Desktop → Export, Signal → encrypted backup. 🟢 Advertising ID. View/reset in Settings → Google → Ads (wording varies), per Google help on Ad ID reset. 🟡 Per-app screen time / unlocks / opens. Third-party “usage” apps (e.g., analytics or “digital wellbeing” clones) require Usage Access (PACKAGEUSAGESTATS). Use Android’s UsageStatsManager or apps that export CSV. Stock Digital Wellbeing does not offer an export. 🟡 Notification history (last 24h). Settings → Notifications → Notification history → On. OEM-optional, but present on most devices. Viewable once enabled. 🟡 Notification content stream (live). Grant an app Notification access to capture/export notifications going forward. (User-granted API via NotificationListenerService.) | 🟢 Per-app data usage (mobile/Wi-Fi). Apps/ADB can query NetworkStatsManager; Settings shows per-app totals. Advanced dumps via adb shell dumpsys netstats. 🟡 Wi-Fi detailed logs. Developer options → Enable Wi-Fi verbose logging for richer diagnostics. 🟡 Bluetooth packet logs. Developer options → Enable Bluetooth HCI snoop log; export file and analyze in Wireshark. 🟢 Per-app storage usage. Apps/ADB can query StorageStatsManager; Settings shows per-app storage. 🟡 Photo/video metadata (EXIF incl. location). Enable “Save location” in Camera app to embed GPS in EXIF; export files normally (EXIF remains). | 🟢 Downloads & file metadata. Use a file manager or connect via USB; metadata is in the files themselves. | 🟢 Battery usage history (per-UID/app), wakelocks, jobs. Generate adb bugreport and analyze with Battery Historian or dumpsys batterystats. 🟡 System/device logs (logcat). You can view via ADB/Android Studio. Android restricts 3rd-party access to system-wide logs for privacy. 🟢 Developer quick tiles (Sensors off). Developer options → Quick settings developer tiles → Sensors off to globally cut Camera/Mic & SensorManager sensors on demand. 🟡 Google Takeout: one-stop export for Location History (Timeline), Gmail (MBOX), Calendar (ICS), Google Photos, Drive, YouTube, Fit, etc. MacroDroid, Automate and Tasker sound like powerful Android workflow automation tools. Some uses I can put it to: Automatically upload recordings to Dropbox Turn off hotspot when I reach office Vibrate if I'm walking slowly Adding is an emerging approach for pointing to LLMs.txt. It works. I asked Codex to read the CloudFlare vitest page. It read the file truncating the middle, found the <link rel="alternate" type="text/markdown" href="https://developers.cloudflare.com/workers/testing/vitest-integration/write-your-first-test/index.md"/ link in it, and reasoned "Considering fetching markdown instructions" and fetched the Markdown page. Giles' Blog toon is a YAML-like format that's LLM friendly and especially token-efficient (CSV-like) for tables. You can convert back and forth between JSON and toon. Food printing applies 3D printing techniques to create real food items. Given the art that this can create, I expect at least some adoption in niche restaurants. PMTiles lets you store map tiles as a single-file archive that libraries like MapLibre can read. Useful to avoid tile servers. Mirrow is a CLI SVG animation builder that converts a DSL to animated SVGs. However, it may be easier to use an LLM to create the animated SVG directly with SMIL than learning Mirrow (or teaching the LLM Mirrow). ⭐ One approach to giving memory ("episodic memory") to coding agents is to allow them to search their logs.This gives them access to past discussions about a repo or other repos. To configure Gemini CLI with an AI router, set: "security.auth.selectedType": "gemini-api-key" in /.gemini/settings.json export GOOGLEGEMINIBASEURL=https://llmfoundry.straive.com/gemini/ (or your AI router base URL for Gemini) export GEMINIAPIKEY=... (your AI router API key) Passing a HAR export to an LLM to build a scraper is a powerful idea! Lessons from Diagram Chasing Addy Osmani's Gemini CLI tips are practical guides to using any coding agent, not just Gemini. I learnt about: Run shell commands with !, e.g. !ls -la or even !bash. It's added to the chat. On-the-fly tool creation: ask it to write code for the task on the fly. Use it for system optimization, e.g. editing dotfiles, system customization, log error analysis, etc. Run GEMINISYSTEMMD=... gemini -p "task" --yolo --format json < input.txt to run Gemini with a different system prompt and feed it input.txt to run in a pipeline. (FYI: Codex does not send a default system prompt, so there's nothing to override.) There is a Gemini CLI Show and Tell thread with examples. This include Janitor AI, a Gemini CLI session viewer, etc. Hands on with Gemini CLI has several Use cases to try out. Renaming photos and organizing files are clever ones. AGENTS.md can be used like a decision log - rules, styles, or preferences that evolve over time - on a per-repo basis. Gemini's /memory add feature helps with this. gemini --checkpointing is a useful "undo" feature. /restore rolls you back to a specific checkpoint. The overhead is small. Caching is only available with API key or Vertex AI, not OAuth login as of now OpenAI TTS costs are confusing. But in short TTS-1 costs $15 / MChars (max 4,096 chars per request), which ends up at 86c / hour GPT-4o Mini TTS costs $16 / MChars (max 2K tokens which is 7,000 chars per request), which ends up at 88c / hour. Very similar cost, effectively TTS-1 HD is twice TTS-1. OpenAI has a usage API that provides cost as well as usage for completions, images, audio speeches, etc. These require an organization admin key Cost API: curl "https://api.openai.com/v1/organization/costs?starttime=$TIMESTAMP&projectids=$PROJECTID&groupby=lineitem" Audio speech usage API: curl "https://api.openai.com/v1/organization/usage/audiospeeches?starttime=$TIMESTAMP&projectids=$PROJECTID&groupby=model"

Things I Learned - 09 Nov 2025


I explored OpenAI's custom tool types for DSL generation, new Node.js 2025 features like single-executable bundling, and Markdown directive syntax. I also shared my Claude Code usage costs and thoughts on vibe coding.

This week, I learned: OpenAI supports a tool "type": "custom" that lets it write code as an argument to a tool call. Great for code / SQL generation. Even more powerfully, you can generate output following specific grammars, e.g. STL files, PostgreSQL dialect, Mermaid/PlantUML diagrams, OpenAPI specs, Vega-Lite JSONs, Cron expressions, GraphQL SDLs, Dockerfiles, Terraform HCLs, or any DSL! # #ai-coding The OpenAI playground has a GPT-5 Prompt Optimizer that can migrate prompts to GPT-5. Docsify 4.13.1 is 2 years old and uses marked@1.2.9 which is 5 years old. Newer plugins like marked-directive don't work with it. Though docsify v5.0.0-rc1 is in development, it may be the better option for modern Markdown plugins. Here's sample code. CommonMark has a powerful directive syntax proposal that lets you add classes, attributes, and arbitrary plugins to Markdown. For example, :abbr[MD]{#id .class title="Markdown"} for inline directives. Plugins exist for marked, markdown-it and remark. biomejs and dprint are gaining traction as prettier alternatives. I'm yet to try them but keen to explore. Skip biomejs for now. It uses tabs (not spaces) and does not respect .gitignore by default. Handling these is too much work. ⭐ Code generation is more flexible than tool calling. LLMs can't write a tool-call loop, for example, but they can write code to run an API in a loop. So, I like telling the LLM to "write code using these APIs" than giving it APIs to tool-call. #ai-coding npx -y ccusage is an easy way of summarizing your Claude Code usage and cost. My cost so far (since 21 July) is about $10. The median session cost is 50 cents. Most of it ($7) was from a single temporary coding chat that I kept continuing for way too long, building up the context window. # defuddle can be used in the browser to get the main content from web pages. A replacement for Mozilla Readability. # Modern Node.js Patterns for 2025 include these 5 features I'm excited by: Single-executable bundling. node --experimental-sea-config sea-config.json builds standalone binaries. ES Modules. Use node: prefix for built-in imports. import { createServer } from 'node:http'; Watch mode. Use node --watch file.js auto-reloads when file.js or dependencies change. Env file. Use node --env-file=.env loads .env as environment variables. node:test is a full-featured test framework with --watch and coverage. Concise explanations speed up decisions because they're faster to read and understand (obvious). They're also easier to combine with other ideas (less obvious). # I've been uncertain about htmx for some time now. This tutorial, HTMX is hard, so let's get it right, convinced me that it's too far from my mental model, so I'm unlikely to ever use it. ⭐ Slow, effortful practice (spaced recall, interleaving topics, self-testing) builds lasting knowledge but looks inefficient and doesn't help with exams. # #beliefs GitDoc VS Code extension auto-commits and syncs notes. I dropped gitwatch in favor of this. It's interesting that Gemini Deep Research cannot access Google Drive while Gemini can. On the other hand, ChatGPT Deep Research can access Google Drive but ChatGPT cannot. A trend that AI coding will only accelerate: "It is now possible for tiny teams to make principled software that millions of people use, unburdened by investors. ... you need far less money and far fewer employees to reach far more customers. That wave is only just beginning." # #ai-coding Typed languages are better suited for vibe coding. This will likely lead to the growth of typed languages (TypeScript, Rust, Go) but also of typing in untyped languages (e.g. Python) # #ai-coding Instead of Celery, Redis, Kafka, etc. as task queues, we could the file system as a message queue. For example, pending/task-01.json moves to wip/task-01.json to done/task-01.json. Folders for state/tags, files for task details. Foam is a note-taking VS Code extension. The WikiLinks, tags and backlinking features align naturally with Markdown note-taking. Via Steph Ango who uses Obsidian which nudged me to search for WikiLink-ing features in VS Code. I'm an open data hawk. But here are things I should remind myself of. # Privacy incubates creativity. People self-censor when watched. Privacy shields fragile ideas. Power assymetry. Big players can leverage openness more, e.g. Cambridge Analytics + Facebook data. Context matters. What's harmless in one setting can be toxic in another. One-way door. Data can't be unshared. Don't scrap brakes dreaming of perfect roads. Anticipate tyrannical regimes / cultures. Not your call. You don't share your neighbour's medical records. One Punch Man is available as manga. I watched the anime first and assumed that came first. Apparently not. ⭐ In "kind" environments (stable rules, rapid and accurate feedback), specialize. In "wicked" environments (rules shift, feedback is noisy/late), generalize. ChatGPT Models' ability to orchestrate longer workflows will improve. Factor that into your application design. Claude Code can already handle over 70 tasks in a workflow What happens when LLMs play Chinese Whispers / the Telephone Game? Here are learnings. ChatGPT Drift increases faster than linear with hops. Bigger models do better, but constrained prompts (“Copy the text exactly; change nothing.”) have a bigger impact. Low temperature improves copying fidelity. But even after "forgetting", LLMs reproduce rare content if they're trained on it. "In fact, React Native looks set to become the most engine-agnostic JavaScript runtime around". The Many, Many, Many, JavaScript Runtimes of the Last Decade OMDb (simple) and TMDb (comprehensive) are API-friendly alternatives to the IMDb. copyparty seems one of the most feature-rich file servers out there. Single Python file, runs on any OS, works with any client, and optimized for speed. Video Quotes I enjoyed from Linus Torvalds' TED interview I want to not have external stimulation. You can kind of see, on the walls are this light green. I'm told that at mental institutions they use that on the walls. It's like a calming color. ... the main thing I worry about in my computer is -- it really has to be completely silent. If the cat comes up, it sits in my lap. And I want to hear the cat purring. I did not start Linux as a collaborative project. I started it as one in a series of many projects I had done at the time for myself, partly because I needed the end result, but even more because I just enjoyed programming. I'm actually not a people person. But I do love other people who comment and get involved in my project. The big point for me was not being alone and having 10, maybe 100 people being involved. Going from 100 people to a million people is not a big deal -- to me. Well, I mean, maybe it is if you want to sell your result then it's a huge deal. But if you're interested in the technology and you're interested in the project, the big part was getting the community. So Git is my second big project, which was only created for me to maintain my first big project. And this is literally how I work. Well, I do code for fun -- but I want to code for something meaningful so every single project I've ever done has been something I needed. Apparently, my sister said that my biggest exceptional quality was that I would not let go. I can't do UI to save my life. Good taste is about really seeing the big patterns and kind of instinctively knowing what's the right way to do things. Companies like Google and many others have made, arguably, like, billions of dollars out of your software. Does that piss you off? No. No, it doesn't piss me off for several reasons. And one of them is, I'm doing fine. But the other reason is -- I mean, without doing the whole open source and really letting go thing, Linux would never have been what it is. I think one reason open source works so well in code (is that ...) Code either works or it doesn't. The Uses This site has interviewed professionals for decades. From their repo I scraped the top developer apps post 2020: CloudFlare has an Iceberg data catalog in R2 Data Catalog. Iceberg is like Parquet but supports metadata, time-travel, and schema edits. But I'm yet to find a single publicly accessible Iceberg catalog. Its open-data adoption is not as high as Parquet's. Apache Iceberg vs Parquet Observable Notebook 2 is the new notebook format from Mike Bostock. It is vanilla JS and embeddable into other pages. THis would have been a big deal 2 years ago, but with the LLM ecosystem today, I'm not sure if it matters as much. To add CORS support to CloudFlare pages protected by Zero Trust, add a headers file to your repo. (This is different from the Zero Trust CORS which allows automated logins.) Sample headers that lets logged-in users fetch pages via fetch("...", { credentials: "include" }): As corporates restrict the use of LLMs, I see employees purchasing personal laptops to use LLMs on. An interesting trend! openai-python has a CLI. You can run uvx openai api chat.completions.create --stream -m gpt-4.1-nano -g developer 'Translate to Chinese' -g user "Hello" for example Anthropic has an OpenAI compatible API at https://api.anthropic.com/v1/. Claude Code tips from Things that didn't work by Armin Rocher #ai-coding Speech-to-text. Cannot stress this enough but talking to the machine means you’re more likely to share more about what you want it to do. I maintain some basic prompts and context for copy-pasting at the end or the beginning of what I entered. I ended up preloading executables on the PATH that override the default ones, steering Claude toward the right tools, e.g. running python asks it to use uv. I use the task tool frequently for basic parallelization and context isolation. Simply taking time to talk to the machine and give clear instructions outperforms elaborate pre-written prompts. Forcing myself to evaluate the automation has another benefit: I’m less likely to just blindly assume it helps me. Research indicates that we don't know in advance which prompts will help. Evals beat prompt engineering. Ethan Mollick

Things I Learned - 10 Aug 2025


I discovered how double-checking LLM outputs can slash error rates and compared Anthropic's new search tool pricing. I also found snapdom for element capture, explored Gemini's prompt caching, and documented some prompt evaluation frameworks.

This week, I learned: snapdom is a fast, light, element capture alternative to html2canvas but doesn't work well with non-CORS images or iframes. Sli.dev is a Markdown slide language. Similar to Marp Don't split your code into microservices until you need to scale. Ref Vibe coding is like getting others' code to work, which is exactly what most devs do. Simon Willison #ai-coding Tofu Yakitori is a Japanese dish. It's like a dhokla. Marinated tofu cubes brushed with that sweet‑savory tare (soy, mirin, sake, a hint of sugar), then grilled until caramel‑charred. One of the better (tasty + different) dishes I've had recently. I used ChatGPT to remind me of the dish name. Trust, attitudes and use of artificial intelligence surveyed 1,000 people across 47 countries on their views on AI. PDF Emerging economies trust and use AI more. It's an opportunity to leapfrog. 26% of students use AI daily (vs 17% employees). Efficiency is the main benefit. Gemini APIs now have automatic caching for 75% cost reduction if message is >1K (Flash) or >2K (Pro) tokens. Ref YOLO is much better than Gemini at object detection. Use for pro-processing. Ref Using [[n]] is probably the best citation format for inline search references in RAG. ChatGPT ⭐ Double-checking is surprisingly efficient since LLM hallucinations are mostly uncorrelated. LLMs perform human tasks (e.g. classifying customer support messages) at 85% accuracy. This might be unacceptable. But by asking 2 moderately correlated LLMs and double-checking discrepancies, we reduce automation by 20% but reduce errors to 0.25%. Triple-checking reduces automation by 25% but errors to under 0.01%! Ref Anthropic introduces web search in the API at $10 / 1K searches. Here's how it compares: $0.1: DuckDuckGo Search API (RapidAPI) (monthly pricing) $3: Brave Search API $5: Google Custom Search JSON API $15: SerpAPI $10: Zenserp $10: Anthropic Web Search Tool $25: Bing Search API $35: Gemini API $35: OpenAI API India attacked Pakistan! ⭐ When writing notes, summarize at the end of the day the learnings and next steps. GitHub does not let you control the cache duration, but there are many creative workarounds. ChatGPT HTML meta tags: Use a service worker (blog) Proxy through a CDN. Cloudflare, Netlify Move to another static host: S3 + CloudFront, Heroku, Vercel, Surge, Firebase Hosting Notes from the PromptEvals paper: Good evals must be: Objectively MEASURABLE (even if by an LLM). Otherwise, we won't know if it's right. Directly RELEVANT to the input/prompt. Otherwise, we're not evaluating the input. Typical evals fall into 6 categories Structured output: Adhere to a schema (Markdown, HTML, DSL, JSON + Schema) Multiple choice Length constraints: N characters, words, sentences, list items, etc. Semantic constraints: Exclude terms, topic relevance, follow grammar, etc. Stylistic constraints: Style, tone, persona Prevent hallucinations: Factual accuracy. Instruction following

Things I Learned - 11 May 2025


I explored measuring developer productivity with DX Core 4, experimented with smolagents and CLIProxyAPI for coding agents, and looked into modern Redis alternatives and the enduring dominance of SQL in the database landscape.

This week, I learned: Measuring developer productivity with the DX Core 4 is a framework for measuring developer productivity. It encapsulates other frameworks like DORA, SPACE, and DevEx. Can LLMs write better code if you keep asking them to “write better code? A delightful exploration of how Claude 3.5 Sonnet keeps optimizing and adding features to improve code. My takeaway: repeatedly applying a prompt gives us interesting new directions to explore. Wednesday comes from Wōdnesdæg - named after Odin (or Woden). CLIProxyAPI seems a good way to allow any CLI coding agent (Codex, Claude Code, etc.) to work with any provider (e.g. Gemini, OpenRouter, etc.) The documentation needs a few more examples, but it's usable. mise x github:router-for-me/CLIProxyAPI -- cli-proxy-api starts a local server that proxies requests. Create a config.yaml, update the keys, and configure your coding agent, e.g. Codex to use it. It's also a good way to see what prompts are being sent by the various harnesses. smolagents is a new agents library from HuggingFace. It seems simple enough to use. whisper-flow does real-time speech transcription! Switchboard-1 is a labelled audio corpus with 260 hours of speech. It has 2,400 calls among 500+ speakers in the US. Cloudflare tunnel is like ngrok but more permanent. It's a bit more complex, too. But given CloudFlare's liberal free tier, it's a good, viable option for long-term local hosting. John Wheeler: "We live on an island surrounded by a sea of ignorance. As our island of knowledge grows, so does the shore of our ignorance." A great way to understand how ignorance actually grows as you learn more. justhtml is a fast enough pure Python fully HTML5 compliant library. For a faster, mostly compliant solution, html5-parser with lxml works. There is little reason to use Redis. There are several clones you can use. Databases in 2024: A Year in Review Microsoft's Garnet KeyDB (only Linux) ValKey (only source) DragonFly (only Linux) ReDict (only Linux) Every few years, something comes along trying to replace relational databases and SQL, and gets absorbed. YouTube Key value stores. People soon realize they need more features, e.g. indices. MapReduce systems. Most MapReduce vendors put SQL on top of SQL. Then the Hadoop market crashed. (But HDFS, S3, distributed storage systems are a good idea) Document Databases. JSON. SQL absorbed that. SQLite 3.45+ supports even JSONB. DuckDB, of course, has JSON. Column Databases. Again, these introduced SQL. Graph Databases. SQL:2023 introduced graph queries via SQL/PGQ (Property Graph Queries). DuckPGQ beats Neo4J Array Databases. SQL:2023 adds SQL/MDA which allows for matrix operations. But specialized databases might make sense in this category. Vector Databases. Every DB is adding support for this. TheAgentCompany is a benchmark of real-world tasks like: Arranging a meeting room Analyze a spreadsheet Add a Gitlab wiki page Salvatore Sanfilippo (antirez - Redis) finds DeepSeek v3 comparable with Claude 3.5 Sonnet. YouTube He also passed a paper and his code to compare them. A useful prompt. YouTube

Things I Learned - 12 Jan 2025


I explore LLM backdoor vulnerabilities, "brain coding" vs AI agents, and why DeBERTa still beats LLMs at emotion classification. I also dive into systematizing failure and suggest recruitment strategies for an era of human AI-operators.

This week, I learned: '...as few as 250 malicious documents can produce a "backdoor" vulnerability in a large language model... data-poisoning attacks might be more practical than believed." Anthropic Tim Urban's 2015 article, The AI Revolution: The Road to Superintelligence, is surprisingly relevant. A key theme is that post artificial-super-intelligence, pretty much anything we know / predict is probably wrong. LLMs are bad at asking questions, so you need to plan on their bahlf first. LLMs are bad at copy paste, so giving them a scaffolding to edit helps. Two things LLM coding agents are still bad at The VPN industry is a consolidating oligopoly that doesn't offer much security and biases towards affiliates. Who Owns Express VPN, Nord, Surfshark? As of 2025, a fine-tuned DeBERTa-v3-Large / RoBERTa-Large model is better than an LLM at emotion classification. roberta-base-goemotions is a good starting point if you don't want to fine-tune. ChatGPT OpenAI defines an AI agent as "a system that can do work independently on behalf of the user". swyx Brain coding is the new term for human coding - as opposed to vibe-coding (AI codes, human doesn't review code) and AI coding (AI codes, human reviews code). npx -y emoj lets you type text and pick a relevant emoji. Many people who shifted away from conflict aversion did so by systematizing it. ChatGPT Martin Luther King Jr institutionalized not stepping back from conflicts in his movement. Kim Scott (Radical Candor) practiced caring more via short, specific feedback loops. Kwame Christian (Compassionate Curiosity) practiced ask open questions. Ed Catmull (Pixar) instituted Braintrust to ask candid questions. Ray Dalio (Bridgewater) instituted radical transparency. Many people who adopted a failure-seeking mindset made failure frequent, small, cheap, and informative. ChatGPT Jia Jiang ran a 100-day rejection challenge, acclimatizing himself to failure. Kim Liao (writer) moved from submission-avoidance to “100 rejections/year”. Reshma Saujani (Girls Who Code) built a practice of "brave, not perfect" - ship before perfect. Ray Dalio (Bridgewater) instituted mistake logs and "pain + reflection = progress". Astro Teller (X, the Moonshot Factory) rewired incentives so teams are rewarded for killing their own ideas early. Sara Blakely (Spanx) set weekly failure quotas. Kathryn Schulz (author of Being Wrong) converts failures into teaching methods. Sindre Sorhus has already created a micro-framework css-extras using CSS @functions. Today, if I had to build agents, here are the tools and environment capabilities I'd ask for: Ask user (for clarifications) Internet tools Search Fetch (CORS-piercing) Scraper with XPath/CSS Selectors Access to llms.txt LLM APIs Summarizer (condenses chat) Sub-agents Coding tools Markdown convertor Code execution (including tests) Browser + DevTools for testing Memory / storage Tool/MCP directory with search Noting a few things that I find #impossible to do today with LLMs: LLMs can't run experiments / explorations, like trying out on a new tool or web app in an environment, the way I would. LLMs can't move stuff on my machine, e.g. notes from one list to another, when they're only on my laptop, not GitHub. LLMs can't capture the past wisdom in my head, e.g. the distilled principles of data visualization that we applied at Gramener. LLMs can't prioritize my to-do list based on my preferences and what's important to me. LLMs cannot write a blog post in my style of writing. When recruiting for people in the LLM era, look for questioning ability, sensible thinking, and how they use AI. Give them lots of fluff and context. Can they cut through it? Is their answer concise and to the point or waffling? Like post the industrial revolution, more people will become operators looking after AI, not craftsmen. This includes coding. zx is a nice JS-based alternative to shell scripts. docker run -it --name test --user vscode mcr.microsoft.com/devcontainers/base:ubuntu gives you a test Ubuntu image closer to a desktop / user setup rather than a server. Useful to try out apps.

Things I Learned - 12 Oct 2025


I explored Claude 3.7's extended thinking capabilities, learned to bypass SQLite locks for browser history, and used chroot for Linux recovery. I also discovered Nomic's multimodal embeddings and new tools for AI-driven social research and speech cloning.

This week, I learned: It's possible to intentionally train yourself to: Form close friends. Care, ask, and share. Become a do-er. Stay mindful of the problem or opportunity you're deferring. AI Coding and the Peanut, Butter & Jelly problem: #ai-coding This ability to define your desired outcome in crisp, complete terms is one of the most important superpowers of the AI era. The Singapore Urban Redevelopment Authority Property Data lets you search sale and rental prices of properties in Singapore. No API though Notes from meeting with Deepak Goel We have linguistic boundaries in media today more than national boundaries. The Chinese language media, for example, is a very different ecosystem. China culturally struggles with the exercise of branding and cultural power, unlike the west, which has adopted assertive and opinionated branding. You really learn the character of a region only by traveling Similarities arise from unexpected sources. For example, Japan and Ecuador have similar culutures - both are disaster prone locations. AI unlocks so many social research possibilities that were not possible before, e.g. by interpreting and classifying what people share in different situations. Companies send clients to third party trainings (e.g. at Harvard) along with their employees - to learn clients' real pain points! Education has become a tool for customer experience. Schools are tying up with companies for this (e.g. with Emeritus) International Schools Partnership provides services to independent schools for a small stake. It's an interesting business model. Research for colleges is a business model that's at risk thanks to Deep Research (e.g. analyse sustainability practices of listed companies.) There's an Indian Censor Board Scraper repo. Using chroot, you can boot from a Linux USB stick, but trick the system into working from your hard disk as the OS. Useful if your system won't boot. Ref Claude 3.7 Sonnet with extended thinking has a token limit of over 64,000 tokens. Given a strong instruction following capability, that makes it one of the most powerful models for transforming text. For example, transcription restyling, translations, XML to json conversions, PDF to XML, etc. Notes from discussion with Sundeep In his experience, investors tend to let you run the show (e.g. ask what you want rather than push in a specific direction) unless there is trouble We discussed the "running out of problems" problem with AI. His suggestion: List problems we dropped or eliminated for lack of time/capacity. This filter is a blindspot. Even if you know how to do someting, use AI to discover an alternate solution approach. That's the path to 10X (rather than incremental) optimization. Having AI create end-to-end pitch videos based on a product idea is now a reality. (He showed me one for his product.) Areas to explore with Deep Research are: What hidden trends is media misdirecting away from? What are second order effects and hidden gameplays? Which organizations would be good clients to target? What would be an apt pitch pitch for them? Experience dining is an emerging theme. Having LLMs explain scenarios (i.e. what might happen if ...) based on parameters can help understand/quantify the impact of actions, and therefore what to do. One way to copy as Markdown: copy page contents, paste in text-html.com, copy HTML, paste in Turndown, copy Markdown. Claude 3.7 Sonnet with extended thinking has a token limit of over 64,000 tokens. Given a strong instruction following capability, that makes it one of the most powerful models for transforming text. For example, transcription restyling, translations, XML to json conversions, PDF to XML, etc. Elimination Game is like Survivor for LLMs, where they form alliances and out-vote each other until 2 remain. The eliminated LLMs vote for the winner. GPT-4.5 Preview, both Claude Sonnets and Gemini 2.5 Pro consistently out-perform the rest. Their dialogues are fascinating! SQLite can open locked databases (e.g. browser history) via sqlite3 'file:places.sqlite?mode=ro&nolock=1'. datasette uses this. For example, to read the Edge history on Linux, use datasette /.config/microsoft-edge/Default/History --nolock Ref Notes from ThursdAI - Apr 03 Nomic Embed Multimodal models are the current SOTA on multi-modal embeddings. Notably, they embed PDFs natively. Hailuo Speech-02 is the best speech model right now beating ElevenLabs. It has excellent voice cloning. Pricing: $30/1M chars. 10% of ElevenLabs, 2X of OpenAI TTS PaperBench is an open testing framework from OpenAI that requires models to replicate the research work in papers. It has 8,000 tasks evaluated by LLMs and with LLMs judging the judges as well. The code is well worth studying. Runway Gen 4 was released with very high character consistency and longer durations Dreamina creates lip-synced videos from audio + a single image. Hedra is better for animated characters, though. Meta shared but has not released Mocha, an open character generation model that generates new characters speaking based on an audio you provide. It is not based on existing images but the quality is very good All Hands has a free online version where you can fix GitHub issues. This realistic frodo and sam mining through a minecraft tunnel, holding minecraft picaxes and torches made my day 🙂 AnimeJS released version 4. It animates HTML, SVG, Canvas, and WebGL with a consistent API. Looks elegant and powerful.

Things I Learned - 13 Apr 2025


I learned why expert personas don't improve LLM accuracy, explored new AI insurance products, and developed a workflow to turn constraints into opportunities. I also looked into architecture advice processes and Zillow's algorithmic real estate failure.

This week, I learned: Zillow Offers, the company’s "iBuying" arm, which was shut down in November 2021 after losing hundreds of millions of dollars. The core failure was not just an algorithmic error, but a fundamental misunderstanding of the limits of machine learning in high-stakes, low-frequency trading environments like real estate. Zillow relied on its "Zestimate" algorithm to predict future home prices and make instant cash offers, but the model failed to accurately account for real-time market volatility and "adverse selection"—savvy homeowners sold their properties to Zillow when the algorithm overvalued them, but kept them when the algorithm undervalued them. This left Zillow holding thousands of homes it had overpaid for and could not profitably resell, forcing a $304 million write-down and the layoff of 25% of its workforce. Zillow Q3 2021 Shareholder Letter (PDF) # There're a good number of AI insurance products in the market. # Munich Re aiSure - for AI vendors and companies deploying AI; can cover business losses (like lost revenue / business interruption) and legal damages when AI performance errors (incl. hallucinations) cause harm. Munich Re aiSelf - for teams using self-built or bought ML models; helps cover the financial downside when models underperform or drift over time. Munich Re aiSure - General Liability - covers damages and financial losses from lawsuits (e.g., claims that AI decisions were biased/discriminatory). Armilla Insured (AI Liability Insurance) - affirmative AI liability cover (Lloyd's coverholder; partners include Chaucer) that can cover legal defense costs, settlements, and third-party claims when an AI model underperforms. Armilla + Chaucer standalone AI liability (announcement) - focused on "mechanical underperformance" (incl. hallucinations and model drift) and the liability that follows. AXA XL GenAI Endorsement for CyberRiskConnect - add-on to cyber insurance for companies building their own GenAI; covers things like data poisoning, copyright/usage-rights mistakes, and AI-regulatory violations. Coalition Affirmative AI Endorsement - clarifies cyber coverage applies when AI causes a security failure, and extends funds-transfer-fraud triggers to deepfake-based instructions. Coalition Deepfake Response Endorsement - adds response support for deepfake incidents (technical analysis + legal + reputational help), not just "classic hacking." Tokio Marine Kiln Technology Errors & Omissions - tech E&O with generative AI coverage available by endorsement (aimed at software/SaaS/tech services). Tokio Marine Kiln Cyber Ctrl suite - cyber/tech cover where AI-related add-ons can include AI regulatory proceedings, data contamination, and "LLM hijacking." Hiscox Technology PI (UK) - AI clause - explicitly covers client claims arising from your use of AI (incl. genAI) as part of the services you deliver. A key lesson from Who Validates the Validators is that we learn our preferences as we evaluate. So make it cheap to evaluate (create outputs) AND cheap to revise criteria. Cookies taste wonderful when eaten hot. ⭐ Constraints as opportunities. On long flights, I read more since I'm less distracted by guilt ("Should I answer email or code instead of wasting time?") or FOMO ("Let's click that link") since I have no choice. Setting aside "quiet time" doesn't work as well, since I have more choice. This constraint (no Internet) became an opportunity (reading time). I knew this before-hand, but had to experience it to appreciate it, and acknowledge it consciously to realize it. That takes repeated (2+) trials and reflection. A workflow to convert constraints to opportunities could be: List constraints. (Like fish in water, we aren't used to thinking of constraints as constraints. Also, this means more constraints => more latent opportunities!) List opportunities they offer. (Creative prompting helps; reflecting on the answers helps more.) Try any 2+ times. (Gives room to settle in.) Document learnings. (Explicit reflection is better than implicit awareness.) Notes from Thoughtworks Radar, Apr 2025 Architecture advice beats architecture review. Architecture Review Boards hinder workflow. An architectural advice process (anyone makes architectural decisions, taking advice from experts, logging in Architecture Decision Records) works better. VectorChord is a faster pgvector alternative. "Learning is not the product of teaching. Learning is the product of the activity of learners." -- John Holt Music labels never became streaming platforms themselves. The real money is in concerts. Streaming just makes you famous enough to book gigs. But movies/TV shows are far more expensive to produce than music. So streaming platforms invest in content (Netflix, Apple) and studios stream (HBO, Disney) Claude Notes from Better Ways to Build Self-Improving AI Agents Quotes from Life is more than an engineering problem, interview with author Ted Chiang. Magic is intent-centric. "Magic means that ... the universe responds to your intentions in a way that the laws of physics as we understand them don’t." LLM reasoning is a weak analogy. “My liver was running this old program, but all I needed to do was update the software and now my liver is functioning much better, even though the hardware is the same.” No one says that. It’s not a useful way of thinking about the liver, and it is not a useful way of thinking about the brain either. Art won't die. Art is all about context. It’s not an activity like tightening bolts, where I don’t really care whether someone used a conventional wrench or a pneumatic wrench, as long as the bolts are tight. Alignment may not happen. When corporations behave badly, should we consider that an alignment problem? But why do large corporations behave so much worse than most of the people who work for them? And could that be fixed by solving a math problem? I don’t think so. LLM relationships are different from human. ... people have their own preferences, while things do not; you do them harm because you are ignoring their preferences. (Companies) might create the illusion that AI systems have preferences. .. it’s theoretically possible for us to build digital entities that have subjective experience. Notes from Developing our position on AI by Recurse Center: Learning happens at the edge of competence. AI has a moving jagged edge, so constantly re-try your impossibility list. Learning happens on what you care about. Use AI to expand your agency (by complementing or deepening), not replace it. Learning generously means being open to different perspectives, without judgement or dogma. Try new perspectives. ⭐ 'We tested one of the most common prompting techniques: giving the AI a persona to make it more accurate We found that telling the AI "you are a great physicist" doesn't make it significantly more accurate at answering physics questions, nor does "you are a lawyer" make it worse. This doesn't mean that personas can't be useful - for example, they change how the AI answers questions, the format of output, and maybe other factors as well.' Prompting Science REport 4: Playing Pretend: Expert Personas Don't Improve Factual Accuracy If YouTube embeds fail with an "Error 153 View player configuration error", it's because the server probably has a Referer-Policy: same-origin and needs to switch to Referer-Policy: strict-origin-when-cross-origin. Simon Willison Adding a [dependency-groups] section to pyproject.toml with dev = ["pytest"] ensures that pytest is automatically installed by uv because dev is a default group. Simon Willison CloudFlare Python Workers has full Pyodide support. That means most Python apps will now run on CloudFlare Workers, with low latency worldwide. This is a big deal. Smart contracts are programs that run on blockchains like Ethereum, e.g. to convert currencies, lend/borrow, buy NFTs, etc. These may contain bugs. Anthropic built a benchmark of real smart contracts with known bugs, had agents exploit them, and simulated $550 mn in theft. They also nade $3.5K exploiting real bugs - at a cost of $3.5K. So AI agents are currently at break-even for crypto-theft. Anthropic # Notes from Cory Doctorow's summary of The Reverse Centaur's Guide to Criticizing AI: # When tech monopolies saturate their markets, their P/E collapses, reducing share value. This incentivizes bubbles. Automation blindness negates human-in-the-loop. When AI makes rare mistakes, humans don't catch them. TSA misses guns, not water bottles. AI doesn't need to do your job. The AI salesman just needs to convince your boss it can, especially senior jobs. Reference letters from professors used to signal value since they were hard to write, so professors would do it only for good students. Copyright expansion and regulation will likely benefit corporates, not labor. US Copyright Office making AI content non-copyrightable means corporates NEED labor. Else every AI work goes to public domain. There is no strong evidence yet that Neuro-Linguistic Programming (NLP) works broadly (ChatGPT). Some NLP techniques help sometimes, but no more than other established techniques (goal-setting, visualization, etc.) ChatGPT ⭐ Just repeating a statement makes it seem truer because the brain finds it familiar, hence easier to process. This seems well-established research. The Truth about Truth PGlite is a WASM-based Postgres implementation. It's 3MB. You can embed it in the browser, NodeJS, Deno, etc. It has plugin support, including pgvector. Pejoration is when words acquire negative connotations. Euphimism escalation is another term for it. Third World → developing countries → emerging markets → Global South. Old → elderly → senior citizen → older adult. Lunatic → insane → mentally ill → mentally challenged. Janitor → custodian → sanitation engineer → facilities maintenance specialist. The opposite is amelioration. Minister moved from servant → servant of church → government official. marshal: horse-servant → horse-officer → senior military officer. Knight: servant → armed retainer → mounted warrior → knighthood honor. # # OmniDocBench 1.5 is a benchmark for parsing realistic PDFs. Gemini 3 Pro does well on the list among the commercial LLMs. PaddleOCR-VL (0.9B) tops the benchmarks, overall.

Things I Learned - 14 Dec 2025