HNHacker News
TopNewBestAskShowJobs

jhhh

500 karma · joined September 22, 2017

submissionscomments
jhhh··on Why I Joined OpenAI
Did the article intentionally start with a LLM cliche to filter out all the people who hate reading obviously generated content? I would say it worked.
jhhh··on Unsealed court documents show teen addiction was big tech's "top priority"
YouTube Shorts exist, which they brag about hours watched, so I don't think they really care about those things at all.
jhhh··on Claude is a space to think
Right, if there's no legal weight to any of their statements then they mean almost nothing. It's a very weak signal and just feels like marketing. All digital goods can and will be made worse over time if it benefits the company.
jhhh··on Claude is a space to think
If I made a new, not-AI tool called 'correct answer provider' which provided definitive, incorrect answers to things you'd call it bad software. But because it is AI we're going to blame the user for not second guessing the answers or holding it wrong ie. bad prompting.
jhhh··on Finding and fixing Ghostty's largest memory leak
This feels like a case of guessing at something you could know. There are two types of allocations that each have a size and free method. The free method is polymorphic over the allocations type. Instead of using a tag to know absolutely which type an object it is you guess based on some other factor, in this case a size invariant which was violated. It also doesn't seem like this invariant was ever codified otherwise the first time a large alloc was modified to a standard size it would've blown up. It's worth asking yourself if your distinguishing factor is the best you can use or perhaps there is a better test. Maybe in this case a tag would've been too expensive.
jhhh··on Jank Lang Hit Alpha
Do you envision the development to track clojure as much as is possible, similar to how cljs was conceived to be clojure in js and not just clojure-ish js, or do you think you'll eventually diverge? I made a language a while ago that was like 90% clojure but hesitated to call it that because I didn't want there to be an expectation that the same code would run as-is in both languages. Seems like from the landing page you're going for more of a drop in replacement. Look cool, good luck!
jhhh··on Rich Hickey: Thanks AI
What factual errors did you the human notice
jhhh··on Stepping down as Mockito maintainer after ten years
Most people want their test suite to pass. If they ugprade java and mockito prints out a message that they need to enabled '--some-flag' while running tests they're just going to add that flag to surefire in their pom. Seems like quite a small speedbump.
jhhh··on Rob Pike goes nuclear over GenAI
Hallmark didn't destroy the affordability of the personal computing market.
jhhh··on Are we stuck with the same Desktop UX forever? [video]
I understand the desire to want to fix user pain points. There are plenty to choose from. I think the problem is that most of the UI changes don't seem to fix any particular issue I have. They are just different, and when some changes do create even more problems there's never any configuration to disable them. You're trying to create a perfect, coherent system for everyone absent the ability to configure it to our liking. He even mentioned how unpopular making things configurable is in the UI community.

A perfect pain point example was mentioned in the video: Text selection on mobile is trash. But each app seems to have different solutions, even from the same developer. Google Messages doesn't allow any text selection of content below an entire message. Some other apps have opted in to a 'smart' text select which when you select text will guess and randomly group select adjacent words. And lastly, some apps will only ever select a single word when you double tap which seemed to be the standard on mobile for a long time. All of this is inconsistent and often I'll want to do something like look up a word and realize oh I can't select the word at all (G message), or the system 'smartly' selected 4 words instead, or that it did what I want and actually just picked one word. Each application designer decided they wanted to make their own change and made the whole system fragmented and worse overall.

jhhh··on Using LLMs at Oxide
I've had the same thought about 'written' text with an LLM. If you didn't spend time writing it don't expect me to read it. I'm glad he seems to be taking a hard stance on that saying they won't use LLMs to write non-code artifacts. This principle extends to writing code as well to some degree. You shouldn't expect other people to peer review 'your' code which was simply generated because, again, you spent no time making it. You have to be the first reviewer. Whether these cultural norms are held firmly remains to be seen (I don't work there), but I think they represent thoughtful application of emerging technologies.
jhhh··on Stacked Diffs with git rebase —onto
Last time I saw this claimed (maybe from steve's tutorial?) it was just autosquash. Do you have another example?
jhhh··on Stacked Diffs with git rebase —onto
It's not a trick or workaround. It's a very straightforward use of a command flag on one of the most used git commands. It's even conceptually very simple, you're just rebasing a subset of commits of a branch onto a different parent. Anyone who has ever rebased already has a working mental model of this operation. Framing this issue where knowing a single flag on a command every git user uses every day to perform an operation they already broadly understand as some arcane knowledge and 'nonsense' is ridiculous.
jhhh··on Several core problems with Rust
You really have to compare articles like this, which are just a bunch of hand waving around the author's biases, against articles with more concrete statements like the Android team finding a 1000x reduction in memory vulnerabilities compared to C/C++. Thanks for your opinion but I'm going to weigh the people who actually use the language more than you.
jhhh··on Futurelock: A subtle risk in async Rust
I wrote a version of the article's code in Java and couldn't figure out why it was working until reading your example. I see now that the channel operations in Go must rendezvous which I assume matches Rust's Future behavior. Whereas, the Java CompletableFuture operations I was using to mimic the select aren't required to meet. Thanks for writing this.
jhhh··on Futurelock: A subtle risk in async Rust
I read this once over and the part that doesn't seem to make sense to me is why the runtime chose, when there are two execution contexts up to the lock() in both future1 and future3, to wake up the main thread instead? I get why in a fair lock it would pick future1 but I don't get how that causes a different thread than the one holding the lock to execute.
jhhh··on Will Amazon S3 Vectors kill vector databases or save them?
"That gap isn’t just theoretical—it shows up in real bills."

"That’s not linear growth—it’s a quantum leap"

"The performance and recall were fantastic—but the costs were brutal"

"it’s not a one-size-fits-all solution—it’s the right tool for the right job."

"S3 Vectors is excellent for cold, cheap, low-QPS scenarios—but it’s not the engine you want to power a recommendation system"

"S3 Vectors doesn’t spell the end of vector databases—it confirms something many of us have been seeing for a while"

"that’s proof positive that vector storage is a real necessity—not just “indexes wrapped in a database."

"the vector database market isn’t being disrupted—it’s maturing into a tiered ecosystem where different solutions serve different performance and cost needs"

"The golden age of vector databases isn’t over—it’s just beginning."

"The bigger point is that Milvus is evolving into a system that’s not only efficient and scalable, but AI-native at its core—purpose-built for how modern applications actually work."

jhhh··on Aspects of modern HTML/CSS you may not be familiar with
You've identified the hack I already mentioned in my post. If there are simple flex or grid solutions feel free to post them.
jhhh··on Delete tests
If you are having to refactor 150 things each time you change your codebase then maybe you need to refactor your test suite first. Direct calls in tests to constructed/mocked objects is usually something you can just stuff into a private method so you only need to change it in one place.

Not quite sure I agree with the conclusion of the tiers of testing section either. If a test suite takes a long time but still covers something useful, then just deleting it because it takes too long makes no sense. Yes, if you have a 'fastTests' profile that doesn't run it that could temporarily convince you your changes are fine when they aren't. But the alternative is just never knowing your change is bad until it breaks production instead of just breaking your CI prior to that point.

jhhh··on Aspects of modern HTML/CSS you may not be familiar with
It's not possible to do without violating one of the conditions I listed. Of the solutions people have posted on SO and on blogs they either will be pushed off the screen when there's too much content (violating #2), will be pulled up to under the last rendered element if there's not enough content (#1), or will occlude content if you use absolution positioning (#3). This forces you to use an empty element of the same size as the footer, which has absolution positioning, which ends up being the element which scrolls under the footer (#4). This is what google podcasts did iirc, but it's just a hack. You'd think there'd be a simple way without having to make sacrificial elements on your page.
jhhh··on Aspects of modern HTML/CSS you may not be familiar with
I remember the my 'one day'. I was messing around making a podcast app awhile back and thinking it shouldn't be hard to make a floating footer in css that's (1) always at the bottom, (2) always visible, (3) doesn't permanently occlude content and (4) doesn't require any hacks or artifacts eg. putting a same sized buffer in the scrolling content to handle item #3. Turns out it's just not possible. Great system.
jhhh··on Everything is correlated (2014–23)
I mouse over the first graphic in dark mode and get flashbanged with a white diagram. Hover text obscures the axis text. I click the diagram hoping to read the text. In the expanded picture the alt text now obscures the axis instead. Close the picture and read on to the starting section. A dropped capital. It looks like an 'R' with some flourish. 'Rnowing'. Ok, it must be a 'k' based on context, but appears to resemble a lower case cursive 'k' and not a capital 'K'. Dropping the capital letter to lowercase in a drop cap. A minuscule pun one character in. Off to a good start. I continue reading to the second diagram. Fearful from my previous encounter I rest my cursor on what looks like a safe zone: 'click to expand'. The section immediately unfurls and pushes the diagram off the page. 'Everything is correlated' I tell myself. If there's a hover event there must be an 'on-not-hover' event too, right? I move my cursor to an empty zone. Nothing happens. I click in the empty space to remind the browser my cursor is not hovering. Nothing. 'Only some things are correlated' I think, closing the section manually. Eventually I see a hovernote 4 and think to myself 'it's nice these notes won't interrupt the flow of reading' as I click on it. The page shifts to show text already on the screen and I lose my place briefly. The word 'error' is now partially obscured by the footnote bounding box. I chuckle to myself. Maybe there is an option for reader mode I think as I start scrolling up. A gear reveals itself in the top corner. As I scroll down the options I see a 'Auto Reader Mode'. Exactly what I need. I move my mouse over to the text. This was a poor choice. The menu retracts and now that my mouse is partially over a hover note it scrolls itself fully into view. 'Tibshirani 2014' is revealed.
jhhh··on uBlock Origin Lite now available for Safari
Using an ipad on the internet is so incomprehensibly bad without adblocking that I just don't even use it for normal browsing. The problem is I would rather use a website instead of an app because at least I can adblock the website (sans pihole or something). It was actually making me consider going back to an android tablet but here is a potential solution. Except it is not supported for my version of Safari (for now?). Awesome.
jhhh··on uBlock Origin Lite now available for Safari
Am I stupid or is there no way to actually get to the configure Safari page from within Safari? Like any other program in existence would do.
jhhh··on Use Your Type System
The problem with this post is that the author is conflating two different things. Using a type system to capture the units of a measurement or metric is straightforwardly better than having them be implied. Stripping a numeric value and unit down to just a value involves an obvious loss of information. That situation is wholly different than just wrapping your UUID in some bespoke type which doesn't provide any extra information. They just look the same because you're mechanically doing something similar (ie. wrapping some primitive or standard type in something else). Not to mention unless you want to make your wrappers monads you're going to have to unwrap them at some point anyway at which point you can still transpose the actual type when you have to call any external library/function. I would love to know what the test suites of these 'many bugs in real systems' projects looked like. I suspect the test suite coverage wasn't very good.
jhhh··on Gemini 2.5
I think that answer was poorly phrased because those possibilities are eliminated in a sense. There is a better answer further in the thread that explains "If the solution was not one of the flipped triplets, then the first player would not have worked out the solution." Thus if it was one of your other infinite triplets (eg. 65, 12, 53) then round 2 player 1 would've still answered 'I don't know'. Since they did respond with a definitive answer it had to be one of the formula solutions, since those were the only solutions they could prove. And since the only formula with a factor in 65 is 5 the correct formula must be [5A, 2A, 3A] and thus [65, 26, 39].

You should be able to generate an infinite number of these problems just by multiplying the first formula factor by a prime number. Like the same question but the person answers '52' restricts you to either [4a, 3a, a] or [4a, a, 3a]. Since the question only asks for the product of all the terms the answer is 4 * 13 + 3 * 13 + 13 = 104.

jhhh··on Okta Bcrypt incident lessons for designing better APIs
I can see the incident was a jumping off point to talk about bad APIs (bcrypt probably should error >72) but it sounds like the actual bug was they weren't checking the value in the cache matched the data they used in the hash for the key. The authentication cache check should survive any arbitrarily bad hashing algorithm because all of them are going to have collisions (pigeonhole principal). Even an arbitrarily 'strong' hash function with no input truncation, as long as it has a fixed width result, will have this property. Thus, any arguing in the comments here about different hash functions with different truncation properties is moot.

The analogy is something like creating a hash map whose insert function computes the slot for the key and unconditionally puts the value there instead of checking if the keys are the same during a collision. No amount of tinkering with the hash function fixes this problem. The algorithm is wrong. A hashmap should survive and be correct even giving it a hash function that always returns 4.

jhhh··on Charles de Gaulle manuscripts discovered in a safe
He was out of power until '58 when the Algerian war had already been going on for 4 years and within his first term offered a referendum for independence to Algeria, which at that point had been under French rule for over a century, and then honored that independence.
jhhh··on Zig is everything I want C to be
Are you saying you don't like isomorphisms?
jhhh··on Disney seeks dismissal of wrongful death lawsuit citing waiver in Disney+ terms
Should they have prefaced their statement of personal preference with 'I'm not making a universal normative declaration' to make it clear they weren't doing that?
← PreviousPage 2 of 5Next →