<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: mhw</title><link>https://news.ycombinator.com/user?id=mhw</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 14 Apr 2026 17:34:37 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=mhw" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by mhw in "Make tmux pretty and usable (2024)"]]></title><description><![CDATA[
<p>I’ve been using Ctrl-s for years. Nothing else uses it because it’s historically been used for terminal flow control, but that doesn’t really have much use in a graphical terminal with history and scrollbars and so I’ve never missed it. Has similar two-finger ergonomics to the Ctrl-a bind as well.<p>edit: oh, and I think Ctrl-space is the keystroke to get a nul character, and vi uses that character to insert the last entered piece of text in insert mode. It looks like Ctrl-@ does the same things, but tmux might not be able to tell the difference either.</p>
]]></description><pubDate>Mon, 13 Apr 2026 18:33:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=47756131</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=47756131</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47756131</guid></item><item><title><![CDATA[New comment by mhw in "Stacked Diffs with git rebase —onto"]]></title><description><![CDATA[
<p>Yeah, you need to rebase the tip of the feature branch stack. git will then update all the refs that point to ancestor commits that are moved. So in this case<p><pre><code>    $ git rebase --update-refs main feature-2</code></pre></p>
]]></description><pubDate>Fri, 05 Dec 2025 14:17:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=46161579</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=46161579</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46161579</guid></item><item><title><![CDATA[New comment by mhw in "RSyncUI – A SwiftUI based macOS GUI for rsync"]]></title><description><![CDATA[
<p>A related tool that I've found useful over the years is Unison [1]. Think of it as rsync where you can interactively adjust the reconciliation algorithm between the two sides of the sync connection. It stores a hash of the file contents from the previous run for each file, so it can work out whether each side has changed since the last run. It then presents you with a GUI (or TUI) to review and adjust the reconciliation.<p>For the periods of my career where I've lived the two computer life (desktop and laptop), I've used Unison to keep substantial parts of my home directory in sync between the two machines.<p>[1]: <a href="https://github.com/bcpierce00/unison">https://github.com/bcpierce00/unison</a></p>
]]></description><pubDate>Thu, 29 May 2025 12:15:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=44125249</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=44125249</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44125249</guid></item><item><title><![CDATA[New comment by mhw in "The length of file names in early Unix"]]></title><description><![CDATA[
<p>I think pax was more of a POSIX replacement for cpio and tar. While those three and ar all could be used to bundle files together into a single file, only ar had the special affinity with the linker as a way of bundling object files together into libraries. The others were more aimed at backing up directories to a tape drive, as the example on the pax man page shows.</p>
]]></description><pubDate>Wed, 28 May 2025 14:16:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=44116280</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=44116280</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44116280</guid></item><item><title><![CDATA[New comment by mhw in "Production tests: a guidebook for better systems and more sleep"]]></title><description><![CDATA[
<p>The fabulous blazer gem includes a feature for #2: <a href="https://github.com/ankane/blazer?tab=readme-ov-file#checks">https://github.com/ankane/blazer?tab=readme-ov-file#checks</a> - it’s limited to checks that can be expressed as SQL queries, but that can get you quite a way</p>
]]></description><pubDate>Tue, 20 May 2025 19:52:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=44045246</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=44045246</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44045246</guid></item><item><title><![CDATA[New comment by mhw in "Attacking My Landlord's Boiler"]]></title><description><![CDATA[
<p>Unlikely. This kind of wireless thermostat has two parts: the thermostat itself, and a separate receiver box that's directly connected to the boiler. There's usually a pairing process that you can go through where the two parts negotiate a shared value used in the protocol; this prevents one thermostat unintentionally controlling other boilers. You can see this described in the Installation Guide for the thermostat linked from the article (it's called 'binding' in the guide).</p>
]]></description><pubDate>Tue, 22 Apr 2025 13:08:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=43761655</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=43761655</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43761655</guid></item><item><title><![CDATA[Database Protocols Are Underwhelming – byroot's blog]]></title><description><![CDATA[
<p>Article URL: <a href="https://byroot.github.io/performance/2025/03/21/database-protocols.html">https://byroot.github.io/performance/2025/03/21/database-protocols.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43518860">https://news.ycombinator.com/item?id=43518860</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 29 Mar 2025 21:25:25 +0000</pubDate><link>https://byroot.github.io/performance/2025/03/21/database-protocols.html</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=43518860</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43518860</guid></item><item><title><![CDATA[New comment by mhw in "Rsync vulnerabilities"]]></title><description><![CDATA[
<p>My reading is that the first two CVEs are with rsync daemon, but the others are more general - I think "rsync server" is meaning the remote rsync process that is started when you use ssh to connect to the remote. Some of them suggest the rsync client (running on your machine) can be coerced to write to unexpected locations by a malicious rsync server specifically crafted to exploit these CVEs. One suggests a malicious rsync server might be able to reconstruct the contents of arbitrary files on the client using requests sent via the rsync protocol.<p>I guess the main takeaway is to be careful using rsync connections to machines that you don't trust.</p>
]]></description><pubDate>Wed, 15 Jan 2025 14:10:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=42710922</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=42710922</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42710922</guid></item><item><title><![CDATA[How to Think About Time]]></title><description><![CDATA[
<p>Article URL: <a href="https://errorprone.info/docs/time">https://errorprone.info/docs/time</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42363926">https://news.ycombinator.com/item?id=42363926</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 09 Dec 2024 07:59:11 +0000</pubDate><link>https://errorprone.info/docs/time</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=42363926</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42363926</guid></item><item><title><![CDATA[New comment by mhw in "Optimize Database Performance in Ruby on Rails and ActiveRecord"]]></title><description><![CDATA[
<p>It’s really handy to have a composable API for building SQL queries where different elements are contributed by different parts of the code. From example, having your authorisation code apply restrictions to queries through where clauses, joins, etc. to ensure a user only sees the records they are allowed to see.<p>I currently spend a large proportion of my time working in a Java code base that uses JDBC directly. There are many places where the complexity of the work to be done means code is being used to assemble the final SQL query based on conditionals and then the same conditional structure must be used to bind parameter values. Yes, in some places there are entire SQL statements as String literals, but that only really works for simple scenarios. There are also many bits of code that wrap up common query patterns, reimplementing some of what an ORM might bring.<p>I recently implemented soft deletion for one of the main entities in the system, and having to review every query for the table involved to see whether it needed the deleted_at field adding to the where clause took a significant amount of time. I think better architecture supported by a more structured query builder would have made this much easier. For me that’s the main benefit of an ORM.</p>
]]></description><pubDate>Sat, 09 Nov 2024 13:49:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=42094406</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=42094406</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42094406</guid></item><item><title><![CDATA[New comment by mhw in "Refactoring Python with Tree-sitter and Jedi"]]></title><description><![CDATA[
<p>I’ve been looking at codemod tools recently, just as a way to extend my editing toolbox. I came across <a href="https://ast-grep.github.io/" rel="nofollow">https://ast-grep.github.io/</a>, which looks like it might address part of this problem. My initial test case was to locate all calls to a method where a specific argument was ‘true’, and it handled that well - that’s the kind of thing an IDE seems to struggle with. I’m not yet sure whether it could handle renaming a variable though.<p>I guess what I’m looking for is something that<p>* can carry out the kind of refactorings usually reserved for an IDE<p>* has a concise language for representing the refactorings so new ones can be built quite easily<p>* can apply the same refactoring in multiple places, with some kind of search language (addressing the task of renaming a test parameter in multiple methods)<p>* ideally does this across multiple programming languages</p>
]]></description><pubDate>Sat, 28 Sep 2024 12:37:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=41679861</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=41679861</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41679861</guid></item><item><title><![CDATA[New comment by mhw in "Java String Templates Proposal Is "Withdrawn""]]></title><description><![CDATA[
<p>I tracked down more explanation in this message on the mailing list: <a href="https://mail.openjdk.org/pipermail/amber-spec-observers/2024-April/004358.html" rel="nofollow">https://mail.openjdk.org/pipermail/amber-spec-observers/2024...</a><p>It sounds like they are intending to rethink the design and that it may return in a different form in the future, but won't be in JDK 23.</p>
]]></description><pubDate>Mon, 01 Jul 2024 13:52:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=40845864</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=40845864</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40845864</guid></item><item><title><![CDATA[New comment by mhw in "Xv6, a simple Unix-like teaching operating system"]]></title><description><![CDATA[
<p>Ha, on first read of the title I thought this might be a new release of the venerable xv image viewer - <a href="http://www.trilon.com/xv/" rel="nofollow">http://www.trilon.com/xv/</a></p>
]]></description><pubDate>Sat, 08 Jun 2024 08:22:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=40616139</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=40616139</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40616139</guid></item><item><title><![CDATA[Global Sales Tax Compliance and Remittance]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.outseta.com/posts/global-sales-tax-compliance-and-remittance">https://www.outseta.com/posts/global-sales-tax-compliance-and-remittance</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=40468905">https://news.ycombinator.com/item?id=40468905</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 24 May 2024 18:12:59 +0000</pubDate><link>https://www.outseta.com/posts/global-sales-tax-compliance-and-remittance</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=40468905</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40468905</guid></item><item><title><![CDATA[New comment by mhw in "Why does the `reset` command include a delay? (2017)"]]></title><description><![CDATA[
<p>> sleep(1);       /* let terminal settle down */<p>> making millions of people waste 3 seconds<p>> That's a touch exaggerative don't you think?<p>Literally!</p>
]]></description><pubDate>Fri, 08 Mar 2024 07:17:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=39638648</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=39638648</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39638648</guid></item><item><title><![CDATA[New comment by mhw in "Dennis Ritchie Home Page"]]></title><description><![CDATA[
<p>Hmm; they are missing from the index page, but they do exist: <a href="http://cm.bell-labs.co/who/ken/" rel="nofollow noreferrer">http://cm.bell-labs.co/who/ken/</a> and <a href="http://cm.bell-labs.co/who/rob/" rel="nofollow noreferrer">http://cm.bell-labs.co/who/rob/</a></p>
]]></description><pubDate>Mon, 04 Sep 2023 12:55:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=37380038</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=37380038</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37380038</guid></item><item><title><![CDATA[New comment by mhw in "Ask HN: Why does Apple refuse to add window snapping to macOS?"]]></title><description><![CDATA[
<p>> window controls are on a left side of a window<p>Simpler explanation: Mac OS’s first release preceded Windows so they had to pick a side for themselves when first designing the system. See <a href="https://www.versionmuseum.com/history-of/classic-mac-os" rel="nofollow noreferrer">https://www.versionmuseum.com/history-of/classic-mac-os</a> - the square on the left side of the front-most window’s title bar is the close button.</p>
]]></description><pubDate>Sat, 17 Jun 2023 20:06:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=36374048</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=36374048</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36374048</guid></item><item><title><![CDATA[New comment by mhw in "No Start Menu for You"]]></title><description><![CDATA[
<p>> Tiling left / right etc? Doesn't exist<p>Sure it does - long press on the green maximise button and you get a little drop down. For me it includes "Enter full screen", "Tile Window to Left of Screen" and "Tile Window to Left of Screen". Tiling is like full screen but with two apps side-by-side rather than one.<p>If you want to maximise a window instead of going full screen (that is, make it as big as possible but not overlap the menu bar or dock), Option+Click on the green button or double click the title bar. macOS calls this "Zoom". Safari is atypical in that maximising it only changes the window's vertical height, but pretty much everything else maximises height and width.<p>All these options are on the 'Window' menu as well.</p>
]]></description><pubDate>Wed, 18 Jan 2023 14:19:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=34426841</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=34426841</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34426841</guid></item><item><title><![CDATA[New comment by mhw in "Sapling: A new source control system with Git-compatible client"]]></title><description><![CDATA[
<p>Or git commit --fixup=:/<pattern> to find the most recent commit with pattern in the message. Still going to give git-absorb a try though.</p>
]]></description><pubDate>Wed, 16 Nov 2022 13:47:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=33622789</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=33622789</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33622789</guid></item><item><title><![CDATA[Lean Branching – a Git branching model to keep clean history]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/fork-dev/TrackerWin/issues/1432">https://github.com/fork-dev/TrackerWin/issues/1432</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=30426089">https://news.ycombinator.com/item?id=30426089</a></p>
<p>Points: 2</p>
<p># Comments: 1</p>
]]></description><pubDate>Tue, 22 Feb 2022 10:15:44 +0000</pubDate><link>https://github.com/fork-dev/TrackerWin/issues/1432</link><dc:creator>mhw</dc:creator><comments>https://news.ycombinator.com/item?id=30426089</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30426089</guid></item></channel></rss>