<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: Liskni_si</title><link>https://news.ycombinator.com/user?id=Liskni_si</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 15 Apr 2026 00:26:03 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=Liskni_si" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by Liskni_si in "The exponential curve behind open source backlogs"]]></title><description><![CDATA[
<p>Many of those are "Merge branch 'master' into armanc/subtitle-sync-refactor". Rebasing the PR on top of master would bring that down to like 15 or something.</p>
]]></description><pubDate>Tue, 14 Apr 2026 15:44:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47767158</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=47767158</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47767158</guid></item><item><title><![CDATA[New comment by Liskni_si in "GitHub Stacked PRs"]]></title><description><![CDATA[
<p>It's awesome that they're adding a UI for stacked branches¹! The UX of the CLI tool seems weird, though. Why do I need to explicitly create and add branches to the stack if all I really want is to open PRs from my commits? Here's the workflow that I built for myself instead:<p>∙ `git checkout -b feature-branch-xyz`<p>∙ make a few commits, perhaps some fixups, rebase, whatever<p>∙ start tig, look at the history, decide at which points I want to break the branch into stacked PRs, and mark those points using shift-s (which calls my own `git gh-stack branch create $commit` and creates a specially named branch there)<p>∙ `git gh-stack sync` — collects all the specially named branches, builds a graph of how they're stacked on one another, pushes them, opens stacked PRs<p>GitHub has had some "support" for stacked PRs for a while, so merging the first one to main will automatically change the target branch of the second to main.<p>If I need to change anything, I can just `git rebase --interactive --update-refs`, amend commits, split commits, rearrange commits, and then running `git gh-stack sync` will update the PRs for me. If I split a commit in the middle and shift-s to mark it, it will open an extra PR and restack everything to update the order.<p>Furthermore, the "PR stack" doesn't actually need to be a stack (linear chain), it can be a tree. If I know that some commits are independent of the rest, I don't need to create a separate stack, I just create another local branch, mark PR-ready commits with shift-s, and `git gh-stack sync` will do the right thing. If I need to rebase the whole tree on top of current main, then `git rebase -i --rebase-merges --update-refs` does the job.<p>I guess what I'm saying is that as someone who's been using git since its inception, it feels much more natural to just do everything in git, and then have a single command that pushes my work to GitHub. And I think this might work even better with jujutsu — just point `git gh-stack sync` at the branches jj makes and it'll make a stack/tree of PRs out of them. :-)<p><a href="https://github.com/liskin/dotfiles/blob/home/bin/git-gh-stack" rel="nofollow">https://github.com/liskin/dotfiles/blob/home/bin/git-gh-stac...</a> if anyone's curious. It's just a few hundred lines of code. Building the graph is done by `git log --simplify-by-decoration`. Opening PRs is shelled out to `gh pr create`.<p>¹) I mean, I'd much rather they added a UI for reviewing PRs commit-by-commit, with the option to approve/request-changes on each, and the possibility to merge the first few approved ones while continuing work on the rest… But in a world of almost every $dayjob insisting on squash-merging, a UI for stacked PRs is a total game changer, positively.</p>
]]></description><pubDate>Tue, 14 Apr 2026 14:14:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=47765953</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=47765953</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47765953</guid></item><item><title><![CDATA[New comment by Liskni_si in "GitHub Stacked PRs"]]></title><description><![CDATA[
<p>They haven't fixed the fork issue, the FAQ clarifies this. I suspect the target audience is squash merging corpos. Everyone else can just do normal PRs with atomic commits reviewed individually...</p>
]]></description><pubDate>Tue, 14 Apr 2026 11:42:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=47764309</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=47764309</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47764309</guid></item><item><title><![CDATA[New comment by Liskni_si in "GitHub Stacked PRs"]]></title><description><![CDATA[
<p>Not a single one, but it can be done with 2.<p>Assuming you're currently on the most recent branch (furthest from the trunk), `git rebase -i --update-refs trunk` will rebase all the intermediate branches. If you need to make a change to the first branch nearest the trunk, either use `edit` in the interactive rebase, or make a fixup commit and enable autosquash for the rebase. The `--update-refs` flag makes sure that all the intermediate branches get updated during the rebase.<p>Then, to push them all, something like `git push origin 'refs/heads/yourname/*'` will push all branches prefixed with `yourname/`. It's a bit stupid that one can't just do `git push 'yourname/*'` though.</p>
]]></description><pubDate>Tue, 14 Apr 2026 11:20:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=47764108</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=47764108</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47764108</guid></item><item><title><![CDATA[New comment by Liskni_si in "Peers vote to ban pornography depicting sex acts between stepfamily members"]]></title><description><![CDATA[
<p>That's not that unusual though. Many countries' age of consent is ~15 so you can legally do it sooner than you can film it.</p>
]]></description><pubDate>Fri, 10 Apr 2026 17:35:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47721297</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=47721297</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47721297</guid></item><item><title><![CDATA[New comment by Liskni_si in "Show HN: Sub-millisecond VM sandboxes using CoW memory forking"]]></title><description><![CDATA[
<p>I tried to do something similar well over a decade ago during an internal hackathon (the motivation back then being speeding up destructive integration tests). My idea was to have the memory be a file on tmpfs, and simply `cp --reflink` to get a copy-on-write clone. Then you wouldn't need to bother with userfaultfd or slow storage as the kernel would just magically do the right thing.<p>Unfortunately, the Linux kernel didn't support reflink on tmpfs (and still doesn't), and I'm not genius enough to have been able to implement that within 24 hours. :-)<p>I still believe it'd be nice to implement reflink for tmpfs, though. It's the perfect interface for copy-on-write forking of VM memory.</p>
]]></description><pubDate>Mon, 30 Mar 2026 22:34:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47580564</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=47580564</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47580564</guid></item><item><title><![CDATA[New comment by Liskni_si in "Git Rebase for the Terrified"]]></title><description><![CDATA[
<p>You can comment on the individual commits' changes, but you can't comment on the commit (e.g. its message) itself. I believe you can do this in Gerrit.</p>
]]></description><pubDate>Wed, 14 Jan 2026 19:23:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=46621339</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=46621339</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46621339</guid></item><item><title><![CDATA[New comment by Liskni_si in "Git Rebase for the Terrified"]]></title><description><![CDATA[
<p>Happens on merge, sure, but the end result is that you kinda lose the individual commits. You can still find them in the PR, but you won't see them in the git history, so git blame will just point you to the one big squashed commit.<p>If you, however, open a chain of 8 PRs, and merge them in the right order, the individual commits will be persisted in the git history. Potentially worth it if you like to have a "story" of several commits...</p>
]]></description><pubDate>Wed, 14 Jan 2026 00:02:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46610401</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=46610401</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46610401</guid></item><item><title><![CDATA[New comment by Liskni_si in "Git Rebase for the Terrified"]]></title><description><![CDATA[
<p>You do if you find yourself in a team where PRs are squash-merged. :-(</p>
]]></description><pubDate>Tue, 13 Jan 2026 18:40:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=46605631</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=46605631</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46605631</guid></item><item><title><![CDATA[New comment by Liskni_si in "X Didn't Fix Grok's 'Undressing' Problem. It Just Makes People Pay for It"]]></title><description><![CDATA[
<p>I've seen porn in Google's own Chrome too.</p>
]]></description><pubDate>Mon, 12 Jan 2026 20:30:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=46593873</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=46593873</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46593873</guid></item><item><title><![CDATA[New comment by Liskni_si in "PyPI Blog: Token Exfiltration Campaign via GitHub Actions Workflows"]]></title><description><![CDATA[
<p>In general, yes, it is easier to exfiltrate the token because if you can control some of the code that runs with the token available as an env var, you can do whatever.<p>In the specific case of the attack described in the blog post, though, the attackers added an extra GitHub Actions workflow that sent the token to an external server. That means they had enough privileges to change GHA workflows, and could just as easily change a workflow that used Trusted Publishing.<p>(It may be possible to configure branch protections or rules limiting who/when can trigger the Trusted Publishing workflow, but it's about as difficult as limiting the secret tokens to only be available to some maintainers.)</p>
]]></description><pubDate>Sat, 20 Sep 2025 23:14:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=45318467</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=45318467</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45318467</guid></item><item><title><![CDATA[New comment by Liskni_si in "PyPI Blog: Token Exfiltration Campaign via GitHub Actions Workflows"]]></title><description><![CDATA[
<p>If you can change a GitHub Actions workflow to exfiltrate a token, what prevents you from changing the workflow that uses Trusted Publishing to make changes to the package before publishing it? Perhaps by adding an innocent looking use of an external Action?</p>
]]></description><pubDate>Sat, 20 Sep 2025 15:27:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=45314168</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=45314168</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45314168</guid></item><item><title><![CDATA[New comment by Liskni_si in "Xmonad seeking help for Wayland port (2023)"]]></title><description><![CDATA[
<p>> no legacy Xorg code<p>This is not accurate. It runs quite a lot of legacy Xorg code actually, just without the input and video drivers.</p>
]]></description><pubDate>Sat, 20 Sep 2025 09:41:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=45311832</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=45311832</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45311832</guid></item><item><title><![CDATA[New comment by Liskni_si in "Xmonad seeking help for Wayland port (2023)"]]></title><description><![CDATA[
<p>GitHub Sponsors is where most of the money came from.</p>
]]></description><pubDate>Sat, 20 Sep 2025 09:37:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=45311813</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=45311813</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45311813</guid></item><item><title><![CDATA[New comment by Liskni_si in "Shai-Hulud malware attack: Tinycolor and over 40 NPM packages compromised"]]></title><description><![CDATA[
<p>That Cargo.lock will only be used for the library's own CI though (and also for development if you git clone it). It will not be used by downstream dependencies at all.</p>
]]></description><pubDate>Wed, 17 Sep 2025 00:02:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=45269912</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=45269912</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45269912</guid></item><item><title><![CDATA[New comment by Liskni_si in "Shai-Hulud malware attack: Tinycolor and over 40 NPM packages compromised"]]></title><description><![CDATA[
<p>> If npm respected every upstream lockfile, then it could never share a single version that satisfied all dependencies.<p>I'm asking in the context of installing a single CLI tool into ~/bin or something. There's no requirement to satisfy all dependencies, because the only dependency I care about is that one CLI tool. All I want is an equivalent of what `cargo install --locked` does — use the top-level lockfile of the CLI tool itself.</p>
]]></description><pubDate>Tue, 16 Sep 2025 16:57:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=45264831</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=45264831</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45264831</guid></item><item><title><![CDATA[New comment by Liskni_si in "Shai-Hulud malware attack: Tinycolor and over 40 NPM packages compromised"]]></title><description><![CDATA[
<p>In the Rust ecosystem, you only publish lock files for binary crates. So yeah then you get churn like <a href="https://github.com/cargo-bins/cargo-binstall/releases/tag/v1.14.2" rel="nofollow">https://github.com/cargo-bins/cargo-binstall/releases/tag/v1...</a> bumping transitive deps, but this churn/noise doesn't exist for library crates - because the lock file isn't published for them.</p>
]]></description><pubDate>Tue, 16 Sep 2025 16:50:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=45264714</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=45264714</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45264714</guid></item><item><title><![CDATA[New comment by Liskni_si in "Shai-Hulud malware attack: Tinycolor and over 40 NPM packages compromised"]]></title><description><![CDATA[
<p>Is there any way to install CLI tools from npmjs without being affected by a recent compromise?<p>Rust has `cargo install --locked`, which will use the pinned versions of dependencies from the lockfile, and these lockfiles are published for bin packages to crates.io.<p>But it seems npmjs doesn't allow publishing lockfiles, neither for libraries nor for CLI tools, so if you try to install let's say @google/gemini-cli, it will just pull the latest dependencies that fit the constraints in package.json. Is that true? Is it really this bad? If you try to install a CLI tool on a bad day when half of npmjs is compromised, you're out of luck?<p>How is that acceptable at all?</p>
]]></description><pubDate>Tue, 16 Sep 2025 16:36:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=45264540</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=45264540</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45264540</guid></item><item><title><![CDATA[New comment by Liskni_si in "Tell HN: Cloudflare is blocking Pale Moon and other non-mainstream browsers"]]></title><description><![CDATA[
<p>Yeah maybe if you somehow managed to email them without their email provider stopping that email from reaching them…</p>
]]></description><pubDate>Thu, 06 Feb 2025 23:26:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=42967534</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=42967534</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42967534</guid></item><item><title><![CDATA[New comment by Liskni_si in "Show HN: X11 tool to share a screen area in any video meeting"]]></title><description><![CDATA[
<p>Also looks like one can just do<p>xrandr --delmonitor screenshare<p>before this to seamlessly update the shared region — Chrome will immediately pick up the change and continue sharing the updated virtual monitor.</p>
]]></description><pubDate>Wed, 16 Oct 2024 01:08:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=41854695</link><dc:creator>Liskni_si</dc:creator><comments>https://news.ycombinator.com/item?id=41854695</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41854695</guid></item></channel></rss>