<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: latch</title><link>https://news.ycombinator.com/user?id=latch</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 07 Apr 2026 03:56:41 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=latch" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by latch in "The 1987 game “The Last Ninja” was 40 kilobytes"]]></title><description><![CDATA[
<p>I'm not sure this is particularly telling. You can write a tiny program that generates a 4K image, and the image could be 1000x larger.<p>Or, if I write a short description "A couple walks hand-in-hand through a park at sunset. The wind rustles the orange leaves.", I don't think it would be surprising to anyone that an image or video of this would be relatively huge.</p>
]]></description><pubDate>Mon, 06 Apr 2026 05:05:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=47657192</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=47657192</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47657192</guid></item><item><title><![CDATA[New comment by latch in "Zig – Type Resolution Redesign and Language Changes"]]></title><description><![CDATA[
<p>20 seconds each time. Last time I tried to enable incremental build, it wasn't working for us. It was a while ago, but I think it had to do with something in our v8 bridge.</p>
]]></description><pubDate>Wed, 11 Mar 2026 05:29:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47332001</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=47332001</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47332001</guid></item><item><title><![CDATA[New comment by latch in "Zig – Type Resolution Redesign and Language Changes"]]></title><description><![CDATA[
<p>Just a slower build. From ~20 seconds to ~65 seconds the first time after I nuke it.</p>
]]></description><pubDate>Wed, 11 Mar 2026 03:26:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=47331446</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=47331446</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47331446</guid></item><item><title><![CDATA[New comment by latch in "Type resolution redesign, with language changes to taste"]]></title><description><![CDATA[
<p>Zig 0.15 is pretty stable. The biggest issue I face daily are silent compiler errors (SIGBUS) for trivial things, e.g. a typo in an import path. I've yet to find exactly why this [only sometimes] causes such a crash, but they're a real pain to figure out over a large changeset. `zig ast-check` sometimes catches the error, else Claude's pretty good at spotting where I accidentally re-used a variable name (again, 90% of the time I do that, it's an easy error, but the other 10%, I get a message-less compiler crash). It sounds like the changes in the OP might be specifically addressing these types of issues.<p>Also, my .zig-cache is currently at 173GB, which causes some issues on the small Linux ARM VPS I test with.<p>As for upgrades. I upgraded lightpanda to 0.14 then 0.15 and it was fine. I think for lightpanda, the 0.16 changes might not be too bad, with the only potential issue coming from our use of libcurl and our small websocket server (for CDP connections). Those layers are relatively isolated / abstracted, so I'm hopeful.<p>As a library developer, I've given up following / tracking 0.16. For one, the change don't resonate with me, and for another, it's changing far too fast. I don't think anyone expects 0.16 support in a library right now. I've gotten PRs for my "dev" branches from a few brave souls and everyone seems happy with that arrangement.</p>
]]></description><pubDate>Wed, 11 Mar 2026 02:54:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47331273</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=47331273</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47331273</guid></item><item><title><![CDATA[New comment by latch in "Hetzner Prices increase 30-40%"]]></title><description><![CDATA[
<p>Maybe because they still have to pay for part replacements?</p>
]]></description><pubDate>Mon, 23 Feb 2026 10:35:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=47120480</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=47120480</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47120480</guid></item><item><title><![CDATA[New comment by latch in "Error payloads in Zig"]]></title><description><![CDATA[
<p>And what pattern would you recommend if you needed to allocate?</p>
]]></description><pubDate>Mon, 16 Feb 2026 06:20:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47031507</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=47031507</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47031507</guid></item><item><title><![CDATA[New comment by latch in "Error payloads in Zig"]]></title><description><![CDATA[
<p>It wasn't clear from the examples, and the gist doesn't have a `deinit` method, so what happens if an error needs to own data?<p>> Here, sqlite.ErrorPayload.init saves 500 bytes of error message from sqlite<p>Who owns those 500 bytes and where are they being freed?</p>
]]></description><pubDate>Mon, 16 Feb 2026 04:00:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=47030745</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=47030745</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47030745</guid></item><item><title><![CDATA[New comment by latch in "Software factories and the agentic moment"]]></title><description><![CDATA[
<p>Claude code has those "thoughts" you say it never will. In plan mode, it isn't uncommon that it'll ask you: do you want to do this the quick and simple way, or would you prefer to "extract this code into a reusable component". It also will back out and say "Actually, this is getting messy, 'boss' what do you think?"<p>I could just be lucky that I work in a field with a thorough specification and numerous reference implementations.</p>
]]></description><pubDate>Sun, 08 Feb 2026 01:33:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=46930427</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=46930427</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46930427</guid></item><item><title><![CDATA[New comment by latch in "Efficient String Compression for Modern Database Systems"]]></title><description><![CDATA[
<p>Makes me think of an iolist in erlang/elixir.</p>
]]></description><pubDate>Mon, 02 Feb 2026 10:10:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=46854306</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=46854306</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46854306</guid></item><item><title><![CDATA[New comment by latch in "BYD's cheapest electric cars to have Lidar self-driving tech"]]></title><description><![CDATA[
<p>Aren't you missing something? Gemini tells me that non-NA market makes up 33% of Ford's sales, and 51% of GMs.<p>So a better way to put it is "protects US automakers in the US." And that assumes NA manufacturers would be unaffected by declining sales abroad.</p>
]]></description><pubDate>Mon, 12 Jan 2026 03:03:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=46583515</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=46583515</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46583515</guid></item><item><title><![CDATA[New comment by latch in "Boring Company fined nearly $500K after it dumped drilling fluids into manholes"]]></title><description><![CDATA[
<p>Isn't the problem exactly the opposite? A corporation has personhood which shields its executives?</p>
]]></description><pubDate>Sun, 09 Nov 2025 06:34:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=45863437</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=45863437</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45863437</guid></item><item><title><![CDATA[New comment by latch in "Claude outage"]]></title><description><![CDATA[
<p><a href="https://news.ycombinator.com/item?id=45769901">https://news.ycombinator.com/item?id=45769901</a></p>
]]></description><pubDate>Fri, 31 Oct 2025 10:26:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=45770403</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=45770403</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45770403</guid></item><item><title><![CDATA[New comment by latch in "Is Zig's new writer unsafe?"]]></title><description><![CDATA[
<p>I ... don't disagree with you. Thanks. It helps my understanding.<p>I know this is moving the goalpost, but it's still a shame that it [obviously] has to be a runtime error. Practically speaking, I still think it leaves lot of friction and edge cases. But what you say makes sense: it doesn't have to be unsafe.<p>Makes me curious why they asserted instead of erroring in the first place (and I don't think that's exclusive to the zstd implementation right now).</p>
]]></description><pubDate>Sat, 20 Sep 2025 16:44:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=45314924</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=45314924</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45314924</guid></item><item><title><![CDATA[New comment by latch in "Is Zig's new writer unsafe?"]]></title><description><![CDATA[
<p>Then in the top-most snippet, what size should `buffer` be?</p>
]]></description><pubDate>Sat, 20 Sep 2025 15:41:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=45314303</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=45314303</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45314303</guid></item><item><title><![CDATA[New comment by latch in "Is Zig's new writer unsafe?"]]></title><description><![CDATA[
<p>Author here. I see it both ways.<p>Blog posts are collaboration (1). I did get the sense that Andrew doesn't see it that way. (And for this post in particular, and writegate in general, I have been discussing it on the discord channel. I know that isn't an official channel).<p>My reasons for not engaging more directly doesn't have anything to do with my confidence / knowledge. They are personal. The linked issues, which I was aware of, are only tangentially related. And even if they specifically addressed my concerns, I don't see how writing about it is anything but useful.<p>But I also got the sense that more direct collaboration is welcome and could be appreciated.<p>(1) - I'm the author of The Little MongoDB Book, The Little Redis Book, The Little Go Book, etc... I've always felt that the appeal of my writing is that I'm an average programmer. I run into the same problems, and struggle to understand the same things that many programmers do. When I write, I'm able to write from that perspective.<p>No matter how inclusive a community you have, there'll always be some opinions and perspectives which get drowned out. It can be intimidating to say "I don't understand", or "it's too complicated" or, god forbid, "I think this is a bad design"; especially when the experts are saying the opposite. I'm old enough that I see looking the fool as both a learning and mentoring experience. If saying "io.Reader is too complicated" saves someone else the embarrassment of saying it, or the shame of feeling it, or gives them a reference to express their own thoughts, I'm a happy blogger.</p>
]]></description><pubDate>Sat, 20 Sep 2025 15:38:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=45314275</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=45314275</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45314275</guid></item><item><title><![CDATA[New comment by latch in "I'm too dumb for Zig's new IO interface"]]></title><description><![CDATA[
<p>Author here.<p>I finally got it working. I had to flush both the encrypted writer and then the stream writer. There was also some issues with reading. Streaming works, but it'll always return 0 on the first read because Writer.Fixed doesn't implement sendFile, and thus after the first call, it internally switches from streaming mode to reading mode (1) and then things magically work.<p>Currently trying to get compression re-enabled in my websocket library.<p>(1) <a href="https://github.com/ziglang/zig/blob/47a2f2ddae9cc47ff6df7a71060bbb3f5f20f2e8/lib/std/fs/File.zig#L1318" rel="nofollow">https://github.com/ziglang/zig/blob/47a2f2ddae9cc47ff6df7a71...</a></p>
]]></description><pubDate>Sat, 23 Aug 2025 08:33:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=44994361</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=44994361</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44994361</guid></item><item><title><![CDATA[New comment by latch in "Real estate agents use the power of AI to command plumbing, layout to disappear"]]></title><description><![CDATA[
<p>A friend recently shared a newspaper article about his company. I hadn't seen him in a little while, and I told him how great he looked. Turns out, an AI-assisted image was used. It surprised me - I had hoped/expected more from that paper.<p>The only thing that can be surprising about real estate agents doing it would be if anyone was surprised.</p>
]]></description><pubDate>Thu, 07 Aug 2025 11:58:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=44823339</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=44823339</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44823339</guid></item><item><title><![CDATA[New comment by latch in "Zig's New Async I/O"]]></title><description><![CDATA[
<p>I think having a thread pool on top of some evented IO isn't _that_ uncommon.<p>You might have a thread pool doing some very specific thing. You can do your own threadpool which wont use the Io interface. But if one of the tasks in the threadpool wanted to read a file, I guess you'd have to pass in the blocking Io implementation.</p>
]]></description><pubDate>Sun, 13 Jul 2025 05:47:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=44547819</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=44547819</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44547819</guid></item><item><title><![CDATA[New comment by latch in "The Evolution of Caching Libraries in Go"]]></title><description><![CDATA[
<p>I don't disagree. It's like 13 years old. `GetWithoutPromote` was added in 2022, I assume someone asked for it, so I added it. That kind of stuff happens, especially when you stop building it for your own needs.<p>For the most part, you use a default config and use Get/Fetch/Set. Besides the excuse of its age, and not being seriously worked on for a long time (a decade?), I do think we both have a bias towards what's more familiar.  What are the `ExpiryCalculator`, `Weigher`, etc... configuration options of Otter?  (or `GetEntryQuietly`,  `SetRefreshableAfter` ...)</p>
]]></description><pubDate>Thu, 03 Jul 2025 10:11:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=44453445</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=44453445</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44453445</guid></item><item><title><![CDATA[New comment by latch in "The Evolution of Caching Libraries in Go"]]></title><description><![CDATA[
<p>Author of ccache here.<p>I've barely touched Go in over a decade, but if I did, I'd probably still use ccache if I didn't need cutting edge (because I think the API is simple), but not if I needed something at huge scale.<p>When I wrote ccache, there were two specific features that we wanted that weren't readily available:<p>- Javing both a key and a subkey, so that you can delete either by key or key+subkey (what ccache calls LayeredCache).<p>- Having items cached that other parts of the system also have a long-living reference to, so there's not much point in evicting them (what ccache calls Tracking and is just a separate ARC mechanism that overrides the eviction logic).<p>It also supports caching based on arbitrary item size (rather than just a count of items), but I don't remember if that was common back then.<p>I've always thought that this, and a few other smaller features, make it a little bloated. Each cached item carries a lot of information (1). I'm surprised that, in the linked benchmark, the memory usage isn't embarrassing.<p>I'm not sure that having a singl goroutine do a lot of the heavy-lifting, to minimize locks, is a great idea. It has a lot of drawbacks, and if I was to start over again, I'd really want to benchmark it to see if it's worth it (I suspect that, under heavy write loads, it might perform worse).<p>The one feature that I do like, that I think most LRU's should implement, is to have a [configurable] # of gets before an item is promoted. This not only reduces the need for locking, it also adds some frequency bias to evictions.<p>Fun Fact: My goto interview question was to implement a cache. It was always rewarding to see people make the leap from using a single data structure (a dictionary) to using two (dictionary + linked list) to achieve a goal. It's not a way most of us are trained to think of data structures, which I think is a shame.<p>(1) <a href="https://github.com/karlseguin/ccache/blob/master/item.go#L22">https://github.com/karlseguin/ccache/blob/master/item.go#L22</a></p>
]]></description><pubDate>Thu, 03 Jul 2025 08:47:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=44452987</link><dc:creator>latch</dc:creator><comments>https://news.ycombinator.com/item?id=44452987</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44452987</guid></item></channel></rss>