HNHacker News
TopNewBestAskShowJobs

singron

2,695 karma · joined March 2, 2013

Opinions are my own.

Send hate mail and memes to eculperic@gmail.com

submissionscomments
singron··on Dayjob: Tax – evaluating AI agents on 50 professional tax assignments
You can use free file fillable forms to submit online. It's a bit of work to transcribe from other software. It also requires a particular interpretation when filling forms (e.g. you need to round before summing your W-2s).
singron··on Anthropic S-1
The bond market and the equity market care about different things. E.g. if the company has a 10% chance of going bankrupt and a 90% chance of doubling its market value, then paradoxically its bonds will look bad and its equity will look good.
singron··on C++26: The New Debugging Header
Pangram says the last 2/3rds are AI generated. I suspected when I got to this line:

> The separation of concerns is deliberate — breakpoint() and is_debugger_present() are orthogonal building blocks, and breakpoint_if_debugging() is the convenience composition.

It might be a false positive or just a few spots. Or maybe it's rage bait. I'm sorry if the author actually writes with this style.

singron··on What I self-host
I used jellyfin-mpv-shim. You select what to play from any ui and it starts playing in mpv, which seems to have excellent support for everything you would want a player to do.
singron··on The Double Headed Stack Allocator
I think it's OK to increment/decrement the ends past each other as long as you detect that and fail the allocation for at least one end.

It's a little tricky with memory orders since you are synchronizing on two different locations. The simplest thing is to make all atomic accesses seqcst, but I think a single fence(seqcst) before checking overlap is sufficient in this case and will use fewer synchronizing instructions.

The overflow checks are also tricky. We want to make sure that if an allocation fails, subsequent allocations also fail (even on other threads), and overflow might allow them to think they succeeded by incrementing again back into a valid range. This means you generally can't use fetch_add in a thread-safe bump allocator and instead need to use a CAS loop where you detect overflow before writing.

Since you are doing a CAS loop anyway and always accessing both variables, it might actually be faster to combine both variables, especially if you typically allocate from both at the same time. E.g. if you pack two offsets into a 64-bit CAS word, you can still address 4GB, and you can get even more by aligning allocations. You also don't have to worry about seqcst.

singron··on Character.ai has initiated voluntary Chapter 11 bankruptcy
The rules aren't that simple. The combination should be considered holistically against antitrust law. It's a judgement call that ultimately comes down to a judge or jury.

Antitrust is also federal and is probably generally supreme over state law. E.g. even if Google fairly acquires talent according to state law, it can still be determined to violate antitrust.

This poaching scenario (where Big Co pays above market to a large number of employees to drive a competitor out of business) is very similar to dumping (selling goods below market etc.), which has been illegal for a long time even though "selling goods" is generally legal.

However, since the government (DoJ, FTC, etc.) is the ideal litigant, you actually need someone who works there to not get fired for long enough to complete investigation and enforcement. In a lot of anti-trust cases, all the direct participants benefit: the employees get paid more, Big Co consolidates power, and Small Co gets paid off. The "losers" are most distant like their customers or uninvolved competitors who aren't in a good position to sue.

singron··on Character.ai has initiated voluntary Chapter 11 bankruptcy
I don't think this is necessarily true. This wasn't purely hiring. They also licensed the technology and paid off the shareholders, which is why it's basically an acquisition in everything but name.
singron··on Our $445M Series D
I don't know how they possibly read all these in full. They are quite voluminous: 1-3 work samples, 1 analysis sample, 1-3 writing samples, 1 presentation sample, and then 8 open-ended long-form questions. The instructions often say to give as much detail as possible, and they are very clear that this is the main way they filter candidates, so I'm guessing serious applications are quite long.

At some point, there becomes a mathematical impossibility of too many pages of applications for too few evaluators who also have to do the rest of their jobs. Either they don't get quite that many applications, or the initial evaluations must be based on some incomplete reading (looking just at the resume, reading a subsection, skimming, or randomly discarding), or the backlog keeps growing.

Fwiw I also applied and the auto-reply said I should expect to wait 4-6 weeks, which has recently passed without hearing back. The application is a ton of work, and I don't mind doing it with a significant chance of being considered, but I think it's a normal reaction to be devastated if you put all that time and energy into crafting your materials, which manifest all your experience, behavior, and personality, and it turned out nobody read them. I still have a little hope, but I'm sorry you never got a response.

singron··on Yes, and
A better analogy is that software dev is more like making the rug making machine. If you were doing that, it would be useful to be intimately familiar with precisely how rugs are made, and you might want to make a bit of one by hand in order to get that experience. Then when you design the machine, you use gears, 4 bar linkages, and other mechanisms that you are already familiar with because you carefully studied those concepts earlier, likely with some hands-on exercise. Then you draw a design, simulate it, and send it to a machine shop and can possibly never touch the machine itself (although I think in practice these kinds of bespoke first-gen machines need debugging after manufacturing).

I.e. in order to get to the point where you didn't have to manually touch this thing, you likely did have to learn deeply about its underlying concepts by manually doing things.

Operating machines doesn't always have the same phenomenon. E.g. experience with a hand-powered drill is unnecessary to use an electric drill.

singron··on GPT-6 Astra plays World of Warcraft for the first time with agent-wow
Reading fail! I re-read the conclusion a few times. I just needed to re-read the following paragraph!
singron··on GPT-6 Astra plays World of Warcraft for the first time with agent-wow
The initial prompt was to complete all quests in the starting zone. I'm assuming it was able to do that? It's not actually explicitly said anywhere.

I'm also curious if it stopped after that goal or if it kept playing.

singron··on What TLA+ can and can't check
I love this. This is great to read if you are trying to use TLA+ for something.

In a different vein, another thing TLA+ isn't great at is modeling atomics and in particular weak-memory semantics or anything that's not sequentially consistent. If you translate your algorithm to pcal, it will run as if it was sequentially consistent. If you need to model non-sequential-consistency, then that needs to be spelled out with explicit logic to TLA+, which is probably too complicated and error-prone to do by hand. The C/C++/Rust memory models permit a lot of wacky stuff. I imagine you need to add read caches and writeback buffers for each variable with cache-flushing instructions at appropriate points, but maybe there is a more elegant way to do it.

If you use rust, miri and loom both have analyzers that can check some non-sequentially-consistent behavior (and loom doesn't actually implement sequential-consistency at all).

singron··on America.gov
It apparently uses both Gemini and Grok:

https://www.cnbc.com/2026/09/29/trump-ai-gemini-grok.html

singron··on Google’s Project Suncatcher to put ML infrastructure in space
Falcon heavy has never flown SSO, but it's probably over $1500/kg, which is >50x more expensive. Even the most optimistic estimates for a future starship launch cost is at least $100/kg, so it makes no sense to use $30/kg.

The other line items are probably similarly unrealistic since they include their own launch costs as well.

They also spec 300 racks of 500kg each, which is <40% of the weight of the comparable land rack. I doubt the full weight reduction since the racks still need to survive launch force/vibration in addition to fluid/pressure enclosures that land racks don't require. I think it's likely that just about every part of this report has a similarly cooked numbers, and we can just throw the whole thing out.

singron··on California's new tire efficiency rules could save drivers $1B a year
Free air is very common these days. I don't think a purchase has ever been required for free air anywhere I've been. Occasionally you need to go in and get a free token since the air machine is still coin operated, but I've never been asked to prove a purchase.
singron··on Karpathy’s Pelican
I've heard this called a "dancing bear" before. It's interesting because it's a bear dancing, not because the dancing is any good.

These conversations get frustrating since one group is saying the dancing is bad, a second group is saying it's good (for a bear), and a third group is saying we are a few years from a bear-only dancing industry.

singron··on Karpathy’s Pelican
In the first paragraph (either of chapter 1 or the prologue), not at all. It's pulling everything from pre-training, so it is likely relying just as much on all the visual mediums like the Peter Jackson films, the animated The Hobbit (1977), and all kinds of random depictions of Tolkien's works.

Bilbo's house is actually described in The Hobbit and the exterior isn't really described at all in Fellowship. The prologue of Fellowship (Concerning Hobbits) mentions hobbits like round doors and windows and the fact some hobbit homes are underground, but the turf-dome design here is not mentioned. It actually mentions hobbit homes typically have bulging walls, so unless you've read the The Hobbit, you might not picture this entirely-underground style.

In The Hobbit, his home is described as a (nice) hole in "The Hill" with a perfectly round front door and round windows, which could imply the design here.

singron··on Turning a dumb AC unit smart (without losing my security deposit)
I think you could use the two shafts to align and attach the mounting bracket by drilling two holes the proper distance apart. Drilling holes is pretty easy compared to cutting straight lines and I think most people are more likely to have a drill. If you use a piece of wood, the additional thickness can help the shafts to keep the wood perpendicular. You might not need any additional fastener, and the lack of fastener could help it return to a neutral position after operation rather than migrate. Also, slowing down the stepper motor can reduce unnecessary forces and the likelihood of malfunction.
singron··on Kill The Cookie Banner
As long as it's some automated signal, the User-Agent can use any logic it wants to send it without cooperation. The specifics of how to send the signal don't have to be legislated. E.g. Firefox's Tracking Protection has a global default a site-specific overrides, so it's very likely that they would do the same for this or just combine those features.
singron··on Codeberg Divides
Is there any evidence of division? Are all the vibe-coders going to some codeberg2? One of the main complaints is that the banned projects don't have human users proportionate to their activity, so if they all go to codeberg2, then that forge would just be full of projects nobody cares about.

Are there any projects on codeberg that are getting banned and actually have significant human interest?

If codeberg decided to kick out spammers, nobody would decry the loss, so what's being lost here? Is it strictly slippery slope?

singron··on Buz – A fork of Bun using modern Zig, with sub-1s incremental builds
TFA says the whole codebase is 600k, so that would be 1.8% dead code. IME dead code is much more common in larger codebases as figuring out that code is dead becomes more non-local and changes over time create dead code at a distance. I'm also not sure if the 11k was trivially dead (`if (false) { dead_code(); }`) or if it was more subtle (e.g. dynamically-dispatchable code that can't logically be called).

The 1.8% feels high if it's trivially dead. When I've run simple static analysis on decent codebases before, it's been much lower. For non-trivial dead code, it might be low. E.g. a lot of projects have piles of "dead" code behind ancient feature flags that would never be switched.

A small amount of dead code is fine. E.g. it might not be worth deleting utility methods that you happen to remove the last use of if they are simple and you might re-add a use later. Generated code is often dead since it's not worth specifying to the generator exactly what will be used. Other times, deleting dead code can lead to a valuable cascade of other deletions and simplifications.

singron··on JEP 540: Simple JSON API (Now in Incubator)
Currently, JsonObject.of has this signature:

    static JsonObject of(Map<String, ? extends JsonValue> map);
java.lang.String and other types don't extend JsonValue, and java lacks any trait-like way to add this functionality to existing types, so you would have to change the signature to this:

    static JsonObject of(Map<String, ? extends Object> map);
Now you can pass any Object in, but the typechecker can't ensure that it is convertible to json anymore. I.e. it will have to check at runtime that it's either JsonValue or another type that is has a known conversion for (Integer, Double, String, List, Map, etc.). The jackson ObjectMapper e.g. has a lot of configuration available to tell it how to do these conversions on arbitrary types, and I think they want to eliminate that kind of ceremony.

It does seem like any serious application is going to use another library, and this will be useful for very simple json usage or single-file hello-world type programs (e.g. to go along with Implicitly Defined Classes and the Flexible Launch Protocol).

singron··on EVE Online's Carbon engine is now open source: Fenris Creations explains why
The system the fight is in experiences time-dilation, where everything slows down to 10% speed or even less. However, a few effects create a positive feedback loop that makes the problem worse.

All the surrounding systems still run at full speed. You can travel large distances and still arrive soon enough to matter in the fight. You can also die, respawn in another system, rejoin the fight, and barely miss anything. The positions in the fight therefore move even slower than time-dilation since ships on both sides are replaced so quickly.

Large groups have a massive advantage over small groups, so alliances are very large and join various alliances-of-alliances. The playerbase is often organized into only 2-3 major coalitions. At some points in history, nearly all the alliances have joined the same coalition, which leads to a strange pax-Romana called the "blue donut" (referring to all the ownable outer-systems being "blue" or allied with each other).

Also, nearly every player in a large fight just follows simple orders. Orbit A and shoot B. There are just a few people calling the shots.

Fights sometimes end just because people are bored, need to sleep, or go to work.

singron··on Do you need separate systems when you already have Postgres?
That's interesting, although "read committed" here would be different from the isolation level of the same name. It seems really tricky to implement since tuples could be removed during a query. E.g. the backend could fail to chase tuple-id pointers, and there would be cases where it can be difficult to ensure a tuple is returned exactly once for a given scan.

If you use ordinary READ COMMITTED transactions, they will advance their xmin horizons on each query (and allow old version cleanups) up until their own transaction id but unfortunately not beyond that. For a given table, this is important since that transaction is uncommitted and it might modify the table. If you could make long-running transactions readonly on those specific tables, then you could use a different xmin horizon specifically for those tables. It would require a lot of duplicative bookkeeping in shared memory though. You could probably fake this today by using 2 databases on the same machine and using two-phase-commit+dblink/fdw for cross-database transactions/queries (fdw uses repeatable read in transactions, so it won't allow the xmin to advance).

singron··on Half-Baked Product
Pre-purchase, the customers are just looking at lists of features. Post-purchase, they realize the ovens burn bread and cake 10% of the time and pizza 100% of the time, and they just want a good working oven that doesn't burn food.

It seems like most customers are returning the oven, which would normally be an extremely strong signal that there is a quality problem. In the SaaS world, the equivalent would be churn, but it's not always as straightforward since if users quit before they sign up (e.g. by reading a review or using a free trial), then they don't show up in that metric.

singron··on Have you restarted your computer this week?
If you turn it off, it might attempt a 45 minute update when you start it again (yes this has happened to me with macos).
singron··on Claude Code's "extended thinking" is a summary- not authentic thinking
Other companies were allegedly distilling the models by training on the reasoning output. By hiding the reasoning tokens, it makes it harder to do this. You can still try to distill the models, but you can't distill reasoning itself as well.

This could all be optics as well to try to give the appearance of a defensible moat. E.g. they can claim to investors that they are able to protect a significant chunk of their intellectual property this way. I'm not sure if anyone has a study about how significant the summarization is to distillation.

singron··on What job interviews taught me about Kubernetes
I really wish there was an 80% kubernetes. I think you could get there with some changes:

1. No overlay networks. 1 IP per machine. pods use dynamically allocated ports, and the kubelet enforces pods listen only on their assigned ports using seccomp.

2. No kube-proxy or equivalent Layer-4 "load-balancer". It's not good, but it's often used. You should use some kind of Layer-7 load balancing instead. Also you need to look up the port number from (1). This also greatly lessens the need for DNS.

3. A better config language. YAML and helm templates are terrible. kustomize is built into kubectl, but it's frustratingly limiting and also still very complicated. Something like nix would have been great. This can make it easier to upgrade third party configs since you can have more logic to validate and merge your settings with upstream defaults or templates.

4. Maybe an EBF-like for the api server? If the built-in k8s objects don't have a setting for something, then you need to write an operator or control loop yourself and then run that too, which is a big lift. Over time, k8s just keeps adding more and more built-in things and then revising them, which creates a ton of churn. If you could easily script simple operations, then they wouldn't have to build in every permutation ahead of time. E.g. the HorizontalPodAutoscaler has 24 config object types with several fields each, but all it does is set replicas based on data read from the api-server, so it could be replaced by some kind of flexible script that runs in the control plane.

singron··on PgDog is funded and coming to a database near you
If your working set is 20 TB, then it's pretty big. Each database has its own mix of hot/cold data, so it's impossible to compare without more information. A better measure might be IOPS. RDS has fairly low maximum IOPS unless you spend a lot more for provisioned IOPS or use Aurora.
singron··on How's Linear so fast? A technical breakdown
I have mysteriously lost comments/descriptions I wrote on issues. I figured it was related to a failed and lost opportunistic update like this, although I suppose it could have been caused by a fixable bug.
Page 1 of 27Next →