<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: jhhh</title><link>https://news.ycombinator.com/user?id=jhhh</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 01 Jun 2026 19:25:23 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jhhh" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jhhh in "ClojureScript Gets Async/Await"]]></title><description><![CDATA[
<p>I haven't kept up with cljs in a long time but I remember it originally being pitched as just clojure on js--at least I think that's how Rich originally described it. My impression was it was just supposed to be, as much as possible, another runtime. This change seems to add in features that are exclusive to cljs and actually conflict with clojure itself as await is already a keyword in clojure.core. Have the two impls diverged over time, or was this feature specifically important enough to the users to overcome the differences?</p>
]]></description><pubDate>Sat, 09 May 2026 05:06:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=48071985</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=48071985</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48071985</guid></item><item><title><![CDATA[New comment by jhhh in "Your Smart TV is taking screenshots of your screen every 15 seconds (2024)"]]></title><description><![CDATA[
<p>Amazon sidewalk and related technologies will likely allow devices to bypass needing your network at all in the future. The last TV that doesnt support these features will probably be my last.</p>
]]></description><pubDate>Tue, 21 Apr 2026 21:32:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=47854785</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=47854785</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47854785</guid></item><item><title><![CDATA[New comment by jhhh in "Jujutsu megamerges for fun and profit"]]></title><description><![CDATA[
<p>It does seem to introduce a lot of complexity for its own sake. This kind of workflow only survives on the absorb command and like you said it doesn't really cover all the interplay of changes when separated. It's a more independent version of stacked diffs, with worse conceptual complexity.</p>
]]></description><pubDate>Tue, 21 Apr 2026 02:15:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=47843734</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=47843734</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47843734</guid></item><item><title><![CDATA[New comment by jhhh in "jj – the CLI for Jujutsu"]]></title><description><![CDATA[
<p>After hearing about a workflow that used absorb I wrote a simple git version I called 'squash-index' in about 15 lines of bash in a few minutes. Since git allows subcommand extension I just made an executable 'git-squash-index' and everything worked as if it was a builtin subcommand. I get that initial ergonomics are important for new tools but if the only novel feature is reified merge conflicts it doesn't really seem worth making the switch. No one needed to evangelize git to people like myself who had worked with a variety of old version control systems (cvs, svn, etc). It was just obviously much, much better. jj seems like it streamlines certain things, and might be worth learning for new users who have no git experience, but doesn't really differentiate itself enough for people who've been using git for a long time.</p>
]]></description><pubDate>Wed, 15 Apr 2026 01:33:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=47773613</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=47773613</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47773613</guid></item><item><title><![CDATA[New comment by jhhh in "I am definitely missing the pre-AI writing era"]]></title><description><![CDATA[
<p>I miss the text only reading era. This is a blog and should not need to have JavaScript enabled to render text to a page. I would rather not have to be annoyed by flavor of the month duplicate scroll bars, cookie banners, newsletter pop-ups 5 seconds in, scroll to the top pop-ups, idle overlays, highlight helper bars that break copy paste, etc. This blog didn't have all of those but had some. I'm sure the metrics look great because I had to load this page four times. First initially, and then disabling JavaScript and realizing it doesn't load anything at all. A third time re-enabling JavaScript and then deleting all the annoying elements, and then a fourth time to make sure my cosmetic filter is applied correctly. 4x the interactions! Must be doing something right.</p>
]]></description><pubDate>Mon, 30 Mar 2026 18:34:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47577966</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=47577966</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47577966</guid></item><item><title><![CDATA[New comment by jhhh in "A case against currying"]]></title><description><![CDATA[
<p>A benefit to using the currying style is that you can do work in the intermediate steps and use that later. It is not simply a 'cool' way to define functions. Imagine a logging framework:<p><pre><code>  (log configuration identifier level format-string arg0 arg1 ... argN)
  </code></pre>
After each partial application step you can do more and more work narrowing the scope of what you return from subsequent functions.<p><pre><code>  ;; Preprocessing the configuration is possible
  ;; Imagine all logging is turned off, now you can return a noop
  (partial log conf)
  ;; You can look up the identifier in the configuration to determine what the logger function should look like
  (partial log conf id)
  ;; You could return a noop function if the level is not enabled for the particular id
  (partial log config id level)
  ;; Pre-parsing the format string is now possible
  (partial log conf id level "%time - %id")
  </code></pre>
In many codebases I've seen a large amount of code is literally just to emulate this process with multiple classes, where you're performing work and then caching it somewhere. In simpler cases you can consolidate all of that in a function call and use partial application. Without some heroic work by the compiler you simply cannot do that in an imperative style.</p>
]]></description><pubDate>Sun, 22 Mar 2026 15:37:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47478630</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=47478630</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47478630</guid></item><item><title><![CDATA[New comment by jhhh in "Shall I implement it? No"]]></title><description><![CDATA[
<p>I asked gemini a few months ago if getopt shifts the argument list. It replied 'no, ...' with some detail and then asked at the end if I would like a code example. I replied simply 'yes'. It thought I was disagreeing with its original response and reiterated in BOLD that 'NO, the command getopt does not shift the argument list'.</p>
]]></description><pubDate>Fri, 13 Mar 2026 03:51:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47360487</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=47360487</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47360487</guid></item><item><title><![CDATA[New comment by jhhh in "Leaving Google has actively improved my life"]]></title><description><![CDATA[
<p>Google had a feature in gmail for a long time that automatically sorts your email into categories like Promotions, Social, Updates, Forums, etc. It was automated and fairly effective imo. If you try to disable the 'smart' features they will then disable this categorization <i>retroactively</i> and dump thousands of emails in your inbox and then nag you about turning it back on.</p>
]]></description><pubDate>Fri, 27 Feb 2026 21:06:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=47185608</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=47185608</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47185608</guid></item><item><title><![CDATA[New comment by jhhh in "Why I Joined OpenAI"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Sat, 07 Feb 2026 07:56:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=46922138</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=46922138</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46922138</guid></item><item><title><![CDATA[New comment by jhhh in "Unsealed court documents show teen addiction was big tech's "top priority""]]></title><description><![CDATA[
<p>YouTube Shorts exist, which they brag about hours watched, so I don't think they really care about those things at all.</p>
]]></description><pubDate>Thu, 05 Feb 2026 19:18:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=46903764</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=46903764</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46903764</guid></item><item><title><![CDATA[New comment by jhhh in "Claude is a space to think"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Thu, 05 Feb 2026 05:16:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=46895937</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=46895937</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46895937</guid></item><item><title><![CDATA[New comment by jhhh in "Claude is a space to think"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Thu, 05 Feb 2026 05:14:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=46895922</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=46895922</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46895922</guid></item><item><title><![CDATA[New comment by jhhh in "Finding and fixing Ghostty's largest memory leak"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Sun, 11 Jan 2026 06:48:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=46573248</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=46573248</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46573248</guid></item><item><title><![CDATA[New comment by jhhh in "Jank Lang Hit Alpha"]]></title><description><![CDATA[
<p>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!</p>
]]></description><pubDate>Sat, 03 Jan 2026 03:33:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=46472538</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=46472538</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46472538</guid></item><item><title><![CDATA[New comment by jhhh in "Rich Hickey: Thanks AI"]]></title><description><![CDATA[
<p>What factual errors did you the human notice</p>
]]></description><pubDate>Mon, 29 Dec 2025 02:26:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=46416815</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=46416815</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46416815</guid></item><item><title><![CDATA[New comment by jhhh in "Stepping down as Mockito maintainer after ten years"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Mon, 29 Dec 2025 02:01:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=46416622</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=46416622</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46416622</guid></item><item><title><![CDATA[New comment by jhhh in "Rob Pike goes nuclear over GenAI"]]></title><description><![CDATA[
<p>Hallmark didn't destroy the affordability of the personal computing market.</p>
]]></description><pubDate>Sat, 27 Dec 2025 04:30:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=46399159</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=46399159</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46399159</guid></item><item><title><![CDATA[New comment by jhhh in "Are we stuck with the same Desktop UX forever? [video]"]]></title><description><![CDATA[
<p>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.<p>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.</p>
]]></description><pubDate>Sat, 13 Dec 2025 22:41:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=46258932</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=46258932</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46258932</guid></item><item><title><![CDATA[New comment by jhhh in "Using LLMs at Oxide"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Sun, 07 Dec 2025 02:07:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=46178558</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=46178558</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46178558</guid></item><item><title><![CDATA[New comment by jhhh in "Stacked Diffs with git rebase —onto"]]></title><description><![CDATA[
<p>Last time I saw this claimed (maybe from steve's tutorial?) it was just autosquash. Do you have another example?</p>
]]></description><pubDate>Fri, 05 Dec 2025 16:32:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=46163570</link><dc:creator>jhhh</dc:creator><comments>https://news.ycombinator.com/item?id=46163570</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46163570</guid></item></channel></rss>