<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: avgcorrection</title><link>https://news.ycombinator.com/user?id=avgcorrection</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 09 Apr 2026 09:37:36 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=avgcorrection" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by avgcorrection in "The Law of Leaky Abstractions (2002)"]]></title><description><![CDATA[
<p>I’ll try to do better in the next life.</p>
]]></description><pubDate>Thu, 07 Mar 2024 14:36:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=39629576</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39629576</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39629576</guid></item><item><title><![CDATA[New comment by avgcorrection in "The Law of Leaky Abstractions (2002)"]]></title><description><![CDATA[
<p>> But go ahead and use the FFI and things aren't so rosy. Usually the GC can cooperate with allocated memory from the other side of the FFI, but this requires care and attention to detail, or you get memory bugs, and just like that, you're manually managing memory in a garbage collected language, and you can segfault on a use-after-free just like a Real Programmer.<p>Now you’ve stepped beyond the walled gardens of the managed memory. How is that an abstraction leak?<p>> It's also quite plausible to write a program in a GC language which leaks memory, by accidentally retaining a reference to something which you thought you'd deleted the last reference to.<p>That the user just thought they had gotten rid of? If the memory is technically reachable then that doesn’t sound like its fault. I’m reminded of the recent Rust Vec thread on how the so-called space leak of reusing allocated memory lead to unreasonable memory consumption. But to my recollection that wasn’t a leak in the sense of unreachable-but-not-freed. I do agree however (with those that made this point) that the Vec behavior was too clever. Which goes to show that Vec should probably just stick to the front-page abstraction advertised: will amortize allocations, can shrink to fit if you tell it to, nothing much more fancy beyond that.<p>(The memory leak topic seems very fuzzy in general.)</p>
]]></description><pubDate>Wed, 06 Mar 2024 23:00:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=39622855</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39622855</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39622855</guid></item><item><title><![CDATA[New comment by avgcorrection in "The Law of Leaky Abstractions (2002)"]]></title><description><![CDATA[
<p>What was difficult about what I wrote?</p>
]]></description><pubDate>Wed, 06 Mar 2024 21:07:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=39621477</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39621477</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39621477</guid></item><item><title><![CDATA[New comment by avgcorrection in "The Law of Leaky Abstractions (2002)"]]></title><description><![CDATA[
<p>> Back to TCP. Earlier for the sake of simplicity I told a little fib, and some of you have steam coming out of your ears by now because this fib is driving you crazy. I said that TCP guarantees that your message will arrive. It doesn’t, actually. If your pet snake has chewed through the network cable leading to your computer, and no IP packets can get through, then TCP can’t do anything about it and your message doesn’t arrive.<p>The argument is disqualified at this point. The whole world is a leaky abstraction because <freak meteor hit could happen>. At this point your concept is all-encompassing and in turn useless.<p>There are assumptions: this computation will finish eventually [assuming that no one unplugs the computer itself]. This does not make things leaky.<p>There are leaky abstractions I guess but not all are. A garbage collector that can cause memory errors would be leaky. I don’t know anything about garbage colletors but in my experience they don’t.<p>Then someone says that a garbage collector is leaky because of performance concerns (throughput or latency). That’s not a leak: that’s part of the <i>abstracting away</i> part—some concerns are <i>abstracted away</i>. To abstract away means to make it something that you can’t fudge or change. To say that “this is implementation-defined”. An abstract <i>list</i> is an abstraction in the sense that it has some behavior. And also in the sense that it doesn’t say <i>how</i> those behaviors are implemented. That’s both a freedom and a lurking problem (sometimes). Big reallocation because of amortized <i>push</i>? Well you abstracted that away so can you complain about it? Maybe your next step is to move beyond the abstraction and into the more concrete.<p>What are abstractions without something to abstract away? They are impossible. You have to have the freedom to leave some things blank.<p>So what Spolsky is effectively saying is that abstractions are abstractions. That looks more like a rhetorical device than a new argument. (Taxes are theft?)<p>EDIT: Flagged for an opinion? Very well.</p>
]]></description><pubDate>Wed, 06 Mar 2024 20:08:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=39620718</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39620718</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39620718</guid></item><item><title><![CDATA[New comment by avgcorrection in "Radicle: Open-Source, Peer-to-Peer, GitHub Alternative"]]></title><description><![CDATA[
<p>Ok. That could work if you found a group of people who are interested in such an all-in-one package. Gitlab is apparently working on a sort of cross-forge protocol (probably motivated by connecting Gitlab instances) and it seems that some Gitlab employees are working full time on the Git project. So those are candidates. You probably need a group which both have recognition within the project and are active enough to drive such a project forward without it fizzling out.<p>Without such a group you might just send a few emails to mailing list, get shrugs about how that plan “looks good” with little real interest, and then have to discuss this big plan in every future patch series that incrementally builds such a thing into Git itself. Mostly why such code should be incorporated and how it will pay off when it’s all ready.<p>The Git tool itself—and the project by extension—is per now very unopinioated about whole-project solutions like this. The workflow that they themselves use is very loosely coupled and pretty much needs bespoke scripting by individual contributors, which I guess is telling in itself.</p>
]]></description><pubDate>Wed, 06 Mar 2024 17:41:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=39618517</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39618517</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39618517</guid></item><item><title><![CDATA[New comment by avgcorrection in "Git Worktrees and GitButler"]]></title><description><![CDATA[
<p>Amendment: I just found out that I <i>do</i> have at least one use for git-stash, which is when I am stuck in the middle of a rebase somewhere and made an edit intended for another point (commit).</p>
]]></description><pubDate>Wed, 06 Mar 2024 16:39:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=39617728</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39617728</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39617728</guid></item><item><title><![CDATA[New comment by avgcorrection in "Radicle: Open-Source, Peer-to-Peer, GitHub Alternative"]]></title><description><![CDATA[
<p>And Fossil is an entirely different VCS.<p>What’s the alternative? That at least N projects cooperate and agree on a common design before they do the implementation? (Then maybe someone can complain about design-by-committee.)</p>
]]></description><pubDate>Tue, 05 Mar 2024 23:45:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=39610553</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39610553</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39610553</guid></item><item><title><![CDATA[New comment by avgcorrection in "Git Worktrees and GitButler"]]></title><description><![CDATA[
<p>My comment was totally unclear. By primitive I mean that it scales from very primitive operations (just snapshot) to supporting high-level workflows (refactoring, testing, verifying).<p>And by <i>primitive</i> I mean that I want to be able to commit whenever I feel like I want a snapshot. For any reason. Not hindered by concepts like does-it-build. That’s the low level. Then at the higher level are things like “public history” and “tested history”. That’s facilitated by the low/mid-level history rewriting tools.<p>Some people I know use Intellij’s “shelve” feature or whatever it is called. Interestingly it does provide some features that Git does not seem to have—and overlaps with GitButler—but it’s own bespoke thing, not integrated with Git.<p>And using these extra concepts on top of (or under?) Git doesn’t make sense for my workflow. Because the VCS is already there. So I don’t need to think about if I’m ready-to-commit—just make a WIP or a TEST commit, maybe discard later or maybe rewrite them.<p>For me, Git covers everything from snapshotting some private notes I have on the work that I’m currently doing to making a nice:<p>> useful commit [history], both for any reviewers at the time and any code spelunkers 10 years into the future.<p>It provides that whole range.</p>
]]></description><pubDate>Tue, 05 Mar 2024 17:34:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=39606629</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39606629</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39606629</guid></item><item><title><![CDATA[New comment by avgcorrection in "Git Worktrees and GitButler"]]></title><description><![CDATA[
<p>IMO you don’t need anything more than commits. The by-hand is writing WIP in the commit message. If that is an inconvenience then I’ll make a commit alias.<p>The index + commits is flexible enough. The stash concept is not needed for me.<p>See: <a href="https://news.ycombinator.com/item?id=39606525">https://news.ycombinator.com/item?id=39606525</a></p>
]]></description><pubDate>Tue, 05 Mar 2024 17:28:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=39606547</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39606547</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39606547</guid></item><item><title><![CDATA[New comment by avgcorrection in "Git Worktrees and GitButler"]]></title><description><![CDATA[
<p>I think that you (like me) prefer to use commits in places where many others prefer to stash. Personally I think the stash command is too primitive to bother with for all things except maybe an push+pop that happens within half a minute. Anything more and I risk forgetting about it. A WIP commit however is just there, on the branch, for me to deal with however I want later.<p>I don’t want to fiddle with dropping the stash one too many times, forgetting what they were about and so on. Merge conflicts because I didn’t pop before resuming..<p>It’s just a mostly useless additional “thing”.</p>
]]></description><pubDate>Tue, 05 Mar 2024 17:26:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=39606525</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39606525</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39606525</guid></item><item><title><![CDATA[New comment by avgcorrection in "Git Worktrees and GitButler"]]></title><description><![CDATA[
<p><a href="https://news.ycombinator.com/item?id=39357068">https://news.ycombinator.com/item?id=39357068</a><p>The submitter unhelpfully didn’t mention the name in the title.</p>
]]></description><pubDate>Mon, 04 Mar 2024 23:40:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=39597616</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39597616</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39597616</guid></item><item><title><![CDATA[New comment by avgcorrection in "Git Worktrees and GitButler"]]></title><description><![CDATA[
<p>You don’t have to interpret it as you-always-do-this. Just <i>sometimes</i> you want a worktree (or clone): maybe the bug fix needs to be applied to an old, old release which would invalidate all the indexes in your project. So then you can make a worktree so that your main worktree is left in peace.<p>But is it overkill for some fast translation fixes? Yeah, probably:)</p>
]]></description><pubDate>Mon, 04 Mar 2024 23:21:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=39597514</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39597514</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39597514</guid></item><item><title><![CDATA[New comment by avgcorrection in "Git Worktrees and GitButler"]]></title><description><![CDATA[
<p>“Not in a position to commit” in Git makes as much sense as “not in a position to save the file” (in your editor) in 2024. Git is in a sense a primitive tool: only about snapshotting, not about high-falutin things like “passes the tests”, “is okay with Bob”, and so on. It’s just about tracking state.<p>(Again this is what git-reset(1) and friends are for)</p>
]]></description><pubDate>Mon, 04 Mar 2024 23:19:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=39597497</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39597497</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39597497</guid></item><item><title><![CDATA[New comment by avgcorrection in "Git Worktrees and GitButler"]]></title><description><![CDATA[
<p>This is the way. Just commit. You can undo it later or whatever, but at least it’s there.<p>Just one concept instead of (1) commits (2) stash (3) oh these changes, eh, I don’t know what to do with them... let’s think about it after lunch.</p>
]]></description><pubDate>Mon, 04 Mar 2024 23:14:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=39597451</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39597451</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39597451</guid></item><item><title><![CDATA[New comment by avgcorrection in "Git Worktrees and GitButler"]]></title><description><![CDATA[
<p>> The thing that annoys me about worktrees is that you can't have two checked out to the same commit at the same time<p>Checking out the same <i>commit</i> is fine. You just can’t checkout the same branch.<p>This is not a problem for me because I either use detached head (if say I’m going to build from some commit) or restrict branches to certain worktrees naturally (if I am backporting to `old-version` on a worktree then... it’s not like that backport branch is ever going to be relevant in my main worktree where I do most of my work).</p>
]]></description><pubDate>Mon, 04 Mar 2024 22:51:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=39597233</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39597233</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39597233</guid></item><item><title><![CDATA[New comment by avgcorrection in "Git Worktrees and GitButler"]]></title><description><![CDATA[
<p>The first big thread on GitButler (recent) left me scratching my head. All the material with jargon like “virtual branches” just left me confused. It was like jumping into a how-to on why choose a Ferrari without first understanding what a car is. This clears things up nicely.<p>I mostly use worktrees for very separate things. Like: long-running build, way old or way new versions of the app. Then it doesn’t make sense to mix-and-match virtual branches. So when I want to build the app for deployment I don’t want to worry about whatever other changes getting in the way. Git worktrees doesn’t solve the same problem as what GitButler does. Worktrees is a streamlined way of the manual separate-clone workflow for the same repository. (Technically they are all distinct repositories once you clone them but ya know.)<p>I do have use for separate-from-branch files. Like notes to myself and test scripts that aren’t going into the branch. Crucially these files have nothing to do with the main work: the files themselves are not involved, so there can never be merge conflicts.<p>This GitButler workflow makes sense for things that (1) won’t cause merge conflicts and (2) which won’t step on each others’ toes. The example about a translation and code change is nice. Doing a translation at the same time as a code change is not likely to “break the build”.</p>
]]></description><pubDate>Mon, 04 Mar 2024 22:37:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=39597091</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39597091</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39597091</guid></item><item><title><![CDATA[New comment by avgcorrection in "The hunt for the missing data type"]]></title><description><![CDATA[
<p>Maybe there could be some utility for a decently general Graph type that can be used for high-level testing and verification. Maybe you could implement your efficient graph per-problem and then validate it with a more high-level and declarative type. You would have to implement some isomorphism between the types though.</p>
]]></description><pubDate>Mon, 04 Mar 2024 18:58:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=39594440</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39594440</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39594440</guid></item><item><title><![CDATA[New comment by avgcorrection in "I don’t think you should sign your Git commits"]]></title><description><![CDATA[
<p>The private key that I would hypothetically sign commits with? Then signing commits is compromised too. I’m not sure what point you’re making.<p>On the other hand if I don’t sign my commits then any signed commits (from my stolen private key (SSH)) look out of place. Like it’s weird that all these malicious commits are also signed, even though I have never signed commits.</p>
]]></description><pubDate>Sun, 03 Mar 2024 12:12:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=39580369</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39580369</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39580369</guid></item><item><title><![CDATA[New comment by avgcorrection in "I don’t think you should sign your Git commits"]]></title><description><![CDATA[
<p>It doesn’t seem hard to attribute 1/5 commit in a PR to another person. Then you publish it, no one checks out the individual commits (because that’s how forges are like in my experience), and it gets merged because the 2,000 line diff “LGTM”.<p>I don’t really have belief in the processes of these corporate environment unless the auditing is given on a silver platter.<p>Meanwhile on email: people get an email per patch, where the commit message part has to contain a `From:` line in order to override the email-is-author behavior.<p>PS: There is a utility to giving commit authorship to someone else. Someone sends me the change through a DM. I commit it. Did I author it? No, so I give that to <i>them</i>. Not an exotic use-case at all of this seemingly <i>nefarious</i> feature.</p>
]]></description><pubDate>Sun, 03 Mar 2024 11:49:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=39580264</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39580264</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39580264</guid></item><item><title><![CDATA[New comment by avgcorrection in "I don’t think you should sign your Git commits"]]></title><description><![CDATA[
<p>Why are you afraid of identity theft in this context?</p>
]]></description><pubDate>Sun, 03 Mar 2024 11:40:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=39580225</link><dc:creator>avgcorrection</dc:creator><comments>https://news.ycombinator.com/item?id=39580225</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39580225</guid></item></channel></rss>