<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: shepmaster</title><link>https://news.ycombinator.com/user?id=shepmaster</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 01 Sep 2026 07:34:43 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=shepmaster" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by shepmaster in "Apple caught off guard by AI demand for Mac Mini and Mac Studio"]]></title><description><![CDATA[
<p>> What makes you think that?<p>Here's a leaked / rumor image of Apple servers themselves.<p><a href="https://www.macrumors.com/2026/08/26/leaked-images-of-apple-ai-servers/" rel="nofollow">https://www.macrumors.com/2026/08/26/leaked-images-of-apple-...</a></p>
]]></description><pubDate>Mon, 31 Aug 2026 13:36:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=49509644</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=49509644</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49509644</guid></item><item><title><![CDATA[New comment by shepmaster in "The Git history command deserves more attention"]]></title><description><![CDATA[
<p>You can thank ASCIIFlow for that ;)<p><a href="https://asciiflow.com/" rel="nofollow">https://asciiflow.com/</a></p>
]]></description><pubDate>Tue, 14 Jul 2026 03:43:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48902043</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=48902043</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48902043</guid></item><item><title><![CDATA[New comment by shepmaster in "The git history command"]]></title><description><![CDATA[
<p>> Haven't used --update-refs, but reading it, it should result in your third graph.<p>I don't think it does. I tried locally:<p><pre><code>  mkdir test; cd test; git init
  touch a; git add a; git commit -m 'a'
  touch b; git add b; git commit -m 'b'
  touch c; git add c; git commit -m 'c'
  git checkout -b branched-feature HEAD~
  touch d; git add d; git commit -m 'd'
  git checkout main
  echo 'change' > b; git add b; git commit -m 'fix b'
  git rebase -i --root --update-refs
</code></pre>
And ended up with this graph (`git log --graph --all`)<p><pre><code>  * commit (HEAD -> main)
  |
  |     c
  |
  * commit 
  |
  |     b
  |
  | * commit (branched-feature)
  | |
  | |     d
  | |
  | * commit
  |/  
  |       b
  |
  * commit 
  
        a
</code></pre>
Replacing the `git commit -m 'fix b'; git rebase -i --root --update-refs` with `git history fixup HEAD~` produces what I'd like:<p><pre><code>  * commit (branched-feature)
  |
  |     d
  |
  | * commit (HEAD -> main)
  |/
  |       c
  |
  * commit
  |
  |     b
  |
  * commit 
  
        a</code></pre></p>
]]></description><pubDate>Tue, 14 Jul 2026 02:30:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=48901586</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=48901586</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48901586</guid></item><item><title><![CDATA[New comment by shepmaster in "The Git history command deserves more attention"]]></title><description><![CDATA[
<p>I'm not sure that answers my question. That shows a linear set of branches (my-feature-v3 depends on my-feature-v2  depends on my-feature-v1  depends on main). I'm asking about the case where two or more branches fork from a common ancestor and you want to fix the common ancestor.</p>
]]></description><pubDate>Tue, 14 Jul 2026 02:20:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=48901515</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=48901515</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48901515</guid></item><item><title><![CDATA[New comment by shepmaster in "The Git history command deserves more attention"]]></title><description><![CDATA[
<p>Ah, good catch. That's more of a graphic issue and not what I was trying to express. Updated the OP.</p>
]]></description><pubDate>Tue, 14 Jul 2026 02:18:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=48901497</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=48901497</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48901497</guid></item><item><title><![CDATA[New comment by shepmaster in "The git history command"]]></title><description><![CDATA[
<p>> That last part goes further than git rebase --update-refs, which only moves refs sitting inside the range you’re actively rebasing. git history instead finds and rewrites every local branch descended from the commit (while also having an option to limit it to only the current branch).<p>I'm reading that to mean that when I use `git rebase --update-refs` in this situation, where I've currently checked out `D` and update `B` to `B'`:<p><pre><code>  A ──► B ──► C ──► D  
        │              
        └───► E        
</code></pre>
I'll end up with this state, where `E` remains untouched?<p><pre><code>  A ──► B' ─► C' ─► D'  
  │                   
  └───► B ──► E        
</code></pre>
(EDIT: Originally I had `E` point to `B'`, which doesn't make sense)<p>If I use `git history fixup`, it would also update `E` and end up with this?<p><pre><code>  A ──► B' ─► C' ─► D'  
        │              
        └───► E'        
</code></pre>
If that's the case, is there a way to get `git rebase` to have the same behavior? I've got decades of `git rebase` burned into my fingers at this point.</p>
]]></description><pubDate>Tue, 14 Jul 2026 02:09:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48901447</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=48901447</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48901447</guid></item><item><title><![CDATA[New comment by shepmaster in "The One Dollar Counterfeiter"]]></title><description><![CDATA[
<p>At a Pittsburgher, I assumed it was a misspelling of “nebby”.<p><a href="https://www.urbandictionary.com/define.php?term=Nebby" rel="nofollow">https://www.urbandictionary.com/define.php?term=Nebby</a></p>
]]></description><pubDate>Sun, 10 May 2026 14:41:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=48084387</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=48084387</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48084387</guid></item><item><title><![CDATA[Why Castrol Honda Superbike crashes on (most) modern systems]]></title><description><![CDATA[
<p>Article URL: <a href="https://seri.tools/blog/castrol-honda-superbike/">https://seri.tools/blog/castrol-honda-superbike/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45948311">https://news.ycombinator.com/item?id=45948311</a></p>
<p>Points: 176</p>
<p># Comments: 35</p>
]]></description><pubDate>Sun, 16 Nov 2025 20:54:14 +0000</pubDate><link>https://seri.tools/blog/castrol-honda-superbike/</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=45948311</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45948311</guid></item><item><title><![CDATA[New comment by shepmaster in "Futurelock: A subtle risk in async Rust"]]></title><description><![CDATA[
<p>> But it's not natural to do so.<p>I tend to write most of my async Rust following the actor model and I find it natural. Alice Rhyl, a prominent Tokio contributor, has written about the specific patterns:<p><a href="https://ryhl.io/blog/actors-with-tokio/" rel="nofollow">https://ryhl.io/blog/actors-with-tokio/</a></p>
]]></description><pubDate>Fri, 31 Oct 2025 21:05:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=45776683</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=45776683</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45776683</guid></item><item><title><![CDATA[New comment by shepmaster in "Crates.io phishing attempt"]]></title><description><![CDATA[
<p>An official post about this is at<p><a href="https://blog.rust-lang.org/2025/09/12/crates-io-phishing-campaign/" rel="nofollow">https://blog.rust-lang.org/2025/09/12/crates-io-phishing-cam...</a></p>
]]></description><pubDate>Fri, 12 Sep 2025 15:07:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=45222939</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=45222939</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45222939</guid></item><item><title><![CDATA[New comment by shepmaster in "Error handling in Rust"]]></title><description><![CDATA[
<p>You are quite welcome; thanks for the kind words!</p>
]]></description><pubDate>Mon, 30 Jun 2025 18:13:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=44426251</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=44426251</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44426251</guid></item><item><title><![CDATA[New comment by shepmaster in "Error handling in Rust"]]></title><description><![CDATA[
<p>You certainly can use thiserror to accomplish the same goals! However, your example does a little subtle slight-of-hand that you probably didn't mean to and leaves off the enum name (or the `use` statement):<p><pre><code>    low_level_result.context(ErrorWithContextSnafu { context })?;
    low_level_result.map_err(|err| CustomError::ErrorWithContext { err, context })?;
</code></pre>
Other small details:<p>- You don't need to move the inner error yourself.<p>- You don't need to use a closure, which saves a few characters. This is even true in cases where you have a reference and want to store the owned value in the error:<p><pre><code>    #[derive(Debug, Snafu)]
    struct DemoError { source: std::io::Error, filename: PathBuf }

    let filename: &Path = todo!();
    result.context(OpenFileSnafu { filename })?; // `context` will change `&Path` to `PathBuf`
</code></pre>
- You can choose to capture certain values implicitly, such as a source file location, a backtrace, or your own custom data (the current time, a global-ish request ID, etc.)<p>----<p>As an aside:<p><pre><code>    #[error("failed to open a: {0}")]
</code></pre>
It is now discouraged to include the text of the inner error in the `Display` of the wrapping error. Including it leads to duplicated data when printing out chains of errors in a nicer / structured manner. SNAFU has a few types that work to undo this duplication, but it's better to avoid it in the first place.</p>
]]></description><pubDate>Mon, 30 Jun 2025 18:12:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=44426247</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=44426247</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44426247</guid></item><item><title><![CDATA[New comment by shepmaster in "Error handling in Rust"]]></title><description><![CDATA[
<p>In addition to the sibling comment mentioning thiserror, I also submit my crate SNAFU (linked in my ancestor comment). Reducing some of the boilerplate is a big reason I enjoy using it.</p>
]]></description><pubDate>Mon, 30 Jun 2025 18:03:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=44426166</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=44426166</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44426166</guid></item><item><title><![CDATA[New comment by shepmaster in "Error handling in Rust"]]></title><description><![CDATA[
<p>> I create one error type per function/action<p>I do too! I've been debating whether I should update SNAFU's philosophy page [1] to mention this explicitly, and I think your comment is the one that put me over the edge for "yes" (along with a few child comments). Right now, it simply says "error types that are scoped to that module", but I no longer think that's strong enough.<p>[1]: <a href="https://docs.rs/snafu/latest/snafu/guide/philosophy/index.html" rel="nofollow">https://docs.rs/snafu/latest/snafu/guide/philosophy/index.ht...</a></p>
]]></description><pubDate>Mon, 30 Jun 2025 01:57:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=44418451</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=44418451</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44418451</guid></item><item><title><![CDATA[New comment by shepmaster in "Error handling in Rust"]]></title><description><![CDATA[
<p>Thanks for using SNAFU! Any feedback you'd like to share?</p>
]]></description><pubDate>Mon, 30 Jun 2025 01:55:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=44418435</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=44418435</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44418435</guid></item><item><title><![CDATA[Parking_lot: Ffffffffffffffff]]></title><description><![CDATA[
<p>Article URL: <a href="https://fly.io/blog/parking-lot-ffffffffffffffff/">https://fly.io/blog/parking-lot-ffffffffffffffff/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44120732">https://news.ycombinator.com/item?id=44120732</a></p>
<p>Points: 7</p>
<p># Comments: 3</p>
]]></description><pubDate>Wed, 28 May 2025 21:15:14 +0000</pubDate><link>https://fly.io/blog/parking-lot-ffffffffffffffff/</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=44120732</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44120732</guid></item><item><title><![CDATA[New comment by shepmaster in "Compiler Explorer and the promise of URLs that last forever"]]></title><description><![CDATA[
<p>As we all know, Cool URIs don't change [1]. I greatly appreciate the care taken to keep these Compiler Explorer links working as long as possible.<p>The Rust playground uses GitHub Gists as the primary storage location for shared data. I'm dreading the day that I need to migrate everything away from there to something self-maintained.<p>[1]: <a href="https://www.w3.org/Provider/Style/URI" rel="nofollow">https://www.w3.org/Provider/Style/URI</a></p>
]]></description><pubDate>Wed, 28 May 2025 16:56:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=44118070</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=44118070</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44118070</guid></item><item><title><![CDATA[New comment by shepmaster in "Show HN: Stack Error – ergonomic error handling for Rust"]]></title><description><![CDATA[
<p>I hope to read through your crate and examples later, but if you have a chance, I’d be curious to hear your take on how Stack Error differs from my library, SNAFU [1]!<p>[1]: <a href="https://docs.rs/snafu/latest/snafu/index.html" rel="nofollow">https://docs.rs/snafu/latest/snafu/index.html</a></p>
]]></description><pubDate>Sun, 18 May 2025 21:24:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=44024410</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=44024410</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44024410</guid></item><item><title><![CDATA[New comment by shepmaster in "A Rust Documentation Ecosystem Review"]]></title><description><![CDATA[
<p>SNAFU author here, thanks for including my crate! I’ll try to give your review a thorough read through later and incorporate feedback that makes sense.<p>I do have <a href="https://diataxis.fr/" rel="nofollow">https://diataxis.fr/</a> and related stuff open in another tab and keep meaning to figure out how to best apply it for SNAFU.<p>Out of curiosity, do you recall if you also read the top-level docs[1]? That’s intended to be the main introduction, I actually don’t expect most people to read the user’s guide, unfortunately.<p>[1]: <a href="https://docs.rs/snafu/latest/snafu/index.html" rel="nofollow">https://docs.rs/snafu/latest/snafu/index.html</a></p>
]]></description><pubDate>Sun, 11 May 2025 14:10:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=43953945</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=43953945</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43953945</guid></item><item><title><![CDATA[New comment by shepmaster in "Rust’s dependencies are starting to worry me"]]></title><description><![CDATA[
<p>I agree. Unfortunately, I think that a lot of the people who ask for a bigger standard library really just want (a) someone else to do the work (b) someone they can trust.<p>The people working on Rust are a finite (probably overextended!) set of people and you can't just add more work to their plate. "Just" making the standard library bigger is probably a non-starter.<p>I think it'd be great if some group of people took up the very hard work to curate a set of crates that everyone would use and provide a nice façade to them, completely outside of the Rust team umbrella. Then people can start using this Katamari crate to prove out the usefulness of it.<p>However, many people wouldn't use it. I wouldn't because I simply don't care and am happy adding my dependencies one-by-one with minimal feature sets. Others wouldn't because it doesn't have the mystical blessing/seal-of-approval of the Rust team.</p>
]]></description><pubDate>Fri, 09 May 2025 14:05:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=43936915</link><dc:creator>shepmaster</dc:creator><comments>https://news.ycombinator.com/item?id=43936915</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43936915</guid></item></channel></rss>