HNHacker News
TopNewBestAskShowJobs

Quekid5

1,657 karma · joined September 8, 2018

submissionscomments
Quekid5··on Why are there both TMP and TEMP environment variables? (2015)
Wikipedia says it was created in 1974, so something's definitely off with the time line here.
Quekid5··on Taming LLMs: Using Executable Oracles to Prevent Bad Code
Try writing an exhaustive spec for anything non-trivial and you might see the problem.
Quekid5··on I tried to prove I'm not AI. My aunt wasn't convinced
Analysis Paralysis?
Quekid5··on Separating the Wayland compositor and window manager
I think wmf's comment in this thread was absolutely correct and succinct, so I won't repeat, but I think it's worth noting that many (all?) of the Wayland devs were actually Xorg devs. Make of that what you will.
Quekid5··on Head of FCC threatens broadcaster licenses over critical coverage of Iran war
Ministry of Truth & Love.
Quekid5··on John Carmack about open source and anti-AI activists
SQLite is public domain while the code released by id/Carmack is GPL.

The latter technically doesn't prevent anyone making money off it, but in practice it does (other than nominal fees).

That alone is a massive difference.

Quekid5··on What canceled my Go context?
Java's Virtual Threads (JVM 21) + the Structured Concurrency primitives (not sure exactly what's available in Java 21+) do this natively.

Also, a sibling poster mentioned ZIO/Scala which does the Structured Concurrency thing out of the box.

Quekid5··on New evidence that Cantor plagiarized Dedekind?
sqrt(2)
Quekid5··on In praise of –dry-run
Moist run is the way.
Quekid5··on AI is a business model stress test
It's getting better (in a C++ kinda way), certainly, but...

It's ultimately still driven my matching "random" identifiers (classes, ids, etc.) across semantic boundaries. Usually, the problem is that the result is mostly visual which makes it disproportionately hard to actually do tests for CSS and make sure you don't break random stuff if you change a tiny thing in your CSS.

For old farts like me: It's like the Aspect-Oriented Programming days of Java, but you can't really do meaningful tests. (Not that you could do 'negative' testing well in AOP, but even positive testing is annoyingly difficult with CSS.)

EDIT: Just to add. It's an actually difficult problem, but I consider the "separate presentation from content" idea a bit of a Windmill of sorts. There will always be interplay and an artificial separation will lead to ... awkward compromises and friction.

Quekid5··on Single Sign on for Furries
I think the Referer header kinda-sorta serves as mitigation for 3rd parties just (maliciously) hot-linking to, say, images on your domain, effectively forcing you to bear the cost of upload bandwidth for those images.

(And similar, it's just that images sprang to mind.)

Quekid5··on String theory inspires a brilliant, baffling new math proof
(EDIT: I'm sorry, this silly and dumb.)

"You want many folds!" We gottem!

Quekid5··on The Cost of a Closure in C
Assert what, exactly?

Anyway, the larger point is that a re-entrant general solution is desirable. The sort example might be a bit misguided, because who calls sort-inside-sort[0]? Nobody, realistically, but these types of issues are prevalent in the "how to do closures" area... and In C every API does it slightly differently, even if they're even aware of the issues.

[0] Because there's no community that likes nitpicking like the C (or C++) community. I considered preempting that objection :). C++ has solved this, so there's that.

Quekid5··on Pop Goes the Population Count?
The issue is that many optimization opportunities only appear after monomorphization, inlining, de-virtualization, etc. etc.

Not that you couldn't do source level analysis as you suggest... it just wouldn't be effective in many cases.

It would also be 'unstable' in the sense that it might depend on architecture, etc.

Quekid5··on The Cost of a Closure in C
Imagine a comparison function that needs to call sort() as part of its implementation. You could argue that's probably a bad idea, but it would be a problem for this case.

(You could solve that with a manually maintained stack for the context in a thread local, but you'd have to do that case-by-case)

Quekid5··on The Easiest Way to Build a Type Checker
Yeah, that's true and that's a good convenience even if it's not full inference. In the case of Scala, the parameter types may often be required, but at least the return type can be omitted, so there's that.
Quekid5··on The Easiest Way to Build a Type Checker
I can't speak for the parent poster, but for global function declarations, yes, absolutely.

It's infuriating when a type error can "jump" across global functions just because you weren't clear about what types those functions should have had, even if those types are very abstract. So early adopters learned to sprinkle in type annotations at certain points until they discovered that the top-level was a good place. In OCaml this pain is somewhat lessened when you use module interface files, but without that... it's pain.

Quekid5··on The Easiest Way to Build a Type Checker
> I think it's pretty widely agreed that requiring type annotations at the function level is a good thing anyway. Apparently it's considered good practice in Haskell even though Haskell doesn't require it.

In Haskell-land: At the global scope, yes, that's considered good practice, especially if the function is exported from a module. When you just want a local helper function for some tail-recursive fun it's a bit of extra ceremony for little benefit.

(... but for Rust specifically local functions are not really a big thing, so... In Scala it can be a bit annoying, but the ol' subtyping inference undecidability thing rears its ugly head there, so there's that...)

Quekid5··on The Easiest Way to Build a Type Checker
Yup, that's basically it. "SAT says no" isn't a very useful error message.
Quekid5··on Parsing Integers in C
I think it's been a commonly held opinion in security circles for at least 15+ years that the Robustness principle is generally counterproductive to security. It (almost inevitably) leads to unexpected interactions between different systems which, ultimately, allow for Weird Machines to be constructed.

An argument can be made that it was instrumental in bootstrapping the early Internet, but it's not really necessary these days. People should know what they're doing 35+ years on.

It is usually better to just state fully formally up front what is acceptable and reject anything else out of hand. Of course some stuff does need dynamic checks, e.g. ACLs and such, but that's fine... rejecting "iffy" input before we get to that stage doesn't interfere with that.

Quekid5··on Dependent types and how to get rid of them
No, LSPs return the name/metadata of a concrete type. Dependent typing means that the return type of any given function in your (static) program can depend on a runtime value, e.g. user input... In well-defined ways ofc.
Quekid5··on The lazy Git UI you didn't know you need
I think the big thing (potentially, for me) is the ability to postpone conflict resolution during a rebase. That can be quite painful in regular old git, but git-mediate helps make that less painful in practice in my particular situation and workflow.

We'll see once better non-cli UX appears. I'm low-key excited for what could be possible in this space.

Quekid5··on We chose OCaml to write Stategraph
Add "-noindent" to the compiler flags. Done.
Quekid5··on We chose OCaml to write Stategraph
The size of the stdlib has a huge impact on backwards compatibility and how much pain is caused by maintaining said compatibility for the authors of the stdlib. I mean... it's hard enough for just any regular library to do that sensibly. So much so that semver (misguided as it is) was invented.

IIRC Ocaml always compiles everything from source which has its advantages, but even that is a can of worms. (And sometimes binary compatibility can actually be easier, see e.g. Scala.)

Quekid5··on The lazy Git UI you didn't know you need
Magit[0] is so good that I haven't felt any real need to use jj... yet. I'm sure I'll switch if it gets emacs integration of a similar level to magit, but the one I tried[1] isn't quite there yet.

[0] Well, plus git-mediate for solving conflicts

[1] https://github.com/bolivier/jj-mode.el

Quekid5··on We chose OCaml to write Stategraph
The Ocaml module system is great, but the module system in Scala isn't the usual Java package thing... it's traits. It's about as powerful as the OCaml module system on any axis I've ever used, but it's easy to miss how powerful it is. (Scala 3 added some ergonomics to make it easier to use, but it was all technically accessible in Scala 2 with 'workarounds'.)
Quekid5··on We chose OCaml to write Stategraph
Which led to a really bad standard library with next to no features... but yes, it's very stable.

And, hey, if it works for you, that's great... but Batteries Included can also be great for a language.

Quekid5··on We chose OCaml to write Stategraph
Scala 3 didn't "drastically" change syntax -- most of the changes also have automatic rewrites with appropriate compiler switches. The effects story is still pretty experimental, but there's also improvements to 'effects' syntax (for-comprehensions) in "preview" for 3.7.

As long as the 'effects' work will let me distinguish pure/non-pure, I'd be happy to use just that bit and stick with ZIO/TypeLevel's ecosystem... which will probably be supported forever, regardless of whatever happens with the "effects" stuff.

Quekid5··on Minecraft removing obfuscation in Java Edition
> I can't imagine building something like a graphics framework without some subtyping.

While React technically uses some OOP, in practice it's a pretty non-OOP way do UI. Same with e.g. ImGUI (C++), Clay (C). I suppose for the React case there's still an OOP thing called the DOM underneath, but that's pretty abstracted.

In practice most of the useful parts of OOP can be done with a "bag/record of functions". (Though not all. OCaml has some interesting stuff wrt. the FP+OOP combo which hasn't been done elsewhere, but that may just be because it wasn't ultimately all that useful.)

Quekid5··on Exploring PostgreSQL 18's new UUIDv7 support
I was thinking something a bit snappier and bit shorter... maybe an Index? Maybe it could be even maintained automatically by the database...
← PreviousPage 2 of 32Next →