<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: gilgad13</title><link>https://news.ycombinator.com/user?id=gilgad13</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 26 Jun 2026 23:28:52 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=gilgad13" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by gilgad13 in "Anti-social: It's fads, not friends, which now dominate social media feeds"]]></title><description><![CDATA[
<p>The feed is algorithmic, but its not personalized, and the algorithm isn't directly optimizing for engagement.<p>I believe these are the exact technical advancement the top-level poster was contrasting with cable networks, so the distinction matters here.</p>
]]></description><pubDate>Mon, 08 Jun 2026 16:29:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=48447483</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=48447483</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48447483</guid></item><item><title><![CDATA[New comment by gilgad13 in "Plausible Community Edition"]]></title><description><![CDATA[
<p>Just because you want something to have a viable business model doesn't mean it does.  If you want to get paid to develop open source software, I think you have a couple of options:<p>1. Just don't.  Work on open source on the weekends, etc.<p>2. Do it as part of a "commoditize your complements" strategy.<p>3. Work at a company that is so large they can fund open source development as part of their advertising strategy.<p>4. Gather together some expertise in existing open source projects and sell consulting.  Crucially, you'll probably need to build on top of some existing open source install base or name recognition.  Redhat didn't start the linux project or the gnu userland, Percona didn't write mysql, etc.  In some sense you are now one of the leaches that posts such as this one complain about.<p>The fundamental piece in common here is that the open source bit isn't the main value driver for the business.</p>
]]></description><pubDate>Wed, 10 Jul 2024 16:27:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=40928613</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=40928613</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40928613</guid></item><item><title><![CDATA[New comment by gilgad13 in "Go Style"]]></title><description><![CDATA[
<p>I imagine that opinions such as this have influenced this recommendation: <a href="https://research.swtch.com/deps" rel="nofollow">https://research.swtch.com/deps</a> .  I think there is some spirit in Go of not taking on a ton of small dependencies, but that may be a hold-over from before Go had a built-in package manager.<p>I think as an organization grows to some combination of available resources and severity of an outage this view becomes more and more common.</p>
]]></description><pubDate>Fri, 18 Nov 2022 16:33:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=33657164</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=33657164</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33657164</guid></item><item><title><![CDATA[New comment by gilgad13 in "Go 1.18"]]></title><description><![CDATA[
<p>I agree, with the addition that closing an unbuffered `<-chan struct{}` is a good way to do broadcast notifications (a. la. the context package).<p>As evidence that channels should be used rarely, and only in small scopes, consider the number of places chan is used in the standard library.</p>
]]></description><pubDate>Tue, 15 Mar 2022 21:49:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=30692257</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=30692257</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30692257</guid></item><item><title><![CDATA[New comment by gilgad13 in "Oxide at Home: Propolis Says Hello"]]></title><description><![CDATA[
<p>> There are a lot of organizations who want hyperscale style servers but aren't going to start a division to begin making them themselves.<p>How does this differ from what large players like Dell are offering under the "hyperconverged" moniker.  For example, Dell's Vxrail[0] appears (from marketing speak, anyway) to be a single rack with integrated networking and storage that you can ask to "just start a vm".<p>[0]: <a href="https://www.dell.com/en-us/dt/converged-infrastructure/vxrail/index.htm#scroll=off&tab0=0&tab1=0" rel="nofollow">https://www.dell.com/en-us/dt/converged-infrastructure/vxrai...</a></p>
]]></description><pubDate>Tue, 15 Mar 2022 14:10:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=30685491</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=30685491</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30685491</guid></item><item><title><![CDATA[New comment by gilgad13 in "Minimal Viable Product is old and busted"]]></title><description><![CDATA[
<p>Contra to most of the comments here, I found a lot to agree with in this article:<p>> You have no soul as a company at that point, you’re just trying to make money with other people, rather than help people with a problem that you know. You may think you have an idea, but it’s not good enough yet.<p>I think this is the crux of the difference.  If you want to have a successful startup, you have to <i>believe</i> that you deserve to exist and believe you have something unique to offer.  You cannot just "show up and listen" and get paid the big bucks.</p>
]]></description><pubDate>Mon, 14 Mar 2022 15:45:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=30673796</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=30673796</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30673796</guid></item><item><title><![CDATA[New comment by gilgad13 in "Fengari – Lua for the Browser"]]></title><description><![CDATA[
<p>One aspect of Lua that stands out to me is how every feature is carefully designed both in isolation and in composition with the others.  The language has relatively few features, but none of them are hanging off the side, the all lean on each other to make a cohesive whole.<p>I think Lua is a bit unique in this for two reasons.  First, they have in intentional open-source but not open development model.  Second, because of the way that Lua is embedded inside other projects, there is more willingness to implement backwards-incompatable changes.  I'm sure this is a negative for some who want to build a larger, less fractured community, but it has advantages for language cohesiveness.</p>
]]></description><pubDate>Sun, 20 Feb 2022 14:35:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=30406005</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=30406005</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30406005</guid></item><item><title><![CDATA[New comment by gilgad13 in "Internals of Go's new fuzzing system"]]></title><description><![CDATA[
<p>> The coordinator communicates with each worker using an improvised JSON-based RPC protocol over a pair of pipes. The protocol is pretty basic because we didn't need anything sophisticated like gRPC, and we didn't want to introduce anything new into the standard library.<p>Interesting that this does not use `encoding/gob` by these criteria.  I think `encoding/gob` is a nice example of what is possible with reflection, and I've certainly learned techniques from reading its implementation, but I haven't seen very many uses in the wild and this certainly would seem like a vote of no-confidence.</p>
]]></description><pubDate>Fri, 18 Feb 2022 16:17:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=30387605</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=30387605</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30387605</guid></item><item><title><![CDATA[New comment by gilgad13 in "Heuristics that almost always work"]]></title><description><![CDATA[
<p>While this is true, in the context of alpine climbing where I first heard this statement, the bold alpinists who die young are very much not beginner-intermediates.  I've interpreted this differently than just the "Bathtub Curve"[1] applied to dangerous pursuits.<p>Rather, there is a certain amount of objective risk in alpine environments, and the more time you put yourself in that environment, especially in locations you aren't familiar with, the greater the chance that something will eventually go wrong.<p>I'm always surprised by the number of famous alpinists who weren't killed on their progressive, headline-capturing attempts but rather on training attempts and lesser objectives.<p>[1]: <a href="https://en.wikipedia.org/wiki/Bathtub_curve" rel="nofollow">https://en.wikipedia.org/wiki/Bathtub_curve</a></p>
]]></description><pubDate>Tue, 08 Feb 2022 23:35:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=30266425</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=30266425</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30266425</guid></item><item><title><![CDATA[New comment by gilgad13 in "The Road to OCIv2 Images: What's Wrong with Tar? (2019)"]]></title><description><![CDATA[
<p>I agree with many of the concerns the author raises, but I'm left with the question:<p>Given all this, what does layering give us?<p>It gives some deduplication, but only a crude form.  It gives some reproducibility from building off a well-known base and tag, but not full reproducibility.  It gives some security benefit from building off a well-known base, but not as large a benefit as standard package managers provide.<p>I would be excited to see a image distribution system based off of something like casync, maybe with an initial rootfs formed through image-focused distributions like yocto[1].  The embedded device ecosystem has been concerned with reproducibility, image signing, and incremental updates for awhile and I think their approaches are very applicable to container images.<p>[1]: <a href="https://www.yoctoproject.org/" rel="nofollow">https://www.yoctoproject.org/</a></p>
]]></description><pubDate>Wed, 02 Feb 2022 21:18:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=30184192</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=30184192</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30184192</guid></item><item><title><![CDATA[New comment by gilgad13 in "The unreasonable effectiveness of one-on-ones"]]></title><description><![CDATA[
<p>I agree, and from the subordinate's point of view I feel having a regularly planned session lowers the barrier to raise issues early without making things confrontational.<p>Its the difference between "we talked about many things, including this issue" and "we need to meet to discuss this issue".  I find the second starts everyone off on a defensive foot, regardless of peoples' best intentions.</p>
]]></description><pubDate>Mon, 31 Jan 2022 21:41:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=30154877</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=30154877</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30154877</guid></item><item><title><![CDATA[New comment by gilgad13 in "Log4j: Between a rock and a hard place"]]></title><description><![CDATA[
<p>As you said, the solution isn't the hard part.  The reason that large companies aren't deploying their own solutions for this issue isn't that their engineers engineers that are incapable of developing their own solutions, but because then they would have to carry that patch forever, and if a problem was found with their particular solution they would be on the hook for it.<p>And yes, I do think this, "but everyone else is doing the same thing so it isn't really our fault" attitude is a problem.</p>
]]></description><pubDate>Sun, 12 Dec 2021 03:10:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=29526783</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=29526783</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29526783</guid></item><item><title><![CDATA[New comment by gilgad13 in "Spectrum OS: a declarative, reproducible, compartmentalized Linux"]]></title><description><![CDATA[
<p>There's a lot of wiggle room in "better", but there are a decent number of distros for which ~95% of the packages are built in a reproducible way, including Debian, Arch, and Yocto: <a href="https://reproducible-builds.org/citests/" rel="nofollow">https://reproducible-builds.org/citests/</a></p>
]]></description><pubDate>Wed, 15 Sep 2021 15:02:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=28540018</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=28540018</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28540018</guid></item><item><title><![CDATA[New comment by gilgad13 in "Updating the Go Memory Model"]]></title><description><![CDATA[
<p>The rule that the writer should be responsible for closing a channel is a good one to keep in mind, but it is often the case that you want to launch an indeterminate number of generators and collect the results from all of them.  For example, you may want to make one connection to each server in the config, or to process each file in a directory in parallel.  Because the arms of a `select{}` are determined at compile time, it cannot be used to select over the variable generator-owned channels, and you have four more difficult options:<p>* Use `reflect.Value.Select`[1].  Having to reach for reflect feels ugly for such a common case, and the performance of the reflect-select is much lower than the native select.<p>* Create a single channel owned by the reader, pass it to each writer, and arrange for this channel to be closed when the final writer exits, through a waitgroup.  There is an example under "Parallel digestion" in the Go Concurrency Patterns blog post[2].  Note the little details to get right.  We must launch a separate goroutine to monitor the waitgroup / channel closure.  If we accidentally do it in-line at the wrong level, everything will work fine if the total number of items written to `c` is less than `c`'s capacity, but will hang once a worker becomes blocked on `c`.  Additionally, the waitgroup is threaded directly into the writers, which may be more difficult if those are implemented in some other generic package.<p>* Wrap the above pattern up into a `merge` function, such as the one under "Fan-in, Fan-out" in the Go Concurrency Patterns post[2]. The lack of generics means we will have to copy-paste this function everywhere we want to use it.  Additionally, this launches a goroutine for every channel being watched, which strikes people as "expensive" for such a simple operation.<p>* We can construct a function that takes two channels and launches a goroutine that selects between the two and writes to a merged output channel.  By constructing a tree of these we can merge an arbitrary number of channels.  This is really just an optimization of the above.<p>None of these options are particularly intuitive.  Too often I've instead seen developers create a single channel owned by the reader and either:<p>* Assume it is never closed and the reader doesn't terminate until the application does<p>* Rely on some external mechanism to know when to stop reading.  If the reader can stop reading without confirming that the writers have stopped writing, this can lead to the writers becoming blocked on sending into this channel, which may prevent them from performing necessary cleanup actions (signaling `.Done()` on a waitgroup, for instance) that cause hangs in other areas.<p>* Thread a cancellation ctx through every reader and writer.  This ensures that nothing hangs, but can result in messages that are sitting in the the channels being dropped.  If other areas of code have an assumption like, "every accepted request will receive a response", this can break that.<p>In addition, many developers have a gut instinct to add some amount of buffering to their channels, which usually results in these backpressure / channel issues being papered over during low-load unit tests, only to rear their head during higher load integration tests or in production, when the debugging story is much more difficult.<p>[1]: <a href="https://pkg.go.dev/reflect#Select" rel="nofollow">https://pkg.go.dev/reflect#Select</a><p>[2]: <a href="https://blog.golang.org/pipelines" rel="nofollow">https://blog.golang.org/pipelines</a></p>
]]></description><pubDate>Mon, 12 Jul 2021 21:12:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=27815206</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=27815206</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27815206</guid></item><item><title><![CDATA[New comment by gilgad13 in "SafeDollar ‘stablecoin’ drops to $0 following DeFi exploit on Polygon"]]></title><description><![CDATA[
<p>This is good, but distributing the mining fees evenly across all lawyers will result in too low a fee for the work involved.  What if, instead, the parties of the contract would each pick a small set of lawyers ("representing" lawyers) to receive their fees for enforcing the contract.  Rather than relying solely on the mining lawyers for <i>this</i> contract to participate in consensus (as that number is now small and adversarially motivated), we would expand the consensus pool to all lawyers who participated in sufficiently similar contract enforcement in the past, using their votes on previous enforcements as an immutable record.<p>In this design, determining the threshold for similarity may require the participation of a third-party "oracle" or "judge" component.</p>
]]></description><pubDate>Mon, 28 Jun 2021 21:57:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=27668735</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=27668735</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27668735</guid></item><item><title><![CDATA[New comment by gilgad13 in "A new ProtoBuf generator for Go"]]></title><description><![CDATA[
<p>Maybe I'm missing something, but my read of golang/protobuf#364[1] was that part of the motivation for  the re-organization in protobuf-go v2 was to allow for optimizations like gogoprotobuf to be developed without requiring a complete fork.  I totally understand that the authors of gogoprotobuf do not have the time to re-architect their library to use these hooks, but best I can figure this generator does not use these hooks either.  Instead it defines additional member functions, and wrappers that look for those specialized functions and fallback to the generic ones if not found.<p>For example, it looks like pooled decoders could be implemented by setting a custom unmarshaller through the ProtoMethods[2] API.<p>I wonder why not?  Did the authors of the vtprotobuf extension not want to bite off that much work?  Is the new API not sufficient to do what they want (thus failing some of the goals expressed in golang/protobuf#364?<p>[1]: <a href="https://github.com/golang/protobuf/issues/364" rel="nofollow">https://github.com/golang/protobuf/issues/364</a><p>[2]: <a href="https://pkg.go.dev/google.golang.org/protobuf@v1.26.0/reflect/protoreflect#Message" rel="nofollow">https://pkg.go.dev/google.golang.org/protobuf@v1.26.0/reflec...</a></p>
]]></description><pubDate>Thu, 03 Jun 2021 21:05:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=27387304</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=27387304</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27387304</guid></item><item><title><![CDATA[New comment by gilgad13 in "netaddr.IP: a new IP address type for Go"]]></title><description><![CDATA[
<p>Fair enough.  I agree 8x for IPv4 would be hard to swallow.<p>In either case, having the interning wrapped up in a reusable library is great.</p>
]]></description><pubDate>Thu, 11 Mar 2021 04:20:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=26420185</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=26420185</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26420185</guid></item><item><title><![CDATA[New comment by gilgad13 in "netaddr.IP: a new IP address type for Go"]]></title><description><![CDATA[
<p>The uintptr / SetFinalize trick to implement "weak" references is pretty cool, but I'd be curious to hear why<p><pre><code>    type IP struct {
        hi, lo uint64
        z    string
    }
</code></pre>
with sentinel strings like "\04" and "\0\06" for IPv4 and IPv6-no-zone was rejected.  Sure, this 8 bytes larger for the implicit string length, but its still not terribly large, and the string comparisons in the normal IPv4 / IPv6 case are very cheap (just length and pointer equality checks).  And it doesn't require opening the unsafe jar.  Was the extra 8 bytes enough to disqualify it?  Or are the authors worried about the fact that this may allocate on each parse of an IPv6-with-zone?</p>
]]></description><pubDate>Thu, 11 Mar 2021 02:55:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=26419654</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=26419654</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26419654</guid></item><item><title><![CDATA[New comment by gilgad13 in "Understanding Daemons"]]></title><description><![CDATA[
<p>My understanding was that the double fork dance was actively <i>discouraged</i> for any semi-modern system.  The man page you link says as much in the "new-style" section, as well as <a href="https://jdebp.eu/FGA/unix-daemon-design-mistakes-to-avoid.html" rel="nofollow">https://jdebp.eu/FGA/unix-daemon-design-mistakes-to-avoid.ht...</a>.<p>Just write your server as a straightforward process and let the service manager handle this stuff for you.  You'll just be confusing it if you don't.</p>
]]></description><pubDate>Thu, 03 Sep 2020 19:59:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=24368193</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=24368193</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24368193</guid></item><item><title><![CDATA[New comment by gilgad13 in "Teen Who Hacked CIA Director’s Email Tells How He Did It"]]></title><description><![CDATA[
<p>I think people do deserve to be surprised.  Competence is not the same as selflessness.  Many people routinely question whether the FBI is operating for the good of the country, but most people at least believe that they are good at their job.</p>
]]></description><pubDate>Wed, 21 Oct 2015 20:02:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=10428235</link><dc:creator>gilgad13</dc:creator><comments>https://news.ycombinator.com/item?id=10428235</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=10428235</guid></item></channel></rss>