HNHacker News
TopNewBestAskShowJobs

a_e_k

2,648 karma · joined September 22, 2013

http://eastfarthing.com/blog/

andrew at $DOMAIN

submissionscomments
a_e_k··on Qwen3.6-27B: Flagship-Level Coding in a 27B Dense Model
At least for the CPU/GPU split, llama.cpp recently added a `--fit` parameter (might default to on now?) that pairs with a `--fitc CONTEXTSIZE` parameter. That new feature will automatically look at your available VRAM and try to figure out a good CPU/GPU split for large models that leaves enough room for the context size that you request.
a_e_k··on Game devs explain the tricks involved with letting you pause a game
From my recollection of doing fun palette stuff back in the DOS VGA days, I'm betting it was more like:

    pal.r = pal.g = pal.b = (77 * pal.r + 150 * pal.g + 29 * pal.b) >> 8;
Hardware floating point was rare before the 486 DX and Pentiums. Not to mention that Integer<->FP conversion was slow. And division of any kind has always been slow. So you'd see a lot of fixed-point math approximations with power-of-two divisors so that you can shift-right.
a_e_k··on GitHub Stacked PRs
I think the point the GP was trying to make is that the GitHub UI ought to be able to allow you to submit a branch with multiple well-organized commits and review each commit separately with its own PR. The curation of the commits that you'd do for stacked PRs could just as easily be done with commits on a single branch; some of us don't just toss random WIP and fixup commits on a branch and leave it to GitHub to squash at the end. I.e., it's the GitHub UI rather than Git that has been lacking.

(FWIW, I'm dealing with this sort of thing at work right now - working on a complex branch, rewriting history to keep it as a sequence of clean testable and reviewable commits, with a plan to split them out to individual PRs when I finish.)

a_e_k··on Filing the corners off my MacBooks
Cave Johnson here. I'll be honest, we're throwing science at the wall here to see what sticks. No idea what it'll do. Probably nothing. Best-case scenario, you might get some superpowers.
a_e_k··on 1M context is now generally available for Opus 4.6 and Sonnet 4.6
I've been using the 1M window at work through our enterprise plan as I'm beginning to adopt AI in my development workflow (via Cline). It seems to have been holding up pretty well until about 700k+. Sometimes it would continue to do okay past that, sometimes it started getting a bit dumb around there.

(Note that I'm using it in more of a hands-on pair-programming mode, and not in a fully-automated vibecoding mode.)

a_e_k··on Avoiding Trigonometry (2013)
My take as a graphics programmer is that angles are perfectly fine as inputs. Bring 'em! And we'll use the trig to turn those into matrices/quaternions/whatever to do the linear algebra. Not a problem.

I'm a trig-avoider too, but see it more as about not wiggling back and forth. You don't want to be computing angle -> linear algebra -> angle -> linear algebra... (I.e., once you've computed derived values from angles, you can usually stay in the derived values realm.)

Pro-tip I once learned from Eric Haines (https://erich.realtimerendering.com/) at a conference: angles should be represented in degrees until you have to convert them to radians to do the trig. That way, user-friendly angles like 90, 45, 30, 60, 180 are all exact and you can add and subtract and multiply them without floating-point drift. I.e., 90.0f is exactly representable in FP32, pi/2 is not. 1000 full revolutions of 360.0f degrees is exact, 1000 full revolutions of float(2*pi) is not.

a_e_k··on Canvas_ity: A tiny, single-header <canvas>-like 2D rasterizer for C++
Author here. I have a JavaScript port of my automated test suite (https://github.com/a-e-k/canvas_ity/blob/main/test/test.html) that I used to compare my library against browser <canvas> implementations. I was surprised by all of the browser quirks that I found!

But compiling to WASM and running side-by-side on that page is definitely something that I've thought about to make the comparison easier. (For now, I just have my test suite write out PNGs and compare them in an image viewer split-screen with the browser.)

a_e_k··on Canvas_ity: A tiny, single-header <canvas>-like 2D rasterizer for C++
Author here. There's no AI-generated code in this. But yes, security hardening this has not been a priority of mine (though I do have some ideas about fuzz testing it), so for now - like with many small libraries of this nature - it's convenient but best used only with trusted inputs if that's a concern.
a_e_k··on Canvas_ity: A tiny, single-header <canvas>-like 2D rasterizer for C++
Author here. No vibe-coding, all human-written. Are you thinking of my use of GitHub emoji on the section headings in the README? I just found they helped my eye pick out the headings a little more easily and I'd seen some other nice READMEs at the time do that sort of thing when I went looking for examples to pattern it off of. I swear I'd had no idea it would become an LLM thing!
a_e_k··on Canvas_ity: A tiny, single-header <canvas>-like 2D rasterizer for C++
Author here. What a pleasant surprise to see this trending on the front page!

(I did post a Show HN at the time of the original release, https://news.ycombinator.com/item?id=33148540, but it never gained traction.)

Just to answer some comments that I see:

1. This was absolutely not vibecoded!

I'd originally started with a different version control system and was still getting used to Git and GitHub at the time that I'd released this. (I was a latecomer to Git just because I hated the CLI so much.) It was easiest for me just to drop the whole thing as a snapshot in a single commit.

But my private repo for it actually started in May 2017, and it had 320 commits leading up to its release, all human-written.

For the v2.0 that I have in mind, I'm thinking of force-pushing to migrate the full development history to the public repo.

And finally I'll add that I'm a graphics engineer by education and career. Where would the fun be in vibe-coding this? :-) Oh, and this compiles down to just ~36KiB of object code on x86-64 last I checked. Good luck vibe-coding that constraint.

2. Why a single header with `#define CANVAS_ITY_IMPLEMENTATION`?

I was inspired by the STB header ibraries (https://github.com/nothings/stb) and by libraries inspired by those, all of which I've found very convenient. In particular, I like their convenience for small utilities written in a single .cpp file where I can just `g++ -O3 -o prog prog.cpp` or such to compile without even bothering with a makefile or CMake.

Since the implementation here is all within a single #ifdef block, I had figured that anyone who truly preferred separate .cpp and .h files could easily split it themselves in just a few minutes.

But anyway, I thought this would be a fun way of "giving back" to the STB header ecosystem and filling what looked to me like an obvious gap among the available header libraries. It started as something that I'd wished I'd had before, for doing some lightweight drawing on top of images, and it just kind of grew from there. (Yes, there was Skia and Cairo, but both seemed way heavier weight than they ought to be, and even just building Skia was an annoying chore.)

----

Since I mentioned a v2.0, I do have a roadmap in mind with a few things for it: beside the small upgrades mentioned in the GitHub issues to support parts of newer <canvas> API specs (alternate fill rules, conic gradients, elliptical arcs, round rectangles) and text kerning, I'm thinking about porting it to a newer C++ standard such as C++20 (I intentionally limited v1.0 to C++03 so that it could be used in as many places as possible), possibly including a small optional library on top of it to parse and rasterize a subset of SVG, and an optional Python binding.

a_e_k··on Hard-braking events as indicators of road segment crash risk
Not to mention if that if somebody needs to come over, the proper thing to do is signal first. Then I'm happy to politely ease off a bit and open more space for them to come over safely.

It's the people who aggressively slide right over just a few feet in front of me (cutting off nearly all of my safety buffer) without so much as a signal that really drive me nuts.

a_e_k··on Microsoft forced me to switch to Linux
I spent over a decade developing rendering software used in VFX, and ran CentOS Linux as my development platform at work.

We tried to follow the VFX reference platform once that became a thing back in 2014.

https://vfxplatform.com/

a_e_k··on GLM-4.7-Flash
When the Unsloth quant of the flash model does appear, it should show up as unsloth/... on this page:

https://huggingface.co/models?other=base_model:quantized:zai...

Probably as:

https://huggingface.co/unsloth/GLM-4.7-Flash-GGUF

a_e_k··on Personal thoughts/notes from working on Zootopia 2
In the words of Mr. Plinkett, regarding certain movie details: "Some so subtle you might not have noticed. But your brain did." (https://www.youtube.com/watch?v=RqYx0cqy0WA&t=1266s)

I'd also argue that it's much like movie editing: you tend to only notice it when it's crappy.

a_e_k··on Personal thoughts/notes from working on Zootopia 2
I've never been to EGSR. Possibly SIGGRAPH?
a_e_k··on Personal thoughts/notes from working on Zootopia 2
Wow! That came out really mangled. Take two:

> I was on the RenderMan team at the time and remember thinking it really neat that our system could stand up to that.

> I remember finding it mind blowing when I learned that in Brave, the artists weren't just using a texture/displacement mapped surface for the clothing and armor. They were using tori primitives for the chain mail, and curve primitives for the clothing. (I.e., the clothing was actually woven out of curve primitives for the threads.)

a_e_k··on Personal thoughts/notes from working on Zootopia 2
I was on the RenderMan team at the top and remember thinking it really neat that our system could stand up to that.

I remember find it mind blowing when I learned that in Brave, the artists weren't just using a texture/displacement mapped surface for the clothing and armor. They were using tori primitives for the chain mail, and curve primitives for the clothing. (I.e., the clothing actually woven out of curve primitives for the threads.)

a_e_k··on Personal thoughts/notes from working on Zootopia 2
A nice example of this is shown in Figure 2 of the paper "Illustrative Rendering in Team Fortress 2" [1] from Valve. It shows how they tried to make the silhouettes of each character class distinct and readable. (And the paper also discusses the choices that went into the color palette.)

[1] https://steamcdn-a.akamaihd.net/apps/valve/2007/NPAR07_Illus...

a_e_k··on Pixar's True Story
No. It's from Walt Disney Animation Studios (WDAS).
a_e_k··on I canceled my book deal
And once you get beyond the books the sibling comments here have mentioned (I'd suggest starting with the Ray Tracing In One Weekend minibook series first before Physically Based Rendering), there's the Ray Tracing Gems series (https://www.realtimerendering.com/raytracinggems/) which is open access online with print editions for purchase.

(Disclosure: I contributed a chapter.)

a_e_k··on Quake's Player Speed (2017)
Doom was inspired by arcade games. Armor helped, but your speed was your real defense.
a_e_k··on Unreal Tournament 2004 is back
I liked getting to the other side of that map by telepunting - drop the translocator disk at your feet, smack it with the impact hammer just right, and you could send it flying ridiculous distances. You could easily send it the opposite tower in Facing Worlds if your aim was good.
a_e_k··on Who needs Graphviz when you can build it yourself?
You can also set:

    layout = neato;
in a dot file, call dot, and it will use the neato layout engine.

(See https://graphviz.org/docs/attrs/layout/)

And if I look in my /usr/bin, I see that neato is just symlinked to dot. It's pulling the usual trick of one executable that behaves slightly differently depending on the invocation name.

a_e_k··on Advent of Code 2025: Number of puzzles reduce from 25 to 12 for the first time
The subreddit also had a policy of not unlocking the megathread until the leaderboard was filled up. So any hints there will also be too late for the making the global leaderboard.

And the old About noted what you just said about there being nothing preventing someone from using AI:

> If you want to use AI to help you solve puzzles, I can't really stop you, but I feel like it's harder to get better at programming if you ask an AI to do the programming for you.

a_e_k··on Scripts I wrote that I use all the time
I like the NATO one.

It occurred to me that it would be more useful to me in Emacs, and that might make a fun little exercise.

And that's how I discovered `M-x nato-region` was already a thing.

a_e_k··on Matrices can be your friends (2002)
For my fellow visual thinkers who might be looking for a linear algebra book that focuses more on developing the geometric intuition for stuff like this, rather than just pure numeric linear system solving, let me recommend:

"Practical Linear Algebra: A Geometry Toolbox" by Farin and Hansford.

a_e_k··on Matrices can be your friends (2002)
This is one of those things that's perennially annoying in computer graphics. Depending on the API you can have different conventions for:

- data layout (row-major vs. column major)

- pre-multiplication vs. post-multiplication of matrices

Switching either of these conventions results in a transposition of the data in memory, but knowing which one you're switching is important to getting the implementation of the math right.

And then on top of that for even more fun you have:

- Left- vs. right-handed coordinate systems

- Y-up or Z-up

- Winding order for inside/outside

There are lots of small parity things like this where you can get it right by accident but then have weird issues down the line if you aren't scrupulous. (I once had a very tedious time tracking down some inconsistencies in inside/outside determination in a production rendering system.)

a_e_k··on The email they shouldn't have read
I remember that being the Newegg philosophy w.r.t. patent trolls.
a_e_k··on Microsoft is plugging more holes that let you use Windows 11 without MS account
I really don't get this move.

It's one thing to try to steer basic, non-technical users toward an MS account by default. Fine; I may not like that, but I get it. But at this point, anyone left who's still using these methods to create a local account is likely to be a technical user who's deliberately and intentionally wanting a stay on local account for whatever their own reasons.

I suspect that's a rather small group, which leaves me puzzled: (1) is the juice really worth the squeeze, and (2) is it really worth being so hostile to your power users?

a_e_k··on We Politely Insist: Your LLM Must Learn the Persian Art of Taarof
Sounds like a perfect recipe for the Abilene paradox.

https://en.wikipedia.org/wiki/Abilene_paradox

← PreviousPage 2 of 24Next →