<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: GrantMoyer</title><link>https://news.ycombinator.com/user?id=GrantMoyer</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 01 Jul 2026 06:58:36 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=GrantMoyer" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by GrantMoyer in "Dell admits consumers don't care about AI PCs"]]></title><description><![CDATA[
<p>The idea is that NPUs are more power efficient for convolutional neural network operations. I don't know whether they actually <i>are</i> more power efficent, but it'd be wrong to dismiss them just because they don't unlock new capabilties or perform well for very large models. For smaller ML applications like blurring backgrounds, object detection, or OCR, they could be beneficial for battery life.</p>
]]></description><pubDate>Thu, 08 Jan 2026 19:53:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=46545613</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=46545613</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46545613</guid></item><item><title><![CDATA[New comment by GrantMoyer in "When square pixels aren't square"]]></title><description><![CDATA[
<p>Even with modern digital codecs and streaming, there's usually chroma subsampling[1], so the color channels may have non-square "pixels" even if overall pixels are nominally square. I most often see 4:2:0 subsampling, which still has square pixels, but at half resolution in each dimension. However 4:2:2 is also fairly common, and it has half resolution in only one dimension, so the pixels are 2:1. You'd have trouble getting a video decoding library to mess this up though.<p>[1]: <a href="https://en.wikipedia.org/wiki/Chroma_subsampling" rel="nofollow">https://en.wikipedia.org/wiki/Chroma_subsampling</a></p>
]]></description><pubDate>Wed, 31 Dec 2025 18:38:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=46446930</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=46446930</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46446930</guid></item><item><title><![CDATA[New comment by GrantMoyer in "What is “literate programming”? (2024)"]]></title><description><![CDATA[
<p>> This metalanguage must have some kind of constructs to describe unknown things, or things that are deliberately simplified in favor of exposition.<p>Perhaps you're thinking of mathematics.<p>If you have to be able to represent arbitrary abstract logical constructs, I don't think you can formalized the whole language ahead of time. I think the best you can do is allow for ad-hoc formalization of notation while trying to keep any newly introduced notation reasonably consitent with previously introduced notation.</p>
]]></description><pubDate>Sun, 07 Dec 2025 19:26:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=46184309</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=46184309</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46184309</guid></item><item><title><![CDATA[New comment by GrantMoyer in "GitLab discovers widespread NPM supply chain attack"]]></title><description><![CDATA[
<p>Linux supports per-process namespaces too, and has tools like firejail to use them for sandboxing, but nonetheless sandboxing is not widely used.</p>
]]></description><pubDate>Mon, 01 Dec 2025 23:21:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=46114957</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=46114957</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46114957</guid></item><item><title><![CDATA[New comment by GrantMoyer in "I don't care how well your "AI" works"]]></title><description><![CDATA[
<p>> if digital painting were solved not by a machine learning model, but human-readable code, it would be an even more bleak and cruel joke, isn't it?<p>On the contrary, I'm certain such a program would be filled with fascinating techniques, and I have no dread for the idea that humans aren't special.</p>
]]></description><pubDate>Wed, 26 Nov 2025 17:14:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=46059783</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=46059783</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46059783</guid></item><item><title><![CDATA[New comment by GrantMoyer in "I don't care how well your "AI" works"]]></title><description><![CDATA[
<p>I largely agree with this, but at the same time, I empathize with the FA's author. I think it's because LLMs feel categorically different from other technological leaps I've been exited about.<p>The recent results in LLMs and diffusion models are undeniably, incredibly impressive, even if they're not to the point of being universally useful for real work. However they fill me with a feeling of supreme dissapointment, because each is just this big black box we shoved an unreasonable amount of data into and now the black box is the best image processing/natural language processing system we've ever made, and depending on how you look at it, they're either so unimaginably complex that we'll never understand how they really work, or they're so brain-dead simple that there's nothing to really understand at all. It's like some cruel joke the universe decided to play on people who like to think hard and understand the systems around them.</p>
]]></description><pubDate>Wed, 26 Nov 2025 16:12:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=46058911</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=46058911</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46058911</guid></item><item><title><![CDATA[New comment by GrantMoyer in "New OS aims to provide (some) compatibility with macOS"]]></title><description><![CDATA[
<p>Test successful?</p>
]]></description><pubDate>Thu, 20 Nov 2025 23:26:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=45999322</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=45999322</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45999322</guid></item><item><title><![CDATA[New comment by GrantMoyer in "Upcoming Rust language features for kernel development"]]></title><description><![CDATA[
<p>Thanks for organizing for me my thoughts on why even a restricted modern subset of C++ is complicated.</p>
]]></description><pubDate>Thu, 16 Oct 2025 16:13:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=45607227</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=45607227</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45607227</guid></item><item><title><![CDATA[New comment by GrantMoyer in "People regret buying Amazon smart displays after being bombarded with ads"]]></title><description><![CDATA[
<p>Ditto. It's also significantly lighter weight than competing readers (at least when I bought mine), has physical buttons, has color models, and has really good battery life possibly because it runs a custom Linux instead of Android.</p>
]]></description><pubDate>Sat, 11 Oct 2025 22:21:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=45553164</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=45553164</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45553164</guid></item><item><title><![CDATA[New comment by GrantMoyer in "Who needs Git when you have 1M context windows?"]]></title><description><![CDATA[
<p>Like the author, I've also found myself wanting to recover an accidentally deleted file. Luckily, some git operations, like `git add` and `git stash`, store files in the repo, even if they're not ultimately committed. Eventually, those files will be garbage collected, but they can stick around for some time.<p>Git doesn't expose tools to easily search for these files, but I was able to recover the file I deleted by using libgit2 to enumerate all the blobs in the repo, search them for a known string, and dump the contents of matching blobs.</p>
]]></description><pubDate>Tue, 07 Oct 2025 19:26:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=45507631</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=45507631</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45507631</guid></item><item><title><![CDATA[New comment by GrantMoyer in "Bad Apple but it's played inside Super Mario Bros"]]></title><description><![CDATA[
<p>I'm not the author, but these video-in-game projects typically work with a few phases:<p>1. Get the game into a specific state by performing specific actions, moving to specific positions, performing specific inputs, etc. so that a portion of the game state in RAM happens to be an executable program.<p>2. Jump to that executable code such as by corrupting the return address in the stack with a buffer overflow<p>3. (optional) The program from 1 may be a simple "bootstrap" program which lets the player directly write a new, larger program using controller inputs then jumps to the new program.<p>4. The program reads the video and audio from the stream of controller inputs, decodes them, and displays them. The encoding is usually an ad-hoc scheme designed to take advantage of the available hardware. The stream of replayed inputs is computed directly from the media files.</p>
]]></description><pubDate>Tue, 30 Sep 2025 16:27:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=45427574</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=45427574</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45427574</guid></item><item><title><![CDATA[New comment by GrantMoyer in "`std::flip`"]]></title><description><![CDATA[
<p>There's a somewhat easier way to implement 2-argument-function flip in C++ than the blog post provides:<p><pre><code>  #include <functional>
  constexpr auto flip(const auto& f) {
    return std::bind(f, std::placeholders::_2, std::placeholders::_1);
  }
</code></pre>
The best I could get the fully general version is still pretty obtuse though:<p><pre><code>  // std doesn't have a template version of placeholders::_1, _2, etc., so we need to
  // define our own. 
  template <int I> struct placeholder{};

  template<>
  template<int I>
  struct std::is_placeholder<placeholder<I>> : std::integral_constant<int, I> {};

  // flip must be an object so that the function type can be deduced without needing
  // to explicitly specify its parameters' types.
  template<typename F>
  struct flip {
    const F f;
    
    // operator() deduces the argument types when the flip object is called, but really
    // all we need to know is the number of arguments. 
    template<typename... Args>
    constexpr auto operator()(Args... args) {
      return bind_reversed(std::make_integer_sequence<int, sizeof...(Args)>{})(args...);
    }
    
    private:
    // a helper function is needed to deduce a sequence of integers so we can bind all
    // the placeholder values.
    template<int... Is>
    constexpr auto bind_reversed(std::integer_sequence<int, Is...>) {
      return std::bind(f, placeholder<sizeof...(Is) - Is>{}...);
    }
  };</code></pre></p>
]]></description><pubDate>Tue, 30 Sep 2025 03:47:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=45421704</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=45421704</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45421704</guid></item><item><title><![CDATA[New comment by GrantMoyer in "I ditched Docker for Podman"]]></title><description><![CDATA[
<p>Docker Engine without Docker Desktop is available through winget as "Docker CLI"[1].<p>[1]: <a href="https://github.com/microsoft/winget-pkgs/tree/master/manifests/d/Docker/DockerCLI" rel="nofollow">https://github.com/microsoft/winget-pkgs/tree/master/manifes...</a></p>
]]></description><pubDate>Fri, 05 Sep 2025 13:31:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=45138355</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=45138355</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45138355</guid></item><item><title><![CDATA[New comment by GrantMoyer in "Rv, a new kind of Ruby management tool"]]></title><description><![CDATA[
<p>Pyright catches an awful lot of dumb mistakes I make in Python.</p>
]]></description><pubDate>Wed, 27 Aug 2025 03:43:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=45035235</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=45035235</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45035235</guid></item><item><title><![CDATA[New comment by GrantMoyer in "Wildthing – A model trained on role-reversed ChatGPT conversations"]]></title><description><![CDATA[
<p>Is there any reason to explicitly train for role reversal? Can't you instead swap the input labels on any instruct tuned LLM? The model is trained on both sides of the chat log either way, right?</p>
]]></description><pubDate>Sun, 24 Aug 2025 13:52:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=45004260</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=45004260</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45004260</guid></item><item><title><![CDATA[New comment by GrantMoyer in "A deep dive into Rust and C memory interoperability"]]></title><description><![CDATA[
<p>Rust bindgen[1] will automatically generate native Rust stucts (and unions) from C headers where possible. Note that c_int, c_char, etc. are just aliases for the corresponding native Rust types.<p>However, not all C constructs have idomatic Rust equivalents. For example, bitfields don't exist in Rust, and unlike Rust enums, C enums can have any value of the underlying type. And for ABI reasons, it's very commom in C APIs to use a pointer to an opaque type paired with what are effectively accessor function and methods, so mapping them to accessors and methods on a "Handle" type in Rust often <i>is</i> the most idomatic Rust representation of the C interface.<p>[1]: <a href="https://github.com/rust-lang/rust-bindgen" rel="nofollow">https://github.com/rust-lang/rust-bindgen</a></p>
]]></description><pubDate>Mon, 04 Aug 2025 15:55:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=44787616</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=44787616</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44787616</guid></item><item><title><![CDATA[New comment by GrantMoyer in "Vet is a safety net for the risky curl | bash pattern"]]></title><description><![CDATA[
<p>Try Arch Linux. It hits all your points except maybe 5.<p>1. It symlinks redundant bin and lib directories to /usr/bin, and its packages don't install anything to /usr/local.<p>2. You can keep most config files in /etc or $XDG_CONFIG_HOME. Occasionally software doesn't follow the standards, but that's hardly the distro's fault.<p>3. Arch is bleeding edge<p>4. Arch repos are pretty big, plus thete's the AUR, plus packaging software yourself from source or binaries is practically trivial.<p>5. Security is not the highest priority over usability. You can configure SELinux and the like, but they're not on by default. See <a href="https://wiki.archlinux.org/title/Security" rel="nofollow">https://wiki.archlinux.org/title/Security</a>.<p>6. There are few defaults to adhear to on Arch. Users are expected to customize.</p>
]]></description><pubDate>Thu, 24 Jul 2025 14:55:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=44671462</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=44671462</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44671462</guid></item><item><title><![CDATA[New comment by GrantMoyer in "A media company demanded a license fee for an Open Graph image I used"]]></title><description><![CDATA[
<p>There's no implied license because the news site that told them to use the image — through the OpenGraph protocol — is (supposedly) not the rights holder.</p>
]]></description><pubDate>Wed, 23 Jul 2025 04:35:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=44655757</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=44655757</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44655757</guid></item><item><title><![CDATA[New comment by GrantMoyer in "Valve confirms credit card companies pressured it to delist certain adult games"]]></title><description><![CDATA[
<p>I don't think that can explain why they're only targeting certain sub-categories of porn, and it's also contradictory to the public statements by Valve:<p>> We were recently notified that certain games on Steam may violate the rules and standards set forth by our payment processors and their related card networks and banks<p>Individual games violating "rules and standards" doesn't really fit with prohibiting a category because of high rates of fraud.</p>
]]></description><pubDate>Sat, 19 Jul 2025 04:56:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=44612698</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=44612698</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44612698</guid></item><item><title><![CDATA[New comment by GrantMoyer in "Helix Editor 25.07"]]></title><description><![CDATA[
<p>I'd love for Helix to implement a "Kakoune mode". I develop on Windows at work, where Kakoune is not ideal, so Helix seems like it'd be a perfect fit, except I can't get over the keybindings. Its keybinding philosophy encourages verbosity instead of Kakoune's terseness, which bothers me more than it probably should, and as far as I can tell its keymap configuration isn't yet powerful enough to emulate Kakoune well.<p>Vim's inconsistent keybinds and behavior are what pushed me to Kakoune — which I find has more consistent and elegant bindings and behavior — in the first place, and Helix feels like a step backwards on that front.</p>
]]></description><pubDate>Tue, 15 Jul 2025 21:52:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=44576195</link><dc:creator>GrantMoyer</dc:creator><comments>https://news.ycombinator.com/item?id=44576195</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44576195</guid></item></channel></rss>