<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: shabbyrobe</title><link>https://news.ycombinator.com/user?id=shabbyrobe</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 11 Jun 2026 03:05:18 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=shabbyrobe" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by shabbyrobe in "Decoding JSON sum types in Go without panicking"]]></title><description><![CDATA[
<p>That's not what I found in my own experiments, I still had to unmarshal once inside the callback to get the `type` field out, then again once I knew what the type was. Do you have an example handy?</p>
]]></description><pubDate>Wed, 19 Mar 2025 22:39:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=43417990</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=43417990</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43417990</guid></item><item><title><![CDATA[New comment by shabbyrobe in "Decoding JSON sum types in Go without panicking"]]></title><description><![CDATA[
<p>IME this is a longstanding pain point with Go. There's an attempt to propose an encoding/json/v2 package [1] being kicked around at the moment [2], spawned from a discussion [3].<p>This at least seems to improve the situation of marshalling to/from an interface directly slightly by providing the ability to pass custom Unmarshalers for a specific type (via json.WithUnmarshalers and json.UnmarshalFunc) to the Unmarshal functions, but it appears to still have the inefficient double-decode problem. Or I just haven't found a decent way around it yet.<p>Looks like they're intentionally punting on a first class solution until (if) the language gets some sort of sum type, but I still think the second-class solution could do a bit more to make this extremely common use-case more convenient. Pretty much every serious production Go app I've worked on in the last 10 years or so has had some horrible coping strategy for the "map a field-discriminated object to/from implementations of an interface" gap, often involving some sort of double-unmarshal.<p>Quote from the proposal [1]:<p>> <i>First-class support for union types: It is common for the type of a particular JSON value to be dynamically changed based on context. This is difficult to support in Go as the equivalent of a dynamic value is a Go interface. When unmarshaling, there is no way in Go reflection to enumerate the set of possible Go types that can be stored in a Go interface in order to choose the right type to automatically unmarshal a dynamic JSON value. Support for such use cases is deferred until better Go language support exists.</i><p><pre><code>  [1]: https://pkg.go.dev/github.com/go-json-experiment/json
  [2]: https://github.com/golang/go/issues/71497
  [3]: https://github.com/golang/go/discussions/63397</code></pre></p>
]]></description><pubDate>Sun, 16 Mar 2025 05:45:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=43377138</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=43377138</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43377138</guid></item><item><title><![CDATA[New comment by shabbyrobe in "Molecular jackhammers eradicate cancer cells by vibronic-driven action"]]></title><description><![CDATA[
<p>Such an instrument is the turbo encabulator.</p>
]]></description><pubDate>Mon, 01 Jan 2024 03:37:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=38829567</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=38829567</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38829567</guid></item><item><title><![CDATA[New comment by shabbyrobe in "Show HN: My Go SQLite driver did poorly on a benchmark, so I fixed it"]]></title><description><![CDATA[
<p>> I would've probably picked the modernc variation<p>Heads up about the modernc library, it has been stuck on an old version of sqlite for several months [1]. It seems like maintainer time is the limiting factor [2]. There has been a call to arms on that issue page, the maintainer is looking for help, but it looks like not much has arrived. It seems like it might trace back to blockers in the C-to-Go compiler.<p>It's a major undertaking and a very impressive piece of work, but I'm not surprised it's a struggle when big roadblocks get hit. I hope they find a way to progress, but I'm very relieved to be seeing some CGo-free alternatives like ncruces/go-sqlite3 emerging. I'm going to give it a try for sure and see if I can live with the compromises.<p>Squinn-go looks very compelling too, but I don't like that it requires the squinn binary to already be installed on a user's machine, I think that gives with one hand and takes with the other: sure, I get to avoid CGo, but I also lose the turnkey, single-command install, static build benefits Go brings out of the box.<p>Seconding the point about nitty gritty, I'd read it for sure too!<p><pre><code>  [1]: https://gitlab.com/cznic/sqlite/-/issues/154
  [2]: https://gitlab.com/cznic/sqlite/-/issues/164</code></pre></p>
]]></description><pubDate>Fri, 15 Dec 2023 09:57:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=38652637</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=38652637</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38652637</guid></item><item><title><![CDATA[New comment by shabbyrobe in "NPM Vulnerability Discussion on Twitter"]]></title><description><![CDATA[
<p>I love this visualisation. Is the script to generate it publicly available?</p>
]]></description><pubDate>Tue, 10 May 2022 15:28:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=31328302</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=31328302</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31328302</guid></item><item><title><![CDATA[New comment by shabbyrobe in "Software Engineering principles to make teams better"]]></title><description><![CDATA[
<p>Since PEP 591 [1], if using mypy with Python 3.8+ or the typing_extensions module, you can also take advantage of typing.Final, which lets you statically verify something isn't changed. The catch is that it isn't enforced at runtime.<p><pre><code>  [1]: https://www.python.org/dev/peps/pep-0591/</code></pre></p>
]]></description><pubDate>Wed, 30 Jun 2021 22:25:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=27694189</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=27694189</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27694189</guid></item><item><title><![CDATA[New comment by shabbyrobe in "Go 1.17 Beta"]]></title><description><![CDATA[
<p>There are fragments of discussion about the download timeout throughout the issue tracker, which end up leading back to this still-open but seemingly forgotten issue about adding InactivityTimeout: <a href="https://github.com/golang/go/issues/22982" rel="nofollow">https://github.com/golang/go/issues/22982</a><p>I'd love to see this one addressed but it's not looking too hopeful at this stage.</p>
]]></description><pubDate>Thu, 10 Jun 2021 20:57:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=27465723</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=27465723</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27465723</guid></item><item><title><![CDATA[New comment by shabbyrobe in "“That Won't Work”"]]></title><description><![CDATA[
<p>I think it could be the same but it doesn't have to be. "What problem does this solve" is a bit more generous as at least, on the face of it, it may offer an opportunity to provide an answer that will be received in good faith.<p>But I think this is less about specific phrases one might need to be careful not to say, and more about the kinds of default attitudes that can turn into ongoing impediments to the free flow of ideas. It's definitely possible ask "what problem does this solve" without becoming the "What Problem Does This Solve Person", and the same goes for the other phrases too.</p>
]]></description><pubDate>Sun, 06 Jun 2021 02:18:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=27410162</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=27410162</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27410162</guid></item><item><title><![CDATA[New comment by shabbyrobe in "“That Won't Work”"]]></title><description><![CDATA[
<p>There's also the "That Won't Work" person's sibling: the "I Don't See a Use Case" person. In my experience, "I Don't See a Use Case" people require more sophisticated tactics if you actually want to get something done while they're around, not least of all because they move the game to a harder field: "that won't work" at least states a fact, whereas "I don't see" moves us firmly into "belief" territory, and "a Use Case" invites us into the trap of dreaming up our own strawmen for them to tear down one by one.<p>I wonder if they started out as "That Won't Work" people, but evolved better defenses?</p>
]]></description><pubDate>Sun, 06 Jun 2021 01:22:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=27409907</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=27409907</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27409907</guid></item><item><title><![CDATA[New comment by shabbyrobe in "Avoid Git LFS if possible"]]></title><description><![CDATA[
<p>Here's another fun one: <a href="https://github.com/git-lfs/git-lfs/issues/2434" rel="nofollow">https://github.com/git-lfs/git-lfs/issues/2434</a><p>> Git on Windows client corrupts files > 4Gb<p>It's apparently an upstream issue with Git on Windows, but if you depend on something, you inherit its issues.</p>
]]></description><pubDate>Thu, 13 May 2021 02:16:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=27137692</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=27137692</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27137692</guid></item><item><title><![CDATA[New comment by shabbyrobe in "Factorio Future Plans"]]></title><description><![CDATA[
<p>I really didn't enjoy the game with the biters turned on, but absolutely loved it when I switched to peaceful mode. There are enough problems to sort out without them, like "why do I suddenly not have enough iron plates", or "why do I suddenly not have enough copper plates", or my personal favourite, "why do I suddenly not have enough iron plates again"!</p>
]]></description><pubDate>Fri, 05 Feb 2021 12:10:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=26035447</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=26035447</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26035447</guid></item><item><title><![CDATA[New comment by shabbyrobe in "Little known features of iTerm2"]]></title><description><![CDATA[
<p>iTerm2 is fantastic! It can be a bit CPU hungry but you get a stack of mod cons out of the bargain.<p>There are tons of proprietary escape codes, not least of all the incredibly useful one for "fireworks"! [1]<p><pre><code>    ^[]1337;RequestAttention=fireworks^G
</code></pre>
[1]: <a href="https://iterm2.com/documentation-escape-codes.html" rel="nofollow">https://iterm2.com/documentation-escape-codes.html</a></p>
]]></description><pubDate>Mon, 02 Mar 2020 09:54:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=22463034</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=22463034</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22463034</guid></item><item><title><![CDATA[New comment by shabbyrobe in "Go Things I Love: Channels and Goroutines"]]></title><description><![CDATA[
<p>Indeed! Even the Go wiki advocates exactly what you're saying about looking at the tradeoffs: <a href="https://github.com/golang/go/wiki/MutexOrChannel" rel="nofollow">https://github.com/golang/go/wiki/MutexOrChannel</a></p>
]]></description><pubDate>Tue, 07 Jan 2020 11:53:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=21979101</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=21979101</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21979101</guid></item><item><title><![CDATA[New comment by shabbyrobe in "State of JavaScript 2019"]]></title><description><![CDATA[
<p>I find it kinda strange that Flow has been relegated to the write-in "Other Flavours" section so soon. I know that it has been trending downwards for a while (as TypeScript trends upwards), but it feels like that story's not quite over just yet even if the conclusion is foregone.</p>
]]></description><pubDate>Thu, 19 Dec 2019 05:52:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=21832309</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=21832309</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21832309</guid></item><item><title><![CDATA[New comment by shabbyrobe in "Firefox 69.0 Released"]]></title><description><![CDATA[
<p>Which bits of telemetry can't be opted out of? I've set at least a hundred things in my about:config to tamp down on it but I'm never quite sure I've got all of them.</p>
]]></description><pubDate>Tue, 03 Sep 2019 22:24:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=20871877</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=20871877</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20871877</guid></item><item><title><![CDATA[New comment by shabbyrobe in "Rethinking Visual Programming with Go"]]></title><description><![CDATA[
<p>The author of this post is also the author of the fantastic "Visualizing Concurrency in Go" [1] article.<p>[1]: <a href="https://divan.dev/posts/go_concurrency_visualize/" rel="nofollow">https://divan.dev/posts/go_concurrency_visualize/</a></p>
]]></description><pubDate>Wed, 05 Jun 2019 10:27:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=20102945</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=20102945</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20102945</guid></item><item><title><![CDATA[New comment by shabbyrobe in "Configuring and hardening Firefox privacy, security and anti-fingerprinting"]]></title><description><![CDATA[
<p>The file is liberally annotated with explanatory comments though. It's really useful if you want to cherry-pick the things that matter to you.</p>
]]></description><pubDate>Sun, 14 Apr 2019 11:05:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=19658649</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=19658649</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19658649</guid></item><item><title><![CDATA[New comment by shabbyrobe in "I Wanted to Type a Number (2016)"]]></title><description><![CDATA[
<p>Also, things might get a bit weird when you enter this 16-digit... uhh... "invoice number": 9007199254740992.</p>
]]></description><pubDate>Wed, 27 Mar 2019 00:49:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=19497297</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=19497297</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19497297</guid></item><item><title><![CDATA[New comment by shabbyrobe in "Using Go Modules"]]></title><description><![CDATA[
<p>It's not really fixed though. When using vim-go with gopls, I see extortionate memory and CPU usage relative to what gocode used to use, and glacial lookup times compared to what gocode used to offer. Maybe it's perfectly adequate for you, and if so that's great! But that has not been my experience. Neither gopls nor any of the dozen forks of gocode I've tried since 1.11 has come close to the pre-modules experience for speed, accuracy and acceptable resource usage.<p>I tried to use the profiling flags to get some data to file reports, but ran out of yak-shaving time when I realised was trying to flush out a bug in the tool command helpers in golang/go where it would write empty profiles if the process was shut down the exact way vim was shutting it down. That may have been fixed since, I haven't had a chance to look back into it.</p>
]]></description><pubDate>Wed, 20 Mar 2019 21:35:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=19447201</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=19447201</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19447201</guid></item><item><title><![CDATA[New comment by shabbyrobe in "Using Go Modules"]]></title><description><![CDATA[
<p>Which is, of course, totally unacceptable. This is a critical use case for doing deep-dive debugging or for code exploration. Fortunately for us there is the wonderfully named "gohack", which does easily expose your deps for editing (though not as easily as before): <a href="https://github.com/rogpeppe/gohack" rel="nofollow">https://github.com/rogpeppe/gohack</a></p>
]]></description><pubDate>Wed, 20 Mar 2019 21:23:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=19447088</link><dc:creator>shabbyrobe</dc:creator><comments>https://news.ycombinator.com/item?id=19447088</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19447088</guid></item></channel></rss>