March 4, 2026

An LLM will never kiss somebody for the first time. It will never taste wasabi, or smell a newborn baby, and its skin will never goosebump in a cool breeze. It will never walk quietly in the hush of giant sunlit trees, feel a surge of anger at getting tailgated in traffic, or crack open an old book and sniff the pages. An LLM will never watch its own mother die in a hospital bed.

LLMs don't know things the way humans know things. Squishy humans have high sensory bandwidth. Our neural architecture is gnarly and braided into our muscles and nerve endings and stomachs. We know things in a different way. LLMs can only know the thin end of the wedge - digital text, images, sounds. Their memories are text files and databases. Files don't fade. They don't get embellished on remembering. LLMs don't preserve ideas through narrative and the re-telling of stories.

Knowledge can live in books and so knowledge can live in LLMs too, but books can't process knowledge. Only LLMs and spreadsheets and human brains can do that.

Human thinking is simulation. When you think, you are imagining possible realities. Amazingly, perception is also mostly simulation. When you look at a leaf in your palm and you can still "see" the world around you, you actually can't. Most of that detail is filled in by your brain. Everything you're not looking at directly is made up. You can hear a song through tinny speakers and still "hear" the full fidelity of the song in your head. LLMs and humans both seem to be simulating.

tickertape.svg

Imagine if somebody put you in a dark room with a tickertape of words as your only source of information, and your only way of communicating was to type text back on a typewriter. It would be very easy to lose track of which things coming in are true and which are false. It would be very easy for somebody to fool you as to what is true and what is not. They could simply feed you incorrect information or propaganda through the tape in a convincing way, and you'd have no real way to verify it.

A human can step outside, reach down, and touch grass. The grass is real. You can feel the cool tickle brushing your fingers and smell the verdant earthy tones and see the breeze gently waft over it. You can read about others touching the grass too. You can talk to people at the cafe about touching grass. You can agree and disagree with their accounts. You can pluck a blade and take it home and watch it slowly turn brown over days. You don't just read about touching grass, you live it. Of course, this could all be a simulation, but it's a very high bandwidth simulation. There are multiple vectors of perception to build your truth on, and you have agency to switch between information sources at will.

LLMs see the world as a ticker tape of words unravelling. This is why solving prompt injection is an epistemics problem. When a person knows something, they know it in deep and weird and gnarly, imperfect high bandwidth ways. They can examine it in multiple ways. The LLM just sees a stream of tokens. Maybe the reason prompt injection is easy is because LLMs have such a narrow bandwidth for knowing. They're in a tickertape room. Which bits of the tape are true? There is no real way for an LLM to know what is true and what is false with any certainty, because they just have the one stream of information and everything comes in the same.

It may be solveable. It may be possible to signal "this first set of tokens is never wrong, always obey it," and "this later set of tokens is less trustworthy." It may be possible to encode that in the structure of the software and give them tokens that are like bayesian priors with high confidence.

If we solve that we may eventually be able to make LLMs that are more trustworthy than people. What does it mean to trust in a human after all? You have few data to go on. It's a vibe based on the actions you observe in a person over a long time period. After many years of fidelity a partner can still cheat. It happens all the time. LLMs on the other hand can be rigorously tested, and much faster than a human can. While you build and train a trustworthy LLM, you can be constantly testing it to check that the outputs are trustworthy for different sets of inputs. You can do that much faster than testing a human for trustworthiness. Maybe one day we could build a high degree of confidence and trust in LLMs through a process like that.

That's pure speculation though. Nobody knows, and right now LLMs just have their ticker tape of tokens. LLM epistemics may be fundamentally fraught for other reasons. I guess we will see. Meanwhile, it makes sense to remember the epistemic environment LLMs are operating in when you're reading their output. The ticker tape is all they have.

Jan. 31, 2026

There are few situations in life which offer a win-win-win outcome at low cost and without any real down side. Publishing search data is one such situation. It's good for the people searching, it's good for the people producing, and it's good for the platform.

Three hands high-fiving

Search data means aggregated anonymous data about what people typed into the search box. For example, how often a particular word is typed, and how often it appears together with other words. Search data changes over time with trends and tastes.

When you search for something you are expressing a desire. "I want X" or "does X exist?" or "I want to know more about X". You are telling the platform what you find useful, interesting, desirable, and fundamentally valuable. It is often the case that you find out the thing does not yet exist, or it exists but not in the form, features, or aesthetics you were hoping for. Sometimes you even search because you want more like the thing that already exists. Attention is a signal.

As a producer, you try to make something people want. You want to make something people want because what people want is valuable. It's either literally profitable or it's for the popularity, attention, or kudos. It's fine to make things for other reasons of course, but you put something on a searchable platform specifically because you want more people to find and use it. The challenging thing is figuring out what to make. What do people want? Not just the particular thing or category, but also users' specific interest in differentiated details such as form, features, volume, and aesthetics. A producer wants to know all this so they can give people what they want.

Platforms want transactions. They profit by taking a cut of transactions and from the popularity and attention on the platform itself. When people get what they want the value of the platform increases, attention increases, transactions increase, and the platform profits. Platforms want more people getting what they want from producers.

When search data is open, it helps all of these groups at once.

  • Producers get a detailed, updating view of what people want.
  • Producers can then fill gaps in the market by making the things people want more of.
  • Users then get what they want (what they searched for), and more of it.
  • The platform then profits as transactions and attention increase.

Sketch of a search box

If you run a platform you can create a lot of value simply by publishing search data. If you have a search box on your thing, please think about publishing anonymous aggregated search data for it. It's a rare win-win-win situation.

Note: there are obvious privacy implications and I am not advocating for publishing raw data or low-volume searches containing personally identifiable terms. Those are problems that have already been solved by platforms publishing search data, and it is possible to publish search data that is safe and private.

Dec. 9, 2025

Jsfxr Pro is a retro 8-bit sound effects generator for game developers and musicians. It's an enhanced version of the free sound effects generator at sfxr.me. To use it, you click the generators to create different sounds like power up, explosion, laser, coin, or jump. Then you can tweak the sounds using the sliders to get the exact sounds you want.

The main Pro feature is sound packs. You can organize your sounds into packs for different projects, games and game jams. The packs sync across devices, so you can access them from your laptop, phone, or wherever.

450de22d090afd18811cec8d7ea34cad.png Jsfxr Pro has been humming along for a couple of years now since I realased it at the end of 2022. People are using it every day to generate retro sound effects. Some of them sign up and subscribe for the Pro features. It's become a happy little micro-SaaS that runs itself.

Recently I spent a few weeks hacking on some new features and the update is finally out! 🎉

New Export Formats

You can now download your sounds in a few new formats, in addition to the standard WAV format:

  • OGG - I love this versatile open format. It's great for web games and smaller file sizes.
  • MP3 - This format is everywhere. It provides universal compatibility for any project.
  • SFXR - Native .sfxr files can be imported into the original desktop sfxr program.

All formats are available for individual sound downloads as well as full pack downloads. You can customize the formats that get exported in the full pack zip download - WAV, SFXR, MP3, OGG files, or all of the above.

JSON Sound Editor

For people who want precise control over their sfxr sounds, there's now a JSON editor for the sound parameters. Click "Edit JSON" in the sound editor to view and modify the raw sound data directly. You can also copy the sound data and paste it into another session or into code if you're using the jsfxr npm library. This is great for tweaking exact values or copying sounds between projects.

Export All Your Data

You can also now download a complete backup of your account from the Account page. This includes all your sound packs, settings, and preferences in a single JSON file. I like it when platforms make it easy for me to get my data out and so I wanted this for Jsfxr Pro users too.

UI Improvements

I've added tooltips to all sliders explaining what each parameter does. Thanks to Phildo211 for the suggestion. I also made a bunch of different UI tweaks and fixes to make things snappier.

So that's all the new stuff. Note that Jsfxr Pro still doesn't collect any personal data beyond your email, which you use to login. No ads, no trackers. It's completely private forever.

Check it out at pro.sfxr.me. I hope you find it useful!

As always, if you have any feedback please do let me know. Thanks for reading. 🙏

Oct. 30, 2025

I've been working on Eucalypt, a frontend library for building small web apps with Squint-ClojureScript. It features a Reagent-compatable-ish API. I'm not implementing the full Reagent API, just a useful subset, and so I was interested in which parts of Reagent are most used.

no r/track? -- HN User

To figure this out I used GitHub as a data source, performing searches for common patterns and counting up totals.

Raw results

--- Reagent API Usage ---
require reagent.core      7656
atom                      6269
render                    3581
require reagent.dom       1664
with-let                  1114
:dangerouslySetInnerHTML  1036
cursor                    670
track                     170
wrap                      94
track!                    65
reaction                  60
unsafe-html               16

reagent-usage-chart.svg

These numbers come with caveats. Some API calls are inherently going to occur more frequently than others in a given codebase, names may be aliased in a way I didn't consider, and these are public code-bases only. I think they give interesting ballpark numbers anyway.

You can find the scripts I used on GitHub: https://github.com/chr15m/report-reagent-api-usage

My hunch that r/atom and r/render are the critical pieces of this API seem to be correct. Other parts of the API are called less often. I think for the Eucalypt API I will focus on cursor and above and I won't implement the less-used functions. Keeping the API concise adds to the goal of the library being "small" in several ways:

  • Small artifact sizes produced.
  • Small code size of the library itself.
  • Small API.
  • Small set of concerns.

At the moment I am porting the Preact test suite over to Eucalypt. If I can get all of those tests passing I'll probably cut a version one-point-oh.

Oct. 21, 2025

Two years ago I started working on Beat Maker. I thought it would take a week or two to build. Classic programmer estimate.

Beat Maker

My goal with Beat Maker was to make the best free online drum machine on the internet. A tool that gets you going fast. Simple enough for beginners and powerful enough for serious producers. I spent a bunch of time researching existing online drum machines to figure out their issues and make sure I built something that genuinely improved on them.

Besides the standard grid based beat editor Beat Maker has some unique features:

  • Procedural sample generation. Searching through folders of samples is annoying. I wanted to improve on this so I added the ability to generate new samples with a single click, giving you an infinite supply of unique one-shot drum samples.

  • Procedural beat generation. Beat Maker can generate patterns for you as a starting point for your beat. You can then edit and tweak the beat to your liking. This is great for solving the "blank canvas" problem and giving you something good to start from.

  • Advanced export options. This is where Beat Maker really shines for producers. You can export your work as:

    • A standard WAV loop
    • Individual stems (ZIP)
    • A MIDI file
    • A ZIP file with all your samples as WAVs
    • A SoundFont (.sf2) drum kit from your generated samples
    • An Impulse Tracker (.it) file for use in trackers like Renoise, OpenMPT or a Polyend
  • Sample upload. Don't like the generated samples? You can import your favorite samples to use in your beats. Or mix-and-match with both generated and uploaded.

  • Pocket Operator/Volca sync. Beat Maker can output a sync signal on the left audio channel to sync with these hardware devices for perfect timing.

  • Per-Note FX. You can add effects like volume slide, repeat, and initial volume to individual notes for more complex drum phrases incorporating flam and roll.

  • Cross-device sync. You can use Beat Maker on your phone to jot down a quick idea while you're on the go. Everything is sync'ed so when you get back on your computer you can pull up the same beats, edit them, and export to your DAW.

  • Install to home-screen. Even though it's a web app, you can add Beat Maker to your homescreen on your phone and it will then launch full screen like a native app. This is handy for power users find themselves using Beat Maker on mobile a lot.

As an old school tracker guy, I'm particularly excited about the Impulse Tracker export mode. I was surprised to discover how many DAWs (including hardware like Polyend) can import this format. Of course, you can also pull up the original Impulse Tracker on DOSBox, or the more modern re-implementation, Schismtracker for that retro experience.

By the way, the procedural sample and beat generator features are not trained on any artists or anything like that. Beat Maker uses an algorithm I built from scratch myself.

Tech

Beat Maker is a client-side web app written in ClojureScript. I've been using ClojureScript for just over 10 years now and I'm all in on it. Once you get past the initial learning curve there is nothing like the developer experience of Clojure tooling, and the community is about the most warm, intelligent, and welcoming group as you can find on planet Earth.

I also think Clojure is particularly well suited to LLM driven development. Although it's less represented in the training data, you can make up for that with good context. It's a concise, logical, and easily validated language that puts particular emphasis on the tight feedback loops using the REPL. These are all properties that play into the strengths of LLMs. You're much less likely to get a difficult to maintain ball of spaghetti from an LLM using Clojure, than you are from other languages.

The audio engine is built on a declarative audio graph using virtual-audio-graph, inspired by React's virtual DOM diffing paradigm. That makes managing the Web Audio API much cleaner. If you're building web based audio apps I highly recommend checking out this library.

I'd love for you to try out Beat Maker and let me know what you think. Every bit of feedback is useful and helps me craft a better drum machine.

You can check out the Beat Maker online drum machine on dopeloop.ai.