MurphyA/hacker-news huggingface dataset:
by teeray | 2025-06-03 17:37:57+00:00
> ...having only 2 when it comes to error handling does not seem like a big deal. I imagine people will just use their preference...

I foresee endless PR arguments about whether err != nil is the best practice or whatever alternative exists. Back-and-forth based on preference, PRs getting blocked since someone is using the "other" style, etc. Finally the org is tired of all this arguing and demands everyone settle on the one true style (which doesn't exist), and forces everyone to use that style. That is where the "forced to use it" comes from.

From the early days, Go has taken principled stands on matters like this, striving for simplicity and one way to do something. For example, `go fmt` cut through all the tabs vs. space nonsense by edict. "Gofmt's style is no one's favorite, yet gofmt is everyone's favorite."
by dmkolobov | 2025-06-03 17:38:07+00:00
No one is arguing the merits of drone warfare.

We have two years of footage from Ukraine, where camera-equipped drones are launched from a several miles away at most, and where there are networks of pilots and support specialists to assemble and launch more drones in case of (frequent) failure.

I don’t think it’s wise to wager the success of a 6-month mission deep in enemy territory on a plan with a single point of failure, especially when the alternative is equipping each drone with < $100 cameras.

But sure, you’re clearly the better thinker.
by ty6853 | 2025-06-03 17:38:18+00:00
The hesitation was likely because something like a dozen of their own guys were in there (which they refused to identify at trial, so we only know the ID of one that was discovered), and the guy leading the live fire exercises, Fabio Minoggio, was a paid FBI informant (now cop) who was "psyops" trained 20 year veteran of the swiss military.

No real need to address the standoff, when the standoff is yourself vs yourself, and your own guy is by his own admission providing a "supervisory" role of the live fire.
by standyro | 2025-06-03 17:39:23+00:00
Lyra Energy | lyra-energy.com | Hybrid, Los Angeles, CA | Full-time & Contractors

Lyra is a Los Angeles based technology company launching an electric two-wheeler vehicle platform. The tight-knit team here is composed of seasoned veterans from the EV manufacturing industry in California with expertise in high power battery, thermal, and electronics development.

Open Roles

- Senior Firmware Engineer (ONSITE/HYBRID) $150k-$220k & benefits

- Firmware Engineer (CONTRACTOR) comp depends on experience

We’re looking for a Senior Firmware Engineer to continue to shape the core embedded systems that power our vehicles. In this role, you’ll take ownership of firmware development for connected vehicle systems, battery management systems, and infotainment. Your work will directly impact the first generation of Lyra vehicles going to market and help define the software and hardware stack that will scale with the company. You’ll be joining an established team with deep experience from the EV industry, and work closely with electrical, mechanical, and software engineers.

Email me stan (at) lyra-energy.com if you're interested. I'm our Head of Software, so reach out to me directly and tell me how your experience might match what we're looking for. Please include "Hacker News June 2025" in the subject line.

No recruiters or agencies please, limited visas.

US or Singapore/Indonesia based developers only.
by nepthar | 2025-06-03 17:39:47+00:00
Yeah, this is the single biggest reason I avoid go - I just don't want to clutter my "happy path" logic. It makes things harder to reason about.

"Errors are values", sure. Numbers are values and Lists are values. I use them differently, though.

I wonder if there could be "stupid" preprocessing step where I could unclutter go code, where you'd make a new token like "?=", that got replaced before compile time. For instance, "x ?= function.call();" would expand to "x, err := function.call(); if (err != nil) return err;"
by potatolicious | 2025-06-03 17:39:56+00:00
> "Even 2 years ago, before agents or reasoning models, these LLMs were extremely powerful. The catch was, you needed to figure out what worked for you."

Sure, but I would argue that the UX is the product, and that has radically improved in the past 6-12 months.

Yes, you could have produced similar results before, manually prompting the model each time, copy and pasting code, re-prompting the model as needed. I would strenuously argue that the structuring and automation of these tasks is what has made these models broadly usable and powerful.

In the same way that Apple didn't event mobile phones nor touchscreens nor OSes, but the specific combination of these things resulted in a product that was different in kind than what came before, and took over the world.

Likewise, the "putting the LLM into a structured box of validation and automated re-prompting" is huge! It changed the product radically, even if its constituent pieces existed already.

[edit] More generally I would argue that 95% of the useful applications of LLMs aren't about advancing the SOTA model capabilities and more about what kind of structured interaction environment we shove them into.
by hackingonempty | 2025-06-03 17:39:57+00:00
Generators and Goroutines have keywords/syntax in Golang but now they don't want to pile on more to handle errors. They could have had one single bit of syntactic sugar, "do notation", to handle all three and more if they had considered it from the beginning but it seems too late if the language designers are even aware of it. TFA says "If you’re wondering if your particular error handling idea was previously considered, read this document!" but that document references languages with ad-hoc solutions (C++, Rust, Swift) and does not reference languages like Haskell, Scala, or OCaml which have the same generic solution known as do-notation, for-comprehensions, and monadic-let respectively.

For example instead of

func printSum(a, b string) error { x, err := strconv.Atoi(a) if err != nil { return err } y, err := strconv.Atoi(b) if err != nil { return err } fmt.Println("result:", x + y) return nil }

they could have something like this:

func printSum(a, b string) result[error, unit] { return for { x <- strconv.Atoi(a) y <- strconv.Atoi(b) } yield fmt.Println("result:", x + y) }

which desugars to:

func printSum(a, b string) result[error, unit] { return strconv.Atoi(a).flatMap(func(x string) result[error, unit] { return strconv.Atoi(b).map(func(y string) unit { return fmt.Println("result:", x + y) } } }

and unlike ad-hoc solutions this one bit of syntax sugar, where for comprehensions become invocations of map, flatMap, and filter would handle errors, goroutines, channels, generators, lists, loops, and more, because monads are pervasive: https://philipnilsson.github.io/Badness10k/escaping-hell-wit...
by wing-_-nuts | 2025-06-03 17:40:00+00:00
That's ...quite an odd statement. Linux is linux. The big distinguishing feature between most distros these days is the number and freshness of packages available to install, and how user friendly the default desktop environment is. Especially with recent advances in running windows games / apps via proton, there's never been an easier time to adopt it. I grant you, some people do not really have the skills to use linux, but my ~ 70 year old mother gets by perfectly fine with linux mint. I would expect anyone on hacker news to be able to do the same unless you had windows specific specialty apps (autocad, etc) that you needed to run.
by duxup | 2025-06-03 17:40:08+00:00
>nowhere near as damaged by the attack as some pro-Ukraine commentators are suggesting

These kind of meta conversation taglines always make me skeptical of an article.

Not as damaged as what? vs someone somewhere on the internet who overstated things? I'm sure someone on the internet overstates just about anything.

So I go on and read the article and yup, nothing that really indicates more or less damage than I've already seen.
by mmooss | 2025-06-03 17:40:16+00:00
Maybe the user could type in their own words, and the app could approve/disapprove based on the 40 word list.

But maybe that adds an entirely new normalization function - user types 'runs' or 'ran', the app has to normalize to 'run'.

The app could just have a 'more words' button, loading the next 17.
by kenjackson | 2025-06-03 17:40:21+00:00
I think all PhDs have an oral defense. Not only that its common to have Quals where you have to present the state of the art research in your field and answer oral questions about it. Even if you had ChatGPT it would be tough because a lot of questions are like, "Why did XYZ do ABC after seeing result 123?" The problem is that often its an untrue statement they are trying to get you to justify -- XYZ didn't do ABC or didn't do it after seeing 123. This is something I imagine most LLMs to struggle with today and say, "No, that didn't happen -- here's actually what happened" when its in a nuanced field.
by d4mi3n | 2025-06-03 17:40:54+00:00
100% agree, and fingerprinting BYOB devices would be problematic in a lot of ways.

I'm generally against BYOD programs. They're convenient but usually come from a place of allowing employees access to things without the willingness to take on the cost (both in corp devices and inconvenience of a second phone/tablet/whatever) to run them with a high level of assurance.

Much better in my opinion to use something like PagerDuty or text/push notifications to prompt folks to check a corp device if they have alerts/new emails/whatever.
by ryandrake | 2025-06-03 17:41:14+00:00
> Absolutely agree this is silly and cities should be encouraging cycling.

They should be encouraging cycling, but not by making red lights a free-for-all.

I once lived on the corner of a pretty busy cycling street by the beach in Florida, with a stoplight in the intersection outside my window. We had these gigantic "trains" of cyclists regularly just blowing straight through red lights, because there typically wasn't a lot of traffic coming from the cross street. I remember one occasion where a car was entering the intersection from the cross street (car had the green light, major street had the red), and a huge train of about 20 bicycles at full speed ran the red light and slammed into the side of the car with a loud "thump thump thump thump thump thump..." Total wreckage. Busted bicycles all over the street after they fucked up, and the cyclists had the nerve to be irate. If I hadn't run out and started recording, the car driver probably would have been assaulted by these raging hotheads.

These guys need to obey traffic laws, too.
by vasco | 2025-06-03 17:41:23+00:00
> As an engineer, I am fascinated by it all. As a human, I am horrified that we democratized violence on this scale.

How do you even defend against this in a terrorist use case? When a small drone with a grenade or homemade explosive is so accessible? Any Christmas market in central Europe these days is surrounded by car barriers to prevent mass run-overs, but what do you do when soon someone has the idea of dropping some molotov cocktails from drones in public places? Answering my own question I guess you can already throw one manually without a drone. Securing public places is weird, I'm glad it's not my job.
by ModernMech | 2025-06-03 17:41:34+00:00
As a professor of Computer Science, I'm about ready to allow my students to use AI -- if you can't beat 'em, join 'em. But they're not going to like it, because what I'm going to do is significantly raise the bar.

For the last several years I've been allowing students (college sophomores) to do take home exams where they essentially have to build a networked system in C++. I tell them not to use AI but I have to assume they are.

Even still, the solutions are not all that great, despite unlimited time and resources, they still submit work that falls into a roughly B average. Which, if they didn't have AI, maybe that would be a C average, so perhaps the standards just need to go up. Still, it's not like they're all getting 100%.

AI is still really only as good as the person driving it, and it still, despite all the hype, hallucinates like crazy, such that if they don't pay close attention and constantly course correct, they can't expect the project to actually work.
by bigyabai | 2025-06-03 17:42:17+00:00
Except a lot of these are problems with so-called native apps too. My experience using MacOS for the better half of a decade ended with >80% of the software I paid for being unsupported. My options were to continue using a non-secure OS version or update to an environment where my software doesn't run anymore.

I think you're the last of a dying breed of users. The iPhone generation doesn't lose their internet connection, throw a hissy-fit when UX changes or even care all that much when data is on a remote server. They will pay for whatever is successfully marketed to them, and that company will be rewarded with success. This is what the App Store conditions users into wanting, if OnePass tells you to switch to their Electron app then you have zero choice in the matter.

My solution has simply been to never pay for software. Not native, not SaaS webapps, not Electron containers. It's all just one big scam when free alternatives to 99% of meaningful software exists if you're willing to eschew laziness.
by mullingitover | 2025-06-03 17:42:19+00:00
That story has two of the most wickedly evil protagonists ever.

They selfishly wiped out all of humanity (all bajillion trillion of them) because they didn't like how things were going.

I say evil, with my whole chest, because their behavior is a big hallmark of evil: "I'm absolutely right about this, and I'm going to make a decision that kills vast numbers of human beings because I know I'm right and your deaths are a sacrifice I'm willing to make."
by simonw | 2025-06-03 17:43:04+00:00
I've had the same system (M2 64GB MacBook Pro) for three years.

2.5 years ago it could just about run LLaMA 1, and that model sucked.

Today it can run Mistral Small 3.1, Gemma 3 27B, Llama 3.3 70B - same exact hardware, but those models are competitive with the best available cloud-hosted model from two years ago (GPT-4).

The best hosted models (o3, Claude 4, Gemini 2.5 etc) are still way better than the best models I can run on my 3-year-old laptop, but the rate of improvements for those local models (on the same system) has been truly incredible.
by tines | 2025-06-03 17:44:03+00:00
I appreciate the argument that things can often be difficult for noobs but actually fine or better than alternatives once you get used to them.

But on the other hand, people who are "used to the way things are" are often the worst people to evaluate whether changes are beneficial. It seems like the new people are the ones that should be listened to most carefully.

I'm not saying the Go team was wrong in this decision, just that your heuristic isn't necessarily a good one.
by teeray | 2025-06-03 17:44:13+00:00
It's funny to me when people see screenfuls of stack traces and remark how clear and useful it is. Perhaps, but do you really need all that? At what cost to your logs? I'd much rather have a one-liner wrapped error that cuts through all the framework and runtime noise. Yes, I can trace just as effectively (usually better)--the wrapping is very greppable when done well. No, in over a decade of writing Go full time, I have never cared about a runtime function or the other usual verbose garbage in my call stack.
by spacedcowboy | 2025-06-03 17:44:25+00:00
Hell, 30 years ago I was working for the MOD (they sponsored my PhD and turned it into an RA) in the UK creating context-aware neural network inference engines for FLIR (Forward-looking infra-red) data. We had all sorts of "fun" stuff running on a Meiko computing surface, with parallelised network training and implementations, temporal and spatial averaging, and relaxation labelling all thrown into the mix to aid the recognition engine, done with a voting system of various architectures sharing to a "blackboard" where information could be posted to and read from. Visualisation was all on high-end (for the time) Silicon Graphics workstations.

The context (together with the features extracted) was the killer (forgive the pun) feature though - everything else reduced noise, but context increased signal.

My gast remains flabbered that the sort of thing I was working on back then hasn't become commonplace in the interim. The computing power available today, compared to then, and the accuracy we had (I know for a fact at least one of the designs was made into real hardware, it was called RH7, and "RH" stood for "Red Herring" - oh how we laughed) ... It beggars belief that it was just left to digitally rot.
by mrandish | 2025-06-03 17:44:50+00:00
Yes, I assumed they didn't need GPS because they knew exactly where the trucks that were the launch sites were to be placed and they knew approximately their targets would be sitting on a certain section of airport tarmac. The pilots would have had a detailed satellite photo map of their entire route until visual target ID was possible. While GPS was probably partially jammed, that deep in Russia I doubt it would have been as severe as near the front lines. Plus there wouldn't have been heavy jamming of the local drone control frequencies because they weren't expecting a drone attack there.

To me the more interesting question is how they managed sending the real-time video feeds and control data. Since the trucks were mobile, I assume it had to be via a bunch of mobile phones signed up to Russian service providers since Starlink doesn't work inside Russia. To reduce latency, I wonder if the phones were connecting to a covert site in Russia which had a high-bandwidth wired link, maybe a front company established for the operation with servers and broadband internet connections.
by rollcat | 2025-06-03 17:44:55+00:00
You would have to infer the intent of the code. One example, from a small project I'm working on:

$ find . -name "*.go" | xargs grep 'if err !=' | wc -l 242 $ find . -name "*.go" | xargs grep 'if err ==' | wc -l 12

So about 5% of the error checking code is about handling the edge cases, where we are very much interested in what the error actually is, and need to handle those conditions carefully.

If you discard that as "error handling noise", you're in for a bug. Which is, by the way, perhaps the worst side-effect of verbose, repetitive error handling.

Apropos syntax highlighting: many themes in regular use (certainly most of the defaults) choose a low-contrast color for the comments. The comments are often the most important part of the code.
by CactusRocket | 2025-06-03 17:45:18+00:00
I have 2 problems.

It's too easy to accidentally write `if err == nil` instead of `if err != nil`. I have even seen LLMs erroneously generate the first instead of the latter. And since it's such a tiny difference and the code is riddled with `if err != nil`, it's hard to catch at review time.

Second, you're not forced by the language to do anything with the error at all. There are cases where `err` is used in a function that not handling the `err` return value from a specific function silently compiles. E.g.

x, err := strconv.Atoi(s1) if err != nil { panic(err) } y, err := strconv.Atoi(s2) fmt.Println(x, y)

I think accidentally allowing such bugs, and making them hard to spot, is a serious design flaw in the language.
by throwanem | 2025-06-03 17:45:51+00:00
It is good form to cite or at least indicate, with quotation marks, when quoting. If you meant not to reference the famous usage, to name the work is best, not least to establish relevance and avoid appearing pretentious.

You say you find the incest and the torture equally upsetting, then you justify one and indict the other. If you can't be consistent even in the scope of a single comment, or for that matter distinguish fiction from reality better than this, wise indeed you seek balm for your dismay over the book elsewhere than with me; I have only so much patience for patent nonsense these days.
by wing-_-nuts | 2025-06-03 17:46:01+00:00
>do you even have basic features like a search bar that searches the internet?

Why in god's name would I want that? When I start typing in my search bar I want to find things on my computer, that's why I'm typing on an operating system widget and not a google tab.

It's really sad that W11 is hands down less usable and responsive than almost any other linux desktop I've used because of this.
by jenniferabowd | 2025-06-03 17:46:15+00:00
Location: Washington DC, USA

Remote: Yes

Willing to relocate: No

Technologies: React, JavaScript/Typescript, Node, Next, AWS

Résumé/CV: https://www.jenniferabowd.com/Jennifer_Abowd_Resume.pdf

LinkedIn: https://www.linkedin.com/in/jenniferabowd/

Email: jenniferabowd at gmail dot com.

I'm a Senior Full Stack Engineer with 7+ years of experience. I love working with JavaScript, React, and Node. I worked extensively in PHP Laravel for 2 years. I've worked at various companies as a Full Stack Engineer, so I've also dabbled in Java and Python. I am passionate about mentorship and code review as I see those as great ways to help the teams I'm on improve.
by bccdee | 2025-06-03 17:46:19+00:00
Here's a non-syntactic suggestion. Could we just patch gofmt to permit this:

if err != nil { return nil, err; }

as a well-formatted line of go? Make it a special case somehow.

My only big problem with if err != nil is that it eats up 3 lines minimum. If we could squish it down to 1, I'd be much more content.
by zahlman | 2025-06-03 17:46:29+00:00
> Up until this point, both students had nearly perfect homework grades while failing every in-class quiz.

This is nothing new. In a computer graphics class I took over 20 years ago, the median score on the assignments before the midterm was >100% (thanks to bonus questions), yet in midterm prep other students in the class were demonstrating that they didn't even have a firm grasp on the basic concept of a matrix.

That is: they were in a 4th year undergrad course, while doubting material from a senior year high school course where they had to have gotten high marks in order to get into the program.

And the midterm grading was heavily curved as a result (though not as much as in some other courses I took).

Students will do what they need to do for the grade. It seems a great many of them have internalized that none of this is about actually learning anything, even if they would never say so aloud. (I learned things - where I didn't already know them - because it was actually interesting. My resulting grades were pretty good overall, but certainly not top of class.)

> Who knows, in the end maybe this will kill off the group of students who enroll in CS courses “because mom and dad think it’s a good job,”

Why would it? It's becoming easier than ever to fake understanding, and to choose anything else they would need both the opportunity and social permission. I only see the problem getting worse.
by nilirl | 2025-06-03 17:46:29+00:00
Error handling is some of the least fun parts of writing code. In all languages.

But in any case, why so much fear of being wrong?

> we have fine-grained control over the language version via go.mod files and file-specific directives

And that may be the real truth of it: Error handling in Go just isn't ... that much of a problem to force action?
by nickpsecurity | 2025-06-03 17:46:29+00:00
There's a large number of people who might have the skill. Tech companies have been laying people off, too, which increases the talent pool. That lets them be picky. If patient, they'll get a better employee.

On the other side, techniques recruiting is getting harder. They've long had to deal with applications that have nothing to do with the job, by people with no experience, and people who can't code. Now, AI's might be writing applications or sample code. On busy sites like HN, they might also just get many applications. Even a reasonable, hiring manager might have difficulty trusting an application enough for an interview.

Those are my two theories for most of it. Others include companies prioritizing culture fit, status, or job adds that are schemes. Some of these happen in other places.