<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>daveconway.net</title>
    <link>https://daveconway.net</link>
    <description>Blog posts from Dave Conway, the real name of composer-pianist Rowan McTavish.</description>
    <language>en-us</language>
    <docs>https://www.rssboard.org/rss-specification</docs>
    <pubDate>Sun, 29 Mar 2026 14:28:40 GMT</pubDate>
    <lastBuildDate>Thu, 08 Oct 2026 13:40:25 GMT</lastBuildDate>
    <item>
      <title>This Bluesky skeet encompasses a lot of what's wrong with the modern internet</title>
      <link>https://daveconway.net/blog/28/this-bluesky-skeet-encompasses-a-lot-of-whats-wrong-with-the-modern-internet</link>
      <description>I do a bit of venting about how everyone on the internet is kind of a jerk these days, through the lens of a particularly egregious Bluesky skeet.</description>
      <category>On the Internet</category>
      <pubDate>Thu, 08 Oct 2026 13:40:25 GMT</pubDate>
      <guid>4822d8a0-b5a0-4f57-90ca-051e752188e6</guid>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>One of my biggest problems with the modern internet, aside from the fact that it's been condensed to a tiny handful of unstoppable data-collecting and advertisement-spewing juggernauts, is that everyone on it is...kind of a jerk?</p><p>You don't have to look hard to find this behavior, and it's a big part of why I've pulled away from most online discussion spaces. Go to reddit, for example, and poke around below the sea of now-hackneyed, deeply unfunny,&nbsp;top-level joke comments, and it shouldn't take you very long to find an asshole.</p><p>For example, I just opened reddit in an incognito tab, and this is the very first post:&nbsp;<a href="https://www.reddit.com/r/whatisit/comments/1x0d0xc/its_like_a_hammock_between_two_benches_but/">https://www.reddit.com/r/whatisit/comments/1x0d0xc/its_like_a_hammock_between_two_benches_but/</a></p><p>And this is one of the replies to the very first comment:</p><blockquote>The fuck do you mean you don’t know if it’s the answer.<br><br>     
      If that quote is from a product listing, it’s the answer. If it’s not, what ambiguous ass web page did you find with confident but untrustworthy descriptions of urban park furniture?<br><br>     
      And don’t fucking say AI.<br></blockquote><p>They sound pleasant.</p><p>I know that people being jerks on the internet is hardly a new phenomenon, but Back In My Day™, it used to be limited largely to trolls. "Don't feed the trolls" was a ubiquitous mantra, and people who routinely exhibited such behavior would silently disappear, eventually, ignored by the communities they sought to provoke into worthless "discussion."</p><p>The difference now is that a shocking percentage of people online present this behavior by default in all scenarios, and instead of simply being ignored, are constantly engaged with, to the point of many discussions devolving into people feverishly arguing about nonsense that is, at best, tangentially related to the primary topic at hand.</p><p>For a good taste of this, go spend some time -- some real time, don't just flip through two threads -- on ResetEra,&nbsp;a community with good leftist politics populated disproportionately by insufferable pseudointellectuals&nbsp;who spend all day in vitriolic back-and-forths about everything from video game Metacritic scores&nbsp;to sandwiches&nbsp;to children's movies. It becomes an exhausting forum to read, over time, which is probably why I don't go there anymore.</p><p>All of this is the backdrop to a single "skeet" (yes, this is actually what Bluesky users call "tweets," a portmanteau of "sky" and "tweet") that I came across when reading something linked to in a Discord.</p><p>It feels worth noting that Bluesky is among my least favorite places on the internet. Whereas X proudly wears its Nazism on its sleeve, and thus can be summarily ignored as the trash that it is, Bluesky, as with ResetEra, has good politics, but spends a shocking amount of time engaged in tiresome, performative moral purity testing, lending validity to Michael Kinsley's oft-paraphrased quote, "Conservatives are always looking for converts, whereas liberals are always looking for heretics" (this being "liberals" in the American politics sense; i.e., non-conservatives). So it wasn't a surprise that I came across a skeet like this on Bluesky, the perfect encapsulation of much of what is wrong with the modern internet,&nbsp;a concise&nbsp;skeet whose totally valid request is couched in the douchebaggiest of language:</p><p><img src="https://daveconway.net/uploads/2026/10/a1d9b99c-4ebb-43f4-b19e-f96988c1c4de.png" style="display: block; margin-left: auto; margin-right: auto;" title="A Bluesky skeet with the poster's name censored. It reads, &quot;I can't read any of this. Why is there no Alt Text? Please be considerate and always use #AltText especially for text in images.&quot;" alt="A Bluesky skeet with the poster's name censored. It reads, &quot;I can't read any of this. Why is there no Alt Text? Please be considerate and always use #AltText especially for text in images.&quot;"></p><p>I've censored the photo and name because the skeeter's identity is irrelevant. The only context needed here is that this skeet is in response to one that included screenshots of a lengthy reddit comment. For what it's worth: a.) the screenshots <em>are</em> difficult to read, b.) people&nbsp;<em>should</em> use alt&nbsp;text or provide a link to the source material, and c.) I really don't think this person was&nbsp;<em>trying</em> to come off as a douchebag. I think it's simply become so normalized that everyone talks this way now that, well, everyone talks this way now.</p><p>The reason this skeet immediately caught my eye and stuck with me is that it manages to hit everything about what makes internet discourse shitty in so few words:</p><ul><li>"I can't read any of this." -- whining.</li><li>"Why is there no Alt Text?" -- indignant.</li><li>"Please be considerate" -- commanding, accusing.</li><li>"always use #AltText" -- chiding, performative grandstanding.</li><li>"especially for text in images" -- doubling down.</li></ul><p>It's beautiful, in a way. There are <em>so</em> many boring, neutral&nbsp;ways this person could have made this request; however,&nbsp;they chose not just one, but&nbsp;<em>five</em> distinct points of aggression, because this is just how people are now. Everyone's always on both defense and offense, because people spend all day, every day, immersed in the outrage machine.</p><p>I would like to be less tired on the internet. A modicum of consideration before posting would go a long way there, I think. If you ever get to the point in your life where you're like "I'm a mid-30s guy with no kids and I'm writing a furious dissertation about why the&nbsp;<em>Toy Story 5</em> trailer actually looks bad, you fucking idiot," maybe just pump the breaks a bit on your onlineness,&nbsp;lest you end up sounding like the above skeet every time you want to say something innocuous.</p>]]></content:encoded>
    </item>
    <item>
      <title>Devlog #2: Systems, systems, systems</title>
      <link>https://daveconway.net/blog/24/devlog-2-systems-systems-systems</link>
      <description>An update on all the various data-driven systems I've been working on for my RPG.</description>
      <category>Devlog</category>
      <pubDate>Tue, 06 Oct 2026 16:33:02 GMT</pubDate>
      <guid>335fedf4-6075-47c6-93d8-53011e6fc0ea</guid>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>I'm still going! Motivation has waned very slightly while Kate and I find ourselves obsessively playing&nbsp;<em>Blue Prince</em> in the evenings...and maybe a bit too much on the weekends...but a project like a whole-ass video game is a marathon, not a sprint, so I'm not too worried.</p><p>I ended up switching from GDScript to C# shortly after my previous devlog. The way GDScript is integrated directly into the Godot workflow is cool, but the language itself simply felt clumsy to work with. The tradeoff cost of having to wait a few seconds for the .NET project to build before&nbsp;I can test changes has been negligible at worst, so I haven't looked back.</p><p>Most of the work I've done so far comprises various data-driven systems:</p><ul><li>Scene management and transition (loading and swapping scenes, moving between different rooms, etc.)</li><li>Robust, configurable&nbsp;dialog,&nbsp;conversation, and cutscene systems</li><li>Very decoupled movement,&nbsp;animation, and camera systems</li><li>A natural-feeling "follow the leader" algorithm for non-controlled party members</li><li>Game-state management</li><li>Interactivity (opening chests, starting conversations, etc.)</li><li>Localization support from minute one</li></ul><p>The plan is to be able to get to a point (relatively) early on where much of the work of making the game becomes simply...data generation. There will always be more code to write, of course, but after a certain point, it should be minimal.</p><p>I'd upload a video of some of this stuff in action with my sweet <em>Chrono Trigger</em> placeholder assets, but I am currently refactoring my solution to move a lot of data models into a shared library with the intention of building a YAML-to-Godot-resource tool that slots into my build pipeline, so I'm not in a runnable state.</p><p>Although Godot's built-in inspector is pretty sweet, trying to use it to configure anything other than very simple objects quickly becomes a nightmare of nesting:</p><p><img src="/uploads/2026/10/01d8039a-9c12-4e86-b704-38286253cac5.png" style="display: block; margin-left: auto; margin-right: auto;"></p><p>This is disgusting. The overwhelming majority of the time, I will not need to configure most of these options. I don't need to or want to set speaker name overrides or non-default positioning/advance configurations for every chat bubble. Almost every chat line will be a static chat line. And so on.</p><p>So the plan is to be able to script things like cutscenes and conversations in very lean YAML files that, during the build process, automatically provide sensible defaults for all that stuff unless explicitly provided, so that I can just write the YAML equivalent of "Bill says 'Hi'" and be done with it.</p><p>Once that converter's done, I have three more fundamental systems to work on: persistence, UI, and combat. I'm saving combat for last, because I expect it to be far and away the meatiest system in the game. But I'll get there eventually! Until next time.</p>]]></content:encoded>
    </item>
    <item>
      <title>Devlog #1: Diving into Godot</title>
      <link>https://daveconway.net/blog/23/devlog-1-diving-into-godot</link>
      <description>I discuss my initial impressions of Godot and its GDScript language.</description>
      <category>Devlog</category>
      <pubDate>Wed, 15 Jul 2026 15:04:04 GMT</pubDate>
      <guid>e2bdf710-4775-430c-94bb-7dfb5ce8fdbc</guid>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>I want to make a video game. I've kind of always wanted to make a video game, and I've always had ideas for video games to make, but I've never felt so strongly about it that I've actually put more than a couple days' worth of dicking around in Unity&nbsp;into it.</p><p>But something about watching SGDQ this past week really lit a fire in me -- watching a community get such enjoyment out of so many charming little indie games&nbsp;that just started as hobbyist projects warmed my heart and made me feel the pull to create, in a way I haven't felt much&nbsp;with piano music recently (though that's always come and gone in phases).</p><p>So I downloaded <a href="https://godotengine.org/">Godot</a> to start playing around with it,&nbsp;and very quickly got to the point of starting to work on a core system for a&nbsp;<em>Chrono Trigger</em>-style RPG I did some design work on years ago: namely, a fully configurable cutscene manager&nbsp;that handles everything from playing sub-scenes with self-contained timelines to manipulating entities in the current scene.</p><p>It's great. Godot's UI is very easy to navigate, its structuring of everything as a node tree is brilliant and easy to grasp, and its documentation is really solid. I'm excited to keep learning more.</p><p>That said, it's slow work, because the very beginning of trying something new is always the hardest part. Godot can do a million things and I need to figure out how to find the relative handful of them I need. But I've had enough jobs working on large-scale software systems at this point that I know the&nbsp;firehose flow will eventually peter down to a garden sprinkler trickle.</p><p>One thing I will say is that choosing Godot's own, Python-esque GDScript instead of C# has been, as a long-time professional C# developer, somewhat annoying. I like strongly typed languages, so the first thing I did with GDScript was tell it to treat untyped stuff as errors, and that immediately led to annoyances such as <em>needing</em> to specify the types of lambda params and return values:</p><pre># GDScript<br>var&nbsp;is_invalid := pages.is_empty() or pages.any(func(p: Page) -&gt; bool: return p.lines.is_empty())<br><br>//&nbsp;C#<br>var isInvalid = !pages.Any() || pages.Any(p =&gt; !p.Lines.Any());</pre><p>C# is so much more elegant in situations like these. But! That said, Godot games seem to overwhelmingly adopt GDScript, so I'll keep going with it for a time. I'm sure it'll grow on me.</p><p>These devlogs are strictly for me, to keep a record of my own progress and my own willingness to continue progressing. So sometimes I may not have anything to show, and that's okay. In the words of, I believe, multiple characters in that episode:</p><p><img src="https://media.tenor.com/mvh5B7zTqr4AAAAM/not-for-you-jen.gif" alt="A gif from the TV show &quot;The IT Crowd&quot; showing the character Roy saying, &quot;It's not for you, Jen.&quot;" width="300" style="display: block; margin-left: auto; margin-right: auto;"></p>]]></content:encoded>
    </item>
    <item>
      <title>Guild Wars 3 was announced</title>
      <link>https://daveconway.net/blog/21/guild-wars-3-was-announced</link>
      <description>Guild Wars 3 was announced!</description>
      <category>Video Games</category>
      <pubDate>Fri, 19 Jun 2026 00:28:37 GMT</pubDate>
      <guid>a2cb56c0-6547-4a96-9d93-7a764bd6c9f8</guid>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>A couple weeks ago (June 05, 2026) at the Summer Game Fest, developer&nbsp;ArenaNet officially announced the third installment in their&nbsp;<em>Guild Wars</em> series,&nbsp;<em>Guild Wars 3</em>.</p><p>I dump a lot fewer hours into video games than I used to when I was younger, having found a much healthier balance of activities in my life, but I can't deny that I was really excited to hear this; in fact, it may be the first time in many years that I've actually been excited by the announcement of a new video game.</p><iframe width="400px" height="345px" src="https://www.youtube.com/embed/ITPzxITngqA" frameborder="0" allowfullscreen="" style="display: block; margin-left: auto; margin-right: auto;"></iframe><p>I mean, how gorgeous is that? Very gorgeous, of course. This teaser commits but one sin, and that's that, after the narrator speaks her final word, "Magic," the erhu restates its opening motif, heard at 0:28. Big mistake. If it had stated the&nbsp;motif&nbsp;from 0:00-0:04 here instead (in the teaser track's&nbsp;E minor, of course), I do believe people would've lost their proverbial shit:</p><iframe width="400px" height="345px" src="https://www.youtube.com/embed/kMUdPF260Uk" frameborder="0" allowfullscreen="" style="display: block; margin-left: auto; margin-right: auto;"></iframe><p>Alas, ArenaNet did not consult me before releasing the&nbsp;<em>Guild Wars 3</em> trailer.</p><p>Over the last two weeks, we've received a trickle of information about&nbsp;<em>Guild Wars 3</em>: it's set 1,200 years before the events of&nbsp;<em>Guild Wars 1</em>, the team at ArenaNet is dedicated to developing it alongside both of its predecessors, and it will attempt to fill a niche that neither of its predecessors does (that is, it will be more focused on medium-sized groups playing together). This all sounds great to me.&nbsp;<em>GW1&nbsp;</em>and&nbsp;<em>GW2</em> are two of the greatest games ever created, and I am not particularly worried about&nbsp;<em>GW3</em> joining their ranks.</p><p>But some of the internet disagrees. Almost immediately after the teaser and each bit of further news, Professional Gamers™ rushed to the scene, the scene being reddit and YouTube, those unassailable bastions of academic discussion, to complain about, well, everything. Because of course they did.</p><p>I won't list their grievances, because they're stupid grievances,&nbsp;written by people&nbsp;desperately determined to be miserable&nbsp;about everything, and no one cares about them.</p><p>The overwhelming response I've seen outside of the usual shitholes has been one of sheer excitement, and that's where I'll be dedicating&nbsp;my time. One of my favorite podcasts to listen to while jogging is what may be the only noteworthy&nbsp;<em>Guild Wars 2</em> podcast: The Lightbringers (<a href="https://www.youtube.com/playlist?list=PLpd_AEgMn5JErkj7M8wy7ncVj3fW9TfYj">https://www.youtube.com/playlist?list=PLpd_AEgMn5JErkj7M8wy7ncVj3fW9TfYj</a>). They had a three-hour (!) discussion&nbsp;about the announcement, and it was just really great to listen to a bunch of people be really excited about one of their favorite game series.</p><p>Fall 2027 can't come quickly enough.</p>]]></content:encoded>
    </item>
    <item>
      <title>Awesome shit on the Internet #3: Getting "left behind"</title>
      <link>https://daveconway.net/blog/17/awesome-shit-on-the-internet-3</link>
      <description>A...whatever the Mastodon equivalent of a "tweet" is...about AI "leaving people behind."</description>
      <category>On the Internet</category>
      <pubDate>Fri, 01 May 2026 12:56:30 GMT</pubDate>
      <guid>901203ff-549e-4ae1-a28d-aaf21878395f</guid>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Presented without comment, because it needs none:</p>
<blockquote class="mastodon-embed" data-embed-url="https://cosocial.ca/@mhoye/116495322370530009/embed" style="background: #FCF8FF; border-radius: 8px; border: 1px solid #C9C4DA; margin: 0 auto; max-width: 540px; min-width: 270px; overflow: hidden; padding: 0;"> <a href="https://cosocial.ca/@mhoye/116495322370530009" target="_blank" style="align-items: center; color: #1C1A25; display: flex; flex-direction: column; font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', Roboto, sans-serif; font-size: 14px; justify-content: center; letter-spacing: 0.25px; line-height: 20px; padding: 24px; text-decoration: none;"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 79 75"><path d="M63 45.3v-20c0-4.1-1-7.3-3.2-9.7-2.1-2.4-5-3.7-8.5-3.7-4.1 0-7.2 1.6-9.3 4.7l-2 3.3-2-3.3c-2-3.1-5.1-4.7-9.2-4.7-3.5 0-6.4 1.3-8.6 3.7-2.1 2.4-3.1 5.6-3.1 9.7v20h8V25.9c0-4.1 1.7-6.2 5.2-6.2 3.8 0 5.8 2.5 5.8 7.4V37.7H44V27.1c0-4.9 1.9-7.4 5.8-7.4 3.5 0 5.2 2.1 5.2 6.2V45.3h8ZM74.7 16.6c.6 6 .1 15.7.1 17.3 0 .5-.1 4.8-.1 5.3-.7 11.5-8 16-15.6 17.5-.1 0-.2 0-.3 0-4.9 1-10 1.2-14.9 1.4-1.2 0-2.4 0-3.6 0-4.8 0-9.7-.6-14.4-1.7-.1 0-.1 0-.1 0s-.1 0-.1 0 0 .1 0 .1 0 0 0 0c.1 1.6.4 3.1 1 4.5.6 1.7 2.9 5.7 11.4 5.7 5 0 9.9-.6 14.8-1.7 0 0 0 0 0 0 .1 0 .1 0 .1 0 0 .1 0 .1 0 .1.1 0 .1 0 .1.1v5.6s0 .1-.1.1c0 0 0 0 0 .1-1.6 1.1-3.7 1.7-5.6 2.3-.8.3-1.6.5-2.4.7-7.5 1.7-15.4 1.3-22.7-1.2-6.8-2.4-13.8-8.2-15.5-15.2-.9-3.8-1.6-7.6-1.9-11.5-.6-5.8-.6-11.7-.8-17.5C3.9 24.5 4 20 4.9 16 6.7 7.9 14.1 2.2 22.3 1c1.4-.2 4.1-1 16.5-1h.1C51.4 0 56.7.8 58.1 1c8.4 1.2 15.5 7.5 16.6 15.6Z" fill="currentColor"></path></svg> <div style="color: #787588; margin-top: 16px;">Post by @mhoye@cosocial.ca</div> <div style="font-weight: 500;">View on Mastodon</div> </a> </blockquote> <script data-allowed-prefixes="https://cosocial.ca/" async="" src="https://cosocial.ca/embed.js"></script>
<p>Direct link: <a href="https://cosocial.ca/@mhoye/116495322370530009">https://cosocial.ca/@mhoye/116495322370530009</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Silly stuff #2: Why are you here?</title>
      <link>https://daveconway.net/blog/14/silly-stuff-2</link>
      <description>A screenshot of a line from Lightning Returns that happened to capture my exact mood, just 13 years early.</description>
      <category>Silly, Video Games</category>
      <pubDate>Thu, 23 Apr 2026 13:53:34 GMT</pubDate>
      <guid>4c958fc2-81fa-46a9-b23d-09da4f55d058</guid>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Playing&nbsp;<em>Lightning Returns</em> in my monthly Archipelago game and finally made sure to grab a screenshot of this line:</p><p><a href="/uploads/2026/04/why_are_you_here.jpg"><img src="https://daveconway.net/uploads/2026/04/why_are_you_here.jpg" title="A screenshot from 2013 video game Lightning Returns: Final Fantasy XIII-3, in which Lightning, staring down at something off-camera, asks &quot;What is this -- an AI? Why are you here?&quot;" alt="A screenshot from 2013 video game Lightning Returns: Final Fantasy XIII-3, in which Lightning, staring down at something off-camera, asks &quot;What is this -- an AI? Why are you here?&quot;" style="width: 800px; display: block; margin-left: auto; margin-right: auto;"></a></p><p>Very much "me_irl" territory these days. Who knew it'd be so relevant 13 years later?</p>]]></content:encoded>
    </item>
    <item>
      <title>Samsung Internet is the best Android browser: And I ain't ashamed to admit it</title>
      <link>https://daveconway.net/blog/13/samsung-internet-is-the-best-android-browser</link>
      <description>I shamelessly shill an unlikely mobile browser.</description>
      <category>Silly</category>
      <pubDate>Sun, 19 Apr 2026 16:21:06 GMT</pubDate>
      <guid>37b24784-bd30-4922-bf8b-6b45f057c305</guid>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Update: never fucking mind, the entire contents of this article are now obsolete, because a new update has removed the ability to have half of these buttons in my bar for no immediately apparent reason, and made "new tab" require extra taps and a sub-menu. Quit. Fucking. Making. Software. Shittier. For. No. Reason.</p><p><s>Samsung Internet is the best Android browser. There. I said it. It's the best&nbsp;Android browser because of this screenshot right here:</s></p><p><img src="https://daveconway.net/uploads/2026/04/Screenshot_20260419_101148_Samsung%20Internet.jpg" style="display: block; margin-left: auto; margin-right: auto;"></p><p><s>A fully customizable toolbar, right there under the address bar. Add a fuckin' button bar, Firefox Android, what the hell? Also add a button that lets me swap instantly between light/dark mode.</s></p><p>So anyway, I'm back on Firefox.</p>]]></content:encoded>
    </item>
    <item>
      <title>I made some software</title>
      <link>https://daveconway.net/blog/12/i-made-some-software</link>
      <description>I share my open-source pathfinder for randomized The Legend of Zelda: A Link to the Past games.</description>
      <category>Software Dev, Video Games</category>
      <pubDate>Fri, 17 Apr 2026 02:19:25 GMT</pubDate>
      <guid>f00432d9-5b69-4955-950c-9b38159367fd</guid>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>I published my first open-source repo:&nbsp;<a href="https://github.com/dsc7621/alttpr_pathfinder" target="_blank">https://github.com/dsc7621/alttpr_pathfinder</a></p><p>It's a pathfinder for randomized <em>The Legend of Zelda: A Link to the Past</em>&nbsp;games. You give it the path to a ROM (.sfc) file and it tell it where you're trying to go, and it'll give you the path. I actually used it for a dungeon-shuffled game I played in an Archipelago multiworld earlier this month, so it's already paying dividends!</p><p>The process for building it was pretty enjoyable; I'll share that soon.</p><p><img src="/uploads/2026/04/84596aac-2f01-44f9-92f7-b3857a6548c7.png" style="display: block; margin-left: auto; margin-right: auto;"></p><p>Look at that gorgeous user experience.</p>]]></content:encoded>
    </item>
    <item>
      <title>Awesome shit on the Internet #2: Han Lee's "The AI Great Leap Forward"</title>
      <link>https://daveconway.net/blog/11/awesome-shit-on-the-internet-2</link>
      <description>I share Han Lee's essay "The AI Great Leap Forward," which compares the current AI obsession to Mao Zedong's "Great Leap Forward."</description>
      <category>On the Internet</category>
      <pubDate>Fri, 10 Apr 2026 11:15:55 GMT</pubDate>
      <guid>9b32f3bc-f52e-4389-b8ae-852f42920241</guid>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Even if you disagree with everything written in this essay, it's still a wonderful piece of writing:&nbsp;<a href="https://leehanchung.github.io/blogs/2026/04/05/the-ai-great-leap-forward/" target="_blank">The AI Great Leap Forward</a>.</p><blockquote>The backyard steel of 1958 looked like steel. It was not steel. Today’s 
backyard AI looks like AI. It is not AI. A TypeScript workflow with 
hardcoded if-else branches is not an agent. A prompt template behind a 
REST endpoint is not a model. Calling these things AI is like calling 
pig iron from a backyard furnace high-grade steel. It satisfies the 
reporting requirement. It fails every real-world test.</blockquote><p>The essay draws parallels between the current AI push and Mao Zedong's "Great Leap Forward"; these parallels require, perhaps, a touch of mental gymnastics to embrace—will the AI obsession really lead to 30,000,000 deaths?—but then you read articles like <em>Wired</em>'s <a href="https://www.wired.com/story/openai-backs-bill-exempt-ai-firms-model-harm-lawsuits/" target="_blank">OpenAI Backs Bill That Would Limit Liability for AI-Enabled Mass Deaths or Financial Disasters</a>, and suddenly "a touch" seems a very fair qualifier.</p>]]></content:encoded>
    </item>
    <item>
      <title>Silly stuff #1: Autocomplete nails it</title>
      <link>https://daveconway.net/blog/9/silly-stuff-1</link>
      <description>Just a silly AI autocomplete suggestion.</description>
      <category>Software Dev, Silly</category>
      <pubDate>Sun, 05 Apr 2026 16:33:02 GMT</pubDate>
      <guid>6911fff1-bbfe-495a-9616-c8f05dfd0954</guid>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Want to get slightly comfy with writing C code, so I'm working on a little tool for&nbsp;<em>The Legend of Zelda: A Link to the Past</em> randomized games.</p>
<p><img src="/uploads/2026/04/7fe8f11e-73c1-46ad-ab95-3d7914b31217.png" style="display: block; margin-left: auto; margin-right: auto;"></p><p>Sometimes AI autocomplete tries its best and the results are very cute. I will say that, in general, CLion's autocomplete is excellent, often more or less writing entire functions for me as soon as I give it a little nudge at the beginning.</p>]]></content:encoded>
    </item>
    <item>
      <title>Software Snippets #2: Is a .NET Identity user logged in?</title>
      <link>https://daveconway.net/blog/8/software-snippets-2</link>
      <description>A brief snippet about determining whether a .NET Identity user is logged in.</description>
      <category>Software Dev</category>
      <pubDate>Fri, 03 Apr 2026 01:50:52 GMT</pubDate>
      <guid>46f5f100-a163-4575-beca-4cc2147ef53b</guid>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>.NET Core's <a href="https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-10.0&amp;tabs=visual-studio" target="_blank">Identity</a> API is honestly kind of a hassle to wrap your head around, initially. It does authN (local and external),&nbsp;authZ, and everything else vaguely in those two spheres, and it does them in a very "you can configure&nbsp;<em>anything</em>" classic .NET kinda way, which means that of course there are classes with names like fucking&nbsp;<code>SecurityStampRefreshingPrincipalContext</code> lurking around in there.</p>
<p>That said, it's very powerful, but one of the most confusing things about it is that there's no <code>User</code> class. Your users are <code>ClaimsPrincipal</code>s, and they have <code>Identities</code>, one for each of the different ways they're authenticated with your system. Because of this, there's no simple "Hey, am I logged in? Just answer 'yes' or 'no'" method to call.</p>
<p>But unless you're working on a very complex system, it's likely that your users are only authenticating via a single method, which means they'll always have a definitive primary <code>Identity</code>, which means this little snippet gives you a straight answer to the question above:</p>
<pre>var isLoggedIn = claimsPrincipal.Identity?.IsAuthenticated ?? false;<br></pre>
<p>I recommend throwing it into an extension method so you never have to think about it again.</p>]]></content:encoded>
    </item>
    <item>
      <title>Software Snippets #1: client_max_body_size in nginx</title>
      <link>https://daveconway.net/blog/6/software-snippets-1</link>
      <description>A brief snippet about the client_max_body_size property in nginx.</description>
      <category>Software Dev</category>
      <pubDate>Wed, 01 Apr 2026 14:14:02 GMT</pubDate>
      <guid>b5bfb072-784b-4293-ba91-9c9d29131e4a</guid>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Thought I'd use this blog to note down interesting bite-sized things I come across during dev that I may want to refer back to at some point.</p><p>While copy-pasting images for another post, I kept getting a "413 Content Too Large" error from nginx. Turns out the default max content&nbsp;size you can post is one megabyte. Fortunately, the solution is simple:</p>



<pre>location /target/path {<br>    ...<br>    client_max_body_size 10M;<br>}</pre>
<p>Obviously, replace the path and the property value with whatever you need.</p><p>Worth noting that this is one of those nginx properties that cannot take a variable as a value, so you cannot set up a map for it that returns different sizes based on URI.</p>]]></content:encoded>
    </item>
    <item>
      <title>Awesome shit on the Internet #1: Old Metroid fan sites</title>
      <link>https://daveconway.net/blog/5/awesome-shit-on-the-internet-1</link>
      <description>Screenshots of a couple cool old Metroid fan sites I came across.</description>
      <category>On the Internet</category>
      <pubDate>Wed, 01 Apr 2026 10:27:41 GMT</pubDate>
      <guid>3ac137a7-c33c-4c7c-a556-e05753a90fd2</guid>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Was browsing a forum and came across these old Metroid fan sites (that are still being updated in 2026!) and had to share.</p><p>#1: <a href="https://metroiddatabase.com/" target="_blank">metroiddatabase.com</a> (EN)</p><p><a href="/uploads/2026/04/6383883d-3891-46de-a4ba-a776a200d7de.png"><img src="/uploads/2026/04/6383883d-3891-46de-a4ba-a776a200d7de.png" title="metroiddatabase.com" alt="A screenshot of metroiddatabase.com, a Metroid fansite with an old-school design." style="width: 727px; display: block; margin-left: auto; margin-right: auto;"></a></p><p>#2: <a href="https://www.planetezebes.com/" target="_blank">planetezebes.com</a> (FR)</p><p><a href="/uploads/2026/04/0345c0ef-5791-48fd-b1f6-d98f14d051de.png"><img src="/uploads/2026/04/0345c0ef-5791-48fd-b1f6-d98f14d051de.png" title="planetezebes.com" alt="A screenshot of planetezebes.com, a Metroid fan-size with an old-school design." style="display: block; margin-left: auto; margin-right: auto;"></a></p><p>What a wonderful nostalgia trip, right down to the font that's way too small for my old-man eyes.</p><p>And, to answer Planète Zebes's question, I was definitely chaud comme un Magmoor after such a long wait, even though reception was so poor I ended up not even buying the game...</p>]]></content:encoded>
    </item>
    <item>
      <title>From DreamHost to DigitalOcean</title>
      <link>https://daveconway.net/blog/1/from-dreamhost-to-digitalocean</link>
      <description>A brief bit about my newly deployed site.</description>
      <category>Software Dev</category>
      <pubDate>Sun, 29 Mar 2026 14:28:40 GMT</pubDate>
      <guid>9a9f95fa-a127-4cb1-bbfc-2d2fd5b33a12</guid>
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>I've been a professional web developer for upwards of two decades now, which means that people pay me money, usually a healthy amount of it, to, well, make web applications. And I'd like to think I'm pretty good at it. People keep hiring me, and no one's ever fired me, at least.</p>
<p>But I have a dark secret, and that's that, throughout my entire career, I have, purely by chance, avoided having to deploy anything, or at least&nbsp;<em>work</em> to deploy anything, which means that when people say stuff like "reverse proxy," my response has typically been to nod sagely and sometimes respond with something very clever like, "yes, indeed, much better than an upside-down proxy." I used to work with a guy whose solution to every problem was, "I'll come up with a plan involving no fewer than forty-six&nbsp;interconnected AWS services that'll solve this," even when the problem was like, "hang on, my headphone cable is caught under my chair wheel again," and I always found that rather intimidating and stupid. Mostly stupid.</p>
<p>Years ago, this site used to be a Django app that I deployed on DreamHost by, *<em>sigh</em>*, using FileZilla to copy all my code over and then SSHing into the box to type <code>pkill python</code>.&nbsp; How did the website even work on the internet? I dunno! DreamHost had a couple files you could copy-paste to make Django apps work. That was good enough for me.</p><p>But then DreamHost did something that made Django apps -- or&nbsp;<em>my</em> Django app, at least -- not work anymore, so I let the site die and forgot about it for awhile, until I realized I was still paying ten bucks a month for...nothing. So like a discount Netflix subscription, basically. I like having my tiny little corner of the internet, though, so I rebuilt the site as a tiny .NET Core MVC app and deployed it on a very inexpensive DigitalOcean droplet.</p><p>And...it wasn't bad, at all.&nbsp;<em>And</em> I learned a bunch of stuff I should've learned probably twenty years ago, like "When you ChatGPT 'How do I get to a internet site?' and follow the instructions and the Internet Man at Verizon or wherever sends your desire to visit the&nbsp;internet site to the right IP address, how is the internet site always running? Doesn't it ever turn off?" I even learned why it's called a "reverse proxy," but I'm taking that secret to the grave with me.</p>]]></content:encoded>
    </item>
  </channel>
</rss>