MurphyA/hacker-news huggingface dataset:
by varispeed | 2025-04-04 16:37:45+00:00
> I don't consider those "working class" occupations. In general in the UK those are quite often middle to upper middle class.

IT has been one of the only modern trades where working-class people could genuinely break through - without inherited privilege, connections, or expensive qualifications. All it took was a computer, determination, and skill. For decades, it offered an alternative route to upward mobility that wasn't gatekept by traditional class boundaries.

To say those people aren't "working class" anymore simply because they found success in a high-paid field is to misunderstand how class mobility works - and to dismiss the significance of what's been lost. IR35 didn't just hit a few middle-class professionals - it cut off a rare path to independence that was uniquely accessible to people from working-class backgrounds.

That's what makes it so damaging. It's not just about tax or regulation - it's about who's allowed to build something for themselves, and who gets pushed back into being a compliant employee for a large organisation.

> Still do run small limited companies AFAICT

You're absolutely right—tradespeople doing B2C work are largely unaffected, because IR35 targets B2B relationships, especially when the client is a medium or large company. But that actually reinforces the concern: it's access to the broader market - especially corporate and public sector clients - that’s been cut off.

For working-class professionals who moved into areas like IT, healthcare, or consulting, IR35 has closed the door to operating as a small business in those spaces. They can still work - but now only as employees or through intermediaries, with fewer rights and no control. They’re denied the same freedom tradespeople still have in B2C, despite offering equally legitimate, client-driven services.

So yes, plumbers and electricians can run limited companies - but if someone from a similar background wanted to build a small IT consultancy or contract directly with the NHS, that’s now a legal minefield. The playing field isn’t level - it’s skewed in favour of large firms, and that restriction disproportionately hurts those without generational wealth or corporate safety nets.
Show HN: I made a simple support tool – automate or get AI help drafting replies
by cedzer | 2025-04-04 16:37:53+00:00
Most AI support chatbots are fully automated, great until they get stuck and you can’t step in. Others let you "take over", but then you're back to writing replies manually. Same time wasted. And many tools limit you with AI credits. Not helpful when you're trying to move fast.

I built NeoAssist for busy founders like me. It’s a simple AI support tool: fully automate replies or jump in and get help of AI to draft responses for you (or re-writes yours). The chatbot is trained on your own docs, website content, or custom data, and you can fully customize it.

During the beta, you can test everything, including the AI assisted mode, for free (100 AI messages included, no card required). To be fully transparent, on paid plans you get unlimited AI replies by connecting your own OpenAI API key. So if NeoAssist sounds useful for you, feel free to email me via the app, I’ll happily upgrade you to the Standard Plan for free in exchange for genuine feedback.

Would love your thoughts!
by ashtonmeuser | 2025-04-04 16:37:58+00:00
For anyone stumbling upon this that deals with bookmarklets, I submit bookmarkl.ink[0], a tool I made to ease the maintenance of bookmarklets.

In short, it pulls code from GitHub Gists (which have the benefit of being backed by git repos), transpiles, minifies, bundles, and wraps in an IIFE. It's also got a basic module resolver that allows you to include libraries or remote files.

This allows you to use creature comforts like TS and libraries and maintain code readability while still ending up with the smallest possible bookmarklet. It also allows you to link to a particular version (git hash), present user-defined variables, edit code in an inline editor, etc.

Enjoy!

[0]: https://bookmarkl.ink
by JustSomeRand0 | 2025-04-04 16:38:03+00:00
I can reproduce this consistently in both Edge and Chrome. I've been assuming that it was a change to how Chromium redraws pages that was introduced a few months ago, but I haven't really looked into it. I just started hitting Next instead of collapsing anything.

I just timed it real quick in Edge 134.0.3124.93 and collapsing svara's top level thread hangs the browser and lags my system for 1 minute 36 seconds.
by tialaramex | 2025-04-04 16:38:12+00:00
You more or less have to. If you're very wealthy I guess you could travel everywhere on a sedan chair or something, but the US thing where you drive to everything can't work in many parts of Europe.

In very high density areas they don't want private motor vehicles so they're just banned, there's maybe public transit but you'd really have to be unhurried to take public transit over a distance that's say a 10 minute walk.

In very low density areas nobody bothered adding a road. Why not just walk? I mean you could use a serious off road vehicle (no the fact your "truck" says it has AWD does not mean it will work) but even in places where that's legal why not just fucking walk?
by roryirvine | 2025-04-04 16:38:48+00:00
Likely a difference in terminology.

"Upper middle class" in the UK comprises the top 5% or so of the population. They tend to be senior professionals or business owners, are likely to be privately educated, will probably speak with a "received pronunciation" (rather than regional) accent, and have significant asset wealth.

"Upper class" is reserved for landed gentry, nobility, etc. They're people who can live off long-standing inherited wealth and don't need jobs or even education (though many still do have them, of course).
by adultSwim | 2025-04-04 16:38:55+00:00
The Trump administrations attacks are able to go so far now, because institutions already rolled over under a Democratic administration.

Take for instance University of Pennsylvania. In 2023, student anonymously projected "Let Gaza Live" onto a building. The next day then-college president Liz Magill publicly called in the FBI to investigate this as an "antisemitic hate crime". She was later forced to resign for "not doing enough" to combat alleged antisemitism.
by kurofune | 2025-04-04 16:39:12+00:00
>Almost all of my friends with higher educations have left for northern countries, as the situation here is untenable for young people.

>Bottom of the barrel wages for natives are the result of uncontrolled mass migration - we have received millions of immigrants in the last decade, which has basically destroyed wages.

Putting those two sentences of yours together triggered that thought in my mind, I apologise if I was wrong.
by eimrine | 2025-04-04 16:39:28+00:00
I am struggling to post Ask HN with the question about what is going to be done in 1-1.5 years from now. Is this a: mesh networks of drones as a communication breakthrough, lasers able to down a drone with a cost less than 1$ per downed drone, or any AI breakthroughs? I am sure one of the three will skyrocket anytime soon but don't know about anything about these advances.
by HelloAll | 2025-04-04 16:39:28+00:00
Maybe. There were exemptions to the tariffs. The exemptions included Russia. If the tariffs remain, companies are incentivized to invest in places with no tariffs to USA (as Trump removes Russia sanctions whenever it's convenient).

So, we've been hit with the largest tax increase (peacetime) in US history with no coherent explanation. Even the Project 2025 master plan suggests the idea is to devalue the dollar to save hundreds of billions. We've already lost trillions, so that didn't work.

I think the most obvious answer is incompetence, but there are piles of shit and coincidence with MAGA and Russia. I'm not in denial.
by cmrdporcupine | 2025-04-04 16:39:31+00:00
Whenever I go reading about these people and this ideology and community it reminds me a lot of the various Trotskyist or other far left sects and personalities I encountered when I was younger. Similar dramas and egos and personality quirks and strident philosophical emissions, ideologically-focused groups built around persons/personalities. Often involving sexual relationships and dubious power dynamics. Just from, y'know, 180 degree philosophical positions.

Maybe it was a product of her original linguistic/cultural extraction, but when I read Rand's "Capitalism: The Unknown Ideal" as a teen it reminded me very much of Stalinist or Trotskyite tracts I encountered around the same time. Different positions, same tone of absolute certainty and similar polemical flourishes.

All of which to say, it all strikes me as more theological than philosophical.
by samspot | 2025-04-04 16:39:39+00:00
This makes AI image generation very boring. I don't want to generate pictures I can find on google, I want to make new pictures.

I found apple's tool frustrating. I have a buzzed haircut, but no matter what I did, apple was unable to give me that hairstyle. It wants so bad for my avatar to have some longer hair to flourish, and refuses to do anything else.
by apbytes | 2025-04-04 16:39:44+00:00
When you call a cuda method, it is launched asynchronously. That is the function queues it up for execution on gpu and returns.

So if you need to wait for an op to finish, you need to `synchronize` as shown above.

`get_current_stream` because the queue mentioned above is actually called stream in cuda.

If you want to run many independent ops concurrently, you can use several streams.

Benchmarking is one use case for synchronize. Another would be if you let's say run two independent ops in different streams and need to combine their results.

Btw, if you work with pytorch, when ops are run on gpu, they are launched in background. If you want to bench torch models on gpu, they also provide a sync api.
by 6figurelenins | 2025-04-04 16:39:50+00:00
Not to pick on Rails, sorting files into "models / views / controllers" seems to be our first instinct. My pantry is organized that way: baking stuff goes here, oils go there, etc.

A directory hierarchy feels more pleasant when it maps to features, instead. Less clutter.

Most programmers do not care about OO design, but "connascence" has some persuasive arguments.

https://randycoulman.com/blog/2013/08/27/connascence/

https://practicingruby.com/articles/connascence

https://connascence.io/

> Knowing the various kinds of connascence gives us a metric for determining the characteristics and severity of the coupling in our systems. The idea is simple: The more remote the connection between two clusters of code, the weaker the connascence between them should be.

> Good design principles encourages us to move from tight coupling to looser coupling where possible. But connascence allows us to be much more specific about what kinds of problems we’re dealing with, which makes it easier to reason about the types of refactorings that can be used to weaken the connascence between components.
by cmrdporcupine | 2025-04-04 16:40:29+00:00
It's nice but not worth the price to buy it new, not even close. I got mine used and quite depreciated.

And with the tariffs against Chinese vehicles it's been removed from sale in North America (for new vehicles, only available used) and it's questionable about how well I'll be able to get it serviced in the future. The local Volvo dealers apparently have a chip on their shoulders about Polestar and won't touch it, either.
by autoexec | 2025-04-04 16:40:47+00:00
At least the Bold and Beautiful has a story with characters. There are popular minecraft videos that are just random kids saying "here's the house I made of blocks... here are the walls... here are some torches... here are the stairs... here are the upstairs walls..." and videos that are just random kids putting blocks on top of other blocks. Some without narration at all, but others with inane chatter.

There's no compelling narrative however, no drama, no danger/thrills, no ticking clock, no "will they or won't they", and no production value.
by cmurf | 2025-04-04 16:40:51+00:00
I don't understand why you think GRUB is required. Or what boot sequence (or use case) involves UEFI > NT6 > GRUB > linux.

Are you wanting bootmgr.efi to learn how to read arbitrary Linux filesystems, bootloader configurations, and EFISTUB? Why?

Windows supports setting a one time boot using a UEFI BootNext NVRAM variable, directly boots shim.efi, doesn't involve bootmgr.efi
by jillesvangurp | 2025-04-04 16:41:01+00:00
> I've never heard a single positive story

That's because you might not be as well informed as you think probably.

180K miles is nothing for a decent EV. LFP batteries are good for 3000-5000 charging cycles. At around 250 miles per full charge that translates into 750K miles to 1.25M miles. NMC batteries last a bit less long. Their batteries might dip below 80% of the original capacity around the 750 cycle mark (190K miles). Most of the newer ones would do better than that at 1000-1500 cycles. Below 80% they don't suddenly fail. They just drive a bit less far than they used to.

Battery failures are pretty rare with EVs. Most manufacturers give 8 year warranties. That's because they are unlikely to fail before the warranty expires. So, it's a cheap promise to make. The model 3 has only been on the market for about 8 years now. Most of them are still under warranty. Most other EVs are newer than that.
by bradley13 | 2025-04-04 16:41:08+00:00
FWIW, many years ago I started a little tech company. I was convinced that we had a compelling product, and we had some initial customers - franchises of a large, worldwide organization. It would be easy to springboard to more and more franchises, before even looking elsewhere for customers.

Turns out that I hate sales. Not coincdentally, I'm also not much good at it. We talked to some marketing agencies, but all of them wanted flat fees, and none of them would consider "performance based" payment.

So, yeah. I wish someone like you had existed at the time.
by Pet_Ant | 2025-04-04 16:41:37+00:00
> This is only true where it is distinguishable that the end result is made with care and love rather than indiscriminate copying. Which is why attribution is essential. No one realistically could tell a ring was hand crafted or mass produced if there wasn't some tell.

It doesn't matter if the ring was hand crafted or not. It's whether it has hand selected. If you find the perfect ring, even if it was generated by an AI, it's your selection that matters. It's the correspondence that matters. The way it reflects elements of your relationship. It's you recognising those elements in the ring. Your partner recoginising them in the ring. And your partner recognising you recognising them. That is what makes itself.

Not to dox myself, but I am not Grace Abrams. I met my partner long before her song "Risk" was written, but when I heard it I immediately played it for my partner and said "This describes the feelings I had when I met you". I played it for her, she cried. I didn't have to write the song or own or pay a cent for it. It's the curation that made an emotional connection and had value. The song itself has no value, and she might have even heard it and never made the connection, it was me embuing that had value.

To go back to Miyazaki, it's the connections between elements in his films. The attention to detail and tone between relationships that make his films amazing. It's all about the handyman's invoice [0]. By the time there are enough examples for AI to learn something, it ceases to be a novel insight and have value. It's the curation and application that have value and are human and cannot be stolen.

[0] https://www.snopes.com/fact-check/know-where-man/
by lerno | 2025-04-04 16:41:45+00:00
If you want to have your own Base32 where giving a padding = 0xFF instead returns an error, it's commonplace to have a wrapper that will explicitly do the check and return an error if it fails, and otherwise call the function:

macro String? encode2(Allocator allocator, char[] src, char padding = DEFAULT_PAD, Base32Alphabet* alphabet = &STANDARD) { if (padding >= 0xFF) return INVALID_PADDING?; return encode(allocator, src, padding, alphabet); }

Maybe a better place to ask these questions are on the Discord if you have an account: https://discord.gg/qN76R87
by xxX6hacke9rXxx | 2025-04-04 16:41:47+00:00
In a thread about tariffs, praising the value of Tunisian olive oil and lamenting the rough state of its producers while saying you’d happily pay the tax increase it seem like you misunderstand what tariffs will actually do. Based on the reception of my initial comment, I am not the only one who came to that conclusion.

Thanks for clarifying your position.
by pcthrowaway | 2025-04-04 16:41:53+00:00
OK so for one the title of that section is off:

> JS loops pretend their variables are captured by value

This has to do with how for loops work with iterators, but also what `let` means in variable declaration. You talk about 'unrolling a for loop' but what you're doing is 'attempting to express the same loop with while'. Unrolling would look like this;

// original: for (let i = 0; i < 3; i ++) { setTimeout(()=>console.log(i)) } // unrolled: { let i = 0; setTimeout(()=>console.log(i)) }; { let i = 1; setTimeout(()=>console.log(i)) }; { let i = 2; setTimeout(()=>console.log(i)) }; // original: let i = 0; for (i = 0; i < 3; i++) { setTimeout(()=>console.log(i)) }; // unrolled: let i = 0; { i = 0; setTimeout(()=>console.log(i)); }; { i = 1; setTimeout(()=>console.log(i)); }; { i = 2; setTimeout(()=>console.log(i)); };

Now you can begin to explain what's going wrong in the second example; 'i' is declared with 'let' outside of the block, and this means the callback passed to the setTimeout is placed in the next stack frame, but references i from the outer scope, which is modified by the time the next stack frame is running.

In the original example, a different 'i' is declared inside each block and the callback passed to setTimeout references the 'i' from its scope, which isn't modified in adjacent blocks. It's confusing that you're making this about how loops work when understanding what the loop is doing is only one part of it; understanding scoping and the event loop are 2 other important pieces here.

And then if you're going to compare a while loop to a for loop, I think a critical piece is that 'while' loops (as well as 'do .. while') take only expressions in their condition, and loop until the expression is false.

'for' loops take three-part statements, the first part of which is an initialization assignment (for which 'var' and 'let' work differently), and the second of which is an expression used as the condition. So you can declare a variable with 'let' in the initialization and modify it in the 'afterthought' (the third part of the statement), but it will be treated as if each iteration of the loop is declaring it within the block created for that iteration.

So yes, there are some 'for' loop semantics that are specific to 'for' loops, but rather than explain that, you appear to be trying to make a point about loops in general that I'm not following.

I'm not saying the examples won't help people avoid pitfalls with for and while loops, but I do think they'll be unable to generalize any lessons they take away to other situations in JS, since you're not actually explaining the principles of JS at play.
by MattPalmer1086 | 2025-04-04 16:42:09+00:00
Boot from USB drive, answer some questions. 20 mins later reboot to a fully functioning desktop, with lots of useful apps already installed.

Battery life is fine, no partioning required. As far as selecting a distro goes, yeah, there's a lot of choice but it's not hard to find which ones are the mainstream ones.

Edit: maybe the average computer user would find that difficult too, but they would find installing Windows similarly difficult (if not more so).
by chrisrodrigue | 2025-04-04 16:42:12+00:00
Python is really shaping up to be the lingua franca of programming languages. Its adoption is soaring in this FOSS renaissance and I think it's the closest thing to a golden hammer that we've ever had.

The PEP model is a good vehicle for self-improvement and standardization. Packaging and deployment will soon be solved problems thanks to projects such as uv and BeeWare, and I'm confident that we're going to see continued performance improvements year over year.
by gpm | 2025-04-04 16:42:30+00:00
The "OSD" is not the actual definition of open source. The OSI has no special rights to the term open source (despite their failed attempt to trademark the term). The OSI did not coin the term, their founders did not coin the term, the term was in use to refer to non-commercial software with publicly posted source prior to the OSIs existence.

Open source is like any english term, its meaning is defined by its use, not by some special interest group.

The complaint about using open source to refer to non-commercial licenses absolutely is pedantry. But more than that, it's not even objectively correct pedantry. It, like most language, is subjective.

(Which isn't to say that I think this license complies with the common use of the term open source as actually used, but I disagree with your argument for why that's the case).
by settrans | 2025-04-04 16:43:47+00:00
1. Hamas bears the moral responsibility for all of the suffering in the war they started on October 7th, and the Palestinian people bear the moral responsibility of electing and supporting them (and participating in the invasion, and not returning the hostages).

2. Even Hamas now admits most deaths have been military aged males: https://m.jpost.com/israel-news/defense-news/article-848592

3. How can you argue that Gaza has been starved and ethnically cleansed when the population of the Gaza strip has increased since the start of the war?
by ashvardanian | 2025-04-04 16:43:54+00:00
CuPy has been available for years and has always worked great. The article is about the next wave of Python-oriented JIT toolchains, that will allow writing actual GPU kernels in a Pythonic-style instead of calling an existing precompiled GEMM implementation in CuPy (like in that snippet) or even JIT-ing CUDA C++ kernels from a Python source, that has also been available for years: https://docs.cupy.dev/en/stable/user_guide/kernel.html#raw-k...
by bryanrasmussen | 2025-04-04 16:44:02+00:00
the argument is about things that are weird, any effect in a language that means you have to stop and think over scoping rules to figure out why it should be that way is obviously "weird" to my understanding of this word.

In short I'm not sure that they have misunderstood the scoping, they have probably understood it fine, they have remarked on the weirdness that different aspects of JavaScript enables.

Certainly with perfect understanding and knowledge of a language that you do not have to think about at all because it is so perfectly remembered nothing would ever be weird, it is the incidental behaviors of the language at time where you have to stop and think hey why is that, oh yeah, scoping rules and timeout in the call stack, damn!
by kenjackson | 2025-04-04 16:44:15+00:00
I thought they were talking about the traditional blue links Google search results, not the AI returned results. Then sure -- ChatGPT, Gemini, etc... I put them all in the same bucket as complementary. Interestingtly though, I don't get the AI Overview on mobile, so there I'd have to explicitly go to an LLM focused interface.
by andreygrehov | 2025-04-04 16:44:57+00:00
Here is the data from 2016 on tariffs the apply to the US:

https://wits.worldbank.org/tariff/trains/en/country/TUN/part...

Here is the data from 2022 on tariffs the US applies to Tunisia:

https://wits.worldbank.org/tariff/trains/en/country/USA/part...