<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Benad&#39;s Blog</title>
    <link>https://benad.me/blog/</link>
    <description>Benad&#39;s Blog</description>
    <language>en-us</language>
    <lastBuildDate>Sun, 12 Apr 2026 15:56:53 -0400</lastBuildDate>
    <atom:link href="https://benad.me/blog/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Oat and AI</title>
      <link>https://benad.me/blog/2026/03/06/oat-and-ai/</link>
      <pubDate>Fri, 06 Mar 2026 14:20:00 -0500</pubDate>
      
      <guid>https://benad.me/blog/2026/03/06/oat-and-ai/</guid>
      <description>&lt;p&gt;You might now notice that this web site looks a little bit different, with the most glaring change is its support for &amp;quot;dark mode&amp;quot;. Well, that&#39;s because I switch its CSS and UI framework from &lt;a href=&quot;https://getbootstrap.com/&quot;&gt;Bootstrap&lt;/a&gt; to &lt;a href=&quot;https://oat.ink/&quot;&gt;Oat&lt;/a&gt;. It makes a non-cached download of a page, with all its dependencies, from about 75 kB to 15 kB. It is also far more up-to-date to newer standards, which I took as an occasion to remove older support for Internet Explorer and so on.&lt;/p&gt;
&lt;p&gt;In the past, this kind of change would have taken me a weekend of effort, if not more. Most of it would be because I strongly dislike CSS development. Instead, I &amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Vibe_coding&quot;&gt;vibe coded&lt;/a&gt;&amp;quot; it with the assistance of &lt;a href=&quot;https://github.com/features/copilot/cli/&quot;&gt;GitHub Copilot CLI&lt;/a&gt;. If you look at &lt;a href=&quot;https://github.com/benad/azbenadmestatic/commits/main/&quot;&gt;this site&#39;s Git commit history&lt;/a&gt;, the initial version took me about 30 minutes to produce. I made some adjustments to the changes Copilot generated, but even then I was able to use screenshots of the older version of this site to clearly describe what I wanted.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Switching to the Steam Deck</title>
      <link>https://benad.me/blog/2026/02/22/switching-to-the-steam-deck/</link>
      <pubDate>Sun, 22 Feb 2026 14:00:00 -0500</pubDate>
      
      <guid>https://benad.me/blog/2026/02/22/switching-to-the-steam-deck/</guid>
      <description>&lt;p&gt;I&#39;m not using my Nintendo Switch anymore. Most games I want to play are simply not available for it, and I can&#39;t see myself buying a Switch 2 for the few that are available on the new console. It&#39;s sad because I really like its form factor, and I still prefer video game consoles over PC gaming. After a long day of work on a PC, I don&#39;t have the energy or the time to &amp;quot;maintain&amp;quot; yet another computer to relax and play some games.&lt;/p&gt;
&lt;p&gt;So, I bought a &lt;a href=&quot;https://store.steampowered.com/steamdeck&quot;&gt;Steam Deck&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&#39;d like to note that the first PC I bought was a &amp;quot;Steam Machine&amp;quot;, as described in &lt;a href=&quot;https://benad.me/blog/2015/1/13/alpha-my-first-pc/&quot;&gt;my blog post from 10 years ago&lt;/a&gt;. The situation was similar to this one: I want to play games from my backlog of PC games, but I want a &amp;quot;console-like&amp;quot; experience. This &lt;a href=&quot;https://web.archive.org/web/20150113173020/http://www.alienware.com/landings/alpha/&quot;&gt;Alienware Alpha&lt;/a&gt; machine was poor at both. It was an &lt;a href=&quot;https://en.wikipedia.org/wiki/Kodi_(software)&quot;&gt;XBMC&lt;/a&gt; frontend to Windows 8 using an Xbox 360 controller connected wirelessly using a dongle. There was an option to use &lt;a href=&quot;https://en.wikipedia.org/wiki/SteamOS&quot;&gt;Steam OS&lt;/a&gt;, but it was still in its infancy, supporting only games that were rebuilt to its Linux environment.&lt;/p&gt;
&lt;p&gt;A lot has happened to Steam OS since. The venerable Wine Windows API compatibility layer vastly improved since, and Steam OS packaged that and a new DirectX 11 compatible library for Linux under the name &lt;a href=&quot;https://en.wikipedia.org/wiki/Proton_(software)&quot;&gt;Proton&lt;/a&gt;. While not all Windows games work with Proton, a now substantial number do, as mentioned on the Steam store or in the site &lt;a href=&quot;https://www.protondb.com/&quot;&gt;ProtonDB&lt;/a&gt;. &lt;a href=&quot;https://protontricks.com/&quot;&gt;ProtonTricks&lt;/a&gt;, an enhanced version of &lt;a href=&quot;https://github.com/Winetricks/winetricks&quot;&gt;Winetrics&lt;/a&gt; made for Proton, and tools like &lt;a href=&quot;https://lutris.net/&quot;&gt;Lutris&lt;/a&gt; make it easy to install Windows games from other stores like &lt;a href=&quot;https://www.gog.com/&quot;&gt;GoG&lt;/a&gt;. For cloud gaming, it does support Xbox cloud gaming (see &amp;quot;&lt;a href=&quot;https://support.microsoft.com/en-us/topic/xbox-cloud-gaming-in-microsoft-edge-with-steam-deck-43dd011b-0ce8-4810-8302-965be6d53296&quot;&gt;Xbox Cloud Gaming in Microsoft Edge with Steam Deck&lt;/a&gt;&amp;quot;) and GeForce NOW (see &amp;quot;&lt;a href=&quot;https://nvidia.custhelp.com/app/answers/detail/a_id/5337/~/how-do-i-install-geforce-now-on-steam-deck%3F&quot;&gt;How do I install GeForce NOW on Steam Deck?&lt;/a&gt;&amp;quot;).&lt;/p&gt;
&lt;p&gt;Steam OS has one of the best packaging of Linux for a game console that I&#39;ve seen. The code OS is stored on a read-only file system (well, writeable only for system updates). All additional tools and software and installed &amp;quot;user-space&amp;quot; in your writeable home directory file system, be it in the form of Linux self-executables, or the well-supported &lt;a href=&quot;https://en.wikipedia.org/wiki/Flatpak&quot;&gt;Flatpak&lt;/a&gt; format. This makes it very easy to apply software updates safely, without the risk of a customization breaking the entire machine. There is a desktop mode using KDE Plasma, and with Steam running in the background the controller can be used as a mouse or display an on-screen keyboard, while also supporting &lt;a href=&quot;https://store.steampowered.com/remoteplay&quot;&gt;Steam Link&lt;/a&gt; as a form or remote desktop client. It strikes an excellent balance between a console-like experience and a stable yet modern Linux environment. In fact, if connected to a screen, mouse and keyboard using USB-C docks, it could serve as a quite pleasant and well-supported Linux PC.&lt;/p&gt;
&lt;p&gt;As for the hardware itself, it&#39;s quite good, though at this point its performance is slower than newer portable consoles and PCs of similar form factors. Its controller is superb and may be the best controller for a portable console I&#39;ve ever used. Steam allows for an insane amount of controller customization and combined with its dual trackpads it plays surprisingly well most PC games designed for a mouse and keyboard. I had a few surprises that were barely mentioned, for example that its screen is touch screen, or that the joysticks support detecting if you&#39;re merely touching them.&lt;/p&gt;
&lt;p&gt;Its &lt;a href=&quot;https://www.steamdeck.com/en/dock&quot;&gt;official dock&lt;/a&gt; mimics well the experience of the Switch&#39;s dock. A Bluetooth controller can wake the console, sending the HDMI CEC signal to start the TV. Steam&#39;s &amp;quot;big screen&amp;quot; experience truly feels like a typical game console experience. For games that, as I mentioned, were made for keyboard and mouse, you can still customize your external controller for mouse controls, including the PS4 and PS5 trackpad or for controllers that have a gyroscope.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Turning Off My Apple TV</title>
      <link>https://benad.me/blog/2025/12/28/turning-off-my-apple-tv/</link>
      <pubDate>Sun, 28 Dec 2025 14:15:00 -0500</pubDate>
      
      <guid>https://benad.me/blog/2025/12/28/turning-off-my-apple-tv/</guid>
      <description>&lt;p&gt;Early this year, I bought a Google TV Streamer, and since, I barely used my Apple TV anymore, so I reset and unplugged it.&lt;/p&gt;
&lt;p&gt;OK, let me clarify some things. By &amp;quot;Apple TV&amp;quot; I mean its original definition, being the &lt;em&gt;device&lt;/em&gt; you can plug to a TV using an HDMI cable. This is different than the &lt;em&gt;subscription service&lt;/em&gt; (used to be called &amp;quot;Apple TV+&amp;quot;) and its application (used to be part of iTunes).&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://store.google.com/ca/product/google_tv_streamer&quot;&gt;Google TV Streamer&lt;/a&gt; (what a weird name) is the long-term replacement of Google&#39;s Chromecast line of devices. It is based on Google TV (used to be called &amp;quot;Android TV&amp;quot;), which is an &amp;quot;app platform&amp;quot; that is often licensed to be used on TV, similar to Android&#39;s licensing model for cellphones.&lt;/p&gt;
&lt;p&gt;I kept plugged in my Apple TV because of its subscription service and because of my TV shows and movies collection I bought into it, both of which used to be exclusive to Apple devices (and a few very &lt;a href=&quot;https://smarttechfaqs.com/list-of-airplay-2-compatible-tvs/&quot;&gt;AirPlay compatible TVs&lt;/a&gt;). Some TV shows I purchased remain exclusive (in digital form) to Apple&#39;s store, for example in Canada the show &amp;quot;&lt;a href=&quot;https://www.justwatch.com/ca/tv-show/better-call-saul&quot;&gt;Better Call Saul&lt;/a&gt;&amp;quot; which is available only on the &lt;a href=&quot;https://tv.apple.com/ca/show/better-call-saul/umc.cmc.z783dda5nkr23g1jj2kn8x22&quot;&gt;Apple TV store&lt;/a&gt; or &lt;a href=&quot;https://www.amazon.ca/Better-Call-Saul-Complete-Bilingual/dp/B0BDMTPSS9/&quot;&gt;on Blu-ray&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In recent years, Apple made its Apple TV subscription service more widely available on non-Apple devices, and for some of those apps, they now even allow you to access your TV and movies collection. Also, since the days of iTunes, the &lt;a href=&quot;https://apps.microsoft.com/detail/9nm4t8b9jqz1&quot;&gt;Windows version of the Apple TV app&lt;/a&gt; remains the only version that allows you to purchase or rent movies and TV shows on a non-Apple device. That means, practically, you can buy a movie on the Apple TV store (on Windows) and watch it on your TV (using Google TV Streamer) without having to use any Apple device.&lt;/p&gt;
&lt;p&gt;So, after 15 years, I&#39;m not using an Apple TV (device) anymore, even though I subscribe to its streaming service and buy TV shows on it. I&#39;m happy to not use its &lt;a href=&quot;https://support.apple.com/en-us/103233&quot;&gt;terrible 1st-gen Siri remote&lt;/a&gt; that&#39;s touch-based and is recharged with a Lightning charging cable, or its crappy &lt;a href=&quot;https://en.wikipedia.org/wiki/Consumer_Electronics_Control&quot;&gt;HDMI CEC&lt;/a&gt; implementation that creates havoc with my TV and Xbox.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>gh-fetch-release and AI</title>
      <link>https://benad.me/blog/2025/10/13/gh-fetch-release-and-ai/</link>
      <pubDate>Mon, 13 Oct 2025 14:25:00 -0400</pubDate>
      
      <guid>https://benad.me/blog/2025/10/13/gh-fetch-release-and-ai/</guid>
      <description>&lt;p&gt;For some time, I needed an excuse to jump back into &lt;a href=&quot;https://www.python.org/&quot;&gt;Python&lt;/a&gt; programming, even if it&#39;s just starting with a small script. I was setting up yet another &lt;a href=&quot;https://ubuntu.com/server&quot;&gt;Ubuntu&lt;/a&gt; 24 virtual machine in &lt;a href=&quot;https://learn.microsoft.com/en-us/windows/wsl/&quot;&gt;WSL&lt;/a&gt;, and so I brought in the various Linux CLI tools I use into &lt;code&gt;~/bin&lt;/code&gt;. Downloading and extracting each executable from various GitHub projects was getting tedious, so I looked for a tool that could do that. What I found were either yet another binary executable you&#39;d have to download from GitHub, or things that would approach package managers. So, I found my excuse to write a small Python script that would use the GitHub API to find and download Linux executables.&lt;/p&gt;
&lt;p&gt;I left active Python programming around the time of Python 3.1, so I had a lot of catching up to do. Using &lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;VS Code&lt;/a&gt; and its &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=ms-python.pylint&quot;&gt;Pylint&lt;/a&gt; and &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance&quot;&gt;Pylance&lt;/a&gt; extensions greatly helped me avoid obvious mistakes. Static type checking came a long way since the days of Python 3.1, and in VS Code its &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=ms-python.python&quot;&gt;Python extension&lt;/a&gt; is integrated with &lt;a href=&quot;https://microsoft.github.io/pyright/&quot;&gt;Pyright&lt;/a&gt;&#39;s type checker.&lt;/p&gt;
&lt;p&gt;One of the perks of working at Microsoft is that I can get &lt;a href=&quot;https://github.com/features/copilot&quot;&gt;GitHub Copilot&lt;/a&gt;, I guess a &amp;quot;Pro+&amp;quot; plan with some yet-to-be-public features, in my personal GitHub account (&lt;a href=&quot;https://github.com/benad&quot;&gt;github.com/benad&lt;/a&gt;). The first thing I noticed when turning that on in VS Code is its code generation, which goes far beyond simple code completion. Copilot would guess what I&#39;m trying to code, and most of the time it guessed correctly, so I just press TAB to insert that auto-generated code.&lt;/p&gt;
&lt;p&gt;While you could conceivably generate all of the code like that, or by using Copilot&#39;s &amp;quot;Agent&amp;quot; mode, I&#39;m trying to learn from that experience, and would rather make some of my own code design decisions. In that case, you can ask Copilot questions in the context of the current code, and it can answer even providing examples that fit in that code. This is far more convenient than having to describe the entire context (&amp;quot;In Python 3&amp;quot;, etc.) each time when asking the Copilot app or web site.&lt;/p&gt;
&lt;p&gt;Beyond the summaries and examples generated by Copilot, the answer also contains the sources, which more often than not point directly to the correct section of the official reference documentation, at which point I just leave the AI&#39;s answers and read the documentation. There are a few instances though where the official documentation (and even the source code) is lacking, and asking for more sample code from Copilot helps. An example is with &lt;a href=&quot;https://docs.python.org/3/library/urllib.request.html#module-urllib.request&quot;&gt;Python&#39;s urllib module&lt;/a&gt;: Even its documentation basically says: &amp;quot;Don&#39;t use this, use this other module instead&amp;quot;, which wasn&#39;t of much help since I was intentionally avoiding non built-in modules like the one proposed (the &lt;a href=&quot;https://requests.readthedocs.io/en/latest/&quot;&gt;Requests library&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;While code generated (or suggested) by Copilot is generally correct, it sometimes output sample code using an outdated approach that do not apply to newer versions of libraries or APIs, so using different models might return more up-to-date results. As an example, when adding support for GitHub API tokens in my script, it used the older HTTP header format to pass the token that isn&#39;t recommended anymore. It was &lt;em&gt;another&lt;/em&gt; instance of Copilot, this time &lt;a href=&quot;https://github.com/benad/gh-fetch-release/pull/1&quot;&gt;reviewing my pull request&lt;/a&gt;, that found that issue and &lt;a href=&quot;https://github.com/benad/gh-fetch-release/pull/1#pullrequestreview-3174612062&quot;&gt;suggested the new approach&lt;/a&gt;, in which case I found GitHub&#39;s API documentation to confirm the suggestion.&lt;/p&gt;
&lt;p&gt;The final script &lt;a href=&quot;https://github.com/benad/gh-fetch-release&quot;&gt;gh-fetch-release&lt;/a&gt; is small and simple enough that it would be possible for someone with little to no programming knowledge to &amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Vibe_coding&quot;&gt;vibe code&lt;/a&gt;&amp;quot; it using only AI code generation. But beyond just my personal learning experience, there was still some value in my human input. For example, I&#39;m the one that insisted in using Object-Oriented Programming to handle the extraction of the various archive formats (see &lt;a href=&quot;https://github.com/benad/gh-fetch-release/pull/3&quot;&gt;Pull Request #3&lt;/a&gt;). While the code generator could be instructed to make use of OOP for that part of the code, adding that to the pile of small (but significant) design decisions makes the prompts closer to a full &lt;a href=&quot;https://www.subtle.so/prd-md&quot;&gt;product requirement document&lt;/a&gt; file. This is why, in my case, I get better results when the code generation happens when I started to write the code, since I find it easier to describe the code design that I want in programming language than in human language.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git BASH: Home away from home</title>
      <link>https://benad.me/blog/2025/08/10/git-bash-home-away-from-home/</link>
      <pubDate>Sun, 10 Aug 2025 17:00:00 -0400</pubDate>
      
      <guid>https://benad.me/blog/2025/08/10/git-bash-home-away-from-home/</guid>
      <description>&lt;p&gt;As I &lt;a href=&quot;https://benad.me/blog/2021/09/18/modern-command-line-tools/&quot;&gt;mentioned&lt;/a&gt; &lt;a href=&quot;https://benad.me/blog/2022/02/12/more-modern-cli-tools/&quot;&gt;before&lt;/a&gt;, I have a few modern CLI tools I regularly use in my Linux environments. So much so that I started to miss them in Windows.&lt;/p&gt;
&lt;p&gt;To get a BASH shell, I simply install &lt;a href=&quot;https://git-scm.com/&quot;&gt;Git on Windows&lt;/a&gt;. It is packaged with some variant of &lt;a href=&quot;https://www.mingw-w64.org/&quot;&gt;mingw-w64&lt;/a&gt;, that shares some similarities and tools with &lt;a href=&quot;https://cygwin.com/&quot;&gt;Cygwin&lt;/a&gt;. When installing Git, I make sure to select the installation option to add a profile to &lt;a href=&quot;https://learn.microsoft.com/en-us/windows/terminal/&quot;&gt;Windows Terminal&lt;/a&gt;, since mingw&#39;s terminal lacks support for modern UTF-8.&lt;/p&gt;
&lt;p&gt;Luckily for me, most of the tools I wanted are now available as Windows binaries. This means that they can be used anywhere, not constrained to only BASH (or Cygwin).&lt;/p&gt;
&lt;p&gt;Also, over time they became available through &lt;a href=&quot;https://learn.microsoft.com/en-us/windows/package-manager/&quot;&gt;Windows&#39; Package Manager&lt;/a&gt; (&lt;code&gt;winget&lt;/code&gt;). This means I can install all of them with the following command in PowerShell:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ps1&quot;&gt;&amp;quot;Git.git&amp;quot;, &amp;quot;BurntSushi.ripgrep.MSVC&amp;quot;, &amp;quot;sharkdp.bat&amp;quot;,
&amp;quot;junegunn.fzf&amp;quot;, &amp;quot;ducaale.xh&amp;quot;, &amp;quot;dandavison.delta&amp;quot;, &amp;quot;sharkdp.fd&amp;quot;
| foreach { winget install --id $_ }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I then put the following in my &lt;code&gt;~/.bashrc&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;rgd() { command rg --json -C 2 &amp;quot;$@&amp;quot; | command delta; }
xhs() { command xh --https &amp;quot;$@&amp;quot; ; }

export BAT_STYLE=plain
export BAT_THEME=ansi
export BAT_PAGING=always
eval &amp;quot;$( fzf --bash )&amp;quot;
export FZF_DEFAULT_OPTS=&amp;quot;--walker=file,dir,follow --walker-skip .git,node_modules,target&amp;quot;
export FZF_CTRL_T_OPTS=&amp;quot;--preview &#39;bat -n --color=always {}&#39; --bind &#39;ctrl-/:change-preview-window(down|hidden|)&#39;&amp;quot;
export FZF_ALT_C_OPTS=&amp;quot;--walker=dir,follow --preview &#39;ls -1 --color=always {}&#39;&amp;quot;
export FZF_DEFAULT_COMMAND=&#39;fd --type f --color=never -H --exclude .git --exclude node_modules&#39;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here&#39;s a quick overview of those tools:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/sharkdp/bat&quot;&gt;bat&lt;/a&gt; is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Terminal_pager&quot;&gt;terminal pager&lt;/a&gt; that supports file syntax coloring and many more options. I&#39;ve set some environment variables to change it&#39;s default style to be more compatible and to always run paging even when the terminal&#39;s size is big enough to display the entire input&#39;s contents.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dandavison.github.io/delta/&quot;&gt;delta&lt;/a&gt; is another terminal pager specialized to show file differences, like &lt;code&gt;diff&lt;/code&gt;. I&#39;ve set up Git to use &lt;code&gt;delta&lt;/code&gt; as the default pager, with the &lt;a href=&quot;https://dandavison.github.io/delta/side-by-side-view.html&quot;&gt;side-by-side view&lt;/a&gt;, like this: &lt;code&gt;git config set --global core.pager &amp;quot;delta -s&amp;quot;&lt;/code&gt; .&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/BurntSushi/ripgrep&quot;&gt;ripgrep&lt;/a&gt; is a fast replacement for &lt;code&gt;grep -r&lt;/code&gt;. I&#39;ve made an alias &lt;code&gt;rgd&lt;/code&gt; that pipes ripgrep&#39;s output to &lt;code&gt;delta&lt;/code&gt; but with 2 lines of &amp;quot;context&amp;quot;, giving a chance for delta to add file-specific syntax coloring to its output.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/sharkdp/fd&quot;&gt;fd&lt;/a&gt;, also called &lt;code&gt;fdfind&lt;/code&gt; in some package managers, is a simpler, more modern alternative to the old &lt;code&gt;find&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://junegunn.github.io/fzf/&quot;&gt;fzf&lt;/a&gt; is a &amp;quot;fuzzy finder&amp;quot;. I&#39;ve set it up so that by default it lists the output of a &lt;code&gt;fd&lt;/code&gt; command that excludes folders named &lt;code&gt;.git&lt;/code&gt; and &lt;code&gt;node_modules&lt;/code&gt;. In BASH, it enhances the Control-r history search command, adds the Control-t command to insert a file argument to a command, and adds Alt-c to fuzzy search and change to a directory. I&#39;ve customized it to use &lt;code&gt;bat&lt;/code&gt; or &lt;code&gt;ls&lt;/code&gt; to show a live preview. See &lt;a href=&quot;https://junegunn.github.io/fzf/shell-integration/&quot;&gt;Shell Integration&lt;/a&gt; for more details.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ducaale/xh&quot;&gt;xh&lt;/a&gt; is an alternative to Curl designed for REST-like HTTP services. I&#39;ve aliased &lt;code&gt;xhs&lt;/code&gt; to make it assume HTTPS by default: For example, &lt;code&gt;xhs httpbun.org/post a=b&lt;/code&gt; will use &lt;code&gt;https://httpbun.org/post&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Of course there are more tools that can be installed in the same manner, for example &lt;code&gt;jq&lt;/code&gt;, but this is enough to make Windows feel like my &amp;quot;home away from home&amp;quot;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Ripping CDs Like It&#39;s 2000</title>
      <link>https://benad.me/blog/2025/04/13/ripping-cds-like-its-2000/</link>
      <pubDate>Sun, 13 Apr 2025 16:00:00 -0400</pubDate>
      
      <guid>https://benad.me/blog/2025/04/13/ripping-cds-like-its-2000/</guid>
      <description>&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ripping&quot;&gt;Ripping&lt;/a&gt; audio CDs in 2025 is rather uncommon. Maybe you bought a &amp;quot;collector&#39;s edition&amp;quot; disk, maybe you prefer having a compression-less copy of an album that doesn&#39;t rely on a subscription service or any kind of online account, or maybe you just have very old CDs that never made the transition to streaming services. Whatever is the reason, ripping CDs in 2025 can be considerably more difficult than in 2000.&lt;/p&gt;
&lt;p&gt;The first obvious obstacle is the lack of CD drives in most modern computers. They are still sold, and external &amp;quot;slim&amp;quot; USB-3 drives are still commonplace and convenient, as they can be used with laptops (unlike internal drives). Many require an external power supply, though mine is &amp;quot;self-powered&amp;quot; if connected on 2 USB ports.&lt;/p&gt;
&lt;p&gt;But what about the software? In the past I used &lt;a href=&quot;https://www.apple.com/itunes/&quot;&gt;iTunes&lt;/a&gt;, but now it is limited to podcasts and audio books. Its replacement, the app for &lt;a href=&quot;https://www.apple.com/apple-music/&quot;&gt;Apple Music&lt;/a&gt;, doesn&#39;t support CDs anymore. Technically, ripping CDs is still possible in iTunes, but it assumes you&#39;re ripping an audio book CD, so it behaves a bit strangely.&lt;/p&gt;
&lt;p&gt;I tried a few CD ripping software for Windows, and I ended up using &lt;a href=&quot;https://www.foobar2000.org/&quot;&gt;foobar2000&lt;/a&gt;. What I wanted was to rip the CD, match it against some online track info data, encode it in MP4 AAC (or something close to what iTunes used to do), be able to add some cover images to the MP4 files, and then import the result in my music libraries.&lt;/p&gt;
&lt;p&gt;foobar2000 can make use of Apple&#39;s own AAC encoder, as long as you install Apple Music and then the &amp;quot;&lt;a href=&quot;https://www.foobar2000.org/encoderpack&quot;&gt;foobar2000 Free Encoder Pack&lt;/a&gt;&amp;quot;. The &lt;a href=&quot;https://github.com/nu774/qaac&quot;&gt;qaac tool&lt;/a&gt; used by foobar2000 will then be able to make use of the libraries from Apple Music. It should be noted that the &amp;quot;CBR&amp;quot; mode can corrupt audio, so you should use &amp;quot;Constrained VBR&amp;quot; instead (which is exactly what iTunes used). There are few good AAC alternatives (that also can be used by foobar2000), though another one I tried is &lt;a href=&quot;https://github.com/tmkk/fhgaacenc&quot;&gt;fhgaacenc&lt;/a&gt; which makes use of the old &lt;a href=&quot;https://www.winamparchive.org/&quot;&gt;Winamp&lt;/a&gt;, be it by installing Winamp first or by &lt;a href=&quot;https://wiki.hydrogenaud.io/index.php?title=Fhgaacenc&quot;&gt;extracting a few specific files from its installer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Once the audio tracks are ripped, you can use foobar2000 to set a cover image on all the track files at once. I use either the images found on &lt;a href=&quot;https://www.discogs.com/&quot;&gt;Discogs&lt;/a&gt; or using &lt;a href=&quot;https://www.bing.com/images&quot;&gt;Bing&#39;s image search&lt;/a&gt; (I work at Microsoft, so I&#39;m biased about my choice of web search engines).&lt;/p&gt;
&lt;p&gt;At that point, I copy the files over to Apple Music, which uploads them to my cloud-based music library using &lt;a href=&quot;https://support.apple.com/en-us/108935&quot;&gt;iTunes Match&lt;/a&gt;. I talked about &lt;a href=&quot;https://benad.me/blog/2012/1/4/itunes-match-is-it-worth-it/&quot;&gt;iTunes Match a long time ago&lt;/a&gt;, and it still works well. Its subscription is independent than Apple Music&#39;s own subscription, and now that Apple Music is &lt;a href=&quot;https://apps.microsoft.com/detail/9pfhdd62mxs1?hl=en-CA&amp;amp;gl=CA&quot;&gt;available on Windows&lt;/a&gt;, &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.apple.android.music&quot;&gt;Android&lt;/a&gt; and even &lt;a href=&quot;https://music.apple.com/&quot;&gt;on the web&lt;/a&gt;, my collection isn&#39;t restricted to Apple devices anymore. Another option is to use &lt;a href=&quot;https://www.youtube.com/musicpremium&quot;&gt;YouTube Music Premium&lt;/a&gt; and then &lt;a href=&quot;https://support.google.com/youtubemusic/answer/9716522?hl=en&quot;&gt;upload your music files&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Cloud Gaming Returns</title>
      <link>https://benad.me/blog/2025/01/19/cloud-gaming-returns/</link>
      <pubDate>Sun, 19 Jan 2025 13:15:00 -0500</pubDate>
      
      <guid>https://benad.me/blog/2025/01/19/cloud-gaming-returns/</guid>
      <description>&lt;p&gt;When I heard that &lt;a href=&quot;https://en.wikipedia.org/wiki/Google_Stadia&quot;&gt;Google Statia&lt;/a&gt;  was &lt;a href=&quot;https://www.theverge.com/2022/9/29/23378713/google-stadia-shutting-down-game-streaming-january-2023&quot;&gt;shutting down&lt;/a&gt;, I thought that this whole idea of &amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Cloud_gaming&quot;&gt;Cloud Gaming&lt;/a&gt;&amp;quot; that started with &lt;a href=&quot;https://en.wikipedia.org/wiki/OnLive&quot;&gt;OnLive&lt;/a&gt; is finished. I thought that if Google couldn&#39;t do it, then it&#39;s unlikely that it has any future.&lt;/p&gt;
&lt;p&gt;But then, I recently opened my web browser and navigated to Netflix to watch a movie, when I was offered to &lt;a href=&quot;https://www.theverge.com/2023/8/14/23829262/netflix-cloud-gaming-testing-tv-web&quot;&gt;stream some video games&lt;/a&gt;? They ran pretty well, and worked with a joystick, a mouse of even by touch controls (though I admit few PC laptops have touch screens).&lt;/p&gt;
&lt;p&gt;And then, I recently bought &lt;a href=&quot;https://www.xbox.com/en-CA/games/store/final-fantasy/9P20JCF7BV93/0010&quot;&gt;Final Fantasy I&lt;/a&gt; and &lt;a href=&quot;https://www.xbox.com/en-ca/games/store/final-fantasy-ii/9p8s1mn4066k&quot;&gt;Final Fantasy II for Xbox&lt;/a&gt;. (Disclaimer: I work at Microsoft.) I was already surprised that with their &lt;a href=&quot;https://www.xbox.com/en-CA/games/xbox-play-anywhere&quot;&gt;Xbox Play Anywhere&lt;/a&gt; support, I was able to also play them on my PC laptop (in addition to my Xbox), but I also discovered that I could play them from my iPhone using &lt;a href=&quot;https://news.xbox.com/en-us/2024/11/20/stream-your-own-game-xbox-cloud-gaming-beta/&quot;&gt;Xbox Cloud Gaming&lt;/a&gt;? They also have customized touch controls for phones and tablets, so they pleasantly reminded me of when I played &lt;a href=&quot;https://fr.wikipedia.org/wiki/Final_Fantasy_I_and_II:_Dawn_of_Souls&quot;&gt;Final Fantasy Dawn of Souls&lt;/a&gt; on the Gameboy Advance.&lt;/p&gt;
&lt;p&gt;Or what about how I sometimes play some old arcade and console games on &lt;a href=&quot;https://www.antstream.com/&quot;&gt;Antstream Arcade&lt;/a&gt;? Sure, it feels weird that a mere few seconds of the video stream takes more bytes than most of those games&#39; ROMs, but regardless of that bandwidth &amp;quot;waste&amp;quot; it&#39;s quite responsive.&lt;/p&gt;
&lt;p&gt;So, what happened? There&#39;s also &lt;a href=&quot;https://luna.amazon.ca/&quot;&gt;Amazon Luna&lt;/a&gt;, &lt;a href=&quot;https://www.nvidia.com/en-us/geforce-now/&quot;&gt;GeForce Now&lt;/a&gt; and &lt;a href=&quot;https://blog.playstation.com/2023/10/11/ps5-cloud-streaming-launches-this-month-for-playstation-plus-premium-members/&quot;&gt;PlayStation Plus&#39; own cloud gaming&lt;/a&gt;. Why would one find today&#39;s offering of cloud gaming services acceptable compared to Google&#39;s own?&lt;/p&gt;
&lt;p&gt;My first guess is that some services aren&#39;t as &amp;quot;locked in&amp;quot; as Stadia. They can connect to other gaming libraries so games you bought outside of the cloud service are playable both inside and outside the cloud service. For example, GeForce Now uses your Steam library, and Luna can use your Ubisoft or GOG library. Even if not all games of those libraries are supported, at least the games you purchased won&#39;t vanish if the cloud service closes, like what happened with Stadia.&lt;/p&gt;
&lt;p&gt;My second guess is that some of them also are seen as a &amp;quot;bonus&amp;quot; to another, already existing service. It comes bundled with Netflix (in all plans), Xbox Game Pass Ultimate and PlayStation Plus Premium. So, the risk is low: If the cloud gaming aspect of those services were to shut down, the rest of what is offered in the subscription is still good enough.&lt;/p&gt;
&lt;p&gt;My last guess is that, like physical media, the idea of buying a game console, let alone a far more expensive gaming PC, is becoming less popular. It&#39;s more convenient to simply use the phone you already have with some game controller or use some cheap laptop and not worry about its performance.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Change Directory and List</title>
      <link>https://benad.me/blog/2024/09/29/change-directory-and-list/</link>
      <pubDate>Sun, 29 Sep 2024 11:15:00 -0400</pubDate>
      
      <guid>https://benad.me/blog/2024/09/29/change-directory-and-list/</guid>
      <description>&lt;p&gt;On my Linux systems, I use &lt;code&gt;ls&lt;/code&gt; and &lt;code&gt;cd&lt;/code&gt; all the time. Sure, use can use some variations of those commands, like &lt;code&gt;ll&lt;/code&gt; on Debian systems, which does &lt;code&gt;ls -alF --color=auto&lt;/code&gt; (for &lt;a href=&quot;https://www.gnu.org/software/coreutils/&quot;&gt;GNU Coreutils&lt;/a&gt;), and defining your own functions that perform a &lt;code&gt;cd&lt;/code&gt; command to your favorite locations. You could even define your own &amp;quot;cd then ls&amp;quot; command.&lt;/p&gt;
&lt;p&gt;Even then, my main issue is about &lt;em&gt;navigation&lt;/em&gt;. I would often navigate to some location by examining the available directories at one location, and then changing my directory there, incrementally, until I get to the full path I desired. While this can be done with a combination of &lt;code&gt;ls&lt;/code&gt; and &lt;code&gt;cd&lt;/code&gt; commands, some shells like &lt;a href=&quot;https://en.wikipedia.org/wiki/Bash_%28Unix_shell%29&quot;&gt;BASH&lt;/a&gt; support path completion for any command-line argument: Pressing TAB completes the path item&#39;s name, and if ambiguous (up to a point in the item name), a second press of TAB shows the available disambiguation. This process of path completion can be annoying: It is case sensitive, requires knowing the path element names by prefix, and each ambiguous completion results in a cacophony of &amp;quot;bell&amp;quot; sounds (or some stroboscopic &amp;quot;visual bell&amp;quot;).&lt;/p&gt;
&lt;p&gt;Surely there has to be a better way.&lt;/p&gt;
&lt;h3&gt;Fuzzy Searching with &lt;code&gt;fzf&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/junegunn/fzf&quot;&gt;fzf&lt;/a&gt; is a &amp;quot;fuzzy finder&amp;quot; that can search for files in real time as you type part of their paths. It can also be used for looking for directories, or to search matching lines from any input.&lt;/p&gt;
&lt;p&gt;In some shells like BASH, fzf can &lt;a href=&quot;https://junegunn.github.io/fzf/shell-integration/&quot;&gt;add a few useful keyboard shortcuts&lt;/a&gt;. &lt;code&gt;alt-c&lt;/code&gt; is a replacement for &lt;code&gt;cd&lt;/code&gt;. &lt;code&gt;control-t&lt;/code&gt; can be used to insert one or more paths that were found using &lt;code&gt;fzf&lt;/code&gt; on the current command-line. Due to its support for searching in any input text, &lt;code&gt;control-r&lt;/code&gt; replaces BASH&#39;s built-in history search with fuzzy search, which is incredibly useful if you can&#39;t exactly remember a command from your command history.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;fzf&lt;/code&gt; also supports showing a preview pane for the currently selected entry. For example, this can be used to show the output of the &lt;code&gt;ls&lt;/code&gt; command of the selected directory when you use &lt;code&gt;alt-c&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;export FZF_ALT_C_OPTS=&amp;quot;--preview &#39;ls {}&#39;&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;fzf&lt;/code&gt; can be used with any other process&#39; output. For example, &lt;a href=&quot;https://github.com/junegunn/fzf-git.sh&quot;&gt;fzf-git&lt;/a&gt;, from the same author, supports fuzzy searching for Git objects, like branch names or file paths known to Git, and inserts the result on the command-line.&lt;/p&gt;
&lt;h3&gt;The n&lt;sup&gt;3&lt;/sup&gt; File Manager&lt;/h3&gt;
&lt;p&gt;So, while &lt;code&gt;fzf&lt;/code&gt; helps with finding specific files, it isn&#39;t a replacement for file system navigation. You still need to display the files in the current directory, and performing file operation across multiple directories lacks visualization.&lt;/p&gt;
&lt;p&gt;There has been file managers in a command-line environments for a &lt;em&gt;long&lt;/em&gt; time. For &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS&quot;&gt;DOS&lt;/a&gt; there were quite a few text-based graphical file managers, like &lt;a href=&quot;https://en.wikipedia.org/wiki/Midnight_Commander&quot;&gt;Midnight Commander&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/DOS_Shell&quot;&gt;DOS Shell&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A more modern file manager I use is &lt;a href=&quot;https://github.com/jarun/nnn&quot;&gt;n&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt;, named &lt;code&gt;nnn&lt;/code&gt; on the command-line. It differs from what are called &lt;a href=&quot;https://en.wikipedia.org/wiki/File_manager#Orthodox_file_managers&quot;&gt;&amp;quot;orthodox&amp;quot; file managers&lt;/a&gt;, in that it displays only one directory at a time, and generally avoids using &amp;quot;graphical&amp;quot; display. It keeps track of up to 4 different contexts, which are either a directory or a list of files that was output by another process or from its extensive support for plugins.&lt;/p&gt;
&lt;p&gt;Navigation in n&lt;sup&gt;3&lt;/sup&gt; is as simple as using the arrow keys, and it supports &lt;a href=&quot;https://github.com/jarun/nnn/blob/master/misc/quitcd/quitcd.bash_sh_zsh&quot;&gt;changing the current directory on exit&lt;/a&gt;. Its interface is light, but it displays a handy keyboard shortcut reference when pressing &lt;code&gt;?&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;It can also be used as a &amp;quot;file picker&amp;quot; &lt;a href=&quot;https://github.com/jarun/nnn/wiki/Basic-use-cases#file-picker&quot;&gt;using the &lt;code&gt;-p&lt;/code&gt; option&lt;/a&gt;, acting in a way as an alternative to &lt;code&gt;fzf&lt;/code&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Halo, Part 5: 343</title>
      <link>https://benad.me/blog/2024/07/28/halo-part-5-343/</link>
      <pubDate>Sun, 28 Jul 2024 13:45:00 -0400</pubDate>
      
      <guid>https://benad.me/blog/2024/07/28/halo-part-5-343/</guid>
      <description>&lt;h3&gt;Halo 4&lt;/h3&gt;
&lt;p&gt;The last entry in the Halo Master Chief collection is the first Halo game by &lt;a href=&quot;https://en.wikipedia.org/wiki/343_Industries&quot;&gt;343 Industries&lt;/a&gt;. They were formed by Microsoft to continue the Halo game franchise after Bungie&#39;s contract ended. Before working on &lt;a href=&quot;https://en.wikipedia.org/wiki/Halo_4&quot;&gt;Halo 4&lt;/a&gt;, 343 remastered Halo CE. Eventually, 343 released the Master Chief collection, which included the remastered Halo CE, a remastered Halo 2, and all the other FPS Halo games, including their own Halo 4.&lt;/p&gt;
&lt;p&gt;Back to Halo 4, 343 were in the difficult spot of reviving the Halo series by balancing out keeping the same kind of gameplay and quality the audience were expecting, all while pushing the series beyond the original story that ended in Halo 3.&lt;/p&gt;
&lt;p&gt;The plot now revolves around the Promethean alien race and the gradual &amp;quot;rampancy&amp;quot; of Cortana. While the Covenant aliens return, with their weapons and vehicules, the Prometheans introduce their own weapons and environments that are strikingly different. The familiar Earth-like environments are now replaced with robot-like aliens and Neptune-like colors.&lt;/p&gt;
&lt;p&gt;Playing Halo 3 ODST and Halo 4 back-to-back (as they are listed in the Master Chief Collection) is a bit of a shock. Halo 4&#39;s controls and movements are closer to its FPS contemporaries (of 2012), so I was scared that the Halo style of gameplay would also go away.&lt;/p&gt;
&lt;p&gt;After a few levels, my worries vanished. The gameplay is similar enough to the previous Halo games, all while having so many more original weapon styles and enemies. The story is interesting, though maybe a bit too reliant on &amp;quot;lore&amp;quot;. Though this may be due to a &amp;quot;remastering&amp;quot; done for the MCC, Halo 4 is also far better looking than Halo 3 and Reach. Overall, it is a game good enough to be a &amp;quot;Halo&amp;quot; game, a good start for 343.&lt;/p&gt;
&lt;h3&gt;Halo 5&lt;/h3&gt;
&lt;p&gt;A thing I didn&#39;t mention up to this point is that every Halo game (in fact, even the &lt;a href=&quot;https://en.wikipedia.org/wiki/Marathon_Trilogy&quot;&gt;Marathon games&lt;/a&gt;) support co-op gameplay, typically up to 4 human players. But not only this is optional, but also the games&#39; difficulty remained balanced for a single player, even when playing with other players. While there are computer-controlled allies that can help when playing alone, it is generally assumed that they are unreliable, so the game&#39;s difficulty balance takes that into account.&lt;/p&gt;
&lt;p&gt;&amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Halo_5:_Guardians&quot;&gt;Halo 5: Guardians&lt;/a&gt;&amp;quot; emphases on the co-op aspect to the point that, for the first time, those teams of 4 players are taken into account in the game&#39;s story. You alternate between two different teams of four players, and if you play alone the 3 other players are controlled by some AI.&lt;/p&gt;
&lt;p&gt;The result is a frustrating mess. The AI is simply not good enough to act as a proper counterbalance to the vastly increased waves of enemies. If you play alone, you will spend most of your time &amp;quot;babysitting&amp;quot; the other AI players to avoid them stupidly falling. Sure, most of the time you can revive the fallen players (similar to co-op in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Borderlands_%28series%29&quot;&gt;Borderlands games&lt;/a&gt;), but if you fail to do so quickly enough, they become unavailable for the rest of the level, making the difficulty even more unbalanced. There are also multiple levels with branching paths, where 2 players go to one path that is nearly inaccessible to the other 2 players, so if the AI-controlled players fall in the other path, it&#39;s not possible for you to revive them. This makes this Halo game the most difficult game up to this point, and unfairly so due to mostly how stupid the AI is.&lt;/p&gt;
&lt;p&gt;The &amp;quot;forced co-op&amp;quot; also creates a mess with the story. The story now has 8 main characters, in addition to Cortana and a few others. The player is expected to be familiar with all of them, and while some are returning characters from previous games in the series, it still relies too much on being familiar with Halo&#39;s &amp;quot;hypermedia&amp;quot;, from side short movies, comic books, lore on some web sites and so on.&lt;/p&gt;
&lt;p&gt;The net effect of all this &amp;quot;Guardian&amp;quot; thing is, in my opinion, the worst game in the Halo series.&lt;/p&gt;
&lt;h3&gt;Halo Infinite&lt;/h3&gt;
&lt;p&gt;343&#39;s focus on the free multiplayer aspect of &lt;a href=&quot;https://en.wikipedia.org/wiki/Halo_Infinite&quot;&gt;Halo Infinite&lt;/a&gt; and the delay of its &amp;quot;Campaign&amp;quot; mode worried me at first. Coming from my recent experience with Halo 5, my expectations were low.&lt;/p&gt;
&lt;p&gt;The game brings a few innovations to the series. It has an &amp;quot;open world&amp;quot; outside map, not just a &amp;quot;hub level&amp;quot; like &lt;a href=&quot;https://en.wikipedia.org/wiki/Halo_3:_ODST&quot;&gt;ODST&lt;/a&gt;, that connects to various story missions. This map, taking place on a new Halo ring, is not nearly as gigantic as what we expect from modern open-world games, though it does offer a sufficient number of side activities in between the story missions, for a game duration just a bit longer than previous Halo games.&lt;/p&gt;
&lt;p&gt;It also introduces weapon ammunition recharge stations, with all weapons grouped in 4 color-coded categories. In previous games, the scarcity of ammunition forced the player to pick up new weapons along the level&#39;s progression, but in Infinite one can use the same weapons for a longer time with the greater availability of ammunition. The choice between weapon categories is strategic beyond a simple &amp;quot;rock, paper, scissors&amp;quot; of other RPG-oriented FPS games. In fact, the constant fine-tuning of weapon balancing for the constantly update multiplayer aspect of Infinite seems to bleed over the single-player campaign, making selecting weapons far more about player preference.&lt;/p&gt;
&lt;p&gt;Finally, it introduces the grappling hook, adding vertical mobility, and removing nearly all invisible walls that made the Halo ring environment constrained to well-defined corridors. You can also grapple objects to pick them up, the ground in front of you to boost forward your character, and even enemies or vehicles. The grappling motion and speed add a much-needed momentum of motion that was nearly absent from the Halo series (even Marathon), where even the rocket boost or flying abilities couldn&#39;t make the game as frenetic as &lt;a href=&quot;https://en.wikipedia.org/wiki/Doom_%281993_video_game%29&quot;&gt;DOOM&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Quake_%28video_game%29&quot;&gt;Quake&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Going back to the open-world aspect, it feels like this was the original intent of the Halo games. Much of the &amp;quot;improvisation&amp;quot; aspect of Halo was limited by the nature of its linear sequence of areas. In Infinite, I would often travel to one location to pick up a weapon or vehicle that I would find useful in the other side of the map. The &amp;quot;open box&amp;quot; strategic aspect of Infinite made it the most enjoyable and thrilling Halo game I played since &lt;a href=&quot;https://en.wikipedia.org/wiki/Halo:_Reach&quot;&gt;Reach&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This does come at the cost of less environmental variety and fewer vehicles. Even the story if far more focused, though coming from Halo 5 I did enjoy this approach a lot more. In many ways, while it is less ambitious than Halo 2, Infinite perfectly captured what makes a good Halo game. While its &amp;quot;Infinite&amp;quot; name could imply an end to the series (when compared against Marathon Infinity), I hope this is not the case. Even if the Halo series were to end there, it would do so on a really high note.&lt;/p&gt;
&lt;p&gt;Oh, and Cortana&#39;s clone&#39;s name &amp;quot;Weapon&amp;quot; is silly. It makes sense as a &amp;quot;weapon against Cortana&amp;quot;, but still it&#39;s not a good name. She should name herself &amp;quot;Joy&amp;quot;, since alongside &lt;a href=&quot;https://en.wikipedia.org/wiki/Roland&quot;&gt;Roland&lt;/a&gt;&#39;s &lt;a href=&quot;https://en.wikipedia.org/wiki/Durendal&quot;&gt;Durendal&lt;/a&gt; (referred to in Marathon and &lt;a href=&quot;https://en.wikipedia.org/wiki/Marathon_2:_Durandal&quot;&gt;&amp;quot;Marathon 2: Durandal&amp;quot;&lt;/a&gt;) and the British sword &lt;a href=&quot;https://en.wikipedia.org/wiki/Curtana&quot;&gt;Curtana&lt;/a&gt;, it is said in legends that the 3rd sword forged from the same materials is &lt;a href=&quot;https://en.wikipedia.org/wiki/Charlemagne&quot;&gt;Charlemagne&lt;/a&gt;&#39;s &lt;a href=&quot;https://en.wikipedia.org/wiki/Joyeuse&quot;&gt;Joyeuse&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Halo, Part 4: The Threes</title>
      <link>https://benad.me/blog/2024/06/16/halo-part-4-the-threes/</link>
      <pubDate>Sun, 16 Jun 2024 13:45:00 -0400</pubDate>
      
      <guid>https://benad.me/blog/2024/06/16/halo-part-4-the-threes/</guid>
      <description>&lt;h3&gt;Halo 3&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Halo_3&quot;&gt;Halo 3&lt;/a&gt; resumes on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Xbox_360&quot;&gt;Xbox 360&lt;/a&gt; the story that started in Halo 2. If you play this in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Halo:_The_Master_Chief_Collection&quot;&gt;Master Chief Collection&lt;/a&gt;, it wasn&#39;t remastered like the previous 2 games, so its authentic &amp;quot;early Xbox 360&amp;quot; looks can be jarring. Visually, it didn&#39;t age as well as the other Xbox 360 games in the MCC.&lt;/p&gt;
&lt;p&gt;It terms of gameplay innovation, it also feels a bit like a step backwards, especially by its removal of dual-wielding weapons and being able to play as a &lt;a href=&quot;https://en.wikipedia.org/wiki/Covenant_%28Halo%29&quot;&gt;Covenant&lt;/a&gt; alien. Otherwise though, it feels like a game that was able to fully achieve its vision in Halo 2 due to the technical limits of the original Xbox and Halo 2&#39;s limited development time. The levels are large and detailed, vehicules are even larger, the battles involve more elements at the same time, and so on.&lt;/p&gt;
&lt;p&gt;Its story is more straightforward and runs towards what could have been the conclusion to the whole series. This is why Bungie&#39;s two remaining games in the series are a prequel to Halo CE and some story that takes place between Halo 2 and 3.&lt;/p&gt;
&lt;p&gt;By this point, Halo 3 is confident about what makes a &amp;quot;Halo game&amp;quot;. It is technically superior, isn&#39;t distracted by trying to innovate too much, and so I consider it to be the most representative Halo game in the series. Later games are either not made by Bungie or don&#39;t feature &amp;quot;Master Chief&amp;quot; as their main character. Also, Halo 3 sold very well and is old enough (released 17 years ago) to be fondly remembered as a &amp;quot;classic&amp;quot;.&lt;/p&gt;
&lt;p&gt;And I agree that this is a &amp;quot;classic&amp;quot;. From my experience, it was a nearly perfect FPS game. Apart from the infamous &amp;quot;Cortana&amp;quot; level, all levels were incredibly good. The art, though not the best of the Halo games on the Xbox 360, was amazing. The story was engaging from beginning to end. In short, that game convinced me that the hype around the Halo series was well warranted.&lt;/p&gt;
&lt;h3&gt;Halo 3: ODST&lt;/h3&gt;
&lt;p&gt;While the &amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Halo:_Reach&quot;&gt;Halo: Reach&lt;/a&gt;&amp;quot; game was still being built, another team within Bungie released &amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Halo_3:_ODST&quot;&gt;Halo 3: ODST&lt;/a&gt;&amp;quot;, using the same game engine as Halo 3. ODST brought in a few innovations of its own. It has a &amp;quot;hub&amp;quot; level that ties in the later levels, each about a different member of the ODST, similar to &amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Marathon_Infinity&quot;&gt;Marathon Infinity&lt;/a&gt;&amp;quot;. Another first for the series is an in-game map, something we could take for granted in earlier FPS games that vanished when FPS games moved to fully 3D environments. While your character&#39;s shield recharches as in previous Halo games, for the first time your base health doesn&#39;t heal automatically, and instead you have to pick up health items. Night vision googles can also be used in low-light environments.&lt;/p&gt;
&lt;p&gt;Its story happens during the events of Halo 2 and 3, yet is self-contained, making it easier to follow and more accessible than the rest of the series.&lt;/p&gt;
&lt;p&gt;It&#39;s just a shame that ODST&#39;s single-player campaign is so short. While it is not as technically impressive as Reach, released a year later by Bungie on the same Xbox 360 console, ODST feels closer to the &amp;quot;classic Halo&amp;quot; gameplay compared to &lt;a href=&quot;https://en.wikipedia.org/wiki/Destiny_%28video_game%29&quot;&gt;Destiny&lt;/a&gt;&#39;s influence on Reach.&lt;/p&gt;
</description>
    </item>
    
    
  </channel>
</rss>