HNHacker News
TopNewBestAskShowJobs

bheadmaster

5,648 karma · joined March 31, 2021

just some random guy on the internet
submissionscomments
bheadmaster··on I used to prefer permissive licenses and now favor copyleft
You can use LGPL licensed-software in your proprietary software, as long as you only link to it dynamically - i.e. you provide a clear separation between your software and the LGPL software.
bheadmaster··on I used to prefer permissive licenses and now favor copyleft
For anyone who thinks I'm talking out of my ass, consider Qt.

If you don't own the Qt copyright, you cannot sell Qt to a company who wants to use it to build a proprietary product - since Qt is GPL licensed, using it in a proprietary product would not be permitted.

But since The Qt Company owns the copyright, they can sell their own software to companies that want to build a proprietary product with it - they just sell it under a proprietary license, specifically tailored for this. The fact that it was previously released under GPL is irrelevant, because the copyright holder can license it under as many licenses as they want.

If you don't own the copyright to it, you can only """sell""" GPL software in a manner in which local DVD shops sold pirated movies back in the early 2000s.

bheadmaster··on I used to prefer permissive licenses and now favor copyleft
> You don't even need to be the copyright owner to sell GPL software

You do, if sell means also allowing another vendor to use your software as a part of their proprietary software.

GPL alone, if you're not the copyright owner, would not allow you to sell software in this way. But if you are the copyright owner, you can bypass GPL and sell a proprietary license to the vendor saying "you can use this software in your proprietary product if you pay me $XYZ".

bheadmaster··on I used to prefer permissive licenses and now favor copyleft
> And if the original can't compete it means the additional functionality was only going to exist because the financial model of the closed fork could pay for it.

This completely disregards the fact that the "financial model of the closed fork" explicitly chose to build upon the permissively licensed original.

If the company chooses to build upon free software, they should be obligated to give back to the community from which they leech. Otherwise, they should just build their own thing from scratch with all the money they've hoarded, and keep it closed.

bheadmaster··on Typr – TUI typing test with a word selection algorithm inspired by keybr
Honestly, I'd recommend using the good ol' gtypist.

It uses mostly real (or contrived) segments of text, which appear as if they were taken out of newspapers or personal letters. It has both beginner and advanced sets of text, and a whole community of custom texts that you can use. I've personally learned touch typing from scratch by using this program alone.

bheadmaster··on The first non-opoid painkiller
It's a hyperbole.

Injuries generally cause brain to release endorphins, which in turn releases dopamine, causing addiction. For example, cutting is a common type of self-mutilation depressed people do. High-intensity exercise arguably also does the same thing - as your body is "microinjured" by strain, your brain releases endorphins to help with the pain, causing effects like "the runner's high".

bheadmaster··on The first non-opoid painkiller
> even the "pain relief" provided by sticking a knife through your skin to the bone is addictive

> the side effect of addiction isn't going to go away

While I agree with your conclusion itself, I disagree that the premise implies the conclusion. The main difference between suzetrigine and opioids, as explained in the article:

    Crucially, opioids don’t just kill pain: they also incite pleasure.
    When the mu opioid receptors present in the reward center of the
    brain are activated, this reduces the secretion of a neurotransmitter
    called GABA, which works to inhibit dopamine-producing neurons. As GABA
    release declines, dopamine spikes, lighting up the reward center and
    inducing pleasure.
The "pain relief" provided by sticking a knife though your skin to the bone is caused by endorphine, which functions similarly to opioids, and that's why it's addictive.

Since suzetrigine doesn't affect mu receptors in the brain, this mechanism doesn't apply.

But I'm almost sure it will have some other unintended side effects. Morphine had them, heroin had them, methadon had them... And each time the inventors were sure they didn't.

bheadmaster··on Is mathematics mostly chaos or mostly order?
> Didn't mean to rub you the wrong way.

To me, it doesn't sound like you did. The parent comment of yours just stated, albeit bluntly, that the "invention" and "discovery" are fundamentally the same. Whether we use one or the other depends on how big the size of the space of the possibilities feels to us. Math has a very rigid and easily enumerable space of possibilities (strings of symbols), so we call it "discovery", while cooking has an enormous space of possibilities (countless pieces of meat and vegetables, each unique in its configuration of atoms, etc.), so we call it "invention".

When you invent a way to make music, did you really invent it? Or did you simply discover a particular configuration of atoms that can produce sound when handled in a particular way, that was already there in some platonic universe of ideals? Either way, the end result is the same. Nothing really changes.

bheadmaster··on Is mathematics mostly chaos or mostly order?
> I've never made peace with Cantor's diagonaliztion argument

Maybe you'd prefer a purely set-theoretic one:

---

Let R be a set. Let S be a set of all subsets of R.

We want to prove that |S| > |R|, by proving that a bijective function from R to S cannot exist. We will do that by assuming that it can, and then deriving a contradiction.

Assume there is a bijective function f : R -> S. Define D = { r ∈ R | r ∉ f(r) }. Since f is a bijection, there exists some r₀ ∈ R such that f(r₀) = D.

However, by the definition of D, we have:

- If r₀ ∈ D, then r₀ ∉ f(r₀) = D, which is a contradiction.

- If r₀ ∉ D, then r₀ ∈ f(r₀) = D, which is also a contradiction.

Therefore, our assumption that there exists a bijective function f : R -> S must be false.

Therefore, |S| > |R|.

bheadmaster··on Lisp-stat: Lisp environment for statistical computing
In my view, the biggest advantages of ahead-of-time compilation is lower binary size, higher performance, and binary portability (in a sense of being able to copy the binary and run it on another system with same architecture and OS, not in the usual sense of being easy to run to a different system architecture or OS).

It is IMO not known widely enough that Python itself can be compiled, using Nuitka [0] compiler. It still runs Python code, so the performance increase is not as extreme as one would get from rewriting in a fully statically typed code, but the AOT compiled C code is still faster than the interpreter.

[0] https://nuitka.net/

bheadmaster··on 'Proof' Review: Finding Truth in Numbers
> We still don't know for sure absolutely.

If we go down the skeptics' route, we can't know anything absolutely (except that we exist yada yada). But we still have to function in the real world, so we assume the most consistent observations will never change. From those observations, we extract the axioms, on which we build the tower of conclusions.

bheadmaster··on Go is a good fit for agents
> also the link at the bottom of the page is pretty much why I ditched Go: https://go.dev/blog/error-syntax

Funnily, it's also one of the reasons I stay with Go.

Error handling is the most contraversial Go topic, with half the people saying it's terrible and needs a new syntax, and half saying it's perfect and adding any more syntax will ruin it.

bheadmaster··on (On | No) Syntactic Support for Error Handling
> For an apples-to-apples comparison of compilation speed, you should either include the time it takes go generate to run

But that would be unfair to the very design choice of omitting metaprogramming while exposing the go/ast library to users to foster code generation.

bheadmaster··on AI Responses May Include Mistakes
Hah. Good observatoon.

I often get in arguments about how I tend to avoid brands that put too much into marketing. Of course, theoretically, the amount of money a company puts into marketing doesn't automatically lower the quality of their products, but in my experience, the correlation is there. Whiskas, Coka Cola, McDonalds, etc.

bheadmaster··on Deadlocks in Go: the dark side of concurrency (2021)
The main message I got from the Go design is that locking itself is a low-level operation - it's designed to synchronize access to shared memory between two or more concurrent processes on a single CPU.

However, that's not what we should have in mind when designing software. The Unix IPC model of file descriptors combined with select syscall (and its successors) was a powerful abstraction by itself, and Go just brought it to the single-program level - instead of pipes, you have channels, and instead of select syscall you have select{} keyword.

The problem is that we're still stuck, mentally, with the C model of threads and shared memory. You can use Go channels as locks and still write C code dressed up as Go. But in my experience, the most powerful design in Go is separating work into goroutines, each of which does one thing (and does it well :), which communicate via channels to achieve a common goal. Preferably, exposing the interface in a simple way, not requiring the user to be aware of them at all. Sort of like Actor model, but with channels instead of explicit addresses.

As long as I've followed this way of thinking, I've rarely had an issue with deadlocks at all.

bheadmaster··on Show HN: Visual flow-based programming for Erlang, inspired by Node-RED
> it kind of makes me wish that it was not multi-processing and Erlang, but a more mainstream language with a better library ecosystem and focused on multi-threading instead, Rust comes to mind but there could be a better one

Go sounds like a good candidate.

bheadmaster··on A Taxonomy of Bugs
Congratz, you've invented obnoxiousness.
bheadmaster··on A Taxonomy of Bugs
but it wasn't.
bheadmaster··on A Taxonomy of Bugs
Good thing you can understand sarcasm.
bheadmaster··on A Taxonomy of Bugs
Good thing he has knights in shining armor like you to defend him from my nasty insults.
bheadmaster··on A Taxonomy of Bugs
Unit/integration tests are anything but a buzzword. And my intentions were not to belittle, but to praise.

Some actions simply make so much sense to do, that any sensible person (unaware of the concept) will start doing them given enough practice, and in process they "reinvent" a common method.

bheadmaster··on A Taxonomy of Bugs
Congratz, you've invented regression tests.
bheadmaster··on A Taxonomy of Bugs
> I had to automate the re-running of parts of the system to find the bugs

Congratz, you've independently invented integration tests.

bheadmaster··on Bot countermeasures impact on the quality of life on the web
Imagine if software was actually efficient enough that bots don't affect its functionality.
bheadmaster··on Memory-safe sudo to become the default in Ubuntu
Yeah, I remember that. That canceling was exactly what I referred to. I didn't mean to imply that the canceling was fake by putting it in the quotes, but that it was intentional and orchestrated. I've removed the quotes to avoid further misunderstanding.
bheadmaster··on Memory-safe sudo to become the default in Ubuntu
> we do not need a flame war or chain of comments about what RMS' valid points were, when he was being (tremendously but unintentionally) offensive, and when he was merely being overly pedantic

If your intention is to not start a flame war, you might want to avoid contraversial topics such as the obviously manufactured canceling of RMS by the-powers-that-be.

bheadmaster··on TScale – Distributed training on consumer GPUs
Sometimes, every config parser that is popular enough to be considered trusted is just chock full of features that you don't need and increases both your build time and binary size, without bringing much value beyond doing the config parsing you could've written yourself in a few minutes.

Sometimes, what you want is just a simple key=value config parser.

A little re-inventing the wheel is better than a little dependency.

bheadmaster··on A Texan who built an empire of ecstasy
> I did, in fact, experience seeing your wife dancing freely and openly under scintillating lights and thinking: "wow."

That's not cool, man. How would you feel if someone looked at your wife that way?

bheadmaster··on Self-contained Python scripts with uv
As mentioned in other comments, the "self-contained" claim depends on `uv` being installed.

For those who want a really self-contained Python script, I'd like to point out the Nuitka compiler [0]. I've been using it in production for my gRPC services with no issues whatsoever - just "nuitka --onefile run.py" and that's it. It Just Werks. And since it's a compiler, the resulting binary is even faster than the original Python program would be if it were bundled via Pyinstaller.

The author's GitHub page [1] contains the following text:

    Other than software development, my passion would be no
    other. It's my life mission to create the best Python
    Compiler I can possibly do or die trying, ... of old
    age.
[0] https://nuitka.net/

[1] https://github.com/kayhayen

bheadmaster··on HTTP/3 is everywhere but nowhere
TypeGo by Microsoft (TM).

Considering how fast the TypeScript compiler is, the TypeGo -> Go transpilation might as well be similar (up to a constant factor) in speed to Go compilation itself.

I'd give it a try. As a highly enthusiastic Go programmer, a powerful TypeScript-like type system is something I'd welcome in Go with open arms.

← PreviousPage 7 of 34Next →