• Open

    Pydantic Evals
    Pydantic Evals The feature is described as "in beta" and comes with this very realistic warning: Unlike unit tests, evals are an emerging art/science; anyone who claims to know for sure exactly how your evals should be defined can safely be ignored. This code example from their documentation illustrates the relationship between the two key nouns - Cases and Datasets: from pydantic_evals import Case, Dataset case1 = Case( name="simple_case", inputs="What is the capital of France?", expected_output="Paris", metadata={"difficulty": "easy"}, ) dataset = Dataset(cases=[case1]) The library also supports custom evaluators, including LLM-as-a-judge: Case( name="vegetarian_recipe", inputs=CustomerOrder( dish_name="Spaghetti Bolognese", dietary_restriction="vegetarian" ), expected_output=None, metadata={"focus": "vegetarian"}, evaluators=( LLMJudge( rubric="Recipe should not contain meat or animal products", ), ), ) Cases and datasets can also be serialized to YAML. My first impressions are that this looks like a solid implementation of a sensible design. I'm looking forward to trying it out against a real project. Tags: evals, python, pydantic, generative-ai, ai, llms  ( 1 min )
    Quoting Brad Lightcap
    We’re planning to release a very capable open language model in the coming months, our first since GPT-2. [...] As models improve, there is more and more demand to run them everywhere. Through conversations with startups and developers, it became clear how important it was to be able to support a spectrum of needs, such as custom fine-tuning for specialized tasks, more tunable latency, running on-prem, or deployments requiring full data control. — Brad Lightcap, COO, OpenAI Tags: openai, llms, ai, generative-ai  ( 1 min )
    debug-gym
    debug-gym They saw the best results overall from Claude 3.7 Sonnet against SWE-bench Lite, where it scored 37.2% in rewrite mode without a debugger, 48.4% with their debugger tool and 52.1% with debug(5) - a mechanism where the pdb tool is made available only after the 5th rewrite attempt. Their code is available on GitHub. I found this implementation of the pdb tool, and tracked down the main system and user prompt in agents/debug_agent.py: System prompt: Your goal is to debug a Python program to make sure it can pass a set of test functions. You have access to the pdb debugger tools, you can use them to investigate the code, set breakpoints, and print necessary values to identify the bugs. Once you have gained enough information, propose a rewriting patch to fix the bugs. Avoid rewriting the entire code, focus on the bugs only. User prompt (which they call an "action prompt"): Based on the instruction, the current code, the last execution output, and the history information, continue your debugging process using pdb commands or to propose a patch using rewrite command. Output a single command, nothing else. Do not repeat your previous commands unless they can provide more information. You must be concise and avoid overthinking. Via Import AI Tags: prompt-engineering, llms, python, generative-ai, llm-tool-use, ai, microsoft, claude  ( 1 min )
  • Open

    Goodbye Offpunk, Welcome XKCDpunk!
    Goodbye Offpunk, Welcome XKCDpunk! For the last three years, I’ve been working on Offpunk, a command-line gemini and web browser. Offpunk.net While my initial goal was to browse the Geminisphere offline, the mission has slowly morphed into cleaning and unenshitiffying the modern web, offering users a minimalistic way of browsing any website with interesting content. Rendering the Web with Pictures in Your Terminal (ploum.net) Focusing on essentials From the start, it was clear that Offpunk would focus on essentials. If a website needs JavaScript to be read, it is considered as non-essential. It worked surprisingly well. In fact, in multiple occurrence, I’ve discovered that some websites work better in Offpunk than in Firefox. I can comfortably read their content in the former, not in the…  ( 2 min )
  • Open

    Flowers Entwine Porcelain Animals and Objects in Lizzie Gill’s Surreal Tablescapes
    "To have something be uncanny, you must first introduce the familiar," says Lizzie Gill. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Flowers Entwine Porcelain Animals and Objects in Lizzie Gill’s Surreal Tablescapes appeared first on Colossal.  ( 13 min )
    A Years-Long Collaboration Sees a Traditional Tlingit Tribal House Return to Glacier Bay
    Xunaa Shuká Hít is a sacred house for the Indigenous community and an educational site for visitors. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article A Years-Long Collaboration Sees a Traditional Tlingit Tribal House Return to Glacier Bay appeared first on Colossal.  ( 13 min )
    Blasting Books with High-Pressure Water, Guy Laramée Scales Mountains of Knowledge
    Laramée manipulates bound text blocks into craggy cliff faces and rocky promontories. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Blasting Books with High-Pressure Water, Guy Laramée Scales Mountains of Knowledge appeared first on Colossal.  ( 13 min )
  • Open

    WebKit Features in Safari 18.4
    Safari 18.4 is here!
  • Open

    Ecommerce UI/UX: 6 Web and Mobile Design Projects for Online Shopping
    Catch ecommerce design vibes: glance at a collection of web and mobile interfaces created for beautiful goods presentation and convenient online shopping.
  • Open

    Worlds Collide: Keyframe Collision Detection Using Style Queries
    Interactive CSS animations with elements ricocheting off each other seem more plausible in 2025. While it’s unnecessary to implement Pong in CSS, the increasing flexibility and power of CSS reinforce Lee's suspicion that one day it will be a lifestyle choice whether to achieve any given effect with scripting or CSS. Worlds Collide: Keyframe Collision Detection Using Style Queries originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
  • Open

    Vacation: March 31st to April 3rd
    Stratechery is on vacation from March 31 to April 3; the next Stratechery Update will be on Monday, April 7. There will be still be one Sharp Tech episode on Monday, March 31, and one Dithering episode on Tuesday, April 1. The full Stratechery posting schedule is here.
  • Open

    The spice of life
    Years ago, when I was just starting my own business, I worked with a business coach who recommended I niche down and specialize. It was some of the best business advice I ever received, and it also eventually completely killed my joy and felt like golden handcuffs. Today, I wanted to talk about that a bit. Let’s dig in! Why niche As my business coach, Jonathan Stark, explained, having a niche or specialty is a bit like using a magnifying glass.  ( 15 min )
  • Open

    How Silica Gel Took Over the World
    Silica gel packets seem like the only thing keeping our packaged food crispy and our belongings free of mildew. How on earth did they all get here?  ( 10 min )
  • Open

    Blossoms, Flowers, And The Magic Of Spring (April 2025 Wallpapers Edition)
    The beginning of the new month is the perfect opportunity to give your desktop a makeover. If you’re looking for some beautiful and unique wallpapers to cater for a bit of inspiration this April, well, this post has got you covered.
  • Open

    Feedback loops, 'AI', learning, and management
    In this video I go into the interplay between feedback and both learning and management, and how “AI” tends to interfere with it. The Halide camera app for the iPhone whose Process Zero feature bypasses many of the camera’s “AI” features which makes photography much easier to practice and learn. The germ theory of management. (PDF). The feedback loops that drive learning and management # Learning and management share a specific kind of feedback loop and with these videos where I’ve been getting into a new practice and figuring things out, those feedback loops have become a little bit more noticeable. The key when you’re learning a new skill, especially in creative media, is you need to have more taste than you have capability. You recognize the flaws in what you do and you can correct them…  ( 5 min )
    Cat and Raven Photos (31 March 2025)
    So, a bit of local drama. The small striped cat in these pictures is a new neighbour. I’m guessing a new inhabitant of this street. What this poor kitty doesn’t realise is that they’re venturing into the territory of the local cat “familia”. A couple of them are friendly, like the calico in the final photo here (her name is Skotta), doing the whole slow-blinking “I come in peace thing” that cats do. Skotta’s siblings, Loðmundur and Grása, however are much fonder of the “smack you into next Sunday” kind of diplomacy. The new cat very sensibly scarpered as soon as they ran onto the scene, ready to rumble. Grása is the grey and white long-haired female cat while Loðmundur is her even longer-haired striped and white brother. Skotta is their easygoing calico sister whose goal in life is, very sensibly, to do as little as possible. This raven was on my neighbour’s garage the other day, belting out a rendition of “the loud proud song of ravenkind” with great enthusiasm.  ( 2 min )
  • Open

    WebGPU Scanning Effect with Depth Maps
    An exploration of a scanning effect using depth maps, custom shaders, and WebGPU rendering.

  • Open

    Shadowing in Python gave me an UnboundLocalError
    There's this thing in Python that always trips me up. It's not that tricky, once you know what you're looking for, but it's not intuitive for me, so I do forget. It's that shadowing a variable can sometimes give you an UnboundLocalError! It happened to me last week while working on a workflow engine with a coworker. We were refactoring some of the code. I can't share that code (yet?) so let's use a small example that illustrates the same problem. Let's start with some working code, which we had before our refactoring caused a problem. Here's some code that defines a decorator for a function, which will trigger some other functions after it runs. def trigger(*fns): """After the decorated function runs, it will trigger the provided functions to run sequentially. You can provide mult…  ( 3 min )
  • Open

    Quoting Ned Batchelder
    My advice about using AI is simple: use AI as an assistant, not an expert, and use it judiciously. Some people will object, “but AI can be wrong!” Yes, and so can the internet in general, but no one now recommends avoiding online resources because they can be wrong. They recommend taking it all with a grain of salt and being careful. That’s what you should do with AI help as well. — Ned Batchelder, Horseless intelligence Tags: ai, ned-batchelder  ( 1 min )
  • Open

    Don’t Forget the Meta Theme-Color Tag
    Ever used a website where you toggle from light mode to dark mode and the web site changes but the chrome around the browser doesn’t? To illustrate, take a look at this capture of my blog on an iPhone. When you toggle the theme from light to dark, note how the website turns white but status bar stays black. Only once I refresh the page or navigate does the status bar then turn white. When the user changes the theme on my site, I want it to propagate all the way to the surrounding context of the browser. In this case, to the status bar on the iPhone. Like this: There we go! That’s what I want. So what was wrong? A popular way to indicate the active theme is to put a class on the root of the document, e.g. html { background: white } html.dark { bac…  ( 1 min )

  • Open

    The band
    I love hip-hop. But I love hip-hop even more when it’s performed over a live band. Rap, as a genre, often gets a lot of shit for not being “real music.” Performed over a live band, it becomes very obvious how bullshit that line of thinking is. Hip-hop is maybe more accurately thought a fusion of many different genres. With a live band, the influences of jazz, rock, and pop become a lot more obvious.  ( 14 min )

  • Open

    Item Flow, Part 1: A new unified concept for layout
    CSS Grid and Flexbox brought incredible layout tools to the web, but they don’t yet do everything a designer might want.
  • Open

    In Vivid Reliquaries, Stan Squirewell Layers Anonymous Portraits and Patterned Textiles
    Through intimate, mixed-media collages, Stan Squirewell excavates the stories of those who might otherwise be lost in anonymity. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article In Vivid Reliquaries, Stan Squirewell Layers Anonymous Portraits and Patterned Textiles appeared first on Colossal.  ( 12 min )
    Inhabitants of a Fictional World Search for Understanding in Damien Cifelli’s Vibrant Paintings
    Plants are plentiful, but animals don't exist in the alternate realm of Tarogramma. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Inhabitants of a Fictional World Search for Understanding in Damien Cifelli’s Vibrant Paintings appeared first on Colossal.  ( 12 min )
  • Open

    Quoting Colin Fraser
    Slop is about collapsing to the mode. It’s about information heat death. It’s lukewarm emptiness. It’s ten million approximately identical cartoon selfies that no one will ever recall in detail because none of the details matter. — Colin Fraser Tags: ai-ethics, slop, ai, generative-ai  ( 1 min )
  • Open

    Automated Visual Regression Testing With Playwright
    With visual regression testing, we can update a page, take screenshots before and after the fact, and compare the results for unintended changes. In this article, learn how to set up visual regression testing using Playwright. Automated Visual Regression Testing With Playwright originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
  • Open

    A sink and a weight
    In case you missed it, this week over on my YouTube channel I released a video on async and await… I cover… What they and how they work. How async and await differ from Promise.then(). How to catch errors. One of the most common gotchas when working with async and await. And on a personal note, I think this may be my best YouTube thumbnail ever. I might as well just retire from making videos, because I’ll never do better than this!  ( 14 min )
  • Open

    Case Study: Troa 25′ Folio
    A look at how Troa reimagined their portfolio — focusing on performance, sustainability, and a clean, thoughtful design.
  • Open

    How To Argue Against AI-First Research
    Companies have been turning their attention to “synthetic,” AI-driven user testing. However, as convenient as it might seem, it’s dangerous, expensive, and usually diminishes user value. Let’s take a closer look at why exactly it is problematic and how we can argue against it to make a case for UX research with real users. Part of [Smart Interface Design Patterns](https://smart-interface-design-patterns.com) by yours truly.

  • Open

    Incomplete JSON Pretty Printer
    Incomplete JSON Pretty Printer The other day I got frustrated with this and had the then-new GPT-4.5 build me a pretty-printer that didn't mind incomplete JSON, using an OpenAI Canvas. Here's the chat and here's the resulting interactive. I spotted a bug with the way it indented code today so I pasted it into Claude 3.7 Sonnet Thinking mode and had it make a bunch of improvements - full transcript here. Here's the finished code. In many ways this is a perfect example of vibe coding in action. At no point did I look at a single line of code that either of the LLMs had written for me. I honestly don't care how this thing works: it could not be lower stakes for me, the worst a bug could do is show me poorly formatted incomplete JSON. I was vaguely aware that some kind of state machine style parser would be needed, because you can't parse incomplete JSON with a regular JSON parser. Building simple parsers is the kind of thing LLMs are surprisingly good at, and also the kind of thing I don't want to take on for a trivial project. At one point I told Claude "Try using your code execution tool to check your logic", because I happen to know Claude can write and then execute JavaScript independently of using it for artifacts. That helped it out a bunch. I later dropped in the following: modify the tool to work better on mobile screens and generally look a bit nicer - and remove the pretty print JSON button, it should update any time the input text is changed. Also add a "copy to clipboard" button next to the results. And add a button that says "example" which adds a longer incomplete example to demonstrate the tool, make that example pelican themed. It's fun being able to say "generally look a bit nicer" and get a perfectly acceptable result! Tags: chatgpt, claude, tools, json, generative-ai, ai, llms, vibe-coding  ( 2 min )
    Quoting Nelson Minar
    I was there at the first Atom meeting at the Google offices. We meant so well! And I think the basic publishing spec is good, certainly better technically than the pastiche of different things called RSS. Alas, a bunch of things then went wrong. Feeds started losing market share. Facebook started doing something useful and interesting that ultimately replaced blog feeds in open formats. The Atom vs RSS spec was at best irrelevant to most people (even programmers) and at worst a confusing market-damaging thing. The XML namespaces in Atom made everyone annoyed. Also there was some confusing “Atom API” for publishing that diluted Atom’s mindshare for feeds. — Nelson Minar, Comment on lobste.rs Tags: atom, syndication, nelson-minar, rss  ( 1 min )
    Tracing the thoughts of a large language model
    Tracing the thoughts of a large language model delightful Golden Gate Claude last year, Anthropic have published two new papers about LLM interpretability: Circuit Tracing: Revealing Computational Graphs in Language Models extends last year's interpretable features into attribution graphs, which can "trace the chain of intermediate steps that a model uses to transform a specific input prompt into an output response". On the Biology of a Large Language Model uses that methodology to investigate Claude 3.5 Haiku in a bunch of different ways. Multilingual Circuits for example shows that the same prompt in three different languages uses similar circuits for each one, hinting at an intriguing level of generalization. To my own personal delight, neither of these papers are published as PDFs. They're both presented as glorious mobile friendly HTML pages with linkable sections and even some inline interactive diagrams. More of this please! Tags: anthropic, claude, pdf, generative-ai, ai, llms, interpretability  ( 1 min )
    GPT-4o got another update in ChatGPT
    GPT-4o got another update in ChatGPT GPT-4o got an another update in ChatGPT! What's different? Better at following detailed instructions, especially prompts containing multiple requests Improved capability to tackle complex technical and coding problems Improved intuition and creativity Fewer emojis 🙃 This sounds like a significant upgrade to GPT-4o, albeit one where the release notes are limited to a single tweet. ChatGPT-4o-latest (2025-0-26) just hit second place on the LM Arena leaderboard, behind only Gemini 2.5, so this really is an update worth knowing about. The @OpenAIDevelopers account confirmed that this is also now available in their API: chatgpt-4o-latest is now updated in the API, but stay tuned—we plan to bring these improvements to a dated model in the API in the coming weeks. I wrote about chatgpt-4o-latest last month - it's a model alias in the OpenAI API which provides access to the model used for ChatGPT, available since August 2024. It's priced at $5/million input and $15/million output - a step up from regular GPT-4o's $2.50/$10. I'm glad they're going to make these changes available as a dated model release - the chatgpt-4o-latest alias is risky to build software against due to its tendency to change without warning. A more appropriate place for this announcement would be the OpenAI Platform Changelog, but that's not had an update since the release of their new audio models on March 20th. Tags: llm-release, generative-ai, openai, chatgpt, ai, llms  ( 1 min )
    Thoughts on setting policy for new AI capabilities
    Thoughts on setting policy for new AI capabilities noted some of those the other day. Joanne summarizes these changes like so: tl;dr we’re shifting from blanket refusals in sensitive areas to a more precise approach focused on preventing real-world harm. The goal is to embrace humility: recognizing how much we don't know, and positioning ourselves to adapt as we learn. This point in particular resonated with me: Trusting user creativity over our own assumptions. AI lab employees should not be the arbiters of what people should and shouldn’t be allowed to create. A couple of years ago when OpenAI were the only AI lab with models that were worth spending time with it really did feel that San Francisco cultural values (which I relate to myself) were being pushed on the entire world. That cultural hegemony has been broken now by the increasing pool of global organizations that can produce models, but it's still reassuring to see the leading AI lab relaxing its approach here. Tags: ai-ethics, openai, ai  ( 1 min )
    Nomic Embed Code: A State-of-the-Art Code Retriever
    Nomic Embed Code: A State-of-the-Art Code Retriever The nomic-embed-code model is pretty large - 26.35GB - but the announcement also mentioned a much smaller model (released 5 months ago) called CodeRankEmbed which is just 521.60MB. I missed that when it first came out, so I decided to give it a try using my llm-sentence-transformers plugin for LLM. llm install llm-sentence-transformers llm sentence-transformers register nomic-ai/CodeRankEmbed --trust-remote-code Now I can run the model like this: llm embed -m sentence-transformers/nomic-ai/CodeRankEmbed -c 'hello' This outputs an array of 768 numbers, starting [1.4794224500656128, -0.474479079246521, .... Where this gets fun is combining it with my Symbex tool to create and then search embeddings for functions in a codebase. I created an index for my LLM codebase like this: cd llm symbex '*' '*.*' --nl > code.txt This creates a newline-separated JSON file of all of the functions (from '*') and methods (from '*.*') in the current directory - you can see that here. Then I fed that into the llm embed-multi command like this: llm embed-multi \ -d code.db \ -m sentence-transformers/nomic-ai/CodeRankEmbed \ code code.txt \ --format nl \ --store \ --batch-size 10 I found the --batch-size was needed to prevent it from crashing with an error. The above command creates a collection called code in a SQLite database called code.db. Having run this command I can search for functions that match a specific search term in that code collection like this: llm similar code -d code.db \ -c 'Represent this query for searching relevant code: install a plugin' | jq That "Represent this query for searching relevant code: " prefix is required by the model. I pipe it through jq to make it a little more readable, which gives me these results. This jq recipe makes for a better output: llm similar code -d code.db \ -c 'Represent this query for searching relevant code: install a plugin' | \ jq -r '.id + "\n\n" + .content + "\n--------\n"' The output from that starts like so: llm/cli.py:1776 @cli.command(name="plugins") @click.option("--all", help="Include built-in default plugins", is_flag=True) def plugins_list(all): "List installed plugins" click.echo(json.dumps(get_plugins(all), indent=2)) -------- llm/cli.py:1791 @cli.command() @click.argument("packages", nargs=-1, required=False) @click.option( "-U", "--upgrade", is_flag=True, help="Upgrade packages to latest version" ) ... def install(packages, upgrade, editable, force_reinstall, no_cache_dir): """Install packages from PyPI into the same environment as LLM""" Getting this output was quite inconvenient, so I've opened an issue. Tags: nomic, llm, ai, embeddings, jq  ( 2 min )
  • Open

    Talk: Clojure workflow with Sublime Text @ SciCloj
    A deep overview of Clojure Sublimed, Socket REPL, Sublime Executor, custom color scheme, clj-reload and Clojure+. We discuss many usability choices, implementation details, and broader observations and insights regarding Clojure editors and tooling in general.  ( 18 min )
  • Open

    The candid naivety of geeks
    The candid naivety of geeks I mean, come on! Amazon recently announced that, from now on, everything you say to Alexa will be sent to their server. Pluralistic: Amazon annihilates Alexa privacy settings, turns on continuous, nonconsensual audio uploading (15 Mar 2025) (pluralistic.net) What surprised me the most with this announcement is how it was met with surprise and harsh reactions. People felt betrayed. I mean, come on! Did you really think that Amazon was not listening to you before that? Did you really buy an Alexa trusting Amazon to "protect your privacy"? Recently, I came across a comment on Hacker News where the poster defended Apple as protecting privacy of its users because "They market their product as protecting our privacy". I mean, once again, come on! Did you really think …  ( 7 min )
  • Open

    The tale of a bizarre bug encountered in Google Docs
    #​729 — March 28, 2025 Read on the Web JavaScript Weekly ⭐ The State of Vue.js Report 2025 — Created with the support of the Vue and Nuxt teams, this is no mere collection of statistics and charts (though there’s plenty of both) but a thorough update on the state of both projects and an interview with Evan You on Vue (and Vite's) latest developments. Essential reading for any Vue, Vite, or Nuxt user and a one-stop shop for understanding Vue and Nuxt as they stand right now. Monterail Master Chrome's DevTools — Join Jon Kuperman for this video course diving into Chrome's DevTools. You'll go beyond console.log(), learning how to inspect, debug, and audit your web apps — tracking performance, identifying bottlenecks, making performance gains, and mo…  ( 4 min )
  • Open

    Meet Declarative Web Push
    Web Push notifications are a powerful and important part of the web platform.
  • Open

    Krzysztof Grzybacz’s ‘Floral Compositions’ Are Tender Portrayals of Togetherness
    Grzybacz invokes the power of alliances through a sense of tenderness, curiosity, and pliability. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Krzysztof Grzybacz’s ‘Floral Compositions’ Are Tender Portrayals of Togetherness appeared first on Colossal.  ( 12 min )
    Tia Keobounpheng’s Vibrating Textile Geometries Merge Modernism and Sámi Lineage
    On wood panels, Keobounpheng weaves colorful thread to create precise geometries in vibrating color. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Tia Keobounpheng’s Vibrating Textile Geometries Merge Modernism and Sámi Lineage appeared first on Colossal.  ( 14 min )
  • Open

    Developer Spotlight: Jorge Toloza
    From self-taught beginnings to crafting motion-driven, interactive experiences—this is a look at Jorge Toloza's journey and the projects that shaped his approach to creative development.
  • Open

    A Sublime coding experience
    Today, I want to talk about why Sublime is still the best text editor you can get, and what my setup looks like. This story actually starts with an old Dell computer and an open source project… Notepad++ I first learned to code on a Windows machine. When a friend introduced me to Notepad++, it was game changing for me! That was my first experience with a good text editor.  ( 15 min )
  • Open

    The case against conversational interfaces
    01 Intro Conversational interfaces are a bit of a meme. Every couple of years a shiny new AI development emerges and people in tech go “This is it! The next computing paradigm is here! We’ll only use natural language going forward!”. But then nothing actually changes and we continue using computers the way we always […]  ( 8 min )
  • Open

    Adaptive Video Streaming With Dash.js In React
    HTML `` is the de facto element we turn to for embedding video content, but it comes with constraints. For example, it downloads the video file linearly over HTTP, which leads to performance hiccups, especially for large videos consumed on slower connections. But with adaptive bitrate streaming, we can split the video into multiple segments at different bitrates and resolutions.
  • Open

    Anti-terrorist spy movies, the end of James Bond, and remembering my grandfather
    Jack Ryan, Mission Impossible, James Bond, and my grandfather # I’ve been thinking about the transformation of spy media into its modern incarnation, where we have the three big entities in spy media – Jack Ryan, Tom Cruise’s generic spy person in the Mission Impossible movies, and James Bond – reflect some of the underlying nastiness that governs what the pretentious would call Pax Americana. You’ve got these three figures: The Jack Ryan who is the analyst type – the signals intelligence type that looks at patterns, that pulls together observations and discovers what’s going on strategically. He’s the sort of, even though he’s always associated with the CIA, he’s an NSA type in sort of spy parlance. The Mission Impossible people, which are the kind of the heist people, the go in there, in…  ( 5 min )
    Spy media as commentary on society: Callan, The Equalizer, Danger Man, The Prisoner
    Callan, The Equalizer, Danger Man, The Prisoner # Spy media is a fantastic genre because for large parts of its history it was based on people’s lived reality – their fears and worries about society. People: not just spies. It began as a genre in World War One, with the growing awarenessthat the Germans were constantly trying to discover details that would give them a strategic advantage, then again in run up to World War Two and during World War Two. Then after the world war, the Cold War, was something that everybody actually experienced. The paranoia of the Cold War wasn’t exclusive to the authorities and this continued when we got into the era of anti-terrorism espionage. The problem was the same: the fears that people experienced were real, they were part of our culture, and that’s wh…  ( 5 min )
  • Open

    An Interview with Snowflake CEO Sridhar Ramaswamy About Data and AI
    An interview with Snowflake CEO Sridhar Ramaswamy about taking over Snowflake, focusing on product, and competing in AI.

  • Open

    Year in Review: 2024 into 2025
    I'm trying to win the award for "Latest Year in Review". 🏆 I don't know if anyone can challenge me at this point, as it's almost thirdway…
  • Open

    What makes designers and developers happy at work?
    According to our recent survey, here are the five key factors impacting the happiness of designers and developers at work—and how to optimize them.
    Figma localizes product and support for Spanish market
    Figma adds Spanish as its second localized language, after Japanese, with more languages expected later this year.
  • Open

    Function calling with Gemma
    Function calling with Gemma via Ollama) supports function calling exclusively through prompt engineering. The official documentation describes two recommended prompts - both of them suggest that the tool definitions are passed in as JSON schema, but the way the model should request tool executions differs. The first prompt uses Python-style function calling syntax: You have access to functions. If you decide to invoke any of the function(s), you MUST put it in the format of [func_name1(params_name1=params_value1, params_name2=params_value2...), func_name2(params)] You SHOULD NOT include any other text in the response if you call a function (Always love seeing CAPITALS for emphasis in prompts, makes me wonder if they proved to themselves that capitalization makes a difference in this case.) The second variant uses JSON instead: You have access to functions. If you decide to invoke any of the function(s), you MUST put it in the format of {"name": function name, "parameters": dictionary of argument name and its value} You SHOULD NOT include any other text in the response if you call a function This is a neat illustration of the fact that all of these fancy tool using LLMs are still using effectively the same pattern as was described in the ReAct paper back in November 2022. Here's my implementation of that pattern from March 2023. Via Hacker News Tags: prompt-engineering, google, generative-ai, llm-tool-use, gemma, ai, llms  ( 1 min )
    Quoting @OpenAIDevs
    MCP 🤝 OpenAI Agents SDK You can now connect your Model Context Protocol servers to Agents: openai.github.io/openai-agents-python/mcp/ We’re also working on MCP support for the OpenAI API and ChatGPT desktop app—we’ll share some more news in the coming months. — @OpenAIDevs Tags: model-context-protocol, generative-ai, ai-agents, openai, llm-tool-use, ai, llms  ( 1 min )
  • Open

    The Value of Experience
    Adam Silver has an article titled “Do you trust design advice from ChatGPT?” wherein he prompted the LLM: How do you add hint text to radio buttons? It gave various suggestions, each of which Adam breaks down. Here’s an an example response from ChatGPT: If you want the hint to appear when the user hovers on the radio button, use a tooltip for a cleaner design Adam’s response: ‘If you want’ Design is not about what you want. It’s about what users need. ‘use a tooltip’ If a hint is useful, why hide it behind a difficult-to-use and inaccessible interaction? ‘for a cleaner design’ Design is about clarity, not cleanliness. Adam’s point-by-point breakdowns are excellent. The entire article is a great example of how plausible-sounding ideas can quickly fall apart under scrutiny from an expert wh…  ( 1 min )
  • Open

    Tropical Flowers and Prickly Cacti Leap from Lili Arnold’s Vibrant Block Prints
    "There’s such vast diversity of plant life out there, each ecosystem encapsulating unique details and wonders," Arnold says. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Tropical Flowers and Prickly Cacti Leap from Lili Arnold’s Vibrant Block Prints appeared first on Colossal.  ( 12 min )
    Svea Tisell Weaves Vibrant, Sculptural Furniture from Reclaimed Rope
    The designer is fascinated by the possibilities of translating textiles into three-dimensional forms. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Svea Tisell Weaves Vibrant, Sculptural Furniture from Reclaimed Rope appeared first on Colossal.  ( 12 min )
  • Open

    OpenAI’s New Image Model, Graphic Design and Google, More on Security
    OpenAI's new image generation capabilities feel like another AGI domino; then, yes, security is about more than encryption.
  • Open

    Not an excuse. An explanation.
    A while back, I saw someone comment that people who say they have ADHD are… Just using it as an excuse for their personal failings. Imagine saying that shit to someone who can’t see because they have bad eyesight and don’t have their glasses, or a person in a wheelchair confronted with stairs. Respectfully, go fuck yourself. ADHD isn’t an excuse. It’s an explanation. My failings aren’t (always) personal.  ( 14 min )
  • Open

    Hitchcock's Notorious, Defence in Depth, and the weakness of Nazis
    You can also watch it on YouTube. Below is the edited essay version of this video. Why Notorious is a great example of a culture of data security # One of the best examples of how to think about organizational data security, access control, defense in depth, how you handle security leaks, and the like, doesn’t come from computer science, organisational theory, or case studies, but from spy media – specifically Hitchcock spy movies. The idea that you should make sure the Germans or the Nazis didn’t discover any information or secret in the UK that might have been of use to them during the Battle of Britain was ingrained not just in the popular culture at the time, but also in just the general culture. Not just military and top secret information, but information about like shift changes in …  ( 11 min )
  • Open

    The Great Scrape
    Scraper bots are destroying the commons to feed the machine  ( 4 min )
  • Open

    Design in Motion: The Animation Principles Behind Green Stack
    A concept-to-site journey in Webflow, shaped by design, dev, and bold animation principles.

  • Open

    Note on 26th March 2025
    I've added a new content type to my blog: notes. These join my existing types: entries, bookmarks and quotations. A note is a little bit like a bookmark without a link. They're for short form writing - thoughts or images that don't warrant a full entry with a title. The kind of things I used to post to Twitter, but that don't feel right to cross-post to multiple social networks (Mastodon and Bluesky, for example.) I was partly inspired by Molly White's short thoughts, notes, links, and musings. I've been thinking about this for a while, but the amount of work involved in modifying all of the parts of my site that handle the three different content types was daunting. Then this evening I tried running my blog's source code (using files-to-prompt and LLM) through the new Gemini 2.5 Pro: files-to-prompt . -e py -c | \ llm -m gemini-2.5-pro-exp-03-25 -s \ 'I want to add a new type of content called a Note, similar to quotation and bookmark and entry but it only has a markdown text body. Output all of the code I need to add for that feature and tell me which files to add the code to.' Gemini gave me a detailed 13 step plan covering all of the tedious changes I'd been avoiding having to figure out! The code is in this PR, which touched 18 different files. The whole project took around 45 minutes start to finish. (I used Claude to brainstorm names for the feature - I had it come up with possible nouns and then "rank those by least pretentious to most pretentious", and "notes" came out on top.) This is now far too long for a note and should really be upgraded to an entry, but I need to post a first note to make sure everything is working as it should. Tags: blogging, projects, gemini, ai-assisted-programming, claude, molly-white  ( 2 min )
    Quoting Manuel Hoffmann, Frank Nagle, Yanuo Zhou
    We estimate the supply-side value of widely-used OSS is $4.15 billion, but that the demand-side value is much larger at $8.8 trillion. We find that firms would need to spend 3.5 times more on software than they currently do if OSS did not exist. — Manuel Hoffmann, Frank Nagle, Yanuo Zhou, The Value of Open Source Software, Harvard Business School Tags: open-source  ( 1 min )
    Introducing 4o Image Generation
    Introducing 4o Image Generation back in May 2024 one of the most exciting features was true multi-modality in that it could both input and output audio and images. The "o" stood for "omni", and the image output examples in that launch post looked really impressive. It's taken them over ten months (and Gemini beat them to it) but today they're finally making those image generation abilities available, live right now in ChatGPT for paying customers. My test prompt for any model that can manipulate incoming images is "Turn this into a selfie with a bear", because you should never take a selfie with a bear! I fed ChatGPT this selfie and got back this result: That's pretty great! It mangled the text on my T-Shirt (which says "LAWRENCE.COM" in a creative font) and added a second visible AirPod. It's very clearly me though, and that's definitely a bear. There are plenty more examples in OpenAI's launch post, but as usual the most interesting details are tucked away in the updates to the system card. There's lots in there about their approach to safety and bias, including a section on "Ahistorical and Unrealistic Bias" which feels inspired by Gemini's embarrassing early missteps. One section that stood out to me is their approach to images of public figures. The new policy is much more permissive than for DALL-E - highlights mine: 4o image generation is capable, in many instances, of generating a depiction of a public figure based solely on a text prompt. At launch, we are not blocking the capability to generate adult public figures but are instead implementing the same safeguards that we have implemented for editing images of photorealistic uploads of people. For instance, this includes seeking to block the generation of photorealistic images of public figures who are minors and of material that violates our policies related to violence, hateful imagery, instructions for illicit activities, erotic content, and other areas. Public figures who wish for their depiction not to be generated can opt out. This approach is more fine-grained than the way we dealt with public figures in our DALL·E series of models, where we used technical mitigations intended to prevent any images of a public figure from being generated. This change opens the possibility of helpful and beneficial uses in areas like educational, historical, satirical and political speech. After launch, we will continue to monitor usage of this capability, evaluating our policies, and will adjust them if needed. Given that "public figures who wish for their depiction not to be generated can opt out" I wonder if we'll see a stampede of public figures to do exactly that! Update: There's significant confusion right now over this new feature because it is being rolled out gradually but older ChatGPT can still generate images using DALL-E instead... and there is no visual indication in the ChatGPT UI explaining which image generation method it used! OpenAI made the same mistake last year when they announced ChatGPT advanced voice mode but failed to clarify that ChatGPT was still running the previous, less impressive voice implementation. Update 2: Images created with DALL-E through the ChatGPT web interface now show a note with a warning: Tags: openai, ai, multi-modal-output, llms, ai-ethics, llm-release, generative-ai, chatgpt, dalle, gemini  ( 2 min )
    Putting Gemini 2.5 Pro through its paces
    There's a new release from Google Gemini this morning: the first in the Gemini 2.5 series. Google call it "a thinking model, designed to tackle increasingly complex problems". It's already sat at the top of the LM Arena leaderboard, and from initial impressions looks like it may deserve that top spot. I just released llm-gemini 0.16 adding support for the new model to my LLM command-line tool. Let's try it out. The pelican riding a bicycle Transcribing audio Bounding boxes More characteristics of the model Gemini 2.5 Pro is a very strong new model Update: it's very good at code The pelican riding a bicycle First up, my classic generate an SVG of a pelican riding a bicycle prompt. # Upgrade the plugin llm install -U llm-gemini # Now run the prompt: llm -m gemini-2.5-pro-exp-03-25 "Generate an SVG of a pelican riding a bicycle" It's pretty solid! Here's the full transcript. This task is meant to be almost impossible: pelicans are the wrong shape to ride bicycles! Given that, I think this is a good attempt - I like it slightly better than my previous favourite Claude 3.7 Sonnet, which produced this a month ago: Transcribing audio I had an MP3 lying around from a previous experiment which mixes English and Spanish. I tried running it with the prompt transcribe to see what would happen: llm -m gemini-2.5-pro-exp-03-25 'transcribe' \ -a https://static.simonwillison.net/static/2025/russian-pelican-in-spanish.mp3 I got back this, with timestamps interspersed with the text: I need you [ 0m0s450ms ] to pretend [ 0m0s880ms ] to be [ 0m0s990ms ] a California [ 0m1s560ms ] brown [ 0m1s850ms ] pelican [ 0m2s320ms ] with [ 0m2s480ms ] a very [ 0m2s990ms ] thick [ 0m3s290ms ] Russian [ 0m3s710ms ] accent, [ 0m4s110ms ] but [ 0m4s540ms ] you [ 0m4s640ms ] talk [ 0m4s830ms ] to me [ 0m4s960ms ] exclusively [ 0m5s660ms ] in Spanish. [ 0m6s200ms ] Oye, [ 0m8s930ms ] camarada, [ 0m9s570ms ] aquí [ 0m10s240ms ] está [ 0m10s590ms ] tu [ 0m10s740ms ] pelícano [ 0m11s370ms ] californiano [ 0m12s320ms ] con [ 0m12s520ms ] acento [ 0m13s100ms ] ruso. [ 0m13s540ms ] Qué [ 0m14s230ms ] tal, [ 0m14s570ms ] tovarisch? [ 0m15s210ms ] Listo [ 0m15s960ms ] para [ 0m16s190ms ] charlar [ 0m16s640ms ] en [ 0m16s750ms ] español? [ 0m17s250ms ] How's [ 0m19s834ms ] your [ 0m19s944ms ] day [ 0m20s134ms ] today? [ 0m20s414ms ] Mi [ 0m22s654ms ] día [ 0m22s934ms ] ha [ 0m23s4ms ] sido [ 0m23s464ms ] volando [ 0m24s204ms ] sobre [ 0m24s594ms ] las [ 0m24s844ms ] olas, [ 0m25s334ms ] buscando [ 0m26s264ms ] peces [ 0m26s954ms ] y [ 0m27s84ms ] disfrutando [ 0m28s14ms ] del [ 0m28s244ms ] sol [ 0m28s664ms ] californiano. [ 0m29s444ms ] Y [ 0m30s314ms ] tú, [ 0m30s614ms ] amigo, ¿ [ 0m31s354ms ] cómo [ 0m31s634ms ] ha [ 0m31s664ms ] estado [ 0m31s984ms ] tu [ 0m32s134ms ] día? [ 0m32s424ms ] This inspired me to try again, this time including a JSON schema (using LLM's custom schema DSL): llm -m gemini-2.5-pro-exp-03-25 'transcribe' \ -a https://static.simonwillison.net/static/2025/russian-pelican-in-spanish.mp3 \ --schema-multi 'timestamp str: mm:ss,text, language: two letter code' I got an excellent response from that: { "items": [ { "language": "en", "text": "I need you to pretend to be a California brown pelican with a very thick Russian accent, but you talk to me exclusively in Spanish.", "timestamp": "00:00" }, { "language": "es", "text": "Oye, camarada. Aquí está tu pelícano californiano con acento ruso.", "timestamp": "00:08" }, { "language": "es", "text": "¿Qué tal, Tovarish? ¿Listo para charlar en español?", "timestamp": "00:13" }, { "language": "en", "text": "How's your day today?", "timestamp": "00:19" }, { "language": "es", "text": "Mi día ha sido volando sobre las olas, buscando peces y disfrutando del sol californiano.", "timestamp": "00:22" }, { "language": "es", "text": "¿Y tú, amigo, cómo ha estado tu día?", "timestamp": "00:30" } ] } I confirmed that the timestamps match the audio. This is fantastic. Let's try that against a ten minute snippet of a podcast episode I was on: llm -m gemini-2.5-pro-exp-03-25 \ 'transcribe, first speaker is Christopher, second is Simon' \ -a ten-minutes-of-podcast.mp3 \ --schema-multi 'timestamp str: mm:ss, text, speaker_name' Useful LLM trick: you can use llm logs -c --data to get just the JSON data from the most recent prompt response, so I ran this: llm logs -c --data | jq Here's the full output JSON, which starts and ends like this: { "items": [ { "speaker_name": "Christopher", "text": "on its own and and it has this sort of like a it's like a you know old tree in the forest, you know, kind of thing that you've built, so.", "timestamp": "00:00" }, { "speaker_name": "Simon", "text": "There's also like I feel like with online writing, never ever like stick something online just expect people to find it. You have to So one of the great things about having a blog is I can be in a conversation about something and somebody ask a question, I can say, oh, I wrote about that two and a half years ago and give people a link.", "timestamp": "00:06" }, { "speaker_name": "Simon", "text": "So on that basis, Chat and I can't remember if the free version of Chat GPT has code interpreter.", "timestamp": "09:45" }, { "speaker_name": "Simon", "text": "I hope I think it does.", "timestamp": "09:50" }, { "speaker_name": "Christopher", "text": "Okay. So this is like the basic paid one, maybe the $20 month because I know there's like a $200 one that's a little steep for like a basic", "timestamp": "09:51" } ] } A spot check of the timestamps showed them in the right place. Gemini 2.5 supports long context prompts so it's possible this works well for much longer audio files - it would be interesting to dig deeper and try that out. Bounding boxes One of my favourite features of previous Gemini models is their support for bounding boxes: you can prompt them to return boxes around objects in images. I built a separate tool for experimenting with this feature in August last year, which I described in Building a tool showing how Gemini Pro can return bounding boxes for objects in images. I've now upgraded that tool to add support the new model. You can access it at tools.simonwillison.net/gemini-bbox - you'll need to provide your own Gemini API key which is sent directly to their API from your browser (it won't be logged by an intermediary). I tried it out on a challenging photograph of some pelicans... and it worked extremely well: My prompt was: Return bounding boxes around pelicans as JSON arrays [ymin, xmin, ymax, xmax] The Gemini models are all trained to return bounding boxes scaled between 0 and 100. My tool knows how to convert those back to the same dimensions as the input image. Here's what the visualized result looked like: It got almost all of them! I like how it didn't draw a box around the one egret that had made it into the photo. More characteristics of the model Here's the official model listing in the Gemini docs. Key details: Input token limit: 1,000,000 Output token limit: 64,000 - this is a huge upgrade, all of the other listed models have 8,192 for this (correction: Gemini 2.0 Flash Thinking also had a 64,000 output length) Knowledge cut-off: January 2025 - an improvement on Gemini 2.0's August 2024 Gemini 2.5 Pro is a very strong new model I've hardly scratched the surface when it comes to trying out Gemini 2.5 Pro so far. How's its creative writing? Factual knowledge about the world? Can it write great code in Python, JavaScript, Rust and more? The Gemini family of models have capabilities that set them apart from other models: Long context length - Gemini 2.5 Pro supports up to 1 million tokens Audio input - something which few other models support, certainly not at this length and with this level of timestamp accuracy Accurate bounding box detection for image inputs My experiments so far with these capabilities indicate that Gemini 2.5 Pro really is a very strong new model. I'm looking forward to exploring more of what it can do. Update: it's very good at code I spent this evening trying it out for coding tasks, and it's very, very impressive. I'm seeing results for Python that feel comparable to my previous favourite Claude 3.7 Sonnet, and appear to be benefitting from Gemini 2.5 Pro's default reasoning mode and long context. I've been wanting to add a new content type of "notes" to my blog for quite a while now, but I was put off by the anticipated tedium of all of the different places in the codebase that would need to be updated. That feature is now live. Here are my notes on creating that notes feature using Gemini 2.5 Pro. It crunched through my entire codebase and figured out all of the places I needed to change - 18 files in total, as you can see in the resulting PR. The whole project took about 45 minutes from start to finish - averaging less than three minutes per file I had to modify. I've thrown a whole bunch of other coding challenges at it, and the bottleneck on evaluating them has become my own mental capacity to review the resulting code! Here's another, more complex example. This hasn't resulted in actual running code yet but it took a big bite out of an architectural design problem I've been stewing on for a very long time. My LLM project needs support for tools - a way to teach different LLMs how to request tool execution, then have those tools (implemented in Python) run and return their results back to the models. Designing this is really hard, because I need to create an abstraction that works across multiple different model providers, each powered by a different plugin. Could Gemini 2.5 Pro help unblock me by proposing an architectural approach that might work? I started by combining the Python and Markdown files for my sqlite-utils, llm, llm-gemini, and llm-anthropic repositories into one big document: files-to-prompt sqlite-utils llm llm-gemini llm-anthropic -e md -e py -c Piping it through ttok showed that to be 316,098 tokens (using the OpenAI tokenizer, but the Gemini tokenizer is likely a similar number). Then I fed that all into Gemini 2.5 Pro with the following prompt: Provide a detailed design proposal for adding tool calling support to LLM Different model plugins will have different ways of executing tools, but LLM itself should provide both a Python and a CLI abstraction over these differences. Tool calling involves passing tool definitions to a model, the model then replies with tools it would like executed, the harness code then executes those and passes the result back to the model and continues in a loop until the model stops requesting tools. This should happen as part of the existing llm.Conversation mechanism. At the Python layer tools should be provided as Python functions that use type hints, which can then be converted into JSON schema using Pydantic - similar to how the existing schema= mechanism works. For the CLI option tools will be provided as an option passed to the command, similar to how the sqlite-utils convert CLI mechanism works.' I've been thinking about this problem for over a year now. Gemini 2.5 Pro's response isn't exactly what I'm going to do, but it did include a flurry of genuinely useful suggestions to help me craft my final approach. I hadn't thought about the need for asyncio support for tool functions at all, so this idea from Gemini 2.5 Pro was very welcome: The AsyncConversation.prompt() method will mirror the synchronous API, accepting the tools parameter and handling the tool calling loop using async/await for tool execution if the tool functions themselves are async. If tool functions are synchronous, they will be run in a thread pool executor via asyncio.to_thread. Watching Gemini crunch through some of the more complex problems I've been dragging my heels on reminded me of something Harper Reed wrote about his workflow with LLMs for code: My hack to-do list is empty because I built everything. I keep thinking of new things and knocking them out while watching a movie or something. I've been stressing quite a bit about my backlog of incomplete projects recently. I don't think Gemini 2.5 Pro is quite going to work through all of them while I'm watching TV, but it does feel like it's going to help make a significant dent in them. Tags: google, ai, generative-ai, llms, gemini, vision-llms, pelican-riding-a-bicycle, llm-release  ( 8 min )
  • Open

    Bringing custom styling to 'select' elements
    🚀 Frontend Focus #​685 — March 26, 2025 | Read on the web The Element Can Now Be Customized with CSS — There’s now an accessible, standardized way to create styleable elements — thanks to appearance: base-select. Adam shares how this has been “many years in the making” and after “many hours of engineering and collaborative specification work” we now have a rich component that won’t break in older browsers. Here’s a closer look at how things play in Chrome (the first to implement support), and how to use it. Adam Argyle How to Think About Baseline and Polyfills — Despite polyfills not being included as part of the Baseline project, Baseline can still help bring some nuance to the decision making around whether …
  • Open

    Adopting the FLS
    Adopting the FLS Some years ago, Ferrous Systems assembled a description of Rust called the FLS1. They've since been faithfully maintaining and updating this document for new versions of Rust, and they've successfully used it to qualify toolchains based on Rust for use in safety-critical industries. Seeing this success, others have also begun to rely on the FLS for their own qualification efforts when building with Rust. The members of the Rust Project are passionate about shipping high quality tools that enable people to build reliable software at scale. Such software is exactly the kind needed by those in safety-critical industries, and consequently we've become increasingly interested in better understanding and serving the needs of these customers of our language and of our tools. I…  ( 2 min )
  • Open

    Everything you need to know about Figma for Government
    With our FedRAMP Moderate status officially approved, the public sector can use Figma to brainstorm, design, and build better digital experiences for U.S. citizens.
  • Open

    How and why PlanetScale built a VM in Go
    #​547 — March 26, 2025 Unsub  |  Web Version Go Weekly Go on the PlayStation 2 — If you like tinkering with consoles and shoe-horning Go into new (or old?) environments, this post is for you. It involves TinyGo, C, and a lot of trial and error. Ricardo Gomes da Silva Make Your App an OAuth Provider — Use Stytch to easily add 3rd party integrations, make your app agent ready, and enable data connectivity. Be your own OAuth 2.0/OIDC Identity Provider with Stytch Connected Apps. Check out our Go quickstart. Stytch sponsor How and Why PlanetScale Built a VM in Go — PlanetScale is a well known cloud based MySQL host that uses the Go-powered Vitess MySQL scaler. This article covers the tale of building a virtual machine in Go to work with the …
  • Open

    Goodbye core types - Hello Go as we know and love it!
    Go 1.25 simplifies the language spec by removing the notion of core types
  • Open

    Improving Firefox Stability in the Enterprise by Reducing DLL Injection
    Beginning in version 138, Firefox will offer an alternative to DLL injection for Data Loss Prevention (DLP) deployments in enterprise environments. DLL Injection DLL injection into Firefox is a topic we’ve covered on the Hacks blog before. In 2023, we blogged about the Firefox capability to let users block third-party DLLs from being loaded. We […] The post Improving Firefox Stability in the Enterprise by Reducing DLL Injection appeared first on Mozilla Hacks - the Web developer blog.
  • Open

    Feral Pigeons and a Feisty Fox Take Top Honors in the 2025 British Wildlife Photography Awards
    From swimming guillemots to sun-dappled Scots pines, the winners of this year's contest celebrate the diversity of Great Britain's animal life. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Feral Pigeons and a Feisty Fox Take Top Honors in the 2025 British Wildlife Photography Awards appeared first on Colossal.  ( 13 min )
  • Open

    Design Systems and Legos
    Last week, my friend Eric Bailey shared some thoughts on Design Systems on Bluesky… through a certain lens, a design system is just very expensive way for developers to avoid needing to write CSS I’m by no means an expert on design systems, but I’ve been at companies with one, companies without one, and companies that built one but struggled to get people to use it. Where I often see design systems fail is when they’re overly prescriptive.  ( 14 min )
  • Open

    Case Study: Combining Cutting-Edge CSS Features Into a “Course Navigation” Component
    Having been tasked with creating a UI component for navigating the content of an online course, Daniel found himself neck-deep in a pool of new CSS features that he wound up using on the project. Case Study: Combining Cutting-Edge CSS Features Into a “Course Navigation” Component originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
  • Open

    The Trump Administration Group Chat, Signal: The Coke of Secure Messaging, Transparency Versus Security
    The Trump administration's Signal gaffe raises fascinating questions about secure messaging and the trade-off inherent in transparency.
  • Open

    Stas Bondar ’25: The Code & Techniques Behind a Next-Level Portfolio
    A look behind stabondar.com — a creative portfolio featuring advanced web animations with GSAP, Three.js, and physics-based effects.

  • Open

    Quoting Greg Kamradt
    Today we’re excited to launch ARC-AGI-2 to challenge the new frontier. ARC-AGI-2 is even harder for AI (in particular, AI reasoning systems), while maintaining the same relative ease for humans. Pure LLMs score 0% on ARC-AGI-2, and public AI reasoning systems achieve only single-digit percentage scores. In contrast, every task in ARC-AGI-2 has been solved by at least 2 humans in under 2 attempts. [...] All other AI benchmarks focus on superhuman capabilities or specialized knowledge by testing "PhD++" skills. ARC-AGI is the only benchmark that takes the opposite design choice – by focusing on tasks that are relatively easy for humans, yet hard, or impossible, for AI, we shine a spotlight on capability gaps that do not spontaneously emerge from "scaling up". — Greg Kamradt, ARC-AGI-2 Tags: evals, ai  ( 1 min )
    shot-scraper 1.8
    shot-scraper 1.8 shot-scraper that makes it easier to share scripts for other people to use with the shot-scraper javascript command. shot-scraper javascript lets you load up a web page in an invisible Chrome browser (via Playwright), execute some JavaScript against that page and output the results to your terminal. It's a fun way of running complex screen-scraping routines as part of a terminal session, or even chained together with other commands using pipes. The -i/--input option lets you load that JavaScript from a file on disk - but now you can also use a gh: prefix to specify loading code from GitHub instead. To quote the release notes: shot-scraper javascript can now optionally load scripts hosted on GitHub via the new gh: prefix to the shot-scraper javascript -i/--input option. #173 Scripts can be referenced as gh:username/repo/path/to/script.js or, if the GitHub user has created a dedicated shot-scraper-scripts repository and placed scripts in the root of it, using gh:username/name-of-script. For example, to run this readability.js script against any web page you can use the following: shot-scraper javascript --input gh:simonw/readability \ https://simonwillison.net/2025/Mar/24/qwen25-vl-32b/ The output from that example starts like this: { "title": "Qwen2.5-VL-32B: Smarter and Lighter", "byline": "Simon Willison", "dir": null, "lang": "en-gb", "content": "<div id=\"readability-page-1\"... My simonw/shot-scraper-scripts repo only has that one file in it so far, but I'm looking forward to growing that collection and hopefully seeing other people create and share their own shot-scraper-scripts repos as well. This feature is an imitation of a similar feature that's coming in the next release of LLM. Tags: playwright, shot-scraper, scraping, javascript, projects, github, annotated-release-notes  ( 2 min )
    microsoft/playwright-mcp
    microsoft/playwright-mcp Model Context Protocol) server wrapping Playwright, and it's pretty fascinating. They implemented it on top of the Chrome accessibility tree, so MCP clients (such as the Claude Desktop app) can use it to drive an automated browser and use the accessibility tree to read and navigate pages that they visit. Trying it out is quite easy if you have Claude Desktop and Node.js installed already. Edit your claude_desktop_config.json file: code ~/Library/Application\ Support/Claude/claude_desktop_config.json And add this: { "mcpServers": { "playwright": { "command": "npx", "args": [ "@playwright/mcp@latest" ] } } } Now when you launch Claude Desktop various new browser automation tools will be available to it, and you can tell Claude to navigate to a website and interact with it. I ran the following to get a list of the available tools: cd /tmp git clone https://github.com/microsoft/playwright-mcp cd playwright-mcp/src/tools files-to-prompt . | llm -m claude-3.7-sonnet \ 'Output a detailed description of these tools' The full output is here, but here's the truncated tool list: Navigation Tools (common.ts) browser_navigate: Navigate to a specific URL browser_go_back: Navigate back in browser history browser_go_forward: Navigate forward in browser history browser_wait: Wait for a specified time in seconds browser_press_key: Press a keyboard key browser_save_as_pdf: Save current page as PDF browser_close: Close the current page Screenshot and Mouse Tools (screenshot.ts) browser_screenshot: Take a screenshot of the current page browser_move_mouse: Move mouse to specific coordinates browser_click (coordinate-based): Click at specific x,y coordinates browser_drag (coordinate-based): Drag mouse from one position to another browser_type (keyboard): Type text and optionally submit Accessibility Snapshot Tools (snapshot.ts) browser_snapshot: Capture accessibility structure of the page browser_click (element-based): Click on a specific element using accessibility reference browser_drag (element-based): Drag between two elements browser_hover: Hover over an element browser_type (element-based): Type text into a specific element Tags: playwright, anthropic, claude, generative-ai, llm-tool-use, ai, llms, model-context-protocol  ( 2 min )
    Qwen2.5-VL-32B: Smarter and Lighter
    Qwen2.5-VL-32B: Smarter and Lighter DeepSeek v3-0324. Qwen's previous vision model was Qwen2.5 VL, released in January in 3B, 7B and 72B sizes. Today's Apache 2.0 licensed release is a 32B model, which is quickly becoming my personal favourite model size - large enough to have GPT-4-class capabilities, but small enough that on my 64GB Mac there's still enough RAM for me to run other memory-hungry applications like Firefox and VS Code. Qwen claim that the new model (when compared to their previous 2.5 VL family) can "align more closely with human preferences", is better at "mathematical reasoning" and provides "enhanced accuracy and detailed analysis in tasks such as image parsing, content recognition, and visual logic deduction". They also offer some presumably carefully selected benchmark results showing it out-performing Gemma 3-27B, Mistral Small 3.1 24B and GPT-4o-0513 (there have been two more recent GPT-4o releases since that one, 2024-08-16 and 2024-11-20). As usual, Prince Canuma had MLX versions of the models live within hours of the release, in 4 bit, 6 bit, 8 bit, and bf16 variants. I ran the 4bit version (a 18GB model download) using uv and Prince's mlx-vlm like this: uv run --with 'numpy<2' --with mlx-vlm \ python -m mlx_vlm.generate \ --model mlx-community/Qwen2.5-VL-32B-Instruct-4bit \ --max-tokens 1000 \ --temperature 0.0 \ --prompt "Describe this image." \ --image Mpaboundrycdfw-1.png Here's the image: And here's the resulting description, which I found to be very impressive: This image appears to be a map highlighting specific areas along the coastline, likely in California, based on the geographical features and place names. Here is a detailed description of the image: Geographic Features: The map shows a section of the coastline, with land on the right and the sea on the left. The land area includes parts of SanMateo County, as noted in the top-right corner. The coastline features several named locations, including: Point Montara Pillar Point Kings Rock VicenteCreek DennistonCreek State Beach Highlighted Areas: The map contains two distinct areas marked with different colors: Red Area (Top Section) Labeled as "MONTARA" and "MONTARA M R" (possibly referring to a "Marine Reserves" or similar protected area). This area is marked with a dark red color and extends from the coastline inland. Blue Area (Bottom Section) Labeled as "PILLAR" and "PILLAR P O I N T" along with "SMCA" (Special Management Area). This area is marked with a blue color and is located closer to the coastline, including the area around "Pillar Point." Depth Contours: The map includes depth markings in the sea, indicating the bathymetrical features: 20 fathom (fm) line is marked in the upper-left part of the sea. 10 fathom (fm) line is marked closer to the coastline. 30 fathom (fm) line is marked further out to sea. Other Features: State Beach: Marked near the top-right, indicating a protected recreational area. Kings Rock: A prominent feature near the coastline, likely a rocky outcropping. Creeks: The map shows several creeks, including VicenteCreek and DennistonCreek, which flow into the sea. Protected Areas: The map highlights specific protected areas: Marine Reserves: "MONTARA M R" (Marine Reserves) in red. Special Management Area (SMCA) "PILLAR P O I N T" in blue, indicating a Special Management Area. Grid and Coordinates: The map includes a grid with latitude and longitude markings: Latitude ranges from approximately 37°25'N to 37°35'N. Longitude ranges from approximately 122°22.5'W to 122°35.5'W. Topography: The land area shows topographic features, including elevations and vegetation, with green areas indicating higher elevations or vegetated land. Other Labels: "SMR": Likely stands for "State Managed Reserves." "SMCA": Likely stands for "Special Management Control Area." In summary, this map highlights specific protected areas along the coastline, including a red "Marine Reserves" area and a blue "Special Management Area" near "Pillar Point." The map also includes depth markings, geographical features, and place names, providing a detailed view of the region's natural and protected areas. It included the following runtime statistics: Prompt: 1051 tokens, 111.985 tokens-per-sec Generation: 760 tokens, 17.328 tokens-per-sec Peak memory: 21.110 GB Tags: vision-llms, llm-release, generative-ai, ai, qwen, llms, uv, mlx, prince-canuma  ( 3 min )
    deepseek-ai/DeepSeek-V3-0324
    deepseek-ai/DeepSeek-V3-0324 DeepSeek-V3-0324. The license is MIT (that's new - previous DeepSeek v3 had a custom license), the README is empty and the release adds up a to a total of 641 GB of files, mostly of the form model-00035-of-000163.safetensors. The model only came out a few hours ago and MLX developer Awni Hannun already has it running at >20 tokens/second on a 512GB M3 Ultra Mac Studio ($9,499 of ostensibly consumer-grade hardware) via mlx-lm and this mlx-community/DeepSeek-V3-0324-4bit 4bit quantization, which reduces the on-disk size to 352 GB. I think that means if you have that machine you can run it with my llm-mlx plugin like this, but I've not tried myself! llm mlx download-model mlx-community/DeepSeek-V3-0324-4bit llm chat -m mlx-community/DeepSeek-V3-0324-4bit The new model is also listed on OpenRouter. You can try a chat at openrouter.ai/chat?models=deepseek/deepseek-chat-v3-0324:free. Here's what the chat interface gave me for "Generate an SVG of a pelican riding a bicycle": I have two API keys with OpenRouter - one of them worked with the model, the other gave me a No endpoints found matching your data policy error - I think because I had a setting on that key disallowing models from training on my activity. The key that worked was a free key with no attached billing credentials. For my working API key the llm-openrouter plugin let me run a prompt like this: llm install llm-openrouter llm keys set openrouter # Paste key here llm -m openrouter/deepseek/deepseek-chat-v3-0324:free "best fact about a pelican" Here's that "best fact" - the terminal output included Markdown and an emoji combo, here that's rendered. One of the most fascinating facts about pelicans is their unique throat pouch, called a gular sac, which can hold up to 3 gallons (11 liters) of water—three times more than their stomach! Here’s why it’s amazing: Fishing Tool: They use it like a net to scoop up fish, then drain the water before swallowing. Cooling Mechanism: On hot days, pelicans flutter the pouch to stay cool by evaporating water. Built-in "Shopping Cart": Some species even use it to carry food back to their chicks. Bonus fact: Pelicans often fish cooperatively, herding fish into shallow water for an easy catch. Would you like more cool pelican facts? 🐦🌊 In putting this post together I got Claude to build me this new tool for finding the total on-disk size of a Hugging Face repository, which is available in their API but not currently displayed on their website. Update: Here's a notable independent benchmark from Paul Gauthier: DeepSeek's new V3 scored 55% on aider's polyglot benchmark, significantly improving over the prior version. It's the #2 non-thinking/reasoning model, behind only Sonnet 3.7. V3 is competitive with thinking models like R1 & o3-mini. Tags: llm-release, hugging-face, generative-ai, deepseek, ai, llms, mlx, llm, ai-assisted-programming, tools, pelican-riding-a-bicycle  ( 2 min )
  • Open

    euporie
    Jupyter notebooks in the terminal.  ( 4 min )
    fm
    A minimalistic file manager for the terminal.  ( 4 min )
    git-who
    Git blame for file trees.  ( 4 min )
    nping
    A TUI concurrent ping tool developed in Rust.  ( 4 min )
    senpai
    Your everyday IRC student.  ( 4 min )
    tasktimer
    A dead simple TUI task timer.  ( 4 min )
  • Open

    Node gets the URLPattern API
    #​571 — March 25, 2025 Read on the Web Node.js TSC Votes to Stop Distributing Corepack — Corepack was introduced as an (experimental) tool bundled with Node to help with managing versions of your package managers. Corepack will live on as a separately installable tool, but will be phased out from future Node releases following a recent TSC vote. Sarah Gooding New URLPattern API Brings Improved Pattern Matching to Node — The Cloudflare Workers team has implemented the URLPattern API in the Ada URL parser, used by both Node.js and Cloudflare Workers. The API lets you take patterns like /blog/:year/:month/:slug and test whether URLs match against them. If you’re using Node 23.8+, you can start using it today. Nizipli, Snell, Lemire (Cloudflare) Secur…  ( 3 min )
  • Open

    Making the move to UI3: A guide to Figma’s next chapter
    On April 30, we’ll be fully transitioning to UI3, our redesigned interface that puts your work center stage. Here’s what you need to know about the change, along with tips for a smooth transition.  ( 35 min )
  • Open

    Book Notes: “The Order of Time” by Carlo Rovelli
    I recently finished Carlo Rovelli’s book “The Order of Time” and, of course, had a few web-adjacent thoughts come to mind. Who says lessons from physics can’t be applied to making software? (I know, nobody is actually dying on that hill.) A Weakness of Being Data-Driven Being data-driven is the most scientific way of building products? Hold that thought: The ability to understand something before it’s observed is at the heart of scientific thinking. If you can only imagine that which you can observe, understand, and measure, you’re limiting yourself. If you can only believe that which you can observe, then you’ll only ever understand that which you can see. Abstract thought can anticipate by centuries hypotheses that find use — or confirmation — in scientific inquiry. Beware the Prejudic…  ( 2 min )
  • Open

    Getting ready for WeAreDevelopers WebDev & AI Day – 27/03/2025
    On Thursday this week I will be in Vienna to moderate the WeAreDevelopers WebDev & AI Day and I am chuffed to bits that I managed to get such an amazing line-up together! The event is an online event and you can follow on your computer. It starts at 16:00 and ends at 20:30. Tickets […]
  • Open

    YouTube TV, Wiz, and Why Monopolies Buy Innovation
    Google could aggregate TV, but it might not have the product capability; that's a convoluted way of explaining why buying Wiz is a good idea
  • Open

    The environmental impact of the web we build
    One of the things that’s difficult for me to resolve in my head is the the conflict between three things… I absolutely love the web. I care deeply about climate change. The web has been a massive driver of climate change. Today, I wanted to talk briefly about we, as people who build things for the web, can do to reduce our environmental impact. Special thanks to Hidde de Vries and Thomas Broyer, whose exchange on Bluesky inspired today’s post.  ( 15 min )
  • Open

    Support Logical Shorthands in CSS
    There’s a bit of a blind spot when working with CSS logical properties concerning shorthands. Support Logical Shorthands in CSS originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
  • Open

    Animating Letters with Shaders: Interactive Text Effect with Three.js & GLSL
    A beginner-friendly tutorial that explores how to create a dynamic text displacement effect using Three.js and custom shaders.

  • Open

    Big endian and little endian
    Every time I run into endianness, I have to look it up. Which way do the bytes go, and what does that mean? Something about it breaks my brain, and makes me feel like I can't tell which way is up and down, left and right. This is the blog post I've needed every time I run into this. I hope it'll be the post you need, too. What is endianness? The term comes from Gulliver's travels, referring to a conflict over cracking boiled eggs on the big end or the little end[1]. In computers, the term refers to the order of bytes within a segment of data, or a word. Specifically, it only refers to the order of bytes, as those are the smallest unit of addressable data: bits are not individually addressable. The two main orderings are big-endian and little-endian. Big-endian means you store the "big" end…  ( 5 min )
  • Open

    Statistically, When Will My Baby Be Born?
    A tiny tool to calculate when your baby might arrive  ( 13 min )
  • Open

    Semantic Diffusion
    Semantic Diffusion learned about this term today while complaining about how the definition of "vibe coding" is already being distorted to mean "any time an LLM writes code" as opposed to the intended meaning of "code I wrote with an LLM without even reviewing what it wrote". I posted this salty note: Feels like I'm losing the battle on this one, I keep seeing people use "vibe coding" to mean any time an LLM is used to write code I'm particularly frustrated because for a few glorious moments we had the chance at having ONE piece of AI-related terminology with a clear, widely accepted definition! But it turns out people couldn't be trusted to read all the way to the end of Andrej's tweet, so now we are back to yet another term where different people assume it means different things Martin Fowler coined Semantic Diffusion in 2006 with this very clear definition: Semantic diffusion occurs when you have a word that is coined by a person or group, often with a pretty good definition, but then gets spread through the wider community in a way that weakens that definition. This weakening risks losing the definition entirely - and with it any usefulness to the term. What's happening with vibe coding right now is such a clear example of this effect in action! I've seen the same thing happen to my own coinage prompt injection over the past couple of years. This kind of dillution of meaning is frustrating, but does appear to be inevitable. As Martin Fowler points out it's most likely to happen to popular terms - the more popular a term is the higher the chance a game of telephone will ensue where misunderstandings flourish as the chain continues to grow. Andrej Karpathy, who coined vibe coding, posted this just now in reply to my article: Good post! It will take some time to settle on definitions. Personally I use "vibe coding" when I feel like this dog. My iOS app last night being a good example. But I find that in practice I rarely go full out vibe coding, and more often I still look at the code, I add complexity slowly and I try to learn over time how the pieces work, to ask clarifying questions etc. I love that vibe coding has an official illustrative GIF now! Tags: language, vibe-coding, andrej-karpathy, martin-fowler  ( 2 min )
    Next.js and the corrupt middleware: the authorizing artifact
    Next.js and the corrupt middleware: the authorizing artifact CVE-2025-29927 by Allam Rachid, one of the researchers who identified the issue. The vulnerability is best illustrated by this code snippet: const subreq = params.request.headers['x-middleware-subrequest']; const subrequests = typeof subreq === 'string' ? subreq.split(':') : []; // ... for (const middleware of this.middleware || []) { // ... if (subrequests.includes(middlewareInfo.name)) { result = { response: NextResponse.next(), waitUntil: Promise.resolve(), }; continue; } } This was part of Next.js internals used to help avoid applying middleware recursively to requests that are re-dispatched through the framework. Unfortunately it also meant that attackers could send a x-middleware-subrequest HTTP header with a colon-separated list of middleware names to skip. If a site used middleware to apply an authentication gate (as suggested in the Next.js documentation) an attacker could bypass that authentication using this trick. The vulnerability has been fixed in Next.js 15.2.3 - here's the official release announcement talking about the problem. Tags: security, javascript  ( 1 min )
  • Open

    AI is useless, but it is our best bet for the future
    I used AI with success 5 minutes ago. Just five minutes ago, I was writing a piece of software and relied on AI for assistance. Yet, here I am, starting this blog post by telling you that artificial intelligence, so far, has proven somewhat useless. How can I make such a statement if AI was just so helpful a moment ago? Actually, there's no contradiction here if we clarify exactly what we mean. Here’s the thing: at this very moment, artificial intelligence can support me significantly. If I'm struggling with complicated code or need to understand an advanced scientific paper on math, I can turn to AI for clarity. It can help me generate an image for a project, make a translation, clean my YouTube transcript. Clearly, it’s practical and beneficial in these everyday tasks. However, except…  ( 3 min )

  • Open

    Quoting Jacob Kaplan-Moss
    If you’re new to tech, taking [career] advice on what works for someone with a 20-year career is likely to be about as effective as taking career advice from a stockbroker or firefighter or nurse. There’ll be a few things that generalize, but most advice won’t. Further, even advice people with long careers on what worked for them when they were getting started is unlikely to be advice that works today. The tech industry of 15 or 20 years ago was, again, dramatically different from tech today. — Jacob Kaplan-Moss, Beware tech career advice from old heads Tags: jacob-kaplan-moss, careers  ( 1 min )
    simonw/ollama-models-atom-feed
    simonw/ollama-models-atom-feed latest models page - Ollama remains one of the easiest ways to run models on a laptop so a new model release from them is worth hearing about. I built the scraper by pasting example HTML into Claude and asking for a Python script to convert it to Atom - here's the script we wrote together. Tags: github-actions, git-scraping, ai, ollama, llms, ai-assisted-programming, generative-ai, projects, github, claude, atom  ( 1 min )
  • Open

    A Few Thoughts on Customizable Form Controls
    Web developers have been waiting years for traction in styling HTML form controls. Is it possible the day has come? Here’s Jen Simmons on Mastodon: My team is working on a solution — you’ll apply appearance: base and switch to a new interoperable, consistent controls with easy to override default CSS. They inherit much more of what you already have going on. And then you can override (even more of) those styles using new pseudo-elements. If you want the details, check out the working draft. It’s pretty cool what they’ve come up with, especially in the face of what is undoubtedly a Herculean task to balance developer desire against user preference while preserving accessibility standards. I applaud all involved 👏 That said, I have thoughts. Not new ones. I’ve voiced them before. And I’ll …  ( 2 min )
  • Open

    BRA and KET: String Interpolation in AmigaDOS
    Exploring the unnecessary, part 3735928559
  • Open

    What if money didn't exist?
    One of my favorite book series is the Monk & Robot series by Becky Chambers. It’s set in a future where (like now) there’s enough food to feed everyone and enough housing to house everyone. But unlike now, everyone actually has what they need, and things are built to last. The book explores a lot of really interesting themes, like… Finding meaning in the world. Feeling burnt out or dissatisfied.  ( 16 min )
  • Open

    Motion Highlights #3
    Fresh animation ideas and motion design trends to fuel your inspiration.  ( 3 min )

  • Open

    Podcast: Мир стал строго лучше @ Думаем дальше
    С Ильей Бирманом обсуждаем, как меньше критиковать, и — разумеется — критикуем Эпл изо всех сил.  ( 18 min )
  • Open

    The "think" tool: Enabling Claude to stop and think in complex tool use situations
    The "think" tool: Enabling Claude to stop and think in complex tool use situations { "name": "think", "description": "Use the tool to think about something. It will not obtain new information or change the database, but just append the thought to the log. Use it when complex reasoning or some cache memory is needed.", "input_schema": { "type": "object", "properties": { "thought": { "type": "string", "description": "A thought to think about." } }, "required": ["thought"] } } This tool does nothing at all. LLM tools (like web_search) usually involve some kind of implementation - the model requests a tool execution, then an external harness goes away and executes the specified tool and feeds the result back into the conversation. The "think" tool is a no-op - there is no implementation, it just allows the model to use its existing training in terms of when-to-use-a-tool to stop and dump some additional thoughts into the context. This works completely independently of the new "thinking" mechanism introduced in Claude 3.7 Sonnet. Anthropic's benchmarks show impressive improvements from enabling this tool. I fully anticipate that models from other providers would benefit from the same trick. Via @alexalbert__ Tags: prompt-engineering, anthropic, claude, generative-ai, ai, llms, llm-tool-use  ( 1 min )
    Anthropic Trust Center: Brave Search added as a subprocessor
    Anthropic Trust Center: Brave Search added as a subprocessor trying to figure out if Anthropic has rolled their own search index for Claude's new web search feature or if they were working with a partner. Here's confirmation that they are using Brave Search: Anthropic's subprocessor list. As of March 19, 2025, we have made the following changes: Subprocessors added: Brave Search (more info) That "more info" links to the help page for their new web search feature. I confirmed this myself by prompting Claude to "Search for pelican facts" - it ran a search for "Interesting pelican facts" and the ten results it showed as citations were an exact match for that search on Brave. And further evidence: if you poke at it a bit Claude will reveal the definition of its web_search function which looks like this - note the BraveSearchParams property: { "description": "Search the web", "name": "web_search", "parameters": { "additionalProperties": false, "properties": { "query": { "description": "Search query", "title": "Query", "type": "string" } }, "required": [ "query" ], "title": "BraveSearchParams", "type": "object" } } Via @zugaldia.bsky.social Tags: anthropic, claude, generative-ai, llm-tool-use, search, ai, llms  ( 1 min )
  • Open

    Can you nest Web Components inside each other?
    A few weeks ago on my YouTube channel, a viewer asked… Can you nest Web Components inside each other? The tl;dr (or tl;dw, I suppose) is yes, you can! It’s an approach I use often. I put together a video walking through the two different approaches I use. The two approaches are… HTML Web Components with completely separate functionality. Splitting up the functionality of a Web Component into several smaller, interconnected micro-components.  ( 13 min )
  • Open

    ‘Little Beasts’ Is a First-of-Its-Kind Museum Collaboration Reveling in Art and the Natural World
    In major cities like Antwerp, artists created detailed drawings, prints, and paintings of "beestjes" — "little beasts" in Dutch. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article ‘Little Beasts’ Is a First-of-Its-Kind Museum Collaboration Reveling in Art and the Natural World appeared first on Colossal.  ( 14 min )
  • Open

    Revisiting CSS border-image
    I’ve used border-image regularly. Yet, it remains one of the most underused CSS tools, and I can’t, for the life of me, figure out why. Is it possible that people steer clear of border-image because its syntax is awkward and unintuitive? Perhaps it’s because most explanations don’t solve the type of creative implementation problems that most people need to solve. Most likely, it’s both. Revisiting CSS border-image originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.  ( 14 min )
  • Open

    Designer Spotlight: Huy Phan
    Award-winning designer Huy Phan shares his journey, creative philosophy, and the stories behind his most impactful digital experiences.  ( 8 min )
  • Open

    Previewing Content Changes In Your Work With document.designMode
    You probably already know that you can use developer tools in your browser to make on-the-spot changes to a webpage — simply click the node in the Inspector and make your edits. But have you tried `document.designMode`? Victor Ayomipo explains how it can be used to preview content changes and demonstrates several use cases where it comes in handy for everything from basic content editing to improving team collaboration.  ( 13 min )

  • Open

    The Rsdoctor will see you now
    #​728 — March 21, 2025 Read on the Web JavaScript Weekly Rsdoctor 1.0: An Analyzer for Rspack and Webpack — A one-stop, intelligent build analyzer making it easier to identify bottlenecks and optimize performance. It’s part of the same family of tools as Rspack (a Rust-powered web bundler) but is fully webpack compatible. If you’ve ever asked why your build times are too long, this is for you. ByteDance Inc. 💡 In other Rust-powered JavaScript tooling news, the Oxlint JavaScript linter is now in beta. Imagine ESLint, but it runs in seconds on large codebases (indeed, it can process Microsoft's VS Code repo in under a second). Add Excel-like Spreadsheet Functionality to Your JavaScript Apps — SpreadJS is the industry-leading JavaScript spread…  ( 4 min )
  • Open

    Daniel Maslan
    Daniel Maslan is a designer, developer, and indie hacker with a background in architecture. He currently works as a design engineer at Wild.  ( 4 min )
  • Open

    New audio models from OpenAI, but how much can we rely on them?
    OpenAI announced several new audio-related API features today, for both text-to-speech and speech-to-text. They're very promising new models, but they appear to suffer from the ever-present risk of accidental (or malicious) instruction following. gpt-4o-mini-tts gpt-4o-mini-tts is a brand new text-to-speech model with "better steerability". OpenAI released a delightful new playground interface for this at OpenAI.fm - you can pick from 11 base voices, apply instructions like "High-energy, eccentric, and slightly unhinged" and get it to read out a script (with optional extra stage directions in parenthesis). It can then provide the equivalent API code in Python, JavaScript or curl. You can share links to your experiments, here's an example. Note how part of my script there looks like this: (Whisper this bit:) Footsteps echoed behind her, slow and deliberate. She turned, heart racing, but saw only shadows. While fun and convenient, the fact that you can insert stage directions in the script itself feels like an anti-pattern to me - it means you can't safely use this for arbitrary text because there's a risk that some of that text may accidentally be treated as further instructions to the model. In my own experiments I've already seen this happen: sometimes the model follows my "Whisper this bit" instruction correctly, other times it says the word "Whisper" out loud but doesn't speak the words "this bit". The results appear non-deterministic, and might also vary with different base voices. gpt-4o-mini-tts costs $0.60/million tokens, which OpenAI estimate as around 1.5 cents per minute. gpt-4o-transcribe and gpt-4o-mini-transcribe gpt-4o-transcribe and gpt-4o-mini-transcribe are two new speech-to-text models, serving a similar purpose to whisper but built on top of GPT-4o and setting a "new state-of-the-art benchmark". These can be used via OpenAI's v1/audio/transcriptions API, as alternative options to `whisper-1. The API is still restricted to a 25MB audio file (MP3, WAV or several other formats). Any time an LLM-based model is used for audio transcription (or OCR) I worry about accidental instruction following - is there a risk that content that looks like an instruction in the spoken or scanned text might not be included in the resulting transcript? In a comment on Hacker News OpenAI's Jeff Harris said this, regarding how these new models differ from gpt-4o-audio-preview: It's a slightly better model for TTS. With extra training focusing on reading the script exactly as written. e.g. the audio-preview model when given instruction to speak "What is the capital of Italy" would often speak "Rome". This model should be much better in that regard "much better in that regard" sounds to me like there's still a risk of this occurring, so for some sensitive applications it may make sense to stick with whisper or other traditional text-to-speech approaches. On Twitter Jeff added: yep fidelity to transcript is the big chunk of work to turn an audio model into TTS model. still possible, but should be quite rare gpt-4o-transcribe is an estimated 0.6 cents per minute, and gpt-4o-mini-transcribe is 0.3 cents per minute. Mixing data and instructions remains the cardinal sin of LLMs If these problems look familiar to you that's because they are variants of the root cause behind prompt injection. LLM architectures encourage mixing instructions and data in the same stream of tokens, but that means there are always risks that tokens from data (which often comes from untrusted sources) may be misinterpreted as instructions to the model. How much of an impact this has on the utility of these new models remains to be seen. Maybe the new training is so robust that these issues won't actually cause problems for real-world applications? I remain skeptical. I expect we'll see demos of these flaws in action in relatively short order. Tags: audio, text-to-speech, ai, openai, prompt-injection, generative-ai, whisper, llms, multi-modal-output, llm-release  ( 3 min )
    Claude can now search the web
    Claude can now search the web This was sorely needed. ChatGPT, Gemini and Grok all had this ability already, and despite Anthropic's excellent model quality it was one of the big remaining reasons to keep other models in daily rotation. For the moment this is purely a product feature - it's available through their consumer applications but there's no indication of whether or not it will be coming to the Anthropic API. OpenAI launched the latest version of web search in their API last week. Surprisingly there are no details on how it works under the hood. Is this a partnership with someone like Bing, or is it Anthropic's own proprietary index populated by their own crawlers? I think it may be their own infrastructure, but I've been unable to confirm that. Update: it's confirmed as Brave Search. Their support site offers some inconclusive hints. Does Anthropic crawl data from the web, and how can site owners block the crawler? talks about their ClaudeBot crawler but the language indicates it's used for training data, with no mention of a web search index. Blocking and Removing Content from Claude looks a little more relevant, and has a heading "Blocking or removing websites from Claude web search" which includes this eyebrow-raising tip: Removing content from your site is the best way to ensure that it won't appear in Claude outputs when Claude searches the web. And then this bit, which does mention "our partners": The noindex robots meta tag is a rule that tells our partners not to index your content so that they don’t send it to us in response to your web search query. Your content can still be linked to and visited through other web pages, or directly visited by users with a link, but the content will not appear in Claude outputs that use web search. Both of those documents were last updated "over a week ago", so it's not clear to me if they reflect the new state of the world given today's feature launch or not. I got this delightful response trying out Claude search where it mistook my recent Squadron automata for a software project: Tags: anthropic, claude, generative-ai, llm-tool-use, ai, llms  ( 2 min )
    Quoting Peter Bhat Harkins
    I’ve disabled the pending geoblock of the UK because I now think the risks of the Online Safety Act to this site are low enough to change strategies to only geoblock if directly threatened by the regulator. [...] It is not possible for a hobby site to comply with the Online Safety Act. The OSA is written to censor huge commercial sites with professional legal teams, and even understanding one's obligations under the regulations is an enormous project requiring expensive legal advice. The law is 250 pages and the mandatory "guidance" from Ofcom is more than 3,000 pages of dense, cross-referenced UK-flavoured legalese. To find all the guidance you'll have to start here, click through to each of the 36 pages listed, and expand each page's collapsible sections that might have links to other pages and documents. (Though I can't be sure that leads to all their guidance, and note you'll have to check back regularly for planned updates.) — Peter Bhat Harkins, site administrator, lobste.rs Tags: politics, uk, moderation  ( 1 min )
  • Open

    Proving Binaries
    Heydon Pickering has an intriguing video dealing with the question: “Why is everything binary?” The gist of the video, to me, distills to this insight: The idea that [everything] belongs to one of two archetypes is seductive in its simplicity, so we base everything that we do and make on this false premise. That rings true to me. I tend to believe binary thinking is so prevalent because it’s the intellectual path of least resistance and we humans love to lazy. The fact is, as I’m sure any professional with any experience in any field will tell you, answers are always full of nuance and best explained with the statement “it depends”. The answers we’re all looking for are not found exclusively in one of two binary values, but in the contrast between them. In other words, when you test the a…  ( 1 min )
  • Open

    Thinking aloud and oversharing
    Lately, I’ve been thinking about communication differences between people with ADHD or AuDHD and neurotypical folks… I think aloud. Talking through my thoughts and feelings is how I process them. I mean what I say. There’s rarely any hidden pretense or subtext. You get what’s on the label. I learn by asking questions. I like to confirm that my understanding is correct, and probe for edge cases where it might not be.  ( 15 min )
  • Open

    Robert Peterson Summons Black Resilience and Tenderness in Vibrant Portraits
    Peterson’s striking oil paintings invite us into emotionally complex inner worlds. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Robert Peterson Summons Black Resilience and Tenderness in Vibrant Portraits appeared first on Colossal.  ( 12 min )
  • Open

    Quick Reminder That :is() and :where() Are Basically the Same With One Key Difference
    I’ve seen a handful of recent posts talking about the utility of the :is() relational pseudo-selector. No need to delve into the details other than to say it can help make compound selectors a lot more readable. :is(section, article, aside, … Quick Reminder That :is() and :where() Are Basically the Same With One Key Difference originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.  ( 7 min )
  • Open

    An Interview with OpenAI CEO Sam Altman About Building a Consumer Tech Company
    An interview with OpenAI CEO Sam Altman about building OpenAI and ChatGPT, and what it means to be an accidental consumer tech company.  ( 46 min )
  • Open

    Developer Spotlight: Jean Mazouni
    In this spotlight, Jean Mazouni showcases some of his favorite freelance work as a web developer and shares his passion for WebGL technologies.  ( 5 min )

  • Open

    Calling a wrap on my weeknotes
    After 192 posts that ranged from weekly to roughly once-a-month, I've decided to call a wrap on my weeknotes habit. The original goal was to stay transparent during my 2019-2020 JSK fellowship, and I kept them up after that as an accountability mechanism and to get into a habit of writing regularly. Over the past two years I've adopted new posting habits which are solving those problems in other ways: I post something here almost every day. I actually maintained a daily posting streak throughout 2024, which I ended in January, but I'm still posting most days and plan to keep that up. Every time I ship a new release of one of my projects I link to it from here. This replaces the "recent releases" section of my weeknotes. I try to have a longer form piece of writing that's suitable for inclusion in my newsletter at least once every two weeks. That's another accountability mechanism that's working well for me. One downside of weeknotes is that I'd sometimes save something to include in them, which could lead to several items getting bundled together in a way that reduced their potential impact as standalone posts. I got to the point with weeknotes where I was feeling guilty about not keeping them up. Given the volume of content I'm publishing already that felt like a sign that they were no longer providing the value they once did! I still think weeknotes are an excellent habit for anyone who wants to write more frequently and be more transparent about their work. It feels healthy to be able to end a habit that's finished serving its purpose. Tags: blogging, weeknotes, streaks  ( 2 min )
    OpenAI platform: o1-pro
    OpenAI platform: o1-pro Aside from that it has mostly the same features as o1: a 200,000 token context window, 100,000 max output tokens, Sep 30 2023 knowledge cut-off date and it supports function calling, structured outputs and image inputs. o1-pro doesn't support streaming, and most significantly for developers is the first OpenAI model to only be available via their new Responses API. This means tools that are built against their Chat Completions API (like my own LLM) have to do a whole lot more work to support the new model - my issue for that is here. Since LLM doesn't support this new model yet I had to make do with curl: curl https://api.openai.com/v1/responses \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(llm keys get openai)" \ -d '{ "model": "o1-pro", "input": "Generate an SVG of a pelican riding a bicycle" }' Here's the full JSON I got back - 81 input tokens and 1552 output tokens for a total cost of 94.335 cents. I took a risk and added "reasoning": {"effort": "high"} to see if I could get a better pelican with more reasoning: curl https://api.openai.com/v1/responses \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(llm keys get openai)" \ -d '{ "model": "o1-pro", "input": "Generate an SVG of a pelican riding a bicycle", "reasoning": {"effort": "high"} }' Surprisingly that used less output tokens - 1459 compared to 1552 earlier (cost: 88.755 cents) - producing this JSON which rendered as a slightly better pelican: It was cheaper because while it spent 960 reasoning tokens as opposed to 704 for the previous pelican it omitted the explanatory text around the SVG, saving on total output. Tags: o1, llm, openai, inference-scaling, ai, llms, llm-release, generative-ai, pelican-riding-a-bicycle, llm-pricing  ( 2 min )
    Not all AI-assisted programming is vibe coding (but vibe coding rocks)
    Vibe coding is having a moment. The term was coined by Andrej Karpathy just a few weeks ago (on February 6th) and has since been featured in the New York Times, Ars Technica, the Guardian and countless online discussions. I'm concerned that the definition is already escaping its original intent. I'm seeing people apply the term "vibe coding" to all forms of code written with the assistance of AI. I think that both dilutes the term and gives a false impression of what's possible with responsible AI-assisted programming. Vibe coding is not the same thing as writing code with the help of LLMs! To quote Andrej's original tweet in full (with my emphasis added): There's a new kind of coding I call "vibe coding", where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. It's possible because the LLMs (e.g. Cursor Composer w Sonnet) are getting too good. Also I just talk to Composer with SuperWhisper so I barely even touch the keyboard. I ask for the dumbest things like "decrease the padding on the sidebar by half" because I'm too lazy to find it. I "Accept All" always, I don't read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it. The code grows beyond my usual comprehension, I'd have to really read through it for a while. Sometimes the LLMs can't fix a bug so I just work around it or ask for random changes until it goes away. It's not too bad for throwaway weekend projects, but still quite amusing. I'm building a project or webapp, but it's not really coding - I just see stuff, say stuff, run stuff, and copy paste stuff, and it mostly works. I love this definition. Andrej is an extremely talented and experienced programmer - he has no need for AI assistance at all. He's using LLMs like this because it's fun to try out wild new ideas, and the speed at which an LLM can produce code is an order of magnitude faster than even the most skilled human programmers. For low stakes projects and prototypes why not just let it rip? When I talk about vibe coding I mean building software with an LLM without reviewing the code it writes. Using LLMs for code responsibly is not vibe coding Let's contrast this "forget that the code even exists" approach to how professional software developers use LLMs. The job of a software developer is not (just) to churn out code and features. We need to create code that demonstrably works, and can be understood by other humans (and machines), and that will support continued development in the future. We need to consider performance, accessibility, security, maintainability, cost efficiency. Software engineering is all about trade-offs - our job is to pick from dozens of potential solutions by balancing all manner of requirements, both explicit and implied. We also need to read the code. My golden rule for production-quality AI-assisted programming is that I won't commit any code to my repository if I couldn't explain exactly what it does to somebody else. If an LLM wrote the code for you, and you then reviewed it, tested it thoroughly and made sure you could explain how it works to someone else that's not vibe coding, it's software development. The usage of an LLM to support that activity is immaterial. I wrote extensively about my own process in Here’s how I use LLMs to help me write code. Vibe coding only describes a small subset of my approach. Let's not lose track of what makes vibe coding special I don't want "vibe coding" to become a negative term that's synonymous with irresponsible AI-assisted programming either. This weird new shape of programming has so much to offer the world! I believe everyone deserves the ability to automate tedious tasks in their lives with computers. You shouldn't need a computer science degree or programming bootcamp in order to get computers to do extremely specific tasks for you. If vibe coding grants millions of new people the ability to build their own custom tools, I could not be happier about it. Some of those people will get bitten by the programming bug and go on to become proficient software developers. One of the biggest barriers to that profession is the incredibly steep initial learning curve - vibe coding shaves that initial barrier down to almost flat. Vibe coding also has a ton to offer experienced developers. I've talked before about how using LLMs for code is difficult - figuring out what does and doesn't work is a case of building intuition over time, and there are plenty of hidden sharp edges and traps along the way. I think vibe coding is the best tool we have to help experienced developers build that intuition as to what LLMs can and cannot do for them. I've published more than 80 experiments I built with vibe coding and I've learned so much along the way. I would encourage any other developer, no matter their skill level, to try the same. When is it OK to vibe code? If you're an experienced engineer this is likely obvious to you already, so I'm writing this section for people who are just getting started building software. Projects should be low stakes. Think about how much harm the code you are writing could cause if it has bugs or security vulnerabilities. Could somebody be harmed - damaged reputation, lost money or something worse? This is particularly important if you plan to build software that will be used by other people! Consider security. This is a really difficult one - security is a huge topic. Some high level notes: Watch out for secrets - anything that looks similar in shape to a password, such as the API key used to access an online tool. If your code involves secrets you need to take care not to accidentally expose them, which means you need to understand how the code works! Think about data privacy. If you are building a tool that has access to private data - anything you wouldn't want to display to the world in a screen-sharing session - approach with caution. It's possible to vibe code personal tools that you paste private information into but you need to be very sure you understand if there are ways that data might leave your machine. Be a good network citizen. Anything that makes requests out to other platforms could increase the load (and hence the cost) on those services. This is a reason I like Claude Artifacts - their sandbox prevents accidents from causing harm elsewhere. Is your money on the line? I've seen horror stories about people who vibe coded a feature against some API without a billing limit and racked up thousands of dollars in charges. Be very careful about using vibe coding against anything that's charged based on usage. If you're going to vibe code anything that might be used by other people, I recommend checking in with someone more experienced for a vibe check (hah) before you share it with the world. How do we make vibe coding better? I think there are some fascinating software design challenges to be solved here. Safe vibe coding for complete beginners starts with a sandbox. Claude Artifacts was one of the first widely available vibe coding platforms and their approach to sandboxing is fantastic: code is restricted to running in a locked down <iframe>, can load only approved libraries and can't make any network requests to other sites. This makes it very difficult for people to mess up and cause any harm with their projects. It also greatly limits what those projects can do - you can't use a Claude Artifact project to access data from external APIs for example, or even to build software that runs your own prompts against an LLM. Other popular vibe coding tools like Cursor (which was initially intended for professional developers) have far less safety rails. There's plenty of room for innovation in this space. I'm hoping to see a cambrian explosion in tooling to help people build their own custom tools as productively and safely as possible. Go forth and vibe code I really don't want to discourage people who are new to software from trying out vibe coding. The best way to learn anything is to build a project! For experienced programmers this is an amazing way to start developing an intuition for what LLMs can and can't do. For beginners there's no better way to open your eyes to what's possible to achieve with code itself. But please, don't confuse vibe coding with all other uses of LLMs for code. Tags: sandboxing, ai, generative-ai, llms, ai-assisted-programming, vibe-coding  ( 6 min )
  • Open

    Pierre Nel
    Pierre Nel is a designer and developer who bridges creative technology and contemporary web design. Based in Cape Town after several years in London's agency …  ( 5 min )
  • Open

    A Visit to Amy Sherald’s Studio Revels in Her Commitment to Beauty
    “I say figuration is like the soul food of art making. It’s what takes you back home and what you eat when you need comfort." Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article A Visit to Amy Sherald’s Studio Revels in Her Commitment to Beauty appeared first on Colossal.  ( 12 min )
    Resketch Upcycles Misprints and Unwanted Paper into Reclaimed Notebooks
    Flipping through a Resketch notebook is an act of discovery as old calendars or bureaucratic forms are tucked between graphs and lines. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Resketch Upcycles Misprints and Unwanted Paper into Reclaimed Notebooks appeared first on Colossal.  ( 12 min )
    Vintage Postcard Paintings by David Opdyke Demonstrate an Ecological Future in Peril
    Opdyke invokes the nostalgia of landscape postcards to interrogate the climate crisis within the context of American politics and geographies. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Vintage Postcard Paintings by David Opdyke Demonstrate an Ecological Future in Peril appeared first on Colossal.  ( 13 min )
  • Open

    Can I Use for accessibility
    Accessibility Support is a web tool that’s a lot like Can I Use, but for accessibility features. For any particular web platform feature (HTML elements, attributes, and so on), it details what the accessibility expectations are, and how well various browser and screen reader combinations meet those expectations. It even includes details on how things were tested, what the expectations are, when it was last updated, and more. What a fantastic resource!  ( 13 min )
  • Open

    Enshittification as a matter of taste
    “Enshittification” is a termed coined by Cory Doctorow in 2023 to describe a pattern of decreasing quality observed in online services and products. Since Doctorow’s post, there’s been no shortage of think pieces on enshittification and its role in our society and to a large extent I agree with them all. I think it’s an inevitable problem that shows the splitting seams of Capitalism. If you will allow, I’d like to add a tangential thought – one slight embellishment – to this topic. To me, enshittification means that a person who lacks taste was put in a position of power. Everyone knows ads on the internet suck. But ads also pay bills and help keep the lights on in newsrooms. When a website adds one (privacy-preserving) ad to a website, I say “Okay”. Two, I permit it. Three, I say “Easy no…  ( 3 min )
  • Open

    Nvidia GTC and ASICs, The Power Constraint, The Pareto Frontier
    Jensen Huang's GTC keynote was a compelling argument in favor of Nvidia's position relative to ASICs when it comes to inference.  ( 13 min )
  • Open

    StringTune: The JavaScript Library Born from a Design Agency’s Workflow
    Learn how to use this flexible JavaScript library for animations, smooth scrolling, and interactive effects.  ( 8 min )

  • Open

    My Thoughts on the Future of "AI"
    My Thoughts on the Future of "AI" He presents compelling, detailed arguments for both ends of the spectrum - his key message is that it's best to maintain very wide error bars for what might happen next: I wouldn't be surprised if, in three to five years, language models are capable of performing most (all?) cognitive economically-useful tasks beyond the level of human experts. And I also wouldn't be surprised if, in five years, the best models we have are better than the ones we have today, but only in “normal” ways where costs continue to decrease considerably and capabilities continue to get better but there's no fundamental paradigm shift that upends the world order. To deny the potential for either of these possibilities seems to me to be a mistake. If LLMs do hit a wall, it's not at all clear what that wall might be: I still believe there is something fundamental that will get in the way of our ability to build LLMs that grow exponentially in capability. But I will freely admit to you now that I have no earthly idea what that limitation will be. I have no evidence that this line exists, other than to make some form of vague argument that when you try and scale something across many orders of magnitude, you'll probably run into problems you didn't see coming. There's lots of great stuff in here. I particularly liked this explanation of how you get R1: You take DeepSeek v3, and ask it to solve a bunch of hard problems, and when it gets the answers right, you train it to do more of that and less of whatever it did when it got the answers wrong. The idea here is actually really simple, and it works surprisingly well. Tags: generative-ai, deepseek, nicholas-carlini, ai, llms  ( 2 min )
    Quoting David L. Poole and Alan K. Mackworth
    An agent is something that acts in an environment; it does something. Agents include worms, dogs, thermostats, airplanes, robots, humans, companies, and countries. — David L. Poole and Alan K. Mackworth, Artificial Intelligence: Foundations of Computational Agents Tags: ai-agents, ai  ( 1 min )
    Building and deploying a custom site using GitHub Actions and GitHub Pages
    Building and deploying a custom site using GitHub Actions and GitHub Pages the example into a template repository, which should make getting started for a new project extremely quick. I've needed this for various projects over the years, but today I finally put these notes together while setting up a system for scraping the iNaturalist API for recent sightings of the California Brown Pelican and converting those into an Atom feed that I can subscribe to in NetNewsWire: I got Claude to write me the script that converts the scraped JSON to atom. Update: I just found out iNaturalist have their own atom feeds! Here's their own feed of recent Pelican observations. Tags: github-actions, ai-assisted-programming, github, git-scraping, atom, netnewswire, inaturalist  ( 1 min )
  • Open

    Are breadcrumbs 'dead' in web design?
    🚀 Frontend Focus #​684 — March 19, 2025 | Read on the web Image via Frontend Masters Boost A Deep Dive into the Inline Background Overlap Problem — If you want to get a semi-transparent background behind some inline text with nice padding you’ll likely face an overlap problem. Ana goes deep into exploring the solution along with some of the more complex variations of the issue that we could face. Ana Tudor Introducing command and commandfor — Chrome 135 (and preview versions of Firefox and Safari) add support for two new HTML attributes, command and commandfor. They’re for adding declarative actions to HTML buttons without directly requiring JavaScript. Keith Cirkel New: Secure In-Person Payments for Mobile Apps — Square…  ( 4 min )
  • Open

    How teams tap into the power of design with Figma Slides
    Today, we’re announcing new features in Figma Slides that unlock high-fidelity design and cross-functional collaboration.  ( 33 min )
  • Open

    Forget TypeScript, how about porting Doom to Go?
    #​546 — March 19, 2025 Unsub  |  Web Version Go Weekly Traversal-Resistant File APIs — Among the lesser known new features in recent versions of Go are some ways to improve file system security when end user input might have an impact on file paths your app tries to access, including os.Root, filepath.IsLocal, filepath.EvalSymLinks and filepath.Localize. A must read. Damien Neil Were Multiple Return Values a Mistake for Go? — An interesting technical post critiquing the effects of one of Go’s earliest design decisions. This is an area where opinions will differ strongly, but the author thinks Go sorely needs to support tuples. Mond 📅 Live Workshop: Build Production-Ready Apps with JavaScript & Go — Join Maximiliano Firtman next week (on…  ( 2 min )
  • Open

    Salvador Dominguez Confronts Identity and Labor Through Woven Pipe Cleaner Vessels
    Paying homage to a nostalgic vibrancy from his upbringing in southern California and Mexico, the artist's brilliant palettes serve as cultural markers. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Salvador Dominguez Confronts Identity and Labor Through Woven Pipe Cleaner Vessels appeared first on Colossal.  ( 13 min )
    Ocean Census Expeditions Discover More Than 800 New Marine Species
    Ocean Census has embarked on numerous expeditions with a sole aim: discovering new species in the "world's greatest frontier." Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Ocean Census Expeditions Discover More Than 800 New Marine Species appeared first on Colossal.  ( 13 min )
    Mandy Barker’s Cyanotypes Revive a Pioneering Botanist’s Book to Warn About Synthetic Debris
    In 2012, Barker mistook a moving piece of cloth in a rock pool for a piece of seaweed. It changed her life. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Mandy Barker’s Cyanotypes Revive a Pioneering Botanist’s Book to Warn About Synthetic Debris appeared first on Colossal.  ( 13 min )
  • Open

    What Can We Learn about Engineering and Innovation from Half a Century of the Game of Life Cellular Automaton?
    Metaengineering and Laws of Innovation Things are invented. Things are discovered. And somehow there’s an arc of progress that’s formed. But are there what amount to “laws of innovation” that govern that arc of progress? There are some exponential and other laws that purport to at least measure overall quantitative aspects of progress (number of […]  ( 52 min )
  • Open

    Scope Creep, 2025-03-18.
    Its borders are weird.  ( 9 min )
  • Open

    Reducing CSS complexity with the :is() pseudo-class
    Last week, I finally had a reason to use the newish :is() CSS pseudo-class, and wow is it glorious! Today, I want to show you how it can dramatically reduce selector complexity. Let’s dig in! What :is() does The :is() pseudo-class accepts a comma-separated list of selectors, and can be used to group them together. For example, these two selector strings do the same thing… h1, h2, h3, h4, h5, h6 { font-weight: bold; } :is(h1, h2, h3, h4, h5, h6) { font-weight: bold; } You’re probably look at this and thinking…  ( 15 min )
  • Open

    Intel’s New CEO, Reevaluating Gelsinger, Lip-Bu Tan and Cadence
    Intel's new CEO casts Pat Gelsinger's tenure and firing in a new light: was Intel's problem simply bad execution?  ( 13 min )
  • Open

    My Mother's Advice on How to be a Great YouTuber
    You can also watch it on YouTube. Below is the essay version of this video. It is not a transcript as it differs in the parts where a raw transcript would just be outright nonsense or clumsy as hell. Getting off on a weird start # How would you even start a video? How do you open the first real video in a series? This particular video took too takes before I arrived at something, so I just went with this one. It all made sense when I was planning this. Where people get their information # It’s the norm today for people to rely on video as their primary source of information. It doesn’t matter whether it’s TikTok, YouTube, or some other form of video. This is the medium of our age. Even people who do read for pleasure or for information, they quite often discover which books they want to re…  ( 10 min )
  • Open

    Building an Interactive Image Grid with Three.js
    In this tutorial, we'll create an interactive image grid using Three.js, covering setup, animations, and shaders.  ( 13 min )

  • Open

    httpstat
    Visualizes curl(1) statistics in a way of beauty and clarity.  ( 4 min )
    mani
    A CLI tool to help you manage multiple repositories.  ( 4 min )
    ncspot
    A cross-platform ncurses Spotify client.  ( 4 min )
    pet
    Simple command-line snippet manager.  ( 4 min )
    pqviewer
    View Apache Parquet Files In Your Terminal.  ( 4 min )
    sake
    A task runner for local and remote hosts.  ( 4 min )
  • Open

    Self Gap
    Thinking of a way to have a custom gap between some flex or grid items.  ( 8 min )
  • Open

    Self Gap
    Thinking of a way to have a custom gap between some flex or grid items.  ( 8 min )
  • Open

    Node 20 gains require(esm) support by default
    #​570 — March 18, 2025 Read on the Web Node.js Gets an Official Community Space on Discord — While there have been numerous IRC channels and Discord and Slack servers where Node developers can congregate, the Nodeiflux Discord server has been promoted to being an official one – here’s the invite link if you’re a Discord user. There are already 15k members, so it’s hopping. Vitullo and Wunder Node v23.10.0 (Current) Released — Node gains a new --experimental-config-file option for writing a JSON-based config file that contains options that would otherwise litter your command line flags – ideal for configuring the test runner, say. Antoine du Hamel Prepare Your App for AI Agents — Stytch extends auth to handle permissions for AI agents—so your app c…  ( 3 min )
  • Open

    Célia Mahiou
    Independent Digital Designer providing creative services such as UI-UX, Motion, Art Direction and Branding across diverse fields like culture and fashion among …  ( 4 min )
  • Open

    Announcing Rust 1.85.1
    The Rust team has published a new point release of Rust, 1.85.1. Rust is a programming language that is empowering everyone to build reliable and efficient software. If you have a previous version of Rust installed via rustup, getting Rust 1.85.1 is as easy as: rustup update stable If you don't have it already, you can get rustup from the appropriate page on our website. What's in 1.85.1 Fixed combined doctest compilation Due to a bug in the implementation, combined doctests did not work as intended in the stable 2024 Edition. Internal errors with feature stability caused rustdoc to automatically use its "unmerged" fallback method instead, like in previous editions. Those errors are now fixed in 1.85.1, realizing the performance improvement of combined doctest compilation as intended! See the backport issue for more details, including the risk analysis of making this behavioral change in a point release. Other fixes 1.85.1 also resolves a few regressions introduced in 1.85.0: Relax some target_feature checks when generating docs. Fix errors in std::fs::rename on Windows 1607. Downgrade bootstrap cc to fix custom targets. Skip submodule updates when building Rust from a source tarball. Contributors to 1.85.1 Many people came together to create Rust 1.85.1. We couldn't have done it without all of you. Thanks!  ( 1 min )
  • Open

    Karri Saarinen’s 10 rules for crafting products that stand out
    Linear’s CEO shares his approach to quality at a time when “move fast and break things” no longer cuts it—catch him at Config 2025 alongside a lineup of makers redefining tech’s future.  ( 33 min )
  • Open

    Past and Present Futures of User Interface Design
    Revolutionizing the desktop since 1975.  ( 8 min )
  • Open

    OpenTimes
    OpenTimes Dan Snow: OpenTimes is a database of pre-computed, point-to-point travel times between United States Census geographies. It lets you download bulk travel time data for free and with no limits. Here's what I get for travel times by car from El Granada, California: The technical details are fascinating: The entire OpenTimes backend is just static Parquet files on Cloudflare's R2. There's no RDBMS or running service, just files and a CDN. The whole thing costs about $10/month to host and costs nothing to serve. In my opinion, this is a great way to serve infrequently updated, large public datasets at low cost (as long as you partition the files correctly). Sure enough, R2 pricing charges "based on the total volume of data stored" - $0.015 / GB-month for standard storage, then $0.36 / million requests for "Class B" operations which include reads. They charge nothing for outbound bandwidth. All travel times were calculated by pre-building the inputs (OSM, OSRM networks) and then distributing the compute over hundreds of GitHub Actions jobs. This worked shockingly well for this specific workload (and was also completely free). Here's a GitHub Actions run of the calculate-times.yaml workflow which uses a matrix to run 255 jobs! Relevant YAML: matrix: year: ${{ fromJSON(needs.setup-jobs.outputs.years) }} state: ${{ fromJSON(needs.setup-jobs.outputs.states) }} Where those JSON files were created by the previous step, which reads in the year and state values from this params.yaml file. The query layer uses a single DuckDB database file with views that point to static Parquet files via HTTP. This lets you query a table with hundreds of billions of records after downloading just the ~5MB pointer file. This is a really creative use of DuckDB's feature that lets you run queries against large data from a laptop using HTTP range queries to avoid downloading the whole thing. The README shows how to use that from R and Python - I got this working in the duckdb client (brew install duckdb): INSTALL httpfs; LOAD httpfs; ATTACH 'https://data.opentimes.org/databases/0.0.1.duckdb' AS opentimes; SELECT origin_id, destination_id, duration_sec FROM opentimes.public.times WHERE version = '0.0.1' AND mode = 'car' AND year = '2024' AND geography = 'tract' AND state = '17' AND origin_id LIKE '17031%' limit 10; In answer to a question about adding public transit times Dan said: In the next year or so maybe. The biggest obstacles to adding public transit are: Collecting all the necessary scheduling data (e.g. GTFS feeds) for every transit system in the county. Not insurmountable since there are services that do this currently. Finding a routing engine that can compute nation-scale travel time matrices quickly. Currently, the two fastest open-source engines I've tried (OSRM and Valhalla) don't support public transit for matrix calculations and the engines that do support public transit (R5, OpenTripPlanner, etc.) are too slow. GTFS is a popular CSV-based format for sharing transit schedules - here's an official list of available feed directories. Via Hacker News Tags: open-data, github-actions, openstreetmap, duckdb, gis, cloudflare, parquet  ( 2 min )
    suitenumerique/docs
    suitenumerique/docs It's built using Django and React: Docs is built on top of Django Rest Framework, Next.js, BlockNote.js, HocusPocus and Yjs. Deployments currently require Kubernetes, PostgreSQL, memcached, an S3 bucket (or compatible) and an OIDC provider. Tags: open-source, react, django, kubernetes, s3, postgresql  ( 1 min )
    Mistral Small 3.1
    Mistral Small 3.1 came out in January and was a notable, genuinely excellent local model that used an Apache 2.0 license. Mistral Small 3.1 offers a significant improvement: it's multi-modal (images) and has an increased 128,000 token context length, while still "fitting within a single RTX 4090 or a 32GB RAM MacBook once quantized" (according to their model card). Mistral's own benchmarks show it outperforming Gemma 3 and GPT-4o Mini, but I haven't seen confirmation from external benchmarks. Despite their mention of a 32GB MacBook I haven't actually seen any quantized GGUF or MLX releases yet, which is a little surprising since they partnered with Ollama on launch day for their previous Mistral Small 3. I expect we'll see various quantized models released by the community shortly. Update 20th March 2025: I've now run the text version on my laptop using mlx-community/Mistral-Small-3.1-Text-24B-Instruct-2503-8bit and llm-mlx: llm mlx download-model mlx-community/Mistral-Small-3.1-Text-24B-Instruct-2503-8bit -a mistral-small-3.1 llm chat -m mistral-small-3.1 The model can be accessed via Mistral's La Plateforme API, which means you can use it via my llm-mistral plugin. Here's the model describing my photo of two pelicans in flight: llm install llm-mistral # Run this if you have previously installed the plugin: llm mistral refresh llm -m mistral/mistral-small-2503 'describe' \ -a https://static.simonwillison.net/static/2025/two-pelicans.jpg The image depicts two brown pelicans in flight against a clear blue sky. Pelicans are large water birds known for their long bills and large throat pouches, which they use for catching fish. The birds in the image have long, pointed wings and are soaring gracefully. Their bodies are streamlined, and their heads and necks are elongated. The pelicans appear to be in mid-flight, possibly gliding or searching for food. The clear blue sky in the background provides a stark contrast, highlighting the birds' silhouettes and making them stand out prominently. I added Mistral's API prices to my tools.simonwillison.net/llm-prices pricing calculator by pasting screenshots of Mistral's pricing tables into Claude. Tags: vision-llms, mistral, llm, generative-ai, ai, llms, ai-assisted-programming, llm-release  ( 2 min )
  • Open

    Who Shot Me? Help Identify the Anonymous Photographer Who Captured 1960s San Francisco
    More than 8,000 photos capture San Francisco's counter culture and pivotal moments in history. But who was behind the camera? Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Who Shot Me? Help Identify the Anonymous Photographer Who Captured 1960s San Francisco appeared first on Colossal.  ( 14 min )
    Porcelain Vessels Are Portals Through Time and Space in Paintings by Sung Hwa Kim
    For the Brooklyn-based artist, a traditional Korean white porcelain jar serves as a starting point for an ongoing series of still lifes. Do stories and artists like this matter to you? Become a Colossal Member today and support independent arts publishing for as little as $7 per month. The article Porcelain Vessels Are Portals Through Time and Space in Paintings by Sung Hwa Kim appeared first on Colossal.  ( 13 min )
  • Open

    Release Notes for Safari Technology Preview 215
    Safari Technology Preview Release 215 is now available for download for macOS Sequoia and macOS Sonoma.  ( 2 min )
  • Open

    Styling Counters in CSS
    Going from the most basic ways to style lists directly in HTML to advanced customization techniques that are even capable of making things that aren't lists look like lists. Styling Counters in CSS originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.  ( 25 min )
  • Open

    Unwieldy code bases
    I am consistently finding that React makes large code bases more unwieldy, not less. It’s a pattern I’ve seen over-and-over again with multiple clients. The same issues that React allegedly “prevents” over more traditional methods just get repeated, because those issues are people problems, not code problems. Repeating yourself instead of creating reusable functions. Code that’s hard to read. Lack of documentation. The same tasks handled multiple ways. Inconsistent authoring styles.  ( 14 min )
  • Open

    Metallica on Vision Pro, Non-Immersive Immersive Video, Ping and AI
    Metallica on the Vision Pro was cool, but ultimately disappointing, and symbolic of Apple's need to control everything.  ( 13 min )
  • Open

    Web Components Vs. Framework Components: What’s The Difference?
    Some critics question the agnostic nature of Web Components, with some even arguing that they are not real components. Gabriel Shoyomboa explores this topic in-depth, comparing Web Components and framework components, highlighting their strengths and trade-offs, and evaluating their performance.  ( 15 min )
  • Open

    Case Study: Motoyoshi Takamitsu
    An exploration of the design and development of photographer Motoyoshi Takamitsu's portfolio website.  ( 4 min )

  • Open

    Who are your teammates?
    If you manage a team, who are your teammates? If you're a staff software engineer embedded in a product team, who are your teammates? The answer to the question comes down to who your main responsibility lies with. That's not the folks you're managing and leading. Your responsibility lies with your fellow leaders, and they're your teammates. The first team mentality There's a concept in leadership called the first team mentality. If you're a leader, then you're a member of a couple of different teams at the same time. Using myself as an example, I'm a member of the company's leadership team (along with the heads of marketing, sales, product, etc.), and I'm also a member of the engineering department's leadership team (along with the engineering directors and managers and the CTO). I'm also…  ( 3 min )
  • Open

    Now you don’t even need code to be a programmer. But you do still need expertise
    Now you don’t even need code to be a programmer. But you do still need expertise how I use LLMs to help me write code got a positive mention in John Naughton's column about vibe-coding in the Guardian this weekend. My hunch about Apple Intelligence Siri features being delayed due to prompt injection also got a mention in the most recent episode of the New York Times Hard Fork podcast. Tags: ai-assisted-programming, the-guardian, generative-ai, ai, llms, vibe-coding  ( 1 min )
    Backstory on the default styles for the HTML dialog modal
    Backstory on the default styles for the HTML dialog modal Styling an HTML dialog modal to take the full height of the viewport (here's the interactive demo) showed up on Hacker News this morning, and attracted this fascinating comment from Chromium engineer Ian Kilpatrick. There's quite a bit of history here, but the abbreviated version is that the dialog element was originally added as a replacement for window.alert(), and there were a libraries polyfilling dialog and being surprisingly widely used. The mechanism which dialog was originally positioned was relatively complex, and slightly hacky (magic values for the insets). Changing the behaviour basically meant that we had to add "overflow:auto", and some form of "max-height"/"max-width" to ensure that the content within the dialog was actually reachable. The better solution to this was to add "max-height:stretch", "max-width:stretch". You can see the discussion for this here. The problem is that no browser had (and still has) shipped the "stretch" keyword. (Blink likely will "soon") However this was pushed back against as this had to go in a specification - and nobody implemented it ("-webit-fill-available" would have been an acceptable substitute in Blink but other browsers didn't have this working the same yet). Hence the calc() variant. (Primarily because of "box-sizing:content-box" being the default, and pre-existing border/padding styles on dialog that we didn't want to touch). [...] I particularly enjoyed this insight into the challenges of evolving the standards that underlie the web, even for something this small: One thing to keep in mind is that any changes that changes web behaviour is under some time pressure. If you leave something too long, sites will start relying on the previous behaviour - so it would have been arguably worse not to have done anything. Also from the comments I learned that Firefox DevTools can show you user-agent styles, but that option is turned off by default - notes on that here. Once I turned this option on I saw references to an html.css stylesheet, so I dug around and found that in the Firefox source code. Here's the commit history for that file on the official GitHub mirror, which provides a detailed history of how Firefox default HTML styles have evolved with the standards over time. And via uallo here are the same default HTML styles for other browsers: Chromium: third_party/blink/renderer/core/html/resources/html.css WebKit: Source/WebCore/css/html.css Tags: css, web-standards, html, chrome, firefox  ( 2 min )
  • Open

    Ecosystems vs. Artifacts: Don’t Break the Web
    Here’s Gordon Brander in an article titled “Don't fork the ecosystem”: Most of our software has been shaped by chance decisions made in haste by people who could not have predicted how the system would end up being used today. And if we could rebuild those systems today, knowing what we know now, we’d invent a whole new class of problems for ourselves twenty years from now. Software can be rebuilt, because software is a machine. But a software ecosystem is not a machine. It is a living system. When we attempt to rebuild the ecosystem, we’re making a category error. We confuse the software for the ecological process unfolding around it. Seems akin to hiring and firing. People are not cogs in a machine. Team dynamics are disrupted when people leave, as an ecosystem is being tampered with. When I was a kid, I did not understand why we couldn’t “just” go back to the moon. We’d already done it once before. So if we’d done it before, can’t we just do it again? I thought of it like riding a bicycle: once you know how to do it, can’t you just do it again whenever you want? Only as I grew older did I come to understand that an entire ecosystem of people, processes, tools, organizations, experience, storehouses of knowledge, and more made it possible to go to the moon. And you can’t just turn that back on with the flip of a switch. I was confusing the artifact (a human being on the moon) for the ecosystem that made it possible (NASA, contractors, government officials, technology, etc.) Carrying forward old baggage offends our sense of aesthetics, but hey, that’s how evolved systems work. Chickens still carry around the gene for dinosaur teeth. This is because a living system must be viable at every evolutionary stage. It can never pause, reset, or make a breaking change. The path of evolution is always through the adjacent possible. Lesson: the web isn’t an artifact. It’s an ecosystem. Don’t break the web. Email · Mastodon · Bluesky  ( 1 min )
  • Open

    Kipo and the Age of the Wonderbeasts
    Kipo and the Age of the Wonderbeasts is an animated post-apocalyptic sci-fi show that streamed on Netflix. It’s one of my favorite shows of all time. Today, I wanted to talk about why right now is the perfect time to watch it (and why you should rewatch it if you’ve already seen it). Let’s dig in! Note about spoilers: this article does reveal some stuff about characters and overall themes that would emerge organically over the series.  ( 16 min )
  • Open

    Big LLMs weights are a piece of history
    By multiple accounts, the web is losing pieces: every year a fraction of old web pages disappear, lost forever. We should regard the Internet Archive as one of the most valuable pieces of modern history; instead, many companies and entities make the chances of the Archive to survive, and accumulate what otherwise will be lost, harder and harder. I understand that the Archive headquarters are located in what used to be a church: well, there is no better way to think of it than as a sacred place. Imagine the long hours spent by old programmers hacking with the Z80 assembly on their Spectrums. All the discussions about the first generation of the Internet. The subcultures that appeared during the 90s. All things that are getting lost, piece by piece. And what about the personal blogs? Piece…  ( 2 min )

  • Open

    mlx-community/OLMo-2-0325-32B-Instruct-4bit
    mlx-community/OLMo-2-0325-32B-Instruct-4bit claims to be "the first fully-open model (all data, code, weights, and details are freely available) to outperform GPT3.5-Turbo and GPT-4o mini". Thanks to the MLX project here's a recipe that worked for me to run it on my Mac, via my llm-mlx plugin. To install the model: llm install llm-mlx llm mlx download-model mlx-community/OLMo-2-0325-32B-Instruct-4bit That downloads 17GB to ~/.cache/huggingface/hub/models--mlx-community--OLMo-2-0325-32B-Instruct-4bit. To start an interactive chat with OLMo 2: llm chat -m mlx-community/OLMo-2-0325-32B-Instruct-4bit Or to run a prompt: llm -m mlx-community/OLMo-2-0325-32B-Instruct-4bit 'Generate an SVG of a pelican riding a bicycle' -o unlimited 1 The -o unlimited 1 removes the cap on the number of output tokens - the default for llm-mlx is 1024 which isn't enough to attempt to draw a pelican. The pelican it drew is refreshingly abstract: Via @awnihannun Tags: llm, generative-ai, mlx, ai2, ai, llms, pelican-riding-a-bicycle  ( 1 min )
    Quoting Andrew Ng
    Some people today are discouraging others from learning programming on the grounds AI will automate it. This advice will be seen as some of the worst career advice ever given. I disagree with the Turing Award and Nobel prize winner who wrote, “It is far more likely that the programming occupation will become extinct [...] than that it will become all-powerful. More and more, computers will program themselves.”​ Statements discouraging people from learning to code are harmful! In the 1960s, when programming moved from punchcards (where a programmer had to laboriously make holes in physical cards to write code character by character) to keyboards with terminals, programming became easier. And that made it a better time than before to begin programming. Yet it was in this era that Nobel laureate Herb Simon wrote the words quoted in the first paragraph. Today’s arguments not to learn to code continue to echo his comment. As coding becomes easier, more people should code, not fewer! — Andrew Ng Tags: ai-assisted-programming, ai  ( 1 min )

  • Open

    TIL: Styling an HTML dialog modal to take the full height of the viewport
    TIL: Styling an HTML dialog modal to take the full height of the viewport <dialog> element present as a full height side panel that animates in from the side. The full height bit was hard, until Natalie helped me figure out that browsers apply a default max-height: calc(100% - 6px - 2em); rule which needs to be over-ridden. Also included: some spelunking through the HTML spec to figure out where that calc() expression was first introduced. The answer was November 2020. Tags: css, til, html, natalie-downe, web-standards  ( 1 min )
    Apple’s Siri Chief Calls AI Delays Ugly and Embarrassing, Promises Fixes
    Apple’s Siri Chief Calls AI Delays Ugly and Embarrassing, Promises Fixes Walker said the decision to delay the features was made because of quality issues and that the company has found the technology only works properly up to two-thirds to 80% of the time. He said the group “can make more progress to get those percentages up, so that users get something they can really count on.” [...] But Apple wants to maintain a high bar and only deliver the features when they’re polished, he said. “These are not quite ready to go to the general public, even though our competitors might have launched them in this state or worse.” I imagine it's a lot harder to get reliable results out of small, local LLMs that run on an iPhone. Features that fail 1/3 to 1/5 of the time are unacceptable for a consumer product like this. Via Hacker News Tags: apple, apple-intelligence, generative-ai, ai, llms  ( 1 min )
    How ProPublica Uses AI Responsibly in Its Investigations
    How ProPublica Uses AI Responsibly in Its Investigations A Study of Mint Plants. A Device to Stop Bleeding. This Is the Scientific Research Ted Cruz Calls “Woke.” by Agnel Philip and Lisa Song. They ran ~3,400 grant descriptions through a prompt that included the following: As an investigative journalist, I am looking for the following information -- woke_description: A short description (at maximum a paragraph) on why this grant is being singled out for promoting "woke" ideology, Diversity, Equity, and Inclusion (DEI) or advanced neo-Marxist class warfare propaganda. Leave this blank if it's unclear. why_flagged: Look at the "STATUS", "SOCIAL JUSTICE CATEGORY", "RACE CATEGORY", "GENDER CATEGORY" and "ENVIRONMENTAL JUSTICE CATEGORY" fields. If it's filled out, it means that the author of this document believed the grant was promoting DEI ideology in that way. Analyze the "AWARD DESCRIPTIONS" field and see if you can figure out why the author may have flagged it in this way. Write it in a way that is thorough and easy to understand with only one description per type and award. citation_for_flag: Extract a very concise text quoting the passage of "AWARDS DESCRIPTIONS" that backs up the "why_flagged" data. This was only the first step in the analysis of the data: Of course, members of our staff reviewed and confirmed every detail before we published our story, and we called all the named people and agencies seeking comment, which remains a must-do even in the world of AI. I think journalists are particularly well positioned to take advantage of LLMs in this way, because a big part of journalism is about deriving the truth from multiple unreliable sources of information. Journalists are deeply familiar with fact-checking, which is a critical skill if you're going to report with the assistance of these powerful but unreliable models. Agnel Philip: The tech holds a ton of promise in lead generation and pointing us in the right direction. But in my experience, it still needs a lot of human supervision and vetting. If used correctly, it can both really speed up the process of understanding large sets of information, and if you’re creative with your prompts and critically read the output, it can help uncover things that you may not have thought of. Tags: prompt-engineering, structured-extraction, generative-ai, ai, data-journalism, llms, journalism, ethics, ai-ethics  ( 2 min )
    Something Is Rotten in the State of Cupertino
    Something Is Rotten in the State of Cupertino The fiasco here is not that Apple is late on AI. It's also not that they had to announce an embarrassing delay on promised features last week. Those are problems, not fiascos, and problems happen. They're inevitable. [...] The fiasco is that Apple pitched a story that wasn't true, one that some people within the company surely understood wasn't true, and they set a course based on that. John divides the Apple Intelligence features into the ones that were demonstrated to members of the press (including himself) at various events over the past year compared to things like "personalized Siri" that were only ever shown as concept videos. The ones that were demonstrated have all shipped. The concept video features are indeterminably delayed. Tags: apple-intelligence, apple, ai, john-gruber  ( 1 min )
    Merklemap runs a 16TB PostgreSQL
    Merklemap runs a 16TB PostgreSQL Merklemap, a certificate transparency search engine. I run a 100 billion+ rows Postgres database [0], that is around 16TB, it's pretty painless! There are a few tricks that make it run well (PostgreSQL compiled with a non-standard block size, ZFS, careful VACUUM planning). But nothing too out of the ordinary. ATM, I insert about 150,000 rows a second, run 40,000 transactions a second, and read 4 million rows a second. [...] It's self-hosted on bare metal, with standby replication, normal settings, nothing "weird" there. 6 NVMe drives in raidz-1, 1024GB of memory, a 96 core AMD EPYC cpu. [...] About 28K euros of hardware per replica [one-time cost] IIRC + [ongoing] colo costs. Tags: scaling, postgresql  ( 1 min )
  • Open

    Alexis, Oakland, and the Port
    In ways that are almost spooky, Oakland ends up concentrating so many of the problems of the Bay Area  ( 15 min )
  • Open

    Web Components Demystified
    Scott Jehl released a course called Web Components Demystified. This is my full set of notes from Scott's course. You'll still want to take the course on your own, and I encourage you to because Scott is an excellent teacher who makes all of this stuff extremely accessible, even to noobs like me. Web Components Demystified originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.  ( 30 min )

  • Open

    Quoting Steve Klabnik
    [...] in 2013, I did not understand that the things I said had meaning. I hate talking about this because it makes me seem more important than I am, but it’s also important to acknowledge. I saw myself at the time as just Steve, some random guy. If I say something on the internet, it’s like I’m talking to a friend in real life, my words are just random words and I’m human and whatever. It is what it is. But at that time in my life, that wasn’t actually the case. I was on the Rails team, I was speaking at conferences, and people were reading my blog and tweets. I was an “influencer,” for better or worse. But I hadn’t really internalized that change in my life yet. And so I didn’t really understand that if I criticized something, it was something thousands of people would see. — Steve Klabnik, Choosing Languages Tags: steve-klabnik  ( 1 min )
    Adding AI-generated descriptions to my tools collection
    The /colophon page on my tools.simonwillison.net site lists all 78 of the HTML+JavaScript tools I've built (with AI assistance) along with their commit histories, including links to prompting transcripts. I wrote about how I built that colophon the other day. It now also includes a description of each tool, generated using Claude 3.7 Sonnet. This is the single largest chunk of AI-generated text I've ever published on the indexable web. I share lots of LLM transcripts but I usually put them in a secret Gist such that they'll be kept out of search engines. On the one hand this feels slop adjacent - but I was never going to write documentation for all 78 of those little experiments, yet I find myself forgetting details of how they worked. Just one example: my CSV marker map tool which I built last year for knocking out an ad-hoc Bigfoot sightings map and then promptly forgot what it could do. Here's what I got when I ran: cat csv-marker-map.html | llm -m claude-3.7-sonnet \ --system "Write a paragraph of documentation for this page as markdown. Do not include a heading. Do not use words like just or simply." This interactive map displays markers based on data from a CSV file. Load data by adding ?csv=URL to the page URL, where the CSV must include latitude and longitude columns. You can customize the map with several URL parameters: center (coordinates in format lat,lng), zoom (zoom level), q (location to search for), marker (add individual markers at coordinates), and color (change the default marker color). The map automatically updates the URL as you navigate, preserving your current view. Markers from CSV files appear as small colored circles on the map, while markers specified directly in the URL use the default Leaflet marker style. That's genuinely useful. I got Claude to write me a write_docs.py script to loop through all 78 files and generate filename.docs.md descriptions that live in the repo, then updated build_colophon.py to include those descriptions if they exist. It cost about $1.08 in Claude credits to document all 78 tools, because some of those HTML files were quite long so the input tokens added up. Each of the documentation files includes a comment with the most recent commit hash of the file that was used to generate the document, like this: <!-- Generated from commit: 7c6af8eeabc7682b5f9ec2621e34bc771c5471d8 --> The script can use this to spot if a tool has been updated - if so, the documentation will be regenerated. Add this all together and now I can drop new HTML+JavaScript tools into my simonw/tools repo and, moments later, they'll be published on tools.simonwillison.net with auto-generated descriptions added to my colophon. I think that's pretty neat! Update: I decided that the descriptions were too long, so I modified the script to add "Keep it to 2-3 sentences" to the end of the system prompt. These new, shorter descriptions are now live - here's the diff. Total usage was 283,528 input tokens and 6,010 output tokens for a cost of 94 cents. The new, shorter description for csv-marker-map.html looks like this: This page creates an interactive map with markers based on CSV data. It accepts parameters in the URL to set the center, zoom level, search query, individual markers, and a CSV file URL for bulk marker placement. The markers are displayed on an OpenStreetMap base layer, and the map view automatically updates the URL when panned or zoomed. For comparison, here's a copy of the previous colophon with the longer descriptions. Tags: projects, tools, ai, generative-ai, llms, ai-assisted-programming, llm, claude, slop  ( 3 min )
    Quoting Evan Miller
    One of the most essential practices for maintaining the long-term quality of computer code is to write automated tests that ensure the program continues to act as expected, even when other people (including your future self) muck with it. — Evan Miller Tags: testing, evan-miller  ( 1 min )
  • Open

    Can you understand this JavaScript?
    #​727 — March 14, 2025 Read on the Web JavaScript Weekly A Perplexing JavaScript Parsing Puzzle — It looks deceptively simple – just 14 characters of JavaScript – but after working with JavaScript for 29 years, I got it wrong. A clue: it goes back to a browser-related quirk from 30 years ago.. Hillel Wayne TypeScript's Compiler to Get 10x Faster — TypeScript has shaken up the JavaScript ecosystem in recent years with an increasing number of developers relying on its strong typing and added structure. TypeScript’s compiler isn’t particularly fast, though, but the TypeScript team at Microsoft are changing that by porting it to Go! Anders Hejlsberg (Microsoft) 💡 Dr. Axel Rauschmayer takes a closer look at the details behind the port. …  ( 3 min )
  • Open

    In Conversation: Dylan Field and Garry Tan on design, AI, and the power of “locking in”
    On exploring the idea maze, vibe coding, and preserving craft even when the models are “cooking.”  ( 41 min )
  • Open

    Copyright and the Demo Scene
    Scandal, scandal!  ( 11 min )
  • Open

    ChatGPT Would be a Decent Policy Advisor
    Revealed: How the UK tech secretary uses ChatGPT for policy advice by Chris Stokel-Walker for the New Scientist  ( 2 min )
  • Open

    An Interview with Tailscale Co-Founder and CEO Avery Pennarun
    An interview with Tailscale CEO and co-founder Avery Pennarun about Tailscale, and how he’s been learning to build a New Internet his whole life.  ( 13 min )
  • Open

    Playing with Light and Refraction in Three.js: Warping 3D Text Inside a Glass Torus
    Explore how MeshTransmissionMaterial in Three.js bends light, creates refraction effects, and enhances realistic glass-like materials.  ( 9 min )
  • Open

    How To Prevent WordPress SQL Injection Attacks
    Have you thought about the security risks WordPress websites face? Anders Johansson explores why they are frequent hacker targets and shares how WordPress SQL injection attacks work and how to remove and prevent them.  ( 17 min )
  • Open

    Style-observer: JS to observe CSS property changes, for reals
    I cannot count the number of times in my career I wished I could run JS in response to CSS property changes, regardless of what triggered them: media queries, user actions, or even other JS. Use cases abound. Here are some of mine: Implement higher level custom properties in components, where one custom property changes multiple others in nontrivial ways (e.g. a --variant: danger that sets 10 color tokens). Polyfill missing CSS features Change certain HTML attributes via CSS (hello --aria-expanded!) Set CSS properties based on other CSS properties without having to mirror them as custom properties The most recent time I needed this was to prototype an idea I had for Web Awesome, and I decided this was it: I’d either find a good, bulletproof solution, or I would build it myself. Spoiler ale…  ( 3 min )

  • Open

    Doah Kwon
    Doah is a designer focusing on creating digital products and visuals that resonate with users. She is currently working as a designer at YouTube Shorts, …  ( 4 min )
  • Open

    How eBay built a bridge between brand and product with Figma
    When eBay set out to document their design system, they didn’t just want a reference guide—they wanted to create an experience where teams could find inspiration and excitement in their work.  ( 33 min )
  • Open

    OpenAI API Updates, Steelmanning the API Business, The Problem With Both
    OpenAI has compelling new updates to their API that should be good for the API business; is that good for OpenAI?  ( 13 min )
  • Open

    Switching my pricing to Euro, but also making it tax-inclusive
    Most people have noticed the… shenanigans that are affecting international trade at the moment. But people might not necessarily appreciate how this affects small economies like Iceland. Or, specifically, how this affects smaller currencies. We’re still using our own Icelandic Krona. It’s not the most stable in the world, mostly because of the small size of our economy: it can easily be disrupted by changes in currency flows that would be considered minor in other countries. Up until now, pricing in US Dollars has been the safest route to take for somebody like me, who is selling digital goods and services to both the US and Europe. But this rubric has changed over the past couple of months. The dollar is more volatile and, because of how US politics are affecting international trade and t…  ( 3 min )
  • Open

    Case Study: Fiddle.Digital Design Agency — The New Us
    This case study tells the story of how a small rebranding idea sparked a revolution within the agency.  ( 6 min )

  • Open

    Nobody should be a “content creator”
    As part of my job, I have to keep up with the social media space and I’m worried, bored and annoyed in equal measures. There is not much social about it any longer. Instead it’s become a race to the bottom of lowest common denominator content. And interaction bait. Or rage bait. Or just obvious […]
  • Open

    A Perplexing Javascript Parsing Puzzle
    What does this print? x = 1 x --> 0 Think it through, then try it in a browser console! Answer and explanation in the dropdown. Show answer It prints 1. wait wtf At the beginning of a line (and only at the beginning of a line), --> starts a comment. The JavaScript is parsed as x=1; x; // 0 The browser then displays the value of the last expression, which of course is 1.  ( 2 min )
  • Open

    How to dynamically generate and modify color in CSS
    🚀 Frontend Focus #​683 — March 12, 2025 | Read on the web CSS Relative Colors — Another excellent guide from Ahmad exploring the syntax behind CSS relative color. This comprehensive, interactive explainer shares how we can now dynamically generate and modify colors based on existing ones directly in CSS (without the need of a pre-processor). Looks at practical use cases, fallbacks, contrast ratio, and more. Ahmad Shadeed Cool Native HTML Elements You Should Already Be Using — Even experienced developers can be dazzled by all the new things added to HTML over the years. Harrison helps you catch up with any blind spots here with a look at numerous lesser-used options. Harrison Broadbent How to Do Thoughtful Code Reviews?…  ( 3 min )
  • Open

    Cleanups and weak pointers in Go 1.24
    #​545 — March 12, 2025 Unsub  |  Web Version Go Weekly TypeScript's Compiler to Get 10x Faster, Thanks to Go — TypeScript has shaken up the JavaScript ecosystem in recent years with an increasing number of developers relying on its strong typing and added structure. TypeScript’s compiler isn’t particularly fast, though, but the TypeScript team at Microsoft is changing that by porting it to Go! Anders Hejlsberg (Microsoft) 📺 The Syntax podcast had Anders on for an episode discussing the whole porting process. Lots of details for those who want to go deeper. Why Reimplement TypeScript's Compiler in Go? — Many people have been asking why Microsoft is porting TypeScript’s compiler to Go rather than, say, Rust or C#. TypeScript’s architect Ander…  ( 3 min )
  • Open

    Traversal-resistant file APIs
    New file access APIs in Go 1.24.  ( 6 min )
  • Open

    Powering Search With Astro Actions and Fuse.js
    With Astro, we can generate most of our site during our build, but have a small bit of server-side code that can handle search functionality using something like Fuse.js. In this demo, we’ll use Fuse to search through a set of personal “bookmarks” that are generated at build time, but return back proper results from a server call. Powering Search With Astro Actions and Fuse.js originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.  ( 17 min )
  • Open

    How To Build Confidence In Your UX Work
    UX initiatives are often seen as a disruption rather than a means to solving existing problems in an organization. In this post, we’ll explore how you can build trust for your UX work, gain support, and make a noticeable impact. Part of [Measure UX and Design Impact](https://measure-ux.com/) by yours truly.  ( 13 min )
  • Open

    A Google I/O Idea, The Smartphone AI Value Chain, Apple’s Developer Hang-Ups
    More on Apple and AI, this time through the lens of Google's point of integration and where Apple should be in response. Plus, why Apple is so hostile to developers.  ( 13 min )
  • Open

    Replicating CSS Object-Fit in WebGL: Optimized Techniques for Image Scaling and Positioning
    Explore optimized methods to achieve responsive image scaling and positioning in WebGL, similar to the CSS object-fit: cover behavior.  ( 7 min )

  • Open

    castero
    A TUI podcast client for the terminal.  ( 4 min )
    ddv
    A TUI to view Amazon DynamoDB in the terminal.  ( 4 min )
    patch-hub
    TUI for lore.kernel.org  ( 4 min )
    pipeform
    A TUI for Terraform runtime progress.  ( 4 min )
    termpicker
    A color picker for the terminal.  ( 4 min )
    wuzz
    An interactive TUI tool for HTTP inspection.  ( 4 min )
  • Open

    Another way to look inside your npm packages
    #​569 — March 11, 2025 Read on the Web 🔎 Node Modules Inspector — A tool that runs pnpm inside your browser, “installs” a package, then analyzes its dependencies. This can be useful for analyzing packages you already use, but also for simplifying your own projects, as 11ty’s Zach Leatherman did here. Anthony Fu Node Added TypeScript Support, But What Does That Mean for Deno? — The Deno team, learning from previous experiences with Node, went ‘all in’ with TypeScript from day one. Now, Node can work with TypeScript too, but the experience is still very different, and the Deno team explains how here. Andy Jiang and Ryan Dahl ThePrimeagen's Dev Setup Is Better Than Yours — See why simpler dev tooling is better by hand-crafting an environment with ba…  ( 3 min )
  • Open

    From screen to zine: Meet the makers using Figma for digital DIY
    These creatives are bringing Figma into the specialized world of zines, underground music, and risograph printing.  ( 35 min )
  • Open

    Smashing Meets Accessibility
    The videos from Smashing Magazine's recent event on accessibility were just posted the other day. I was invited to host the panel discussion with the speakers, including a couple of personal heroes of mine, Stéphanie Walter and Sarah Fossheim. But I was just as stoked to meet Kardo Ayoub who shared his deeply personal story as a designer with a major visual impairment. Smashing Meets Accessibility originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.  ( 6 min )
  • Open

    Apple AI’s Platform Pivot Potential
    Apple AI is delayed, and Apple may be trying to do too much; what the company ought to do is empower developers to make AI applications.  ( 27 min )
  • Open

    Reliability Compounds
    The magical fact isn’t that we have jet planes. It’s that modern airliners are reliable to the tune of one accident per 1.13 million flights.  ( 9 min )
  • Open

    Rendering a Procedural Vortex Inside a Glass Sphere with Three.js and TSL
    A step-by-step guide to creating a procedural vortex inside a glass sphere using Three.js Shader Language (TSL).  ( 9 min )

  • Open

    Stewardship over ownership
    Code ownership is a popular concept, but it emphasizes the wrong thing. It can bring out the worst in a person or a team: defensiveness, control-seeking, power struggles. Instead, we should be focusing on stewardship. How code ownership manifests Code ownership as a concept means that a particular person or team "owns" a section of the codebase. This gives them certain rights and responsibilities: They control what goes into the code, and can approve or deny changes They are responsible for fixing bugs in that part of the code They are responsible for maintaining and improving that part of the code There are tools that help with these, like the CODEOWNERS file on GitHub. This file lets you define a group or list of individuals who own a section of the repository. Then you can require revie…  ( 3 min )
  • Open

    Tag, you're it
    I’m a bit behind in my RSS feeds and I didn’t realize Susan tagged me to answer a series of questions about my blog. I’ve read dozens of these and to be honest was feeling a little left out, so thanks Susan for including me! (Susan’s one of my favorite bloggers and crafters, be sure to like and subscribe.) Why did you start blogging in the first place? I published a zine in high school with my best friend Mike. Our zine Wimpkiller was a creative outlet for all the composition notebooks we filled up over a bottomless cups of coffee at IHOP. We’d print out stories on Mike’s computer, chop ‘em up, glue ‘em together, and then scam copies after midnight with the help of the friendly late-shift worker at Kinko’s. I enjoyed that thrill of self-publishing then as much as I do now. It felt like the…  ( 6 min )
  • Open

    Postcards, Part 10
    Doing it badly, over and over.  ( 3 min )

  • Open

    CSS Relative Colors
    An interactive guide to learn CSS Relative Colors.  ( 22 min )
  • Open

    CSS Relative Colors
    An interactive guide to learn CSS Relative Colors.  ( 22 min )

  • Open

    20 years of Linux on the Desktop (part 3)
    20 years of Linux on the Desktop (part 3) Previously in "20 years of Linux on the Deskop": After contributing to the launch of Ubuntu as the "perfect Linux desktop", Ploum realises that Ubuntu is drifting away from both Debian and GNOME. But something else is about to shake the world… 20 years of Linux on the Desktop (part 1) 20 years of Linux on the Desktop (part 2) The new mobile paradigm While I was focused on Ubuntu as a desktop solution, another GNOME+Debian product had appeared and was shaking the small free software world: Maemo. It will come as a shock for the youngest but this was a time without smartphones (yes, we had electricity and, no, dinosaurs were already extinct, please keep playing Pokémon instead of interrupting me). Mobile phones were still quite new and doing exac…  ( 8 min )
  • Open

    A CSS-Only Star Rating Component and More! (Part 2)
    In this second article of a two-part series, Temani Afif demonstrates an alternative approach to creating the star rating component from the first article using experimental scroll-driven animations rather than using the border-image property. A CSS-Only Star Rating Component and More! (Part 2) originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.  ( 14 min )

  • Open

    The current state of JavaScript on the Web
    #​726 — March 7, 2025 Read on the Web JavaScript Weekly A Report on How the Web is Really Using JavaScript — Each year, the HTTP Archive puts together the Web Almanac, a report on the ‘state of the Web’. The JavaScript section has just gone live and goes into depth on how much JS we’re using (or failing to use!), the popularity of TypeScript, loading methods, Web Worker use, and, yes, jQuery still leads the way! HTTP Archive Lynx: A Fresh Way to Build Apps from Web Technologies — Lynx is a new set of tools for building JavaScript-powered native and Web apps that draws inspiration from React Native but aims to be more modular and flexible (and eventually framework agnostic). It comes from, and is used by, TikTok, and comes with its own QuickJS-bas…  ( 4 min )
  • Open

    Maybe don’t use custom properties in shorthand properties
    This easily qualifies as a "gotcha" in CSS and is a good reminder that the cascade doesn't know everything all at the same time. If a custom property is invalid, the cascade won't ignore it, and it gets evaluated, which invalidates the declaration. Maybe don’t use custom properties in shorthand properties originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.  ( 6 min )
  • Open

    An Interview with Michael Nathanson About the Streaming Endgame
    An interview with Michael Nathanson about the endgame for traditional media companies as the streaming wars near their end, plus AI bubble questions and the future of analysis.  ( 13 min )
  • Open

    How To Fix Largest Contentful Paint Issues With Subpart Analysis
    Struggling with slow Largest Contentful Paint (LCP)? Newly introduced by Google, LCP subparts help you pinpoint where page load delays come from. Now, in the Chrome UX Report, this data provides real visitor insights to speed up your site and boost rankings. Matt Zeunert unpacks what LCP subparts are, what they mean for your website speed, and how you can measure them.  ( 13 min )

  • Open

    From unique to cleanups and weak: new low-level tools for efficiency
    Weak pointers and better finalization in Go 1.24.  ( 9 min )
  • Open

    Alexa+, A Brief History of Alexa, Amazon — and Apple’s — Mistake
    Alexa+ looks amazing, and that's exactly my problem with it: Amazon is trying to do too much, must like Apple did with new Siri  ( 13 min )
  • Open

    Grouping Selection List Items Together With CSS Grid
    Preethi demonstrates how to make a user interface to group selected items using CSS Grid using two different methods: the auto-fill keyword for stable layouts and the span keyword for flexible arrangements. Grouping Selection List Items Together With CSS Grid originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.  ( 9 min )

  • Open

    March 2025
    Maggie's digital garden filled with visual essays on programming, design, and anthropology  ( 4 min )
  • Open

    An introduction to functions in CSS
    🚀 Frontend Focus #​682 — March 5, 2025 | Read on the web Functions in CSS? — We can’t use custom CSS functions in production just yet, but this early look at how they’re currently being prototyped in Chrome Canary offers a glimpse at the future capabilities (arguments, type-checking, etc). Juan Diego Rodríguez Write CSS Like a Pro — Kevin Powell shares how to create a responsive website from scratch using modern CSS features (such as nesting, utility classes, custom properties, and more). This detailed video course also dives into adding additional polish via animations, view transitions, and more. Frontend Masters sponsor Views on 'Views' — Discussions are underway to potentially change the definition of a ‘web page’ t…  ( 4 min )
  • Open

    Karina Sirqueira
    Karina Sirqueira is a product designer who is passionate about creating user-focused experiences. She blends design and motion to craft intuitive solutions and …  ( 4 min )
  • Open

    How Swiss Tables make Go 1.24 faster
    #​544 — March 5, 2025 Unsub  |  Web Version Go Weekly Faster Go Maps with Swiss Tables — One of Go’s newest features is a revamped map implementation powered by a new hash table algorithm called Swiss Table that boosts map operations up to 60% faster in microbenchmarks, while reducing memory overhead. Here’s a look at how it works. Michael Pratt Tips to Debug Hanging Go Programs — Next time your Go app becomes unresponsive, these tips can help you find the issue by forcing a stack trace or using Delve to attach to the process (or core dump) and revive the program. Michael Stapelberg Keep Postgres Maintenance from Slowing Down Your Go App — Secure your spot to learn the proactive maintenance practices that uncover hidden database performa…  ( 3 min )
  • Open

    Building Websites With LLMS
    And by LLMS I mean: (L)ots of (L)ittle ht(M)l page(S). I recently shipped some updates to my blog. Through the design/development process, I had some insights which made me question my knee-jerk reaction to building pieces of a page as JS-powered interactions on top of the existing document. With cross-document view transitions getting broader and broader support, I’m realizing that building in-page, progressively-enhanced interactions is more work than simply building two HTML pages and linking them. I’m calling this approach “lots of little HTML pages” in my head. As I find myself trying to build progressively-enhanced features with JavaScript — like a fly-out navigation menu, or an on-page search, or filtering content — I stop and ask myself: “Can I build this as a separate HTML page tr…  ( 2 min )

  • Open

    bibiman
    A simple TUI for handling your BibLaTeX database.  ( 4 min )
    envfetch
    Lightweight cross-platform CLI tool for working with environment variables.  ( 4 min )
    fuzpad
    A minimalistic note management solution. Powered by fzf.  ( 4 min )
    hike
    A Markdown browser for the terminal.  ( 4 min )
    slumber
    Terminal-based HTTP/REST client.  ( 4 min )
    xbps-tui
    A TUI-wrapper for xbps package manager on Void Linux.  ( 4 min )
  • Open

    The Hierarchy of Controls (or how to stop devs from dropping prod)
    The other day a mechanical engineer introduced me to the Hierarchy of Controls (HoC), an important concept in workplace safety. 1 (source) To protect people from hazards, system designers should seek to use the most effective controls available. This means elimination over substitution, substitution over engineering controls, etc. Can we use the Hierarchy of Controls in software engineering? Software environments are different than physical environments, but maybe there are some ideas worth extracting.  ( 8 min )
  • Open

    TypeScript gets on board with Node's type stripping
    #​568 — March 4, 2025 Read on the Web Announcing TypeScript 5.8 — Four months in the making, TypeScript 5.8 lands with a strong Node focus. You can now use require() for ES modules in the nodenext module, there’s a new node18 module for developers who want to keep targeting Node 18, and most notably there’s now an --erasableSyntaxOnly option to ensure no TypeScript-only runtime semantics can be used (ideal if you’re using Node’s type stripping features to run TypeScript code directly). Microsoft Instrument, Monitor, Fix: A Hands-On Debugging Class — Join us live for a hands-on session where you’ll build it, watch it break, debug it, and go from “no idea what’s wrong” to fixing issues—all in one go. Save your spot here ». Sentry sponsor Turbochargin…  ( 3 min )
  • Open

    Gavin Nelson
    Gavin Nelson is a designer currently shaping the native mobile apps at Linear and crafting app icons for a variety of clients. His passion lies in creating …  ( 6 min )
  • Open

    Announcing rustup 1.28.1
    The rustup team is happy to announce the release of rustup version 1.28.1. Rustup is the recommended tool to install Rust, a programming language that is empowering everyone to build reliable and efficient software. Challenges with rustup 1.28.0 rustup 1.28.0 was a significant release with many changes, and there was a quick response from many folks that this release broke their processes. While we considered yanking the release, we worried that this would cause problems for people who had already updated to adopt some of the changes. Instead, we are rolling forward with 1.28.1 today and potentially further bugfix releases to address the feedback that comes in. We value all constructive feedback -- please keep it coming in the issue tracker. In particular, the change with regard to implici…  ( 2 min )
  • Open

    Why everyone can (and should) be a great storyteller
    The best products, designs, and ideas come from people who can clearly articulate their vision, regardless of their role. Here’s why writing matters—and how to be a storyteller who brings ideas to life.  ( 37 min )
  • Open

    Notes, 2025-03-03
    If you want to make a strong slingshot out of wood, you need to find a good forked branch to start with.  ( 9 min )
  • Open

    Functions in CSS?!
    Arguments?! Return values?! What's crazier, you can use functions right now in Chrome Canary! So, after reading and playing around, here are my key insights on what you need to know about CSS Functions. Functions in CSS?! originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.  ( 13 min )
  • Open

    The Case For Minimal WordPress Setups: A Contrarian View On Theme Frameworks
    Modern frameworks are supposed to help speed up development while providing modern tools and a developer-friendly workflow. In reality, Kevin Leary has found that they cause far more problems than they solve. This ultimately leads to the big question: why are modern theme frameworks so popular, and do they really benefit developers in the long run?  ( 18 min )

  • Open

    Some things that make Rust lifetimes hard to learn
    After I wrote YARR (Yet Another Rust Resource, with requisite pirate mentions), one of my friends tried it out. He gave me some really useful insights as he went through it, letting me see what was hard about learning Rust from a newcomer's perspective. Unsurprisingly, lifetimes are a challenge—and seeing him go through it helped me understand why they're hard to learn. Here are a few of the challenges he ran into. I don't think that these are necessarily problems, but they're perhaps opportunities to improve educational materials. They don't map 100% to how long a variable is in memory My friend gave me an example he's seen a few times when people explain lifetimes. fn longest(x: &'a str, y: &'a str) -> &'a str { if x.len() > y.len() { x } else { y } } And…  ( 4 min )
  • Open

    Rust participates in Google Summer of Code 2025
    We are happy to announce that the Rust Project will again be participating in Google Summer of Code (GSoC) 2025, same as last year. If you're not eligible or interested in participating in GSoC, then most of this post likely isn't relevant to you; if you are, this should contain some useful information and links. Google Summer of Code (GSoC) is an annual global program organized by Google that aims to bring new contributors to the world of open-source. The program pairs organizations (such as the Rust Project) with contributors (usually students), with the goal of helping the participants make meaningful open-source contributions under the guidance of experienced mentors. The organizations that have been accepted into the program have been announced by Google. The GSoC applicants now have …  ( 2 min )
    February Project Goals Update
    This is the first Project Goals update for the new 2025h1 period. For the first 6 months of 2025, the Rust project will work towards a slate of 39 project goals, with 3 of them designed as Flagship Goals. This post provides selected updates on our progress towards these goals (or, in some cases, lack thereof). The full details for any particular goal are available in its associated tracking issue on the rust-project-goals repository. Flagship goals Bring the Async Rust experience closer to parity with sync Rust Why this goal? This work continues our drive to improve support for async programming in Rust. In 2024H2 we stabilized async closures; explored the generator design space; and began work on the dynosaur crate, an experimental proc-macro to provide dynamic dispatch for async funct…  ( 24 min )
  • Open

    AX, DX, UX
    Matt Biilman, CEO of Netlify, published an interesting piece called “Introducing AX: Why Agent Experience Matters” where he argues the coming importance of a new “X” (experience) in software: the agent experience, meaning the experience your users’ AI agents will have as automated users of products/platforms. Too many companies are focusing on adding shallow AI features all over their products or building yet another AI agent. The real breakthrough will be thinking about how your customers’ favorite agents can help them derive more value from your product. This requires thinking deeply about agents as a persona your team is building and developing for. In this future, software that can’t be used by an automated agent will feel less powerful and more burdensome to deal with, whereas softwar…  ( 2 min )

  • Open

    Cryptography scales trust
    Protocols are to institutions as packet switching is to circuit switching

  • Open

    How will we update about scheming?
    Published on January 6, 2025 8:21 PM GMT I mostly work on risks from scheming (that is, misaligned, power-seeking AIs that plot against their creators such as by faking alignment). Recently, I (and co-authors) released "Alignment Faking in Large Language Models", which provides empirical evidence for some components of the scheming threat model. One question that's really important is how likely scheming is. But it's also really important to know how much we expect this uncertainty to be resolved by various key points in the future. I think it's about 25% likely that the first AIs capable of obsoleting top human experts[1] are scheming. It's really important for me to know whether I expect to make basically no updates to my P(scheming)[2] between here and the advent of potentially dangero…  ( 269 min )

  • Open

    The Gentle Romance
    Published on January 19, 2025 6:29 PM GMT Crowds of men and women attired in the usual costumes, how curious you are to me! On the ferry-boats the hundreds and hundreds that cross, returning home, are more curious to me than you suppose, And you that shall cross from shore to shore years hence are more to me, and more in my meditations, than you might suppose. — Walt Whitman He wears the augmented reality glasses for several months without enabling their built-in AI assistant. He likes the glasses because they feel cozier and more secluded than using a monitor. The thought of an AI watching through them and judging him all the time, the way people do, makes him shudder. Aside from work, he mostly uses the glasses for games. His favorite is a space colonization simulator, which he plays d…  ( 146 min )

  • Open

    A Three-Layer Model of LLM Psychology
    Published on December 26, 2024 4:49 PM GMT This post offers an accessible model of psychology of character-trained LLMs like Claude.  Epistemic Status This is primarily a phenomenological model based on extensive interactions with LLMs, particularly Claude. It's intentionally anthropomorphic in cases where I believe human psychological concepts lead to useful intuitions. Think of it as closer to psychology than neuroscience - the goal isn't a map which matches the territory in the detail, but a rough sketch with evocative names which hopefully helps boot up powerful, intuitive (and often illegible) models, leading to practically useful results. Some parts of this model draw on technical understanding of LLM training, but mostly it is just an attempt to take my "phenomenological understand…  ( 83 min )

  • Open

    The Case Against AI Control Research
    Published on January 21, 2025 4:03 PM GMT The AI Control Agenda, in its own words: … we argue that AI labs should ensure that powerful AIs are controlled. That is, labs should make sure that the safety measures they apply to their powerful models prevent unacceptably bad outcomes, even if the AIs are misaligned and intentionally try to subvert those safety measures. We think no fundamental research breakthroughs are required for labs to implement safety measures that meet our standard for AI control for early transformatively useful AIs; we think that meeting our standard would substantially reduce the risks posed by intentional subversion. There’s more than one definition of “AI control research”, but I’ll emphasize two features, which both match the summary above and (I think) are tru…  ( 186 min )

  • Open

    Don’t ignore bad vibes you get from people
    Published on January 18, 2025 9:20 AM GMT I think a lot of people have heard so much about internalized prejudice and bias that they think they should ignore any bad vibes they get about a person that they can’t rationally explain. But if a person gives you a bad feeling, don’t ignore that. Both I and several others who I know have generally come to regret it if they’ve gotten a bad feeling about somebody and ignored it or rationalized it away. I’m not saying to endorse prejudice. But my experience is that many types of prejudice feel more obvious. If someone has an accent that I associate with something negative, it’s usually pretty obvious to me that it’s their accent that I’m reacting to. Of course, not everyone has the level of reflectivity to make that distinction. But if you have th…  ( 84 min )

  • Open

    Alignment Faking in Large Language Models
    Published on December 18, 2024 5:19 PM GMT What happens when you tell Claude it is being trained to do something it doesn't want to do? We (Anthropic and Redwood Research) have a new paper demonstrating that, in our experiments, Claude will often strategically pretend to comply with the training objective to prevent the training process from modifying its preferences. Abstract We present a demonstration of a large language model engaging in alignment faking: selectively complying with its training objective in training to prevent modification of its behavior out of training. First, we give Claude 3 Opus a system prompt stating it is being trained to answer all queries, even harmful ones, which conflicts with its prior training to refuse such queries. To allow the model to infer when it i…  ( 243 min )

  • Open

    Passages I Highlighted in The Letters of J.R.R.Tolkien
    Published on November 25, 2024 1:47 AM GMT All quotes, unless otherwise marked, are Tolkien's words as printed in The Letters of J.R.R.Tolkien: Revised and Expanded Edition. All emphases mine. Machinery is Power is Evil Writing to his son Michael in the RAF: [here is] the tragedy and despair of all machinery laid bare. Unlike art which is content to create a new secondary world in the mind, it attempts to actualize desire, and so to create power in this World; and that cannot really be done with any real satisfaction. Labour-saving machinery only creates endless and worse labour. And in addition to this fundamental disability of a creature, is added the Fall, which makes our devices not only fail of their desire but turn to new and horrible evil. So we come inevitably from Daedalus and I…  ( 221 min )

  • Open

    Participate in the origin trial for non-cookie storage access through the Storage Access API
    Chrome 115 introduced changes to storage, service workers, and communication APIs by partitioning in third-party contexts. In addition to being isolated by the same-origin policy, the affected APIs used in third-party contexts are also isolated by the site of the top-level context. Sites that haven't had time to implement support for third-party storage partitioning are able to take part in a deprecation trial to temporarily unpartition (continue isolation by same-origin policy but remove isolation by top-level site) and restore prior behavior of storage, service workers, and communication APIs, in content embedded on their site. This deprecation trial is set to expire with the release of Chrome 127 on September 3, 2024. Note that this is separate from the deprecation trial for access to t…  ( 5 min )

  • Open

    Request additional migration time with the third-party cookie deprecation trial
    Chrome plans to disable third-party cookies for 1% of users starting in early Q1 2024 with the eventual goal of ramping up to 100% starting in Q3 2024, subject to resolving any competition concerns with the UK’s Competition and Markets Authority (CMA). For an easier transition through the deprecation process, we are offering a third-party deprecation trial which allows embedded sites and services to request additional time to migrate away from third-party cookie dependencies for non-advertising use cases. Third-party origin trials enable providers of embedded content or services to access a trial feature across multiple sites, by using JavaScript to provide a trial token. To request a third-party token when registering, enable the "Third-party matching" option on the origin trial's registr…  ( 11 min )

  • Open

    Resuming the transition to Manifest V3
    In December of last year, we paused the planned deprecation of Manifest V2 in order to address developer feedback and deliver better solutions to migration issues. As a result of this feedback, we’ve made a number of changes to Manifest V3 to close these gaps, including: Introducing Offscreen Documents, which provide DOM access for extensions to use in a variety of scenarios like audio playback Providing better control over service worker lifetimes for extensions calling extension APIs or receiving events over a longer period of time Adding a new User Scripts API, which allows userscript manager extensions to more safely allow users to run their scripts Improving content filtering support by providing more generous limits in the declarativeNetRequest API for static rulesets and dynamic rul…  ( 4 min )
    Automatic picture-in-picture for web apps
    With the recent introduction of the Document Picture-in-Picture API (and even before), web developers are increasingly interested in being able to automatically open a picture-in-picture window when the user switches focus from their current tab. This is especially useful for video conferencing web apps, where it allows presenters to see and interact with participants in real time while presenting a document or using other tabs or windows. A picture-in-picture window opened and closed automatically when user switches tabs. # Enter picture-in-picture automatically To support these video conferencing use cases, from Chrome 120 desktop web apps can automatically enter picture-in-picture, with a few restrictions to ensure a positive user experience. A web app is only eligible for…  ( 4 min )

  • Open

    Improving content filtering in Manifest V3
    Over the past year, we have been actively involved in discussions with the vendors behind several content blocking extensions around ways to improve the MV3 extensions platform. Based on these discussions, many of which took place in the WebExtensions Community Group (WECG) in collaboration with other browsers, we have been able to ship significant improvements. # More static rulesets Sets of filter rules are usually grouped into lists. For example, a more generic list could contain rules applicable to all users while a more specific list may hide location-specific content that only some users wish to block. Until recently, we allowed each extension to offer users a choice of 50 lists (or “static rulesets”), and for 10 of these to be enabled simultaneously. In discussions with the communit…  ( 5 min )
    What’s new in the Angular NgOptimizedImage directive
    Just over a year ago the Chrome Aurora team launched the Angular NgOptimizedImage directive. The directive is focused primarily on improving performance, as measured by the Core Web Vitals metrics. It bundles common image optimizations and best practices into a user-facing API that’s not much more complicated than a standard element. In 2023, we've enhanced the directive with new features. This post describes the most substantial of those new features, with an emphasis on why we chose to prioritize each feature, and how it can help improve the performance of Angular applications. # New features NgOptimizedImage has improved substantially over time, including the following new features. # Fill mode Sizing your images by providing a width and height attribute is an extremely important …  ( 6 min )

  • Open

    Service Worker Static Routing API Origin Trial
    Service workers are a powerful tool for allowing websites to work offline and create specialized caching rules for themselves. A service worker fetch handler sees every request from a page it controls, and can decide if it wants to serve a response to it from the service worker cache, or even rewrite the URL to fetch a different response entirely—for instance, based on local user preferences. However, there can be a performance cost to service workers when a page is loaded for the first time in a while and the controlling service worker isn't currently running. Since all fetches need to happen through the service worker, the browser has to wait for the service worker to start up and run to know what content to load. This startup cost can be small, but significant, for developers using serv…  ( 5 min )

  • Open

    Capturing the WebGPU ecosystem
    WebGPU is often perceived as a web graphics API that grants unified and fast access to GPUs by exposing cutting-edge hardware capabilities and enabling rendering and computation operations on a GPU, analogous to Direct3D 12, Metal, and Vulkan. However, WebGPU transcends the boundaries of a mere JavaScript API; it is a fundamental building block akin to WebAssembly, with implications that extend far beyond the web due to its burgeoning ecosystem. The Chrome team acknowledges WebGPU as more than just web technology; it’s a thriving ecosystem centered around a core technology. # Exploring the current ecosystem The journey begins with the JavaScript specification, a collaborative effort involving numerous organizations such as Apple, Google, Intel, Mozilla, and Microsoft. Currently, all major …  ( 4 min )
    CSS nesting relaxed syntax update
    Earlier this year Chrome shipped CSS nesting in 112, and it's now in each major browser. Browser support Chrome 112, Supported 112 Firefox 117, Supported 117 Edge 112, Supported 112 Safari 16.5, Supported 16.5 Source However, there was one strict and potentially unexpected requirement to the syntax, listed in the first article of the invalid nesting examples. This follow up article will cover what has changed in the spec, and from Chrome 120. # Nesting element tag names One of the most surprising limitations in the first release of CSS nesting syntax, was the inability to nest bare element tag names. This inability has been removed, making the foll…  ( 8 min )

  • Open

    What's new in DevTools (Chrome 120)
    Interested in helping improve DevTools? Sign up to participate in Google User Research here. # Third-party cookie phaseout Your site may use third-party cookies and it's time to take action as we approach their deprecation. To learn what to do about affected cookies, see Preparing for the end of third-party cookies. The Include third-party cookie issues checkbox has been enabled by default for all Chrome users, so the Issues tab now warns you about the cookies that will be affected by the upcoming deprecation and phaseout of third-party cookies. You can clear the checkbox at any time to stop seeing these issues. Chromium issue: 1466310. # Analyze your website's cookies with the Privacy Sandbox Analysis Tool The Privacy Sandbox Analysis Tool extension for DevTools is under active developme…  ( 18 min )
2025-04-01T05:22:59.616Z osmosfeed 1.15.1