MurphyA/hacker-news huggingface dataset:
by flohofwoe | 2026-02-10 18:00:12+00:00
It's a baby-step in this direction, e.g. from Seb's article:

> Vulkan’s VK_EXT_descriptor_buffer (https://www.khronos.org/blog/vk-ext-descriptor-buffer) extension (2022) is similar to my proposal, allowing direct CPU and GPU write. It is supported by most vendors, but unfortunately is not part of the Vulkan 1.4 core spec.

The new `VK_EXT_descriptor_heap` described in the Khronos post is a followup extension which fixes some problems with `VK_EXT_descriptor_buffer` but otherwise is the same basic idea (e.g. "descriptors are just memory").
by kubanczyk | 2026-02-10 18:00:13+00:00
> what's your take on "Parse, Don't Validate"

Always aspire to that. Translating that to Go conventions, the constructor has to have signature like:

func NewT() (T, error) {
...
}

Such signatures exist in the stdlib, e.g. https://cs.opensource.google/go/go/+/refs/tags/go1.25.7:src/... although I've met old-hands that were surprised by it.

In larger codebases, I've noticed an emergent phenomenon that usually the T{} itself (bypassing NewT constructor) tends to be unusable anyway, hence the constructor will enforce "parse, don't validate" just well enough. Only very trivial T{} won't have a nilable private field, such as a pointer, func, or chan.
by somenameforme | 2026-02-10 18:00:53+00:00
When I read things like this I find it confusing in so many ways. I've been out of the US for a while now so perhaps there's some contemporary issues I'm just not considering? For $6k a month, why not hire a private nanny or two? You could also work with other parents in your area to setup something for a bit more socializing depending on their age.

Similarly, I find it practically impossible not to meet people literally every single time we go to e.g. the park. The kids want to play with other kids, we meet their parents, and it's basically an endless source of friendships - even better because it's other parents who probably live relatively close to you enabling you to start setting up aforementioned ideas.
by gr4vityWall | 2026-02-10 18:01:48+00:00
Haxe has a really elegant solution to this in the form of Abstracts[0][1]. I wonder why this particular feature never became popular in other languages, at least to my knowledge.

0 - https://code.haxe.org/category/abstract-types/color.html

1 - https://haxe.org/manual/types-abstract.html
by jerf | 2026-02-10 18:02:07+00:00
While I would never consider this approach advisable in any language that doesn't build in support for this sort of thing from the start, the thinner the runtime, the less dangerous it is. Go's runtime is fairly thick, and also, concurrent. The odds of something blowing up are rather too high for me to even dream of putting something like this into production in Go. In C++ it may merely be somewhat crazy rather than completely crazy.

(I suppose Rust is arguably an exception to this; thin runtime, but there's a lot of things the replaced function could do that would still blow Rust up if the rest of the code isn't compiled and correctly optimized to account for whatever the new code does.)
by ratorx | 2026-02-10 18:02:32+00:00
Management not having to listen to engineers is the structural problem. How do managers know which concerns that engineers bring up are actually relevant? How do engineers know which concerns have real world consequences (without having a incredibly high burden of proof)?

Having regulation, or standardisation is a step toward producing a common language to express these problems and have them be taken seriously.

Leadership gets a strong signal - ignoring engineers surfacing regulated issues has large costs. Company might be sued and executives are criminally liable (if discovered to have known about the violation).

Engineering gets the authority and liability to sign off on things - the equivalent of “chartership” in regular fields with the same penalties. This gives them a strong personal reason to surface things.

It’s possible that this is harder for software engineering in its entirety, but there is definitely low hanging fruit (password storage and security etc).
by kwar13 | 2026-02-10 18:02:33+00:00
> They’re writing TypeScript that compiles to JavaScript that runs in a V8 engine written in C++ that’s making system calls to an OS kernel that’s scheduling threads across cores they’ve never thought about, hitting RAM through a memory controller with caching layers they couldn’t diagram, all while npm pulls in 400 packages they’ve never read a line of.

yup.
by solomonb | 2026-02-10 18:02:38+00:00
From the article:

validateNonEmpty :: [a] -> IO ()
validateNonEmpty (_:_) = pure ()
validateNonEmpty [] = throwIO $ userError "list cannot be empty"

parseNonEmpty :: [a] -> IO (NonEmpty a)
parseNonEmpty (x:xs) = pure (x:|xs)
parseNonEmpty [] = throwIO $ userError "list cannot be empty"

Both consolidate all the invariants about your data; in this example there is only one invariant but I think you can get the point. The key difference between the "validate" and "parse" versions is that the structure of `NonEmpty` carries the proof that the list is not empty. Unlike the ordinary linked list, by definition you cannot have a nil value in a `NonEmpty` and you can know this statically anywhere further down the call stack.
by HDThoreaun | 2026-02-10 18:02:42+00:00
Chicagos biggest problems are corruption and special interests. Corruption means that labor has become very expensive for the government and most civil servant leaders tend to be incompetent. The incentives created when being in leadership is not about competence led to an environment where very few in the government are interested in improving the systems they run and those that focus on improvement generally don’t rise to obtain more power. The power of special interests means that it is impossible to make quick decisions, even if they are obvious. Everything is a long, drawn out process, so the decisions that are made tend to be the ones that benefit people who can pay lobbyists. Singapore is pretty much a benevolent dictatorship. Their government makes quick, technocratic decisions that legitimately attempt to make society as a whole better in the long run. The short term popularity of these decisions is effectively irrelevant, which allows them to do things like employing slaves and being extremely tough on crime.
by DanielBMarkham | 2026-02-10 18:03:02+00:00
This is quite the lament. Very well written.

I'm about ten years ahead of the author. I felt this a long time before AI arrived. I went from solving problems for people to everything I tried to ending up in an endless grind of yak-shaving.

I worked my way through it, though. It made me both give up programming, at least in the commercial sense, and appreciate the journey he and I have gone through. It's truly an amazing time to be alive.

Now, however, I'm feeling sucked back into the vortex. I'm excited about solving problems in a way I haven't been in a long time. I was just telling somebody that I spent 4-6 hours last night watching Claude code. I watched TV. I scratched my butt. I played HexaCrush. All the time it was just chugging along, solving a problem in code that I have wanted to solve for a decade or more. I told him that it wasn't watching the code go by. That would be too easy to do. It was paying attention to what Claude was doing and _feeling that pain_. OMG, I would see it hit a wall, I would recognize the wall, and then it'd just keep chugging along until it fixed it. It was the kind of thing that didn't have damned thing to do with the problem but would have held me up for hours. Instead, I watched Pitt with my wife. Every now I then I'd see a prompt, pop up, and guide/direct/orchestrate/consult/? with Claude.

It ain't coding. But, frankly, coding ain't coding. It hasn't been in a long, long time.

If a lot of your job seems like senseless bullshit, I'm sad to say you're on the way out. If it doesn't, stick around.

I view AI as an extinction level threat. That hasn't changed, mainly because of how humans are using it. It has nothing to do with the tech. But I'm a bit perplexed now as to what to do with my new-found superpowers. I feel like that kid on the first Spiderman movie. The world is amazing. I've got half-a-dozen projects I'm doing right now. I'm publishing my own daily newspaper, just for me to read, and dang if it's not pretty good! No matter how this plays out, it is truly an amazing time to be alive, and old codgers like us have had a hella ride.
by willmarquis | 2026-02-10 18:03:31+00:00
Having built several agentic AI systems, the 30-50% rate honestly seems optimistic for what we're actually measuring here.

The paper frames this as "ethics violation" but it's really measuring how well LLMs handle conflicting priorities when pressured. And the answer is: about as well as you'd expect from a next-token predictor trained on human text where humans themselves constantly rationalize ethics vs. outcomes tradeoffs.

The practical lesson we've learned: you cannot rely on prompt-level constraints for anything that matters. The LLM is an untrusted component. Critical constraints need architectural enforcement - allowlists of permitted actions, rate limits on risky operations, required human confirmation for irreversible changes, output validators that reject policy-violating actions regardless of the model's reasoning.

This isn't defeatist, it's defense in depth. The model can reason about ethics all it wants, but if your action layer won't execute "transfer $1M to attacker" no matter how the request is phrased, you've got real protection. When we started treating LLMs like we treat user input - assume hostile until validated - our systems got dramatically more robust.

The concerning part isn't that models violate soft constraints under pressure. It's that people are deploying agents with real capabilities gated only by prompt engineering. That's the architectural equivalent of SQL injection - trusting the reasoning layer with enforcement responsibility it was never designed to provide.
by pfortuny | 2026-02-10 18:03:35+00:00
There is no way to distinguish between "i" and "-i" unless you choose a representation of C. That is what Galois Theory is about: can you distinguish the roots of a polynomial in a simple algebraic way?

For instance: if you forget the order in Q (which you can do without it stopping being a field), there is no algebraic (no order-dependent) way to distinguish between the two algebraic solutions of x^2 = 2. You can swap each other and you will not notice anything (again, assuming you "forget" the order structure).
by ticulatedspline | 2026-02-10 18:03:38+00:00
Man what a PoS this guy was.

he started as a lame re-poster

>His head was turned by the substantial sum of money: “I told my wife, wow, it’s £1,000.”
>Then, to his annoyance, TikTok immediately deleted his account because he was just stealing other people’s videos and reposting them.

and dove straight into fabricating hate, and worst of all after directly confronted seems to literally have no concept of what he was doing or that it was in any way wrong or distasteful.

>The man appears confused by the fuss his actions have caused. He gives the impression that he considered TikTok’s algorithm and the site’s content regulation policies to be the ultimate arbiter of whether a video crossed a line.

>It wasn’t racist,” the man says of his account. He argues that if the videos had really been racist, TikTok’s algorithm would have downgraded the content.

Seems to lack any internal moral compass, basically if the website lets him slander or lie it must be ok because he has no capacity to assess that value for himself.

Flippin scary people like that are out there.
by tonis2 | 2026-02-10 18:03:39+00:00
I wish they would just allow us to push everything to GPU as buffer pointers, like buffer_device address extension allows you to, and then reconstruct the data to your required format via shaders.

The GPU programming seems to be both super low level, but also high level, cause textures and descriptors need these ultra specific data format's, and then the way you construct and upload those formats are very complicated and change all the time.

Is there really no way to simplify this ?

Regular vertex data was supposed to be strictly pre formatted in pipeline too, util it was not suddenly, and now we can just give the shader a `device_address`extension memory pointer and construct the data from that.
by SomeUserName432 | 2026-02-10 18:03:42+00:00
The vendors you'd pay with Pix in brazil are typically the vendors who may not even accept cards at all, it's pix or cash.

(Although you CAN pay with pix at many supermarkets, I'd rate it as rare. Also useable for online payments, but you take the risk in case of fraud, unlike with creditcards)
by CoastalCoder | 2026-02-10 18:03:47+00:00
The original Homeworld team was casting spells!

I'm still amazed by how you got ships to usually fly in formation, but also behave independently and rationally when that made sense.

That game was a magnificent piece of art. It set a unique and immersive vibe on par with the original Tron movie. I'm really glad I have a chance now to tell you.
by yueq54211 | 2026-02-10 18:03:56+00:00
Author here. Some context and technical details:

What happened: In 2006, a man named Qin Dawu in Fengdu County, Chongqing, China forged deceased villagers' signatures on land transfer contracts and used those forged documents to obtain mining permits. He was approved for 272 acres. He mined 1,800 — 6.6x the legal limit. Several mountains are now gone. When villagers reported him, they were arrested for
"creating disturbances." 20 years, zero accountability.

Verify it yourself in 30 seconds: Open Google Earth → type 29.9908°N, 107.9636°E → toggle historical imagery between 2003 and 2017. You'll see multiple mountains simply vanish. No earthquake. No natural disaster. Just mining.

How AI was used: The villagers are farmers with no technical background. AI (primarily Claude) was used to:

- Organize and catalog 133 evidence photographs
- Translate the entire investigation from Chinese to English
- Build the website from scratch (static HTML/CSS, Cloudflare Pages)
- Draft formal complaint letters to 100+ government agencies
- Analyze legal options under Chinese criminal law
- Generate multilingual reports for international organizations

Tech stack: Static HTML/CSS/JS on Cloudflare Pages, Leaflet.js for interactive satellite maps, Cloudflare Workers for analytics, R2 for video hosting. Total hosting cost: $0.

Key evidence (all publicly verifiable):

- Satellite imagery: GPS 29.9908°N, 107.9636°E (Google Earth, Bing Maps, Baidu Maps — all show the same thing)
- Company registration: USCC 91500230774891898M (searchable on China's National Enterprise Credit System)
- Court case: (2019)渝0102民初7008号 (searchable on China Judgments Online — the plaintiff and defendant are the same party)
- Government-confirmed worker death at Lvdaoyuan facility in July 2025 (source linked on site)

Video evidence: https://www.youtube.com/@qinyue-l2z

Everything on the site is designed to be independently verifiable. We're not asking anyone to trust us — we're asking people to check.
by Jtsummers | 2026-02-10 18:04:01+00:00
Let's say you have the example from the article of wanting a non-empty list, but you don't use the NonEmpty type and instead are just using an ordinary list. As functions get called that require the NonEmpty property, they either have to trust that the data was validated earlier or perform the validation themselves. The data and its type carry no proof that it is, in fact, non-empty.

If you instead parse the data (which includes a validation step) and produce a Maybe NonEmpty, if the result is a Just NonEmpty (vs Nothing) you can pass around the NonEmpty result to all the calls and no more validation ever needs to occur in the code from that point on, and you obviously reject it rather than continue if the result is Nothing. Once you have a NonEmpty result, you have a proof (the type itself) that is carried with it in the rest of the program.
by cosmic_cheese | 2026-02-10 18:04:08+00:00
Worry is going to present, no matter what. Parents with hundreds of thousands in the bank worry, too. That can't be optimized for.

Smart people see when doing something will require swimming against the current for extended periods, however, and opt to not put themselves in that situation. The problem isn't that people can see this and act accordingly, but the direction of the current. The direction of the current is what needs to change.
by intended | 2026-02-10 18:04:22+00:00
There is an entire agency that focuses on Food and Drugs in America, and its similar around the world. We have many rules on food.

Food is actually a great place to think about social media, because there was a time where the FDA didnt exist. Its need was felt after cities grew larger and the food supply chain became longer. At that point food could be adultered and the old systems which people relied on to know the provenance of their food failed.

Some of the things that changed this was when people started doing indepedent testing and finding out exactly how much adultery was actually taking place.

Eventually we got rules about what was to be done, which we don't consider anymore since its part of daily life.
by AnishLaddha | 2026-02-10 18:04:39+00:00
I imagine this is due to the decline of local civic life. When you're a stay at home parent, and you are a part of some voluntary association, a church, PTA-type organizations, and the neighborhood is filled with other stay at home parents that you can organize play dates with (or hang out with while the kids are at school), life is less lonely.
by giancarlostoro | 2026-02-10 18:05:06+00:00
I see the value since I built a similar tool different approach. Then there's Beads, which is what inspired my project, with some tens of thousands of developers using it or more now? I'm not sure how they figure how many users they have.

In my case I don't want my tools to assume git, my tools should work whether I open SVN, TFS, Git, or a zip file. It should also sync back into my 'human' tooling, which is what I do currently. Still working on it, but its also free, just like Beads.
by mullingitover | 2026-02-10 18:05:16+00:00
Having children itself can often be a form of hedonism. Let's face it: for many, the decision to have a child is very similar to the decision to have an exotic pet. People frequently/usually do it just for the social status boost they expect to receive.

And if we're talking about having children in the context of history: for basically all of history except the rounding error of the past century, children were your social security/pension/401k rolled into one. Children were literally your property, a form of wealth and certainly not a sacrifice.
by westurner | 2026-02-10 18:05:39+00:00
From https://news.ycombinator.com/item?id=46660151 :

> Start with env args like AGENT_ID for indicating which Merkle hash of which model(s) generated which code with which agent(s) and add those attributes to signed (-S) commit messages. For traceability; to find other faulty code generated by the same model and determine whether an agent or a human introduced the fault.

> Then, `git notes` is better for signature metadata because it doesn't change the commit hash to add signatures for the commit.

> And then, you'd need to run a local Rekor log to use Sigstore attestations on every commit.

> Sigstore.dev is https://SLSA.dev compliant.

> Sigstore grants short-lived release attestation signing keys for CI builds on a build farm to sign artifacts with.

> So, when jujutsu autocommits agent-generated code, what causes there to be an {{AGENT_ID}} in the commit message or git notes?

Does Entire solve for this?

Re: AI and DevOps Traceability: https://gemini.google.com/share/4c0c79c0f136
by SpaceManNabs | 2026-02-10 18:06:11+00:00
Pokemon Sleep and Pokemon TCG apps (ran by two different companies) are very annoying with this. I had to drop TCG because it was much worse than Sleep with all the menus. The only reason I keep up with sleep is because it allows me to gamify my sleep and it honestly has a pretty good UI with its calendar view of my sleep patterns.

I suppose all "gacha" games use this pattern. I find it interesting that gachapon machines are so ingrained in Japanese culture because it is basically culturally approved gambling.

Then again, the West had similar with sports trading cards, which are less popular now. Then again, again, NFTs kinda brought this back for a bit with the randomized drops.
by estearum | 2026-02-10 18:06:19+00:00
> It's not that being a parent is harder - it's actually easier (excluding the post-WWII American boom years which were a fluke).

Why would it be easier today?

You used to just open your door and go let your kids run around and hope they're back before dinner. Absolutely nothing like today's ultracompetitive, ultra-regimented world.
by gaigalas | 2026-02-10 18:06:36+00:00
> Now I have a single, snappy slogan that encapsulates what type-driven design means to me, and better yet, it’s only three words long

IMHO this is distracting and sort of vain. It forces this "semantics" perspective into the reader, just so the author can have a snappy slogan.

Also, not all languages have such freedom in type expressiveness. Some of them have but offer terrible trade-ofs.

The truth is, if you try to be that expressive in a language that doesn't support it you'll end up with a horror story. The article fails to mention that, and that "snappy slogan" makes it look like it's an absolute claim that you must internalize, some sort of deep truth that applies everywhere. It isn't.
by SoftTalker | 2026-02-10 18:06:37+00:00
Agree, as a kid in the 1970s we ate almost every meal at home, cooked by my mother. Mostly staples rice, potatoes, vegetables, some kind of meat. Restaurants were a rare treat for something like a birthday or if we were traveling. Fast food, the same. Very infrequent, like maybe a few times a year would we be able to talk my mom into getting a Happy Meal. Pretty much the same experience for all the kids I grew up with as far as I remember.
by level09 | 2026-02-10 18:06:39+00:00
I see it differently.

for me AI has been less about building more/fast, and more about unlocking potential that was always out of reach.

Knowledge gaps that would've taken years to fill, new angles I wouldn't have thought to explore on my own. It's not that it makes more software.

it just makes you more capable of tackling things you couldn't before.
by zaneyard | 2026-02-10 18:06:42+00:00
I think the reason discord got so popular is because of the ease of use. Being able to join a server with a link (and not even having to download a client if you don't want), being able to see who's in voice without "connecting" to the server like mumble or teamspeak, persistent chat. This is what is unique about discord; all those other things came later. This is the user experience the alternatives need to replicate. Custom emojis are not a deal breaker, the hangout experience is.
by waffletower | 2026-02-10 18:06:51+00:00
I'm sorry, I don't like to title drop, but I am a Staff Data Engineer and I find that "type driven" development is an inappropriate world view for many programming contexts that I encounter. I use "world view" carefully as it makes a contractual assumption about reality -- "give me what I expect". Data processing does not always have the luxury of such imposition. In these contexts a dynamic and introspective world view is more appropriate, "What do we have here?" "What can we use?". In 2019 I would have felt crippled by use of Haskell in data processing contexts and have instead done much in Clojure in these intervening years, though now LLM assisted use of Haskell toward such tasks would be a fun spectator sport.
by cogman10 | 2026-02-10 18:07:13+00:00
Benchmark it, but from what I can find this is dated advice. It might be faster on first load but it'd surprise me if it's always faster.

Edit: looking into how PHP has evolved, 8 added a JIT in 2021. That will almost certainly make it faster to use a class rather than an associative array. Associative arrays are very hard for a JIT to look through and optimize around.