MurphyA/hacker-news huggingface dataset:
by capitainenemo | 2025-11-26 02:56:39+00:00
Oh, and a bit of followup. I tried the EFF cover your tracks on a Firefox profile with resist fingerprinting, and almost all the bits of identifying information came from the window size (which EFF considers "brittle") and the UA (I was testing in Firefox Nightly).

Apparently you need to add the hidden pref: firefox.resistFingerprinting.letterboxing

Enabling letterboxing knocked off 5 bits of identifying information. Apparently my 1800px wide letterbox was still pretty identifiable, but, an improvement.

Setting a chrome user agent string using a user agent string manager dropped that one from 12ish bits to <4 bits. 'course, that has disadvantage of reducing firefox visibility online further, and probably being more recognisable with the other values (like mozilla in the webgl info). Using firefox stable for windows was <5bits, so probably best to use that if on linux. Although, it might conflict with the font list unless a windows font list was pulled in.
by unscaled | 2025-11-26 02:56:43+00:00
This is all very nice as an idea or a mythical background story ("Go was designed entirely around CSP"), but Go is not a language that encourages "sharing by communicating". Yes, Go has channels, but many other languages also have channels, and they are less error prone than Go[1]. For many concurrent use cases (e.g. caching), sharing memory is far simpler and less error-prone than using channels.

If you're looking for a language that makes "sharing by communicating" the default for almost every kind of use case, that's Erlang. Yes, it's built around the actor model rather than CSP, but the end result is the same, and with Erlang it's the real deal. Go, on the other hand, is not "built around CSP" and does not "encourage sharing by communicating" any more than Rust or Kotlin are. In fact, Rust and Kotlin are probably a little bit more "CSP-centric", since their channel interface is far less error-prone.

[1] https://www.jtolio.com/2016/03/go-channels-are-bad-and-you-s...
by sevensor | 2025-11-26 02:58:11+00:00
> convention: {"id": {"__MW__type": "LONG NUMBER", "value": "9999999999999999999999999"}}.

Huh. I haven’t run into this, although I totally see the problem. It’s backdooring types into JSON that it doesn’t support. I agree JSON’s number types are weak; it’s been a source of real problems for me. Given that observation, you can go in two directions: have richer types, like EDN, or give up on types in JSON entirely, which is the alternative I’d propose. I need to put my money where my mouth is here and implement something to demonstrate what I’m talking about, but imagine if JSON didn’t have numbers at all. The receiver would have to convert values to numbers after decoding, but I’m arguing that’s fine because in practice you have to check the value’s type anyway before you can use it.

When I say “syntax typing,” I mean that, for example, 31 is a number and “blue” is a string, and we know that because the string has quotation marks around it and the number is made of decimal digits.
by a57721 | 2025-11-26 02:58:21+00:00
I am doing backend in Kotlin, but I must admit that Java has been catching up quickly, and it seems like Kotlin has been shifting its focus to Kotlin Multiplatform. Modern Java is a good, pleasant language and a safer bet.

Gradle with Kotlin DSL is nice, what's annoying is Gradle's constant API reshuffling for the sake of it that breaks plugins. Some plugins also introduce pointless breaking changes just to have a fancier DSL.

The IDE support is not an issue in practice, in my opinion, because IDEA is the best IDE for both Java and Kotlin. The official Kotlin LSP was released 6 months ago, but I haven't tried it.
by rmunn | 2025-11-26 02:58:26+00:00
Where's the obligation to watch ads spelled out? The legal obligation to pay for groceries is spelled out in the law: they are the possession of the store, and if you want to acquire them you need to exchange something else of value (money) for them, at which point they become yours.

What is the thing that compels you to watch ads on a service like Youtube? There's nothing in the law; if there is anything, it would be spelled out in the Youtube terms of service: https://www.youtube.com/t/terms

Can you find it for me? I've looked. Many times. It isn't there.
by zerosizedweasle | 2025-11-26 02:59:06+00:00
There's going to be a digestion period. The amount of debt, the amount of money, the number of companies that burn eye popping amounts of cash in their daily course of business. I do think there is a bright future, but after a painful period of indigestion. Too much money has been spent on the premise that scaling was all you need. A lot of money was wagered that will end up not paying off.
by dbg31415 | 2025-11-26 02:59:27+00:00
I get that he just wants to build something alone in his basement -- without product managers, sales guys, or customers with SLAs breathing down his neck. But he's doing an enormous amount of work specifically to avoid charging money for something that's already providing real value. That's the part that feels odd to me.

If you've got "200 users" who rely on your tool so deeply that a migration glitch would seriously hurt their business, you're past the point where this is a casual side project. That's the point where you should at least have some path for people to pay you.

In my head there are three phases of an open-source project:

* Toy – "I scratched my own itch and threw it on GitHub."

* Product – "People actually rely on this. Now I owe them migrations, docs, and not breaking stuff."

* Infrastructure – "If this dies, someone's company explodes and I'm on the front page of Hacker News for the wrong reason."

This post is basically the story of moving from (1) to (2).

What I rarely see is a maintainer explicitly saying which phase they're in. Users see "kanban board, nice site, good docs" and instantly a user is going to map this to, "Jira replacement!" And the author is thrilled to be compared to a polished SaaS!

But then both will be "shocked" to realize that one person can't match an entire product team, support team, design team, etc.

I think there's a lack of honesty in a lot of open source projects. I'd love to see more READMEs say things like:

* "Hobby project. I reserve the right to disappear for a month."

* "No guarantees, no SLAs. Use at your own risk!" (or even more blunt, "If you use this in production, or for mission-critical business practices, you're a fucking moron.")

* "If you're a company depending on this, you should be sponsoring it."

Anyway, seen this countless times... And the real tension starts when the author's excitement about having users surpasses the amount of work generated by those users. As long as the author wants to avoid working on a team, with business rules, and other stakeholders... it'll never actually scale.

Worse, the difference between users and customers is that there's no barrier to entry. Users expectations drift upward -- whether they are paying or not. Users don't just want fixes -- they want roadmaps, guarantees, backwards compatibility, and custom migration help. The code is open-source, but the longer the project goes on, the more the expectations drift towards enterprise-grade.

Boundaries matter. "No, that's out of scope." "No, I won't support your forked schema." "No, I can't chase down your custom patches." Those aren't signs of being unhelpful -- they're what keep the project from collapsing under its own weight. And when you have to start saying things like this, you've past the point of needing a bigger team... which means you're also past the point of where you should have started charging money for your product.
by zahlman | 2025-11-26 02:59:47+00:00
The LLM cannot actually make the network call. It outputs text that another system interprets as a network call request, which then makes the request and sends that text back to the LLM, possibly with multiple iterations of feedback.

You would have to design the other system to require approval when it sees a request. But this of course still relies on the human to understand those requests. And will presumably become tedious and susceptible to consent fatigue.
by sho_hn | 2025-11-26 02:59:59+00:00
Why does it matter that it's Chinese?

The designer, BTW, was born in Hong Kong long before it was handed back to the CCP, spent his childhood from age 6 onward in the Netherlands, and now lives in Belgium. It was originally sold by a Hong Kong company in Taiwan before the product line moved to China's Pop Mart. The character is inspired by Northern mythology illustration books he read as a kid.

I'm not into Labubu and don't buy stuff like that, but that a global fad has thoroughly blended West/East origins seems rather appropriate and very fine.
by ProllyInfamous | 2025-11-26 03:00:22+00:00
The cruelest hardware lineup that Apple ever destroyed started with the MacPro6,1 ("trashcan" ~2013-2018), continued into the MacPro7,1 ($$$$$ and immediately depricated towards Silicon), then into the current MacPro disaster [as you describe].

Fortunately I was broke when the last Intels were being released, so didn't waste any money on them. The current MacMini lineup is absolutely incredible; even the entry-level $500 M4 is much faster than $10k Intels from five years ago.
by dylan604 | 2025-11-26 03:01:29+00:00
> they worry about bad things happening, but mostly they just worry that their kid has a whole private life that they don't know anything about and they're not part of it.

i had a whole other life my parents knew nothing about, and this was way before unsocial media. the fact that we're willing to call "friends" online a social life is yet another example of modern times. so again, having "secret" lives from parents isn't new to being online. it's teens looking to push the boundaries, explore, and just do things different from the parental units. nothing about "kids today" is really different. Boomers had that damn rock-n-roll and hippies as an example. It's more of the same in a different shape.
by autoexec | 2025-11-26 03:03:25+00:00
I don't eat a lot of burritos and when I do they aren't bean burritos, so I'm honestly wondering: do they commonly have whole beans in them? I expect that if they do, they aren't often so clean and shiny looking, but what I expected is more of a mushy/refried bean look.

Do people get burritos with beans in them more or less as pictured? Aesthetically, it seems like it'd look pretty appealing if you were someone who loved beans compared to what I had in mind, but again I'm really in no position to judge these images based on bean appearance.
by unscaled | 2025-11-26 03:03:45+00:00
I think the original sin of Go is that it neither allows marking fields or entire structs as immutable (like Rust does) nor does it encourage the use of builder pattern in its standard library (like modern Java does).

If, let's say, http.Client was functionally immutable (with all fields being private), and you'd need to have to set everything using a mutable (but inert) http.ClientBuilder, these bugs would not have been possible. You could still share a default client (or a non-default client) efficiently, without ever having to worry about anyone touching a mutable field.
by Weves | 2025-11-26 03:03:48+00:00
Reposting from https://news.ycombinator.com/item?id=46047430:

---

Broadly, I think other open source solutions are lacking in (1) integration of external knowledge into the chat (2) simple UX (3) complex "agent" flows. Both internal RAG and web search are hard to do well, and since we've started as an enterprise search project we've spent a lot of time making it good.

Most (all?) of these projects have UXs that are quite complicated (e.g. exposing front-and-center every model param like Top P without any explanation, no clear distinction between admin/regular user features, etc.). For broader deployments this can overwhelm people who are new to AI tools.

Finally trying to do anything beyond a simple back and forth with a single tool calls isn't great with a lot of these projects. So something like "find me all the open source chat options, understand their strengths/weaknesses, and compile that into a spreadsheet" will work well with Onyx, but not so well with other options (again partially due to our enterprise search roots).
Show HN: MidiToolbox – MIDI Utilities for Conversion, Analysis, and Editing
by wangaileen | 2025-11-26 03:03:59+00:00
Hi everyone! I'm happy to present MidiToolbox.com.

This is a robust, privacy-focused toolkit offering essential utilities for anyone who works with MIDI files—musicians, educators, and developers alike. We focus on putting powerful processing tools right into your browser.

Crucially, all processing is done locally. Your files never leave your device, ensuring maximum speed and data privacy.

Key features include:

MIDI Playback & Viewer: A reliable player to audition and visualize your MIDI files instantly.

Deep MIDI Analysis: Quickly inspect events, track data, tempos, and time signatures.

Editing Suite: Tools for transposition, tempo adjustment, merging, and splitting tracks.

PDF Score Conversion: Convert MIDI files into viewable or printable sheet music (PDF format).

I built this set of tools to be fast, reliable, and respectful of user data.

I welcome your thoughts and feedback!

Link: https://miditoolbox.com
by wpm | 2025-11-26 03:05:29+00:00
I really think that they probably wanted to do something that makes more sense, but they couldn't get the silicon to pencil out for it. I've been hearing rumors for 5 years of the Mac Pro getting 2 Mx Ultras stitched together, but it just never showed up.

I still wish they would try. I can't put HDMI capture cards into a Mac Studio. I can't rack mount it. I can't easily add network cards to it. Hell, I can't even put it on the floor to keep my desk clear. I don't want a Mac Studio. I want a Mac Pro.
by rmunn | 2025-11-26 03:06:02+00:00
What's the experience like pressing Ctrl+Shift+Meta+key shortcuts with those virtual keyboard apps? I assume they turn Ctrl, Shift, etc. into toggles so that you tap Ctrl, tap Shift, tap Meta, tap the shortcut key. But that's still four taps. (I know many of Emacs's commands have fewer modifiers than that, but I don't know which ones since even on a full keyboard I prefer the Vim control scheme so I never learned Emacs in much depth at all). Is that annoying, or is it easy enough to do that the annoyance fades into the background?

Also, is there a preconfigured config for Android that can be downloaded so that you don't have to spend too much time in the Customize mode to get started? (I'm assuming, though the article didn't go into detail, that much of the reason for spending time in Customize would be to remap some of those shortcuts to be easier to type on a virtual keyboard, e.g. fewer modifiers).
by zahlman | 2025-11-26 03:06:12+00:00
> The general theme is the same as the article: less real estate dedicated to actual videos you might want to watch. There were two rows of completely useless garbage that I had to add to my uBlock Origin filter just now: one for Shorts (which I have blocked in the past) and a new one for some sort of Youtube Games thing (?) that looked like the worst AI generated slop you'd never want to play.

This is the same stuff you get without buying Premium. So I guess they figure you're only paying to dodge the ads.

Which seems, to me, like a lot of money compared to (ad cost * number of ads you would see).
by venturecruelty | 2025-11-26 03:07:06+00:00
1. It's not piracy.

2. I don't care.

I choose what code runs on my machine, not Google. Google can run their own code on their own machines, that's fine. Once data is in my processor, I'm going to do what I want with it. Google doesn't have to concern themselves with what I'm doing on my own computer.
by AstroJetson | 2025-11-26 03:07:46+00:00
It’s like the days when I traveled for work, and some bright spark in finance said the bonus points belonged to the company. We had a few go-arounds about it. It got ugly in the company, and I refused to fly. Then about a dozen other employees refused to fly. I still went to customer locations, but I drove. What could be a one day trip to Chicago became 3 days out, one day there, 3 days back. Mileage, food and hotels were easily 4 times the cost of the flights. They backed down.
by venturecruelty | 2025-11-26 03:09:04+00:00
Nobody has the right to put things on my screen that I don't want to see, first of all. Second, I'm never going to "convert", so I'm actually saving them money by blocking their ads, because now the ad will go to someone else who doesn't block it who might buy whatever Temu nonsense is being forced on them.

Edit: oh, I see you work at Google.
by 7thaccount | 2025-11-26 03:09:11+00:00
It might not be a problem for you, but it has been for many. I did start by reading through 3 Clojure books. The repl and the basic stuff like using lists is all easy of course, but the tooling was pretty poor compared to what I was used to (I like lisp, but Emacs is a commitment). Also, a lot of tutorials at the time definitely assumed java familiarity, especially with debugging java stack traces.
by vjvjvjvjghv | 2025-11-26 03:09:27+00:00
We are also running into more and more performance issues with EF. There are ways to tune it but I am not sure if it’s worth learning this for EF or if it’s not better to just go for straight SQL. Seems MS has this tendency to create abstractions that then don’t work 100%. I see this with .NET too. Often you have to go down to Win32 for apps that are tightly coupled with Windows and hardware.
by latentspacer | 2025-11-26 03:09:53+00:00
i may be wrong, but it doesn't seem like BFL is struggling to me. they were apparently founded in august 2024, and have already signed $100M+ revenue deals with customers like meta (https://www.bloomberg.com/news/articles/2025-09-09/meta-to-p...)

in fact, it seems like BFL has benefited a lot by becoming the go-to alternative for big enterprise customers who don't want to be dependent on google
by linguae | 2025-11-26 03:10:57+00:00
I've been keeping up with Apple since 2004 when I was in high school. Even back then, a lot of Mac fans wanted Apple to release an "xMac": a Mac with one or two expansion slots, user-serviceable, and priced less than an entry-level Power Mac G5/Mac Pro, somewhere in the $1,499 range. Yet Apple never delivered. Sure, the Mac Mini was introduced in 2005 and has remained part of Apple's lineup ever since, and there's also the 2013 Mac Pro and the modern Mac Studio, but these lack expansion slots.

Sadly I think it's even less likely we'd have something like an xMac today. Consider the MSRPs of base-level Mac Pro models from 2006 onward. During the cheesegrater days, entry-level Mac Pros were available in the $2000s. The "trash can" Mac Pro had a starting MSRP of $2999; more expensive than the cheesegrater models, but still not a gigantic leap from its predecessor. But when Apple released the 2019 Mac Pro tower, the MSRP took a dramatic leap to $5999, pricing out many people who had the budget for a $2999 or even $3499 computer. As a user of a 2013 Mac Pro, I would've bought a 2019 Mac Pro in a heartbeat in 2019 had Apple maintained a $2999 entry price. The ARM Mac Pro is even higher priced at $6999.

The message from Apple for over 20 years has been loud and clear: Apple does not want to sell an affordable, expandable, user-serviceable desktop, and Apple at times doesn't always look committed to expandability and user-serviceability. I expect the Mac Pro to be unceremoniously discontinued, though I could get shocked like I was in 2019.
by bobbylarrybobby | 2025-11-26 03:11:38+00:00
Rust’s inference is generally a strength. If there's a type-shaped hole to fill, and only one way to fill it, Rust will just do it. So for instance `takes_a_vec(some_iter.collect())` works even though `collect` has a generic return type — being passed to `takes_a_vec` implies it must be a Vec, and so that's what Rust infers.
by caminante | 2025-11-26 03:12:05+00:00
In other words, big brother (Border patrol/DEA) use surveillance to fence generic "yellow flags" to little brother (local cops) who pull over drivers.

Is this just a Texas thing due to border vicinity?

I assume Big Brother hasn't published results data, but I'm curious whether the results are performing and catching bad guys. The article's sample appears to show a false positive.
by unscaled | 2025-11-26 03:13:11+00:00
Runtime borrow checking panics if you use the non-try version, and if you're careful enough to use try_borrow() you don't even have to panic. Unlike Go, this can never result in a data race.

If you're using unsafe blocks you can have data races too, but that's the entire point of unsafe. FWIW, my experience is that most Rust developers never reach for unsafe in their life. Parts of the Rust ecosystem do heavily rely on unsafe blocks, but this still heavily limits their impact to (usually) well-reviewed code. The entire idea is that unsafe is NOT the default in Rust.
by amrocha | 2025-11-26 03:13:15+00:00
It’s not that different from giving a presentation in front of your team to a stakeholder.

It’s not that different from speaking up in your neighborhood group.

Speaking in front of people and advocating for yourself is a core human skill. If you don’t practice it you’re setting yourself up for failure.

I would even say it has nothing to do with introverts and extroverts.
by stewoconnor | 2025-11-26 03:13:18+00:00
aha yeah! good question! We have two different types of type declarations, and each has its own keyword: "structural" and "unique". So you can define two different types as as

structural type Optional a = Some a | None structural type Maybe a = Just a | Nothing

and these two types would get the same hash, and the types and constructors could be used interchangeably. If you used the "unique" type instead:

unique type Optional a = Some a | None uniqte type Maybe a = Just a | Nothing

Then these would be totally separate types with separate constructors, which I believe corresponds to the `BRANDED` keyword in Modula 3.

Originally, if you omitted both and just said:

type Optional a = Some a | None

The default was "structural". We switched that a couple of years ago so that now the default is "unique". We are interestingly uniquely able to do something like this, since we don't store source code, we store the syntax tree, so it doesn't matter which way you specified it before we made the change, we can just change the language and pretty print your source in the new format the next time you need it.
by autoexec | 2025-11-26 03:13:44+00:00
> With new monitors going for under $200, the costs of any significant repair are no longer justifiable unless there is something unique about your monitor.

When it comes to CRTs this is probably more true today that it was when this was written. I can imagine a future though where more people seek to repair their non-CRT monitors as stores stop selling normal computer monitors to push "smart" monitors filled with ads and anti-features.

I've still got a massive sony trinitron desktop monitor that stopped working properly but is so heavy I've neglected to get rid of it. I keep hoping I'll come across some old TV repair guy who can give it life again for a reasonable fee because it was honestly the best monitor I ever had and I'd love to be able to use it again with older systems even though it weighs a ton, takes up a huge amount of space, and will throw off enough heat to raise the room temperature.
by 3eb7988a1663 | 2025-11-26 03:13:49+00:00
Pardon? Less silent errors? R has quite a few foot guns around permissively parsing user intention. Which does make it handy for exploratory analysis, but a lot more fragile when you want production code.

Just a simple one that can get you, R is 1-indexed. Yet if you have a vector, accessing myvec[0] is not an error. Alternatively, if you had say, a vector length of 3 and do myvec[10] that gets NA (an otherwise legal value). Or you could make an assignment past the end of the vector myvec[15] <- 3.14 , which will silently extend the array, inserting NAs