MurphyA/hacker-news huggingface dataset:
by mort96 | 2025-06-13 08:46:24+00:00
They're not really correct, glibc will return stuff back to the OS. It just has some quirks about how and when it does it.

First, some background: no allocator will return memory back to the kernel for every `free`. That's for performance and memory consumption reasons: the smallest unit of memory you can request from and return to the kernel is a page (typically 4kiB or 16kiB), and requesting and returning memory (typically called "mapping" and "unmapping" memory in the UNIX world) has some performance overhead.

So if you allocate space for one 32-byte object for example, your `malloc` implementation won't map a whole new 4k or 16k page to store 32 bytes. The allocator probably has some pages from earlier allocations, and it will make space for your 32-byte allocation in pages it has already mapped. Or it can't fit your allocation, so it will map more pages, and then set aside 32 bytes for your allocation.

This all means that when you call `free()` on a pointer, the allocator can't just unmap a page immediately, because there may be other allocations on the same page which haven't been freed yet. Only when all of the allocations which happen to be on a specific page are freed, can the page be unmapped. In a worst-case situation, you could in theory allocate and free memory in such a way that you end up with 100 1-byte allocations allocated across 100 pages, none of which can be unmapped; you'd be using 400kiB or 1600kiB of memory to store 100 bytes. (But that's not necessarily a huge problem, because it just means that future allocations would probably end up in the existing pages and not increase your memory consumption.)

Now, the glibc-specific quirk: glibc will only ever unmap the last page, from what I understand. So you can allocate megabytes upon megabytes of data, which causes glibc to map a bunch of pages, then free() every allocation except for the last one, and you'd end up still consuming many megabytes of memory. Glibc won't unmap those megabytes of unused pages until you free the allocation that sits in the last page that glibc mapped.

This typically isn't a huge deal; yes, you're keeping more memory mapped than you strictly need, but if the application needs more memory in the future, it'll just re-use the free space in all the pages it has already mapped. So it's not like those pages are "leaked", they're just kept around for future use.

It can sometimes be a real problem though. For example, a program could do a bunch of memory-intensive computation on launch requiring gigabytes of memory at once, then all that computation culminates in one relatively small allocated object, then the program calls free() on all the allocations it did as part of that computation. The application could potentially keep around gigabytes worth of pages which serve no purpose but can't be unmapped due to that last small allocation.

If any of this is wrong, I would love to be corrected. This is my current impression of the issue but I'm not an authoritative source.
by imiric | 2025-06-13 08:46:25+00:00
Looks great. Awesome job!

I know you haven't planned ahead, but have you thought about extensibility? One of the main benefit of Vim and Emacs is that the user can customize it exactly to fit their needs, and the large ecosystem that exists around that. I suppose it would be smart for any new editor nowadays to be able to leverage existing plugins from other ecosystems, rather than starting from scratch.
by ConspiracyFact | 2025-06-13 08:48:44+00:00
>Largely, those who worked in factories did so because the benefits/costs exceeded that of farm work. If there were no incentives to change, everyone would have stayed on the farm, preserving the agrarian status quo.

This is true for the first generation of factory workers. After that the proletariat emerges, an urban underclass that can’t use the threat of going back to the farm as negotiating leverage, because they don’t know how to farm. I don’t think that the way that leftist governments went after farmers was fair or even humane, but the motivation for it was basically terror at being trapped under the thumb of the owner class.
by lionkor | 2025-06-13 08:48:51+00:00
Everything you use every day depends on a few core libraries and services that are truly crafted by some competent people. Take your browser and all the various fantastic libraries it uses to decode and display content to you. How about cryptography libraries like OpenSSL? Linux itself, I would consider the result of craftsmanship, same with most GNU software. You're really, really, really missing a lot here with your evaluation.

You're right, people don't care about craftsmanship, until their vibe coded TLS implementation causes their government to track them down and have them executed. Then, suddenly, it matters.

People don't "care" about material science either. Without it, we'd be screwed.
by yvely | 2025-06-13 08:49:30+00:00
My take from this comment is that maybe you do not understand it as well as you think you do. Claiming that "other modern infrastructure" is easier to understand than CSS is wild to me. Infrastructure includes networking and several protocol, authentication and security in many ways, physical or virtual resources and their respective capabilities, etc etc etc. In what world is all of that more easy than understanding CSS?
by PicassoCTs | 2025-06-13 08:51:05+00:00
Sometimes it is experience that comes with finding out a job is right for you. The job itself can be great, the projects fun, but if the companies structure is anti-growth and headed for some idiotic goals (like "we want to start making the software that our most expensive supplier makes" aka want to go up in the food-chain in a already well-established market) instead of working with the chances they got- you will go nowhere. And you will know it.

If all the ambitious people leave- or go into inner exile, while the work stays the same but the company goes nowhere, the job has quit on you and its time to walk.
by dominicrose | 2025-06-13 08:51:16+00:00
Different programming languages have different qualities. For some tasks I like Ruby because it doesn't get in my way. But Ruby is built in C and so are JS VMs and web browsers etc (C/C++/Rust). A good LLM can convert Ruby code to Rust for a 10-100x performance boost, only multiplying the number of lines of code by 2. That makes Ruby a good programming language and Rust a good target language.
by piker | 2025-06-13 08:51:17+00:00
Thanks so much. It does have this banner: "Some features are unavailable in Web Preview. <link>Download the Desktop version</link> for full speed and functionality." which is intended to capture that exact issue.

I'd love to coordinate a demo for you personally if you can spare the time. I'm at drew@tritium.legal or you could drop your info here: https://tritium.legal/demo. I'm familiar with working with and onboarding to regulated IT departments.

[NOTE: some of the speed issues are coming from the pipes clogging up due to the traffic. There's no CDN here unfortunately.]
by opan | 2025-06-13 08:54:24+00:00
>Sugar is still the cultural default; artificial sweeteners are something you explicitly choose due to health concerns

If only. Check the ingredients (usually near the bottom) of some energy drinks some time. Monster, NOS, AMP, half of the Rockstar flavors, Bang, and so on will add sucralose to the normal versions with sugar or HFCS in them. It's hard to find one without artificial sweeteners. This is especially crazy as Monster already has their sugar-free (Ultra?) line. They're forcing normal people to consume sucralose, and it's awful. Luckily Red Bull seems fine for now (Blueberry flavor is really good). Guru in its original flavor only also has no sucralose, but I think all the other flavors have it. I first noticed this trend one of the times they brought back Mtn Dew Game Fuel and it tasted disgusting. Now I'm scared of any new drink, or that they'll ruin one I like.

Also, I think water is fine, caffeine pills are fine, I know some people are against energy drinks, but I don't think that's a reason to ruin them (preempting replies saying not to drink them at all). I've been drinking black coffee all week but I still have some Blueberry Red Bull in my fridge for when I feel like it.
by imiric | 2025-06-13 08:54:41+00:00
That comment is a strong sign that this was AI-generated. LLMs have the tendency to leave superfluous comments even when the code is self-explanatory. In this case, strconv is a well-known stdlib package, and anyone reading this in their IDE would get the documentation for what it does. In fact, all of the comments in this function and in most of the file are redundant, and I would point this out in a code review.

But, of course, this was vibe coded, so it's unlikely a human actually reviewed it.
by ianopolous | 2025-06-13 08:55:04+00:00
Yep, if that's possible for your service that works. If the service doesn't want your email and/or doesn't have access to your data, e.g. an E2EE service where account reset is impossible, then that's not an option.

The supposition for all this is that the service wants to use passwords for whatever reason. In that case, generate them for the user.
by zevon | 2025-06-13 08:55:47+00:00
Maybe of interest to some people given the discussions in this thread: https://sciebo.de is an example of a successful "let's roll our own collaboration infrastructure" project at scale (aimed at about half a million users) based on Nextcloud with Collabora Office (= live document collaboration) and more integrated applications (calendars, contacts, tasks, forms, those kinds of things).

All hosted and maintained at German universities, with federation between them, with support for guest users and whatnot.

Quite nice and back when it started, it was very important for us because it enabled us to get a huge chunk of sensitive data back from Dropbox, Google Drive and the other cloud providers.

There's not too much English documentation around but https://wwuit-sys.zivgitlabpages.uni-muenster.de/sciebo/docs... is good.
by Dave_Wishengrad | 2025-06-13 08:56:00+00:00
Cloudflare isn’t just protecting websites — it’s also silently blocking people who share truth that challenges power. After I exposed that withholding the truth that life is most important is a betrayal of all life on Earth, someone at Cloudflare blacklisted me in retaliation. This wasn’t an automated filter — it was a manual, targeted act to suppress the cure and stop others from seeing it. Most websites using Cloudflare have no idea this is happening behind the scenes. The truth is being hidden, not by accident, but by those who’ve already chosen betrayal
by wesselbindt | 2025-06-13 08:56:03+00:00
No I won't because I never said they did. But there's plenty of war crimes to point to though. Surely you've seen the picture of the girl on fire because of napalm. You've seen the torture of innocent civilians in the Iraq war. You know about the use of cluster bombs in Iraq. You know they cut off the water to Fallujah. You know of the highway of death. You know they've made close to a million people homeless in Cambodia and Laos, countries that weren't even involved in the war. You know about the illegal invasion of Iraq. You know about the excess mortality of 500,000 children after the gulf war. You know about the mass killing of nearly a million people in Indonesia in the sixties perpetrated by troops trained in, armed by, and supplied with kill lists by America. You know of the troops that killed 160,000 Guatamalans, armed by America, and described by Reagan as great humanitarians. You've seen Gaza.

These are all war crimes, and they are war crimes because they knowingly and actively target civilians. And honestly, at the end of the day it doesn't matter much to me whether you kill a kid by shoving them into a gas chamber or by shooting them, or by dropping bombs or napalm on preschools, because either way you've murdered a child.
Show HN: I made a tool that finds the best crypto card for your spending
by jamesburr | 2025-06-13 08:56:31+00:00
Hey HN,

I'm a crypto enthusiast who got tired of spending hours researching different crypto credit cards across dozens of websites.

After struggling to find comprehensive comparisons myself, I built CryptoCardHub to solve this problem for the entire crypto community. The platform now helps thousands of users find the right card based on their actual spending habits and preferences.

Would love your feedback on this.

James
by jeswin | 2025-06-13 08:57:00+00:00
CredCore | Engineering | Full-time | US/India | www.credcore.com

CredCore helps companies analyze Credit Agreements using AI. We are looking to hire an Engineering Lead with 10+ years of experience. You should be familiar with design patterns and software architecture, infra/kubernetes, and TypeScript/Python. If you’re interested, please reach out to me at jeswin@credcore.com.

A cover letter is not necessary. But please share your resume and links to your GitHub/GitLab/StackOverflow/other profile, or blog/papers, or other portfolio we can review before setting up the interviews.
by mort96 | 2025-06-13 08:57:05+00:00
> I have to disagree on this one. Relying on relative include paths suck. Just having one `-I/project/root` is the way to go.

Oh to be clear, I'm not saying that they should've used relative includes. I'm complaining that they don't put their includes in their own namespace. If public headers were in a folder called `include/webrtc` as is the typical convention, and they all contained `#include <webrtc/base/pc.h>` or `#include "webrtc/base/pc.h"` I would've had no problem. But as it is, WebRTC's headers are in include paths which it's really difficult to avoid colliding with. You'll cause collisions if your project has a source directory called `api`, or `pc`, or `net`, or `media`, or a whole host of other common names.
by sebastiennight | 2025-06-13 08:57:25+00:00
I have spent three weeks of my life recording my latest book as an audiobook. (125,000 words)

It was the most difficult experience of my life, ranking way above the pain of writing the book itself, and on par with month 1 of becoming a father. (I'm not joking.)

It was also an experience I'm incredibly proud of, and do not regret for one second.

AI audiobooks are the soulless experience. I see a use case of using AI for translating the audiobook, but generating it like that in the first place is a bit sad.
by VagabundoP | 2025-06-13 08:58:00+00:00
US/Israel hegemony is causing massive instability and chaos.

Its driving countries to pursue nuclear weapons as its the only way to ensure you're not at the whims of authoritarian and fundamentalist regimes.

I can see an fundamentalist US president at some point and Israel is certainly not become any more secular or moderate, and their democracy is sliding down the toilet bowl.
by mort96 | 2025-06-13 08:58:42+00:00
The only way I can see that this would be true is if a custom allocator is worse about unmapping unused memory than the system allocator. After all, processes aren't sharing one heap, it's not like fragmentation in one process's address space is visible outside of that process... The only aspects of one process's memory allocation that's visible to other processes is, "that process uses N pages worth of resident memory so there's less available for me". But one of the common criticisms against glibc is that it's often really bad at unmapping its pages, so I'd think that most custom allocators are nicer to the system?

It would be interested in hearing their thoughts directly, I'm also not an allocator engineer and someone who maintains an OS allocator probably knows wayyy more about this stuff than me. I'm sure there's some missing nuance or context or which would've made it make sense.
by meindnoch | 2025-06-13 09:00:02+00:00
Impressive work!

But subpixel AA is futile in my opinion. It was a nice hack in the aughts when we had 72dpi monitors, but on modern "retina" screens it's imperceptible. And for a teeny tiny improvement, you get many drawbacks:

- it only works over opaque backgrounds

- can't apply any effect on the rasterized results (e.g. resizing, mirroring, blurring, etc.)

- screenshots look bad when viewed on a different display
by mort96 | 2025-06-13 09:02:53+00:00
They got downvoted because 1) comments of the form "I gave a chat bot a toy example of a task and it managed it" are tired and uninformative, and 2) because nobody was talking about anything which would make translating a Makefile into Bazel somehow relevant, nobody here has a Makefile which we wish was Bazel, we wish Google code was easier to work with
by adrian_b | 2025-06-13 09:05:16+00:00
The open source feature of Secureboot is true only if you have replaced the laptop firmware with Coreboot, which is compatible only with few, mostly old, laptops.

Even in that case, a laptop with Coreboot will still use closed-source components that cannot be trusted, at least for the auxiliary CPUs of Intel and AMD (ME/PSP) and for the CPU of the TPM, i.e. for the parts that are the most important for security.

If someone steals the device, I cannot see any difference between our 2 setups. In both cases, the thiefs can use the laptop, but without accessing the internal SSD/HDD, unless they format it, which will remove any of the original information stored on it.

Even if you configured a laptop with UEFI/SecureBoot to not display the boot device selection menu without a password and to not boot from the internal SSD without a password, that can stop only someone with momentary access to the device, the same as in my setup, where an intruder would see the error message that no bootable disk has been found. Thiefs will erase the non-volatile UEFI settings, so they will be able to boot your laptop from an external device, regardless of your configuration, but the original internal SSD/HDD will remain inaccessible in any of the 2 setups.

However in the case that relies on the internal firmware and TPM to protect the keys, there are more sophisticated hardware attacks against the motherboard, e.g. using fault injections, logic analyzers, desoldering the relevant chips and replacing them, etc., which may succeed in some cases. Such hardware attacks are impossible when the component that must be attacked is not present, because it is a removable key (which is temporarily inserted only during booting).
by rcxdude | 2025-06-13 09:06:45+00:00
small-s skepticism, perhaps. 'Skeptics' can fall foul of the same kind of groupthink, magical and motivated reasoning, and fallacies as everyone else, which are often characterized as 'religious'. Not believing in a god doesn't make you immune to being wrong.

(FWIW, I do think there's some very unhealthy attitudes to AI and LLMs going around, like people feel the only two options are 'the singularity is coming' and 'they're useless scams', which tends to result in a large quantity of bullshit on the topic)
by skerit | 2025-06-13 09:07:40+00:00
I've been using Claude-Code for a few weeks now, and honestly, calling this just "ergonomic" tasks feels like a huge understatement. This thing is straight up writing code for me - real, functional code that actually works. I'm being ridiculously productive with it.

I've even finally found the time to tackle some hobby projects that have been sitting on my back burner for literally years. Claude just tears through problems at breakneck speed. And you know what? It's actually fun again! I forgot how enjoyable coding could be when you're not getting bogged down in the tedious stuff.

Sure, maybe the big revolutionary applications haven't materialized yet, but when a tool can take something that would have taken me days and knock it out in an afternoon? That doesn't feel like just "making things more comfortable" - that feels pretty transformative to me, at least for how I work.
by b0a04gl | 2025-06-13 09:07:44+00:00
fair, recursive groups exist, and yeah stage 2’s structure is solid. but the point was less about recursion as a feature and more about context awareness. vim’s engine lets you nest, sure, but it doesnt preserve intent across transitions. you can recurse into quoted strings, command subs, etc, but you can’t reflect on why you entered a state. there's no semantic trace. take ysh: command vs expression isn’t just syntactic, it shifts meaning of the same tokens. `[` in one context is an index, in another it’s test. vim can match both, but it can’t decide which meaning is active unless the outer mode is remembered. and that’s the gap

tbh the plugin is impressive, no question. but that memoryless model will always need compromises, rule layering, and finetuned sync tricks. treesitter has its issues too, agreed. but having typed nodes and scope trees gives a baseline advantage when meaning depends on ancestry.
by n4r9 | 2025-06-13 09:09:30+00:00
I reckon the negative reactions are at least partly down to your wording, e.g.

> there is no good work

> total lack of discipline

> impossible to build

This level of absolutism is problematic for a couple of reasons. Firstly it's ambiguous: a "total" lack of discipline would entail never releasing anything. This is clearly inaccurate, and the reader is left guessing what level of discipline is implied. Secondly, without more detail, most will assume exaggeration, given that RoR sees significant commercial use. You haven't provided compelling reasons to trust your judgement over anyone else's, so users are well-justified in raising counter-examples from their experience.

You also come off as dismissive of opinions and lived experiences that differ from your own; suggesting that anyone who disagrees is a "devotee", and that concrete counter-examples are meaningless one-offs. Having been on the sharp end of this dismissiveness myself, it mostly acts to drag the discussion down. Like, fair enough, maybe you're incredibly experienced, you want to make the world a better place by passing on your wisdom, and you're tired of dealing with half-baked takes. But belittling your fellow users is not helping. And again, from my own experience, you can be quick to say that a take is half-baked even when it aligns with scholarly opinion.
by rldjbpin | 2025-06-13 09:11:23+00:00
it has already been facing some issues in the past couple weeks. e.g. the "front" page was broken randomly for past dates (like https://news.ycombinator.com/front?day=2025-05-30 or https://news.ycombinator.com/front?p=2)

as per their api documentation [1], it might be linked to firebase, which might explain this?

[1] https://github.com/HackerNews/API
by austin-cheney | 2025-06-13 09:12:47+00:00
This explains so much of my career except I worked at mega .coms instead of start ups.

My concurrent observations:

* Most corporate developers are really shitty with about 15% carrying about 80% of the load that keeps the lights on.

* The only goal is reducing the cost of hiring in a world without human standards or qualifications. Of course that just means transferring costs elsewhere.

* In a world of shitty developers raising the bar on quality and minimally acceptable work products just alienates the work force.

* The ultimate compromise is to outsource as much work as possible to open source and never write original software. This is Invented Here Syndrome where nothing internal is ever trusted and almost everything external receives some minimal level of automatic trust by default. What could possibly go wrong?
by dzonga | 2025-06-13 09:13:06+00:00
we've come a long way from the days of software that does one thing well. back in the days of desktop apps craftsmanship was high VLC, different mac os apps etc.

once the web took over - people took quality for granted since you can easily ship a fix (well those never happen). then move fast & break things. software has been shoddy since. Yeah you can make excellent software on web technologies - so the web isn't the problem.

it's US.