<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: zeotroph</title><link>https://news.ycombinator.com/user?id=zeotroph</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 17 Apr 2026 01:24:03 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=zeotroph" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by zeotroph in ""We're building a new static type checker for Python""]]></title><description><![CDATA[
<p>There is third, pytype (by google), which I found pretty good but it rarely gets mentioned. However, like the others it is slow, so I hope this one is fast and supports all the pytype features (especially being able to type-check un-annotated code).<p><a href="https://github.com/google/pytype?tab=readme-ov-file#pytype---">https://github.com/google/pytype?tab=readme-ov-file#pytype--...</a></p>
]]></description><pubDate>Wed, 29 Jan 2025 22:44:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=42872265</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=42872265</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42872265</guid></item><item><title><![CDATA[New comment by zeotroph in "Mergiraf: a syntax-aware merge driver for Git"]]></title><description><![CDATA[
<p>Looking at the nice demo, I think just defaulting to asking for confirmation if there is ambiguity, instead of dazzling the user with `mergiraf solve` magic would help; there is already a `merigraf review`. Then, a confirm prompt, an option to undo the resolution completely, or just do it on a file-by-file basis (with help what command to run next).</p>
]]></description><pubDate>Sat, 09 Nov 2024 19:48:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=42096455</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=42096455</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42096455</guid></item><item><title><![CDATA[New comment by zeotroph in "Venvstacks: Virtual Environment Stacks for Python"]]></title><description><![CDATA[
<p>Ah, more complex than I thought: "venvstacks allows you to package Python applications and all their dependencies into a portable, deterministic format, without needing to include copies of these large Python frameworks in every application archive.", and in "Caveats and Limitations" (please, all projects should have one): "does NOT support combining arbitrary virtual environments with each other".<p><i>Is</i> there a helper to merge venv1 and venv2, or create venv2 which uses venv1 dependencies and on load both are merged?</p>
]]></description><pubDate>Sun, 03 Nov 2024 11:59:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=42032561</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=42032561</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42032561</guid></item><item><title><![CDATA[New comment by zeotroph in "Venvstacks: Virtual Environment Stacks for Python"]]></title><description><![CDATA[
<p>And with just 3 layers: Runtime, Framework, Application. But at least you are not switching tools, and it presumably would prevent you from installing LARGE_v1.1, and then installing TINY_v2.2 in a later layer, which however upgrades LARGE to v1.2 and your docker images are now twice the size.</p>
]]></description><pubDate>Sun, 03 Nov 2024 11:56:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=42032551</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=42032551</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42032551</guid></item><item><title><![CDATA[New comment by zeotroph in "Some of us like "interdiff" code review"]]></title><description><![CDATA[
<p>That's just a `git pull --rebase` away (or set pull to never merge but rebase), and all the non-merged commits are rebased onto the new upstream, and while doing the rebase the already-merged commit is dropped. The next git push origin HEAD:refs/for/main will then push the remaining commits.</p>
]]></description><pubDate>Thu, 12 Sep 2024 02:09:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=41516960</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=41516960</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41516960</guid></item><item><title><![CDATA[New comment by zeotroph in "Some of us like "interdiff" code review"]]></title><description><![CDATA[
<p>> Developers just aren't very good at doing this.<p>GitHub provided a way to contribute, but also to avoid learning to rebase, thus making it more welcoming to devs who only know about commit and pull - that is what made it so popular. The squash then rebase or merge step is done on server side. Plus it has a very "harmless" UI, but that hides a lot of details (patchsets) and the layout wastes so much space imo.<p>This also means devs could avoid learning more about git, and this lowest common denominator git workflow makes it so frustrating for those of us who learned git all the way. I can't even mark a PR as "do not squash" to prevent it being merged in the default way which throws out all history.</p>
]]></description><pubDate>Wed, 11 Sep 2024 09:06:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=41509527</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=41509527</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41509527</guid></item><item><title><![CDATA[New comment by zeotroph in "Some of us like "interdiff" code review"]]></title><description><![CDATA[
<p>> [GitLab] you can mark the PR to depend on another<p>How much user interaction does that require, and how is this visualized in the review UI? Gerrit creates this dependency with a single `git push`.</p>
]]></description><pubDate>Wed, 11 Sep 2024 08:52:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=41509438</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=41509438</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41509438</guid></item><item><title><![CDATA[New comment by zeotroph in "Some of us like "interdiff" code review"]]></title><description><![CDATA[
<p>Attention Set <3 - that alone is worth another post. Gerrit really is one of the best kept dev secrets, and if you never had the luck of seeing it in person at a company where you worked at, well...<p>Makes me wonder what other git or dev-in-general blindspots I have.</p>
]]></description><pubDate>Wed, 11 Sep 2024 00:07:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=41506936</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=41506936</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41506936</guid></item><item><title><![CDATA[New comment by zeotroph in "Some of us like "interdiff" code review"]]></title><description><![CDATA[
<p>And just visually, GitHub wastes so much vertical space, so even trying to place what belong to which patchset becomes hard.</p>
]]></description><pubDate>Tue, 10 Sep 2024 23:49:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=41506824</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=41506824</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41506824</guid></item><item><title><![CDATA[New comment by zeotroph in "Some of us like "interdiff" code review"]]></title><description><![CDATA[
<p>There is one thing I miss on Gerrit when you push a stack of commits: A central place to talk about the whole of the stack, not just individual commits. This "big picture", but still technical stuff, too often happens in the issue tracker. But where to place it, I have no idea. This stack is just too ephemeral and and can be completely different on the next push.</p>
]]></description><pubDate>Tue, 10 Sep 2024 23:44:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=41506789</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=41506789</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41506789</guid></item><item><title><![CDATA[New comment by zeotroph in "Some of us like "interdiff" code review"]]></title><description><![CDATA[
<p>That's exactly what Gerrit can do. When you push an x-b-c-d-e chain, these show up stacked in the UI, but you can easily cherry-pick b onto main (see that the CI passes, and the usual review), and rebase everything on top of that. If it is x, the bottom one, you can directly submit it and continue with the others.</p>
]]></description><pubDate>Tue, 10 Sep 2024 23:41:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=41506767</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=41506767</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41506767</guid></item><item><title><![CDATA[New comment by zeotroph in "Some of us like "interdiff" code review"]]></title><description><![CDATA[
<p>Right, for Graphite $20/dev/month is nothing (I wonder if Enterprise is less or more more than that...), considering an ounce of review (prevention) is worth a pound of bugfixes (cure).<p>And when you can not get corporate to switch away from GH, then that is it. In hindsight an obvious way to (almost) print money, congratulations, but also a sad state of affairs.<p>But I imagine the $20k/yr is something you can easily spend on a 1/5 of a dev doing Gerrit maintenance.</p>
]]></description><pubDate>Tue, 10 Sep 2024 23:37:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=41506743</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=41506743</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41506743</guid></item><item><title><![CDATA[New comment by zeotroph in "Some of us like "interdiff" code review"]]></title><description><![CDATA[
<p>From my interaction with the free part of GitHub, "diff soup" describes it very well. Does the paid version do anything better? What about GitLab, can this get near Gerrit? And then there are the external services which try to make GitHub less painful (and quite pricey, especially compared to a selfhosted Gerrit), by providing stacked diff support, did you look at these?</p>
]]></description><pubDate>Tue, 10 Sep 2024 23:20:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=41506652</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=41506652</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41506652</guid></item><item><title><![CDATA[New comment by zeotroph in "New forms of steel for stronger, lighter cars"]]></title><description><![CDATA[
<p>> if car companies where the ones liable for fixing your car<p>Sidenote: <i>this</i> one of the ideas behind Ida Aukens (controversial, and I would say misunderstood) "You will own nothing and be happy": One way to make companies liable is by making them own and maintain what they produce for the entire product cycle, and you only rent these items.<p>Of course this needs a very healthy and competitive market with effective regulations to prevent eternal enshittification. And maybe it doesn't work when shareholder value is everything that counts.</p>
]]></description><pubDate>Tue, 03 Sep 2024 15:02:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=41435629</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=41435629</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41435629</guid></item><item><title><![CDATA[New comment by zeotroph in "GIL Become Optional in Python 3.13"]]></title><description><![CDATA[
<p>There is also the rarely mentioned pytype from Google, written in Python. And pyright from Microsoft is written in Typescript, pyre at Facebook in OCaml. Last time I checked, these had better type inference algorithms (Hindley-Milner?) than mypy.<p><a href="https://github.com/google/pytype">https://github.com/google/pytype</a>
<a href="https://github.com/google/pytype">https://github.com/google/pytype</a>
<a href="https://github.com/microsoft/pyright">https://github.com/microsoft/pyright</a></p>
]]></description><pubDate>Mon, 12 Aug 2024 11:07:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=41223162</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=41223162</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41223162</guid></item><item><title><![CDATA[New comment by zeotroph in "Duperemove – Tools for deduping file systems"]]></title><description><![CDATA[
<p>That only seems to work on btrfs, XFS, (and maybe now or very soon) ZFS and bcachefs: "[duperemove] simply finds candidates for dedupe and submits them to the Linux kernel FIDEDUPERANGE ioctl." [1] (aka BTRFS_IOC_FILE_EXTENT_SAME), and this ioctl "performs the 'compare and share if identical'" (and locking etc.) work [2]. But on those filesystems, that is a nice feature, plus it lets the tool get away with a weak hash like murmur3.<p>1: <a href="http://markfasheh.github.io/duperemove/duperemove.html" rel="nofollow">http://markfasheh.github.io/duperemove/duperemove.html</a>
2: <a href="https://manpages.debian.org/bookworm/manpages-dev/ioctl_fideduperange.2.en.html" rel="nofollow">https://manpages.debian.org/bookworm/manpages-dev/ioctl_fide...</a></p>
]]></description><pubDate>Thu, 08 Aug 2024 19:38:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=41195361</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=41195361</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41195361</guid></item><item><title><![CDATA[New comment by zeotroph in "Git-PR: patch requests over SSH"]]></title><description><![CDATA[
<p>> just say `arc diff` instead of `git push`.<p>"just" - I bounced off Phabricator because I couldn't use native git tooling, and what mapped to where wasn't clear to me. The pure git approach of git-pr is the exact opposite of that. Sure, someone is going to write just-too-useful-to-skip-wrappers around that later, but you always know what's going on under the hood.</p>
]]></description><pubDate>Sun, 14 Jul 2024 23:07:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=40963901</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=40963901</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40963901</guid></item><item><title><![CDATA[New comment by zeotroph in "Git-PR: patch requests over SSH"]]></title><description><![CDATA[
<p>Good to hear, Gerrit does a lot of things right, see "stacked diffs" (or the realization that GitHub lacks these) now becoming more popular. And the patchset model is one important aspect of that, especially being able to see the difference just between patchsets - which git-pr can then do via `git range-diff` (which you already mentioned).<p>And even if everything git-pr does <i>could</i> be done by talking to the Gerrit REST-API, a simple straight forward and lightweight implementation of the "essence" of this model is very useful.</p>
]]></description><pubDate>Sun, 14 Jul 2024 22:34:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=40963702</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=40963702</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40963702</guid></item><item><title><![CDATA[New comment by zeotroph in "Git-PR: patch requests over SSH"]]></title><description><![CDATA[
<p>How do you envision pushing/reviewing a branch of 3 cleanly separated commits (say: write failing test, fix code, refactor) into a repo with a fast-forward/no-merge policy? The end result should of course be 3 commits, but review history should not be lost.<p>1) push 3 commits  (author)<p>2) push 3 commits + 1 review commit (reviewer)<p>or even 2a), + 3 interleaved review commits, might be needed if the final refactor removes something.<p>then<p>3a) force-push 3 commits with the review comments applied (you mentioned --force is supported)<p>3b) or push 3 + 1 + (worst case 3) fixup commits, then a squash later?<p>If 3a), does pico have the concept of patchsets like gerrit, so the state 2) can be retrieved later?<p>PS: ... or even 2c, if the line I am commenting on is removed in patch 2 I would need to push a whole "review tree" (or fix conflicts in b and c):<p><pre><code>   a -- b -- c -- review-c
    \   \
     \   `-review-b
      `- review-a</code></pre></p>
]]></description><pubDate>Sun, 14 Jul 2024 17:12:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=40962076</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=40962076</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40962076</guid></item><item><title><![CDATA[New comment by zeotroph in "CRIU, a project to implement checkpoint/restore functionality for Linux"]]></title><description><![CDATA[
<p>I discovered CRIU in this video below (1h) "Container Migration and CRIU Details with Adrian Reber (Red Hat)", it has a live demo and the details about how much "user space" it really is. Here with the RH podman fork of docker.<p>Since everyone is treating containers as cattle CRIU doesn't seem to get much attention, and might be why a video and not a blog post was my first introduction.<p><a href="https://www.youtube.com/watch?v=-7DgNxyuz_o" rel="nofollow">https://www.youtube.com/watch?v=-7DgNxyuz_o</a></p>
]]></description><pubDate>Fri, 21 Jun 2024 18:29:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=40752292</link><dc:creator>zeotroph</dc:creator><comments>https://news.ycombinator.com/item?id=40752292</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40752292</guid></item></channel></rss>