HN user

Ameo

1,835 karma

https://cprimozic.net/

[ my public key: https://keybase.io/ameo; my proof: https://keybase.io/ameo/sigs/C7EVkxMlxFSzSnGNmmt2tIHFXKNsYyeQH8xVid35a2g ]

Posts28
Comments150
View on HN
cprimozic.net 6mo ago

A Unique Performance Optimization for a 3D Geometry Language

Ameo
37pts4
cprimozic.net 6mo ago

A Modern Recommender Model Architecture

Ameo
1pts0
cprimozic.net 6mo ago

A Modern Recommender Model Architecture

Ameo
3pts0
cprimozic.net 8mo ago

Reverse engineering a neural network's clever solution to binary addition (2023)

Ameo
87pts16
3d.ameo.design 11mo ago

Geotoy – Shadertoy for 3D Geometry

Ameo
146pts24
cprimozic.net 1y ago

Non-Pointless Software Projects for New Devs in the LLM Age

Ameo
17pts0
cprimozic.net 1y ago

Optimizing Advent of Code D9P2 with High-Performance Rust

Ameo
3pts1
cprimozic.net 1y ago

Fixing a bug in Google Chrome as a first-time contributor

Ameo
645pts165
cprimozic.net 2y ago

Trying Kolmogorov-Arnold Networks in Practice

Ameo
146pts22
cprimozic.net 2y ago

Subdividing and Deforming Arbitrary 3D Meshes

Ameo
1pts0
cprimozic.net 2y ago

What I've Learned Building Interactive Embedding Visualizations

Ameo
3pts0
cprimozic.net 2y ago

What I've learned building interactive embedding visualizations

Ameo
2pts0
cprimozic.net 2y ago

Wrapping Meshes with Geodesic Walks

Ameo
52pts8
cprimozic.net 2y ago

Growing Bonsai Networks with RNNs

Ameo
2pts0
cprimozic.net 3y ago

Building a Signal Analyzer with Modern Web Tech

Ameo
138pts30
nn.ameo.dev 3y ago

Examine individual neurons of a small neural network in the browser

Ameo
1pts0
cprimozic.net 3y ago

Speeding Up the Webcola Force-Directed Graph Library with Rust and WebAssembly

Ameo
1pts0
cprimozic.net 3y ago

Reverse engineering a neural network's clever solution to binary addition

Ameo
562pts151
developers.google.com 3y ago

Google Helpful Content Update- More Content by People, for People in Search

Ameo
4pts0
cprimozic.net 3y ago

Logic Through the Lens of Neural Networks

Ameo
11pts3
cprimozic.net 4y ago

Middle-End Development with SvelteKit and Tensorflow.js

Ameo
2pts0
cprimozic.net 4y ago

Middle-End Development with SvelteKit and Tensorflow.js

Ameo
1pts0
cprimozic.net 4y ago

Exploring Neural Networks Visually in the Browser

Ameo
84pts8
cprimozic.net 4y ago

Using Graph Embeddings for Music Visualization and Discovery with Node2vec

Ameo
2pts0
cprimozic.net 4y ago

Habits I've developed for fast and efficient programming

Ameo
108pts102
cprimozic.net 5y ago

Speeding Up the Webcola Graph Viz Library with Rust and WebAssembly

Ameo
218pts25
notes.ameo.design 5y ago

FM Synthesizer in the Browser via Rust and WebAssembly SIMD

Ameo
1pts1
robintrack.net 7y ago

Show HN: RobinTrack – View retail trading activity on the Robinhood brokerage

Ameo
4pts1

When the software consists entirely of ~$1000 worth of Claude credits and ~40 hours of developer time prompting and curating it, literally what does it matter what license the resulting 100k LoC artifact is provided under?

Copyleft and the whole software licensing ecosystem only matter when producing that software actually requires serious human effort and dedication.

Midjourney Medical 1 month ago

Hell yeah, my AI image generation company is now running an alternative medicine AI MRI-alternative imagine spa. Hell yeah.

Most depressing thing I've read in weeks, and that's a high bar. Hooray to humanity for creating the thing which has destroyed all the value of of being good at creating things.

Wow, this doublespeed company is abhorrent stuff. AI social media accounts masquerading as real people, coordinating to promote and distribute anything on demand.

If this is the kind of thing you can do in the open as a "reputable" company with VC investment, I can only imagine the kind of horrific industrial-scale social media spam+slop botnets for hire that exist less publicly.

So true. A member of the clan I was in was operating a proper hedge fund, taking in investments from the clan and using it to flip on the Grand Exchange. Iirc he was even doing sorts of arbitrage, market making, and other advanced stuff.

Now he works at Google doing quantum computing research lol

A specialized programming language for 3D geometry generation + manipulation called Geoscript as well as a Shadertoy-inspired web app for building stuff with it: https://3d.ameo.design/geotoy

There have been lots of cool technical challenges through the whole process of building this, and a very nice variety of different kinds of work.

I'm working towards using the outputs from this language to build out levels and assets for a browser-based game I've been dabbling with over the past few years.

Hey, thanks for checking it out!

I've fixed that issue with the `set_default_material` problem; tyvm.

maybe a wireframe "type" material

I have that actually; it's bound to the W key. Invaluable for debugging and inspecting stuff for sure. N switches to normal texture too

I might have to make the docs for keybinds a bit easier to find

Change the Normal Map, Roughness Map, and Metalness Map XY scales

Yeah these are all currently controlled by a single "texture scale" param in the material editor. I could definitely see situations where adjusting them individually would be valuable; I'll add that to the TODO list

Anway, tyvm for checking out the project in such detail and for the feedback; I genuinely appreciate it very much

A specialized programming language for 3D geometry generation + manipulation called Geoscript as well as a Shadertoy-inspired web app for building stuff with it: https://3d.ameo.design/geotoy

There have been lots of cool technical challenges through the whole process of building this, and a very nice variety of different kinds of work.

I'm working towards using the outputs from this language to build out levels and assets for a browser-based game I've been dabbling with over the past few years.

It seems to me that Wasm largely succeeded and meets most/all of the goals for when it was created. The article backs this up by listing the many niches in which its found support, and I personally have deployed dozens of projects (both personal and professional) that use Wasm as a core component.

I''m personally a big fan of Wasm; it has been one of my favorite technologies ever since the first time I called malloc from the JS console when experimenting with an early version of Emscripten. Modern JS engines can be almost miraculously fast, but Wasm still offers the best performance and much higher levels of control over what's actually running on the CPU. I've written about this in the past.

The only way it really fell short is in the way that a lot of people were predicting that it would become a sort of total replacement for JS+HTML+CSS for building web apps. In this regard, I'd have to agree. It could be the continued lack of DOM bindings that have been considered a key missing piece for several years now, or maybe something else or more fundamental.

I've tried out some of the Wasm-powered web frameworks like Yew and not found them to provide an improvement for me at all. It just feels like an awkwardly bolted-on layer on top of JS and CSS without adding any new patterns or capabilities. Like you still have to keep all of the underlying semantics of the way JS events work, you still have to keep the whole DOM and HTML element system, and you also have to deal with all the new stuff the framework introduces on top of that.

Things may be different with other frameworks like Blazor which I've not tried, but I just find myself wanting to write JS instead. I openly admit that it might just be my deep experience and comfort building web apps using React or Svelte though.

Anyway, I strongly feel that Wasm is a successful technology. It's probably in a lot more places than you think, silently doing its job behind the scenes. That, to me, is a hallmark of success for something like Wasm.

My perspective on this is that maybe Tailwind Labs shouldn't have been a for-profit business, or at least not one of the size that it grew to be.

I was reading a writeup on this history of Tailwind[1] made by Adam Wathan (who created Tailwind).

It seems like he was working on a variety of different business ideas including "Reddit meets Pinterest meets Twitter" and "a developer-focused, webhook-driven checkout platform". He created the basis of Tailwind just to help him build these projects, but it kept getting attention when he would post about his progress building them online.

Here's an important quote from the doc:

"Now at this point I had zero intention of maintaining any sort of open-source CSS framework. It didn’t even occur to me that what I had been building would even be interesting to anyone. But stream after stream, people were always asking about the CSS"

It seems like Adam's main goal was to start a software business, and Tailwind just happened to get popular and became what he pivoted his efforts into. There's obviously nothing wrong with wanting to start a business, but trying to take an open-source CSS framework and turn it into a multi-million dollar business feels unnatural and very difficult to maintain long-term.

To his credit, he did pull it off. He built a seemingly quite successful business and hired a sizable team, and apparently made a decent amount of revenue along the way.

But now, for AI reasons or otherwise, that business is struggling and failing to sustain the scale it was before. To me, it seems like the business is more or less completely separate from the open-source Tailwind project itself. It's, as far as I can understand, a business that sells templates and components built with Tailwind, and it uses Tailwind's popularity to bootstrap customers and sales.

If it were me who ended up building Tailwind, there's no way I would have pursued turning it into a big business. Maybe I would have tried some kind of consulting style, where I'd offer my time to companies evaluating or integrating Tailwind.

Now that Tailwind is getting hundreds of thousands (millions?) of dollars a year in sponsorships, it feels weird to have this for-profit business on the side at the same time.

Maybe it's just my own sensibilities and worldview, but I feel like Tailwind should just be what it is: an extremely popular and successful open-source CSS framework.

[1] https://adamwathan.me/tailwindcss-from-side-project-byproduc...

Was curious to read this, but then the massive full-page ugly-on-purpose AI-generated NFT-looking banner image at the top of the page turned my stomach to the point where there's no way I'd even consider it - even if the article isn't AI-generated (which it probably is).

Slashdot effect 8 months ago

In my experience, it's usually the database that gives out first. It's often a shared database, or one running on overprovisioned hardware.

The kinds of sites that go down when receiving unexpected traffic are usually built in such a way where they're making multiple DB requests to render each page. Or they have a dozen poorly configured perf-expensive WordPress plugins running. Or likely all of the above

I miss when posts like this mattered.

That's not to say performance doesn't matter anymore or that blog posts on niche topics don't matter anymore.

It's more that there are 30 opponents on all sides fighting to minimize the impact of this kind of post. CPUs are still getting faster even now despite Moore's law being dead. The business or career impact of choosing between an associative list vs hashmap in a garbage-collected language like Guile Scheme is so minimal that it's hard to quantify.

If it's in a hot enough path that it matters, it's likely that there are at least 3 things you can do within 20 minutes of work (or 5 minutes of GPU time) that will solve the problem as effectively or better.

I remember the very specific period of time when blog posts talking about functional programming for React developers were en vogue. You can speed up you Scheme app by 15%, or you can build and deploy a completely new service from scratch in Node.JS in the same amount of time.

It used to feel like code had some kind of meaning or value. Now, it's just an artifact produced as a side effect of work. But that's been a trend for a decade or so now, AI is just the latest (and most significant) iteration of it.

I'm working on a DSL and browser-based playground for procedural 3D geometry called Geotoy: https://3d.ameo.design/geotoy

It's largely finished and functional, and I'm now focused on polish and adding additional builtin functions to expand its capabilities. I've been integrating different geometry libraries and kernels as well as writing some of my own.

I've been stress-testing it by building out different scenes from movies or little pieces of buildings on Google Maps street view - finding the sharp edges and missing pieces in the tool.

My hope is for Geotoy to be a relatively easy-to-learn tool and I've invested significantly in good docs, tutorials, and other resources. Now my goal is to ensure it's something worth using for other people.

Svelte is definitely still my favorite way to build web apps in 2025.

I wasn't (and still am not) the biggest fan of the new Runes syntax, but I've gotten used to it, and it doesn't really hurt my productivity or get in my way that much.

There's definitely an ecosystem gap compared to React, but there are still lots of really good components and frameworks out there. For example, there's a native Svelte version of IBM's Carbon Design[1] which I've used and found to be very high-quality.

And as for arguments that React will keep winning due to LLMs not having enough corpus to learn less-popular frameworks, I've anecdotally had good success with using LLMs to edit and generate Svelte code. There are occasionally some issues (like it generating pre-runes syntax or using deprecated stuff like stores) but it works well enough to be useful, and definitely better than I expected.

[1] https://svelte.carbondesignsystem.com/

(copying my reply from the other comment that said the same thing as you)

The order of conditions in a WHERE definitely does matter, especially in cases where the conditions are on non-indexed columns or there are CPU-intensive search operations like regex, string ops, etc.

I just ran this test locally with a table I created that has 50 million rows:

``` » time sqlite3 test.db "select count() from test WHERE a != 'a' AND a != 'b' AND a != 'c' AND a != 'd' AND b != 'c' AND d != 'd' AND e != 'f' AND f = 'g'" sqlite3 test.db 5.50s user 0.72s system 99% cpu 6.225 total » time sqlite3 test.db "select count() from test WHERE f = 'g' AND a != 'a' AND a != 'b' AND a != 'c' AND a != 'd' AND b != 'c' AND d != 'd' AND e != 'f'" sqlite3 test.db 1.51s user 0.72s system 99% cpu 2.231 total ```

The only difference is swapping the `f = 'g'` condition from last to first. That condition never matches in this query, so it's able to fail fast and skip all of the work of checking the other conditions.

It definitely does matter, especially in cases where the conditions are on non-indexed columns or there are CPU-intensive search operations like regex, string ops, etc.

I just ran this test locally with a table I created that has 50 million rows:

``` » time sqlite3 test.db "select count() from test WHERE a != 'a' AND a != 'b' AND a != 'c' AND a != 'd' AND b != 'c' AND d != 'd' AND e != 'f' AND f = 'g'" sqlite3 test.db 5.50s user 0.72s system 99% cpu 6.225 total » time sqlite3 test.db "select count() from test WHERE f = 'g' AND a != 'a' AND a != 'b' AND a != 'c' AND a != 'd' AND b != 'c' AND d != 'd' AND e != 'f'" sqlite3 test.db 1.51s user 0.72s system 99% cpu 2.231 total ```

The only difference is swapping the `f = 'g'` condition from last to first. That condition never matches in this query, so it's able to fail fast and skip all of the work of checking the other conditions.

The main takeaway from this for me is that SQLite’s query planner seems to be pretty limited. It’s reliant on stuff like the order in which WHERE conditions are specified, isn’t able to use multiple indexes in queries in many cases, bails out to scans when a variety of different operations show up in queries, etc.

It might be the case that SQLite has a simpler or less sophisticated query planner than other databases like Postgres or MariaDB, but in my experience those DBs struggle a lot with good querying planning as well. I’ve spent many hours in the past with issues like Postgres suddenly starting to ignore an index entirely because its computed table data distribution statistics got out of balance, or having to add manual annotations to MariaDB queries like STRAIGHT_JOIN in order to get a query to run faster.

I’m guessing that this is a really hard problem since it doesn’t seem to be really “solved” by any major DB vendor I’ve seen. A lot of modern DB engines like Clickhouse tend to just work around this problem by being so fast at full table scans that they don’t even need any sophisticated indexing set up at all.

I know that some people really find value in this and even enjoy it, but I can't imagine it and would never accept a role at a company that does anything close to this.

For me, so much of the value and enjoyment in programming comes from getting locked in and grinding out some feature or fix solo based on a spec or description. I also feel like programming without listening to music is way less enjoyable.

Again, no flame at all for people who work this way. It just doesn't match at all with my own sensibilities and work style to the point where it's hard for me to imagine doing it at all.

I did a little mini research project into trying out KANs in practice for some toy problems, also back in 2024 when they were the hot new thing: https://cprimozic.net/blog/trying-out-kans/

TL;DR KANs are tricker to train than traditional neural networks, but they largely have similar loss values given equivalent parameter counts.

Part of this may be due to the fact that most of the optimizers and other components of the training stack have been tuned over decades for MLPs, and there may well be ways out there to get training to work even better for KANs.

I don't personally find a lot of appeal in KANs for big, deep models like LLMs or anything close to that scale. KANs and their B-Splines are much less hardware-friendly than matrix multiplication. However, they are interesting to me from an interpretability perspective, and there may be some unique possibilities there for smaller cases.

sqlx is my favorite way of working with databases in Rust hands down.

I've tried alternatives like Diesel and sea-orm. To be honest, I feel like full-blown ORMs really aren't a very good experience in Rust. They work great for dynamic languages in a lot of cases, but trying to tie in a DB schema into Rust's type system often creates a ton of issues once you try to do anything more than a basic query.

It's got a nice little migration system too with sqlx-cli which is solid.

This has to be at least the fifth LLMpeg I've seen posted to hacker news in the past few months.

This whole repo is a single 300 LoC Python file over half of which is the system prompt and comments. It's not even a fine-tuned model or something, it's literally just a wrapper around llama-cpp with a very basic prompt tacked on.

I'm sure it's potentially useful and maybe even works, but I'm really sick of seeing these extremely low-effort projects posted and upvoted over and over.

I used this at a previous company with quite good success.

With relatively minimal effort, I was able to spin up a little standalone container that wrapped around the service and exposed a basic API to parse a raw address string and return it as structured data.

Address parsing is definitely an extremely complex problem space with practically infinite edge cases, but libpostal does just about as well as I could expect it to.

runes basically infecting the entire codebase

Yeah sadly the stores the author talks about here aren't the right way to do things anymore in modern svelte and they're all-in on Runes.

Stores were a big part of the reason I liked svelte; they were so conceptually simple, extensible with plain JS, and made interop outside of Svelte trivial without the Svelte magic leaking out.

They're still in Svelte, but they mix poorly with runes and are basically unsupported in runes mode. I opened up a bug about store behavior not working like it used to when mixing with runes, and the response was pretty much "yeah we don't expect it to work like that anymore when runes mode is enabled".