HN user

burntcaramel

404 karma
Posts77
Comments76
View on HN
royalicing.com 12d ago

Agents of Our Own Illiteracy

burntcaramel
2pts0
economist.com 13d ago

Rise of the Gen-Z Luddite

burntcaramel
3pts0
www.economist.com 20d ago

Carson Block: If you thought the global financial crisis was bad

burntcaramel
4pts0
royalicing.com 29d ago

Death by a Thousand Comments

burntcaramel
39pts4
economist.com 2mo ago

Oil markets are still in La-La land

burntcaramel
6pts0
rensbr.eu 5mo ago

Don't use escaping closures in SwiftUI

burntcaramel
1pts0
royalicing.com 6mo ago

Levers of Light

burntcaramel
2pts0
www.economist.com 10mo ago

What if the $3T AI investment boom goes wrong?

burntcaramel
7pts1
justinjaffray.com 11mo ago

Null Bitmap Zine #1 [pdf]

burntcaramel
2pts0
subs.ft.com 1y ago

Why Trump can't dislodge Apple from China

burntcaramel
5pts2
royalicing.com 1y ago

Test Driven Vibes

burntcaramel
3pts0
www.economist.com 1y ago

How America could end up making China great again

burntcaramel
6pts1
royalicing.com 1y ago

Test Driven Vibes

burntcaramel
2pts0
icing.space 1y ago

Infinite Bicycles for the Mind

burntcaramel
2pts0
brooker.co.za 1y ago

Versioning versus Coordination

burntcaramel
65pts2
www.ft.com 1y ago

Trump picks David Sacks as crypto and AI tsar

burntcaramel
8pts7
www.massicotte.org 1y ago

Problematic Swift Concurrency Patterns

burntcaramel
1pts0
react-spectrum.adobe.com 1y ago

Accessible Color Descriptions for Improved Color Pickers

burntcaramel
1pts0
www.economist.com 1y ago

What will happen if America's election result is contested?

burntcaramel
3pts0
evertpot.com 2y ago

ECMAScript 4: The Missing Version

burntcaramel
3pts0
www.bloomberg.com 2y ago

Adobe Races to Prepare Plan to Save Figma Deal from EU Veto

burntcaramel
2pts0
icing.space 2y ago

Think of your visual UI as progressive enhancement on an accessible core

burntcaramel
1pts0
www.economist.com 2y ago

How Ted Lasso Killed Tony Soprano

burntcaramel
2pts0
icing.space 2y ago

Web App vs. Site vs. Hybrid

burntcaramel
1pts0
www.economist.com 2y ago

Places claiming to be centenarian hotspots may just have bad data

burntcaramel
2pts1
www.economist.com 3y ago

Wage-price spirals are far scarier in theory than in practice

burntcaramel
2pts0
www.inverse.com 3y ago

I Used Apple’s Vision Pro and It’s Absolutely Mind-Blowingly Impressive

burntcaramel
12pts2
lemire.me 3y ago

How many floating-point numbers are in the interval [0,1]? (2017)

burntcaramel
113pts66
twitter.com 3y ago

PHP and WebAssembly Running on Netlify Edge Functions

burntcaramel
4pts0
twitter.com 3y ago

99% of modern VFX relies on this image

burntcaramel
1pts0

I love the line “This friction synchronizes people.”

Part of the understanding that is missed being learned by the team are the failure modes: how can this system fail and how catastrophic is it?

Now I fear only the users will learn via data loss, leaks, and hacks.

Yet another example where using <form method="post"> and <input> with zero JavaScript would be a better user experience. If you are going to write custom code you have to clear the minimum bar of what the browser provides.

Thanks for your honest thoughts. It bothers me because there’s many places to check all the time. It seems every tool has an inbox and wants to send me notifications about it. I have to read them all to keep up to date, and my job becomes piecing them all together into a cohesive story just to make sense of what’s going on at work.

It can feel super useful as an engineer to find a line of code in PR or a sentence in a Notion document, and then add your feedback directly there. But then I find the conversation half happens on Slack, and then continues in a Zoom meeting, and then the comment on the Notion doc is out of date. So I have to keep track of all of this in my head with which piece of feedback is stale and which one is still relevant, and then reconcile that with feedback from others.

It’s assumed that we need another tool, something that can do the job of retrieving all of these comments and reconciling them into a total order. My article asks whether reconciling decisions into a total order is actually part of the job of leadership. If we defer to AI to make sense of what we’re saying and deciding then we risk the people and the org becoming weaker from lack of clarity.

if you can use AI to achieve full test coverage, are there actual benefits in static typing for coding agents?

Full test coverage doesn’t tell you if the tests behave correctly. So you could prompt an AI agent to write 100% test coverage where those tests could be exercising all code paths yet contribute 0% to the story of what the code does. You need human understanding of what the desired contract is that the tests check.

Imagine a contract lawyer who blindly signs any contract that they are given: they aren’t doing their job. They ought to have an idea in mind of what their client’s goals and limits are so they can determine if a given contract fulfils those needs.

Types are a declarative contract, so they can be a lighter yet more limited way to enforce a contract. The compiler can verify if all the declared types across the program agree with each other. This is especially helpful with refactoring, such as ensuring the adding a field has been rolled out everywhere.

Types aren’t to be just checked by the compiler, but checked by the human authors too. That’s why explicit type signatures are valuable, especially if they are kept intelligible. They encode the different variations in state and possible branching on that state. So you can whittle your types down as a way of whittling the solution down to be more focused. The problem in your head is reflected in the types, and any simplifications in the types then simplify the problem in your head, and any tests derived from that understanding.

It definitely wasn’t “working great”, I’ve now fixed a bug in the event system that was causing loops. The performance should be improved now.

Yes, accessibility is a key concern of mine, I’m keen to explore html-in-canvas as a way to have an accessibility tree combined with a rendered interaction.

I’m personally at a stage where React and CSS have pushed to DOM to extremes of complexity and difficultly in optimization that I desire simpler ARIA-based HTML combined with custom rendering. I’m hopeful that it will be easier to test, lighter for users, and faster for everyone.

I’ve found canvas + WebAssembly works great together!

Here’s an example of Sudoku running in WebAssembly (it was vibe coded in Zig) and then rendered to canvas. The interface between the wasm module and the browser is function calls for keyboard and mouse events, and then another that renders to a pixel buffer to copy to the canvas.

https://qip.dev/play-sudoku

And this approach also works for simple forms, such as a URL input that gets turned into a QR code. Again the interface is simple, here converted a URL into SVG markup. As you type in the input we call the WebAssembly render function again.

https://qip.dev/qr

Exactly, this is why I’m using AI to write C or Zig that compiles to WebAssembly.

The purpose of a scripting language was to make authoring easier, but now it’s mostly a middle layer. There’s still getting the investment of a great standard library to keep you on track, but if you pick parts to make modular wasm and which parts to use reliably, proven code you can find a good balance.

For qip I chose to use Golang as its standard library is batteries-included with fs & networking.

Then everything else is AI-coded wasm plugins.

https://github.com/royalicing/qip

In a world of AI coding it seems like we can create or copy almost anything. So after some denial I’m thinking let’s embrace that and bring back “view source”.

qip lets you write tiny WebAssembly modules in Zig or C and compose them together. The modules have a simple input -> output interface and cannot access anything else, no file system, no network, no env vars, not even the time. You chain modules together so the output of one becomes the input of another e.g. there’s a CommonMark module that converts to markdown-to-html. There’s a file-based router that lets you serve a website with these same modules.

I want these modules to be open and shared, so you can decide to have a `/view-source` page that lists all the wasm modules and all the source content (markdown, images, etc) and source code (zig, c). So you can choose to fork the ingredients of the qip website if you like: https://qip.dev/view-source

I chose wasm because it’s fast, runs anywhere (browser/server/native), and has a strong yet lightweight sandbox. I’m working on collaborative web hosting that I hope will bring back web 1.0 vibes.

https://github.com/royalicing/qip

Previously Anthropic subscribers got access to the latest AI but it seems like there’s a League of Software forming who have special privileges. To make or maintain critical software will you have to be inside the circle?

Who gates access to the circle? Anthropic or existing circle members or some other governance? If you are outside the circle will you be certain to die from software diseases?

Having been impressed by LLMs but not believing the AGI hype, I now see how having access to an information generator could be so powerful. With the right information you can hack other information systems. Without access to the best information you may not be able to protect your own system.

I think we have found the moat for AI. The question is are you inside or outside the castle walls?

The allocation of each object still has overhead though, even if they all live side-by-side. You get memory overhead for each value. A Uint8Array is tailor-made for an array of bytes and there’s a constant overhead. Plus the garbage collector doesn’t even have to peer inside a Uint8Array instance.

WebAssembly is particularly attractive for agentic coding because prompting it to write Zig or C is no harder than prompting it to write JavaScript. So you can get the authoring speed of a scripting language via LLMs but the performance close to native via wasm.

This is the approach I’m using for my open source project qip that lets you pipeline wasm modules together to process text, images & data: https://github.com/royalicing/qip

qip modules follow a really simple contract: there’s some input provided to the WebAssembly module, and there’s some output it produces. They can’t access fs/net/time. You can pipe in from your other CLIs though, e.g. from curl.

I have example modules for markdown-to-html, bmp-to-ico (great for favicons), ical events, a basic svg rasterizer, and a static site builder. You compose them together and then can run them on the command line, in the browser, or in the provided dev server. Because the module contract is so simple they’ll work on native too.

We said the runtime asks the OS for large chunks of memory. Those chunks are called arenas, and on most 64-bit systems each one is 64MB (4MB on Windows and 32-bit systems, 512KB on WebAssembly).

Incorrect. You ask the OS for pages. (Golang does internally appear to manage its heap into “arenas”.) On WebAssembly the page size is 64KiB. Window 64-bit it’s 4KiB, Apple Silicon 16KiB, Linux x86_64 4KiB.

If people who wore Google Glass without respect for others were Glassholes, perhaps people who unleash their OpenClaw instance onto the internet without respect are Clawholes?

I’m working on qip, a cli for running fast sandboxed WebAssembly modules.

https://github.com/royalicing/qip

We have LLMs that generate code but that code should be untrusted: perhaps it overflows or tries to read ssh keys. If we aren’t reviewing code closely a major security hole could be on any line.

And since LLMs can generate in whatever language, it makes sense for them to write fast imperative code like C or Zig. We don’t have to pick our favorite scripting language for the ergonomics any more.

So qip tries to solve both problems by running .wasm modules in a sandbox. You can pipe from other cli tools and you can chain multiple modules together. It has conventions for text, raw bytes, and image shaders, with more to come.

I am excited by the capabilities of probabilistic coding agents, but I want to combine them deterministic code and that what these qip modules are. They are pure functions with imperative guts.

WebAssembly Text Format (wat) is fine to use. You declare functions that run imperative code over primitive i32/i64/f32/f64 values, and write to a block of memory. Many algorithms are easy enough to port, and LLMs are pretty great at generating wat now.

I made Orb as a DSL over raw WebAssembly in Elixir. This gives you extract niceties like |> piping, macros so you can add language features like arenas or tuples, and reusability of code in modules (you can even publish to the package manager Hex). By manipulating the raw WebAssembly instructions it lets you compile to kilobytes instead of megabytes. I’m tinkering on the project over at: https://github.com/RoyalIcing/Orb

Don’t forget people’s minds.

- Which brands do people trust? - Which people do people of power trust?

You can have all the information in the world but if no one listens to you then it’s worthless.

This is why Steve Jobs demoed software. Watch when he unveils Aqua, there’s a couple of slides of the lickable visuals and then he sits down and demos it. He clicks and taps and shows it working. Because that’s what you the user will do.

He’ll show boring things like resizing windows because those things matter to you trying and if he cares about resizing windows to this degree then imagine what else this product has.

Apple today hides behind slick motion graphics introductions that promise ideal software. That’s setting them up to fail because no one can live up to a fantasy. Steve showed working software that was good enough to demo and then got his team to ship it.

I'm working on a compiler for WebAssembly. The idea is you use the raw wasm instructions like you’d use JSX in React, so you can make reusable components and compose them into higher abstractions. Inlining is just a function call.

https://github.com/RoyalIcing/Orb

It’s implemented in Elixir and uses its powerful macro system. This is paired with a philosophy of static & bump allocation, so I’m trying to find a happy medium of simplicity with a powerful-enough paradigm yet generate simple, compact code.

Yes I’m also working on a SQLite parser, mine is in raw WebAssembly. Is yours open source too? This tool will be so useful. I have basic page reading and parsing of the CREATE TABLE schema: https://github.com/RoyalIcing/SilverOrb/blob/9dacad0ce521b0d...

My plan is to create a miniature .wasm module to read .sqlite files that works in the browser. It will be in the tens of kilobytes rather than the 1 megabyte that the official fantastic sqlite.wasm is. The reduced download means even on 3G you ought to be able to load within a few seconds. You can use SQLite files as your network payloads then, and perhaps even as the working mutable state synced between server and clients.

I agree, and I really like the concrete examples here. I tried relating it to the concept of “surprise” from information theory — if what the LLM is producing is low surprise to you, you have a high chance of success as you can compare to the version you wrote in your experienced head.

If it’s high surprise then there’s a greater chance that you can’t tell right code from wrong code. I try to reframe this in a more positive light by calling it “exploration”, where you can ask follow up questions and hopefully learn about a subject you started knowing little about. But it’s important for you to realize which mode you are in, whether you are in familiar or unfamiliar waters.

https://royalicing.com/2025/infinite-bicycles-for-the-mind

The other benefit an experienced developer can bring is using test-driven development to guide and constrain the generated code. It’s like a contract that must be fulfilled, and TDD lets you switch between using an LLM or hand crafting code depending on how you feel or the AI’s competency at the task. If you have a workflow of writing a test beforehand it helps with either path.

https://royalicing.com/2025/test-driven-vibes

I agree, just because these AI tools give you coding superpowers doesn’t mean you’re a super coder.

There’s a difference between accelerating something you know how to do long hand, and automating something you couldn’t fix or replace yourself.

So it’s helpful to know if you are in a familiar mode or exploratory mode.

I wrote more about these two modes and the element of surprise here https://icing.space/2025/infinite-bicycles-for-the-mind

If data isn’t actually removed until vacuuming, then are systems that perform SQL DELETES actually GDPR compliant? Because technically the private data is still there on disk and could be recovered. “Until the autovacuum process or a manual VACUUM operation reclaims the space, the “deleted” data remains.”