1. 23
    1. 12

      Little projects like this make accidental complexity really obvious to me. If 5 minutes with an LLM is enough to produce a little app, why is it not enough for a human programmer? There are many any reasons, some essential (computers have more memory and think faster than us), but it’s still the case that a lot of features are much harder to build than they are to describe because the tools are a poor fit for the programmer.

      As someone who likes programming, asking “what if building the thing was as easy as describing the thing?” is a rich source of possible improvements.

      1. 5

        LLMs are super helpful for “Sunday programmers”. The copypasted spaghetti code may be offensive to professionals, but even bad code is enabling non-programmers make tools and achieve things that they couldn’t do themselves before.

        Programming has so many silly barriers. For example, basic tasks in Web app JS have a trap of Netscape-era APIs that may look simple, but do a wrong thing. Inexperienced user will copy a legacy API from W3Schools, then find a StackOvefow answer and spend three days setting up React to run a component that just calls a newer built-in method.

        Some tasks that sound simple like getting x/y position of an element on the screen and placing something next to it are a tour of the document model, rendering modes, concepts like containing blocks and z-index that won’t work, and there are several generations of different APIs trying to solve this problem, so when you search for answers about it, you’ll get a lot of different ones, mostly buggy.

      2. 1

        @simonw I’ve played with Claude/Aider for similar one-off/glue code scripting. I hesitate to use it in any project I care about because of the uncertainty around copyright. Do you have a similar concern, or ideas about how it’ll shake out? (I’m aware of NYT v. OpenAI which hits this topic, but nothing more code-specific).

        1. 1

          Wow, thanks for writing this up! I hit Claude’s artifact feature by accident a few weeks ago, and I was very impressed with the results in helping me with CSS flexbox

          Some thoughts after clicking through, and checking out the code.

          Edit: TBH I am detecting a theme of “shell + GUI”, hopefully that is not just me having it on my brain :-)


          • URL to markdown - works on my home page

            • feels like curl | html-to-md to me :)
          • sqlite: It’s cool you can just paste in the sqlite JS documentation, and it can follow it! The generated code looks pretty good.

            • this is basically making a little shell for sqlite JS
          • Extracting URLs - this is something I’ve wanted too, though it feels like this kind of thing is naturally done in some kind of shell/Emacs environment. It is weird to me that HTML feels “coupled” to JS/the browser, because they have the “authoritative” DOM APIs

            • This reminded me of a previous discussion about Puppeteer and JS being the best language for web scraping
          • clipboard viewer

            • I view this as another little REPL, plus showing data in a different debuggable format. Sort of like a repr() for an internal browser API.
          • PyOdide - another REPL, I also like having every tool I use “available” in a fast/shallow way like this

          (no comment on Photo Camera Settings, pricing calcuator)

          • YAML to JSON - hm it’s cool it is live as you type. No source code for this one? I did “view source” on claude.site and it wasn’t very helpful

            • another shell / GUI problem :)
          • OpenAI audio

          • QR code, Image converter and page downloader, HTML entity escaper - useful data transformations

          • text-wrap-balance-nav - makes sense, I often want some kind of live preview

          • ARES Phonetic alphabet converter - cool


          I honestly wonder how you FIND all the tools when you need them. If I made 14 tools in 7 days, I might forget were I put them, or that I even made them. (That has happened to me with CLIs and git repos – occasionally I stumble across one I wrote and forgot about!)

          To me, it would be nice to have a search bar where you can type “sqlite js”, ’yaml to json”, “pyodide”, or other free -form strings, and it would bring up the right tool

          Sort of like OS X spotlight (is this getting any better?), what used to be Google desktop search, or how you can Google a mathematical formula like “1 + 3” and you get a calculator app:

          https://www.google.com/search?q=1+%2B+3

          I agree that these tools are filling a hole (IMO shell-like), so I could see it going 2 ways:

          1. some kind of magic natural language interface to glue it all together, more like the google example
          2. some kind of principled shell with typed data like :

          • URLs
          • YAML, JSON
          • clipboards
          • sqlite code, pyodide code
          • API descriptions like OpenAI audio
          • QR codes

          It does seem to be “begging” for a better interface than one-off apps.

          And to me it’s also begging for the data transformations to be reusable in programs, decoupled from the GUI, if a situation calls for it

          And hopefully the apps could be improved over time, rather than being something that each person has to generate with an LLM! I do find it odd that we arrived here :)

          Again I think finding/discovering such tool is a problem. Some of these probably exist as sudo apt-get install clipboard-tool, but nobody knows about them. And sharing/improving is a problem.


          It also reminds me of Arcan FE by @crazyoglad a bit, as many of the use cases were around showing representations of programming/system data, and displaying them, and interacting with them

          https://lobste.rs/domains/arcan-fe.com

          I think @matklad was also talking about an Emacs/terminal “replacement” as well. I feel like the fact that these apps are useful is pointing to “a hole” in computing UI

          1. 2

            Oops, thanks for pointing out the missing YAML to JSON code - I added a link to the chat transcript (which includes the code), that’s here: https://gist.github.com/simonw/d861edb70a3572cb03de6f98a0caf3bc

            I do a whole bunch of LLM stuff on the CLI too - most frequently my llm-cmd command which looks like this:

            llm cmd extract mp3 audio from pelican-data-journalists.mp4 with ffmpeg
            

            Running that then outputs a command like this one, which you hit “enter” to run (so you can review it first):

            ffmpeg -i pelican-data-journalists.mp4 -vn -acodec libmp3lame -q:a 4 pelican-data-journalists.mp3
            

            Having a UI that ties all of these little tools together is an interesting idea. I manually link to some of them from my https://tools.simonwillison.net/ homepage but it would be neat to have a UI for switching between them more easily. I’ll have a think about that.