2014 Mazda CX-5 Maintenance

The Mazda dealership wanted about $1000 to change the oil, the air filters, the spark plugs, and clean the corrosion off the battery terminals. I laughed and declared that I, too, own a set of wrenches!

I must note that I do prefer Mazda doing the oil change. It saves me time and effort, and I don’t have to worry about being under the car if the ground starts shaking. Yes, please, put the car on a lift, check the brakes, top off the fluids, and do your factory walkaround while I get some paid work done! I’m just not going to pay you a premium to do easy maintenance work. Don’t get fleeced by the dealership, and save your mechanic’s time and expertise for the big jobs!

How To Change Spark Plugs

The 2014-2020 Mazda Skyactiv engines feature a plug-on-coil design that makes changing plugs incredibly simple. Just remove each coil pack but removing the retaining nut with an 8mm socket and lifting the coil pack off the plug well. Use a 14mm deep socket on an extension to reach the plug and unscrew it from the cylinder, then replace the old plugs with new NGK Iridium IX plugs. (As best I can tell, the OEM Mazda plugs are NGK Iridium plugs). Carefully reseat the coil packs on the plugs and replace the retaining nuts.

How To Change The Engine Air Filter

Find the air box (in this car, it’s at the front of the engine compartment on the driver’s side) and unclip the retaining clips to open. Remove the old filter and replace it with the new one (making sure the air is flowing in the correct direction). Reseat the air box lid and replace the clips.

How To Change The Cabin Air Filter

The cabin air filter is almost universally located behind the glove compartment. Open the glove compartment and squeeze inward on the sides to remove. Locate the cabin air filter, then simply remove and replace. Gently replace the glove box, making sure the hinges are aligned.

How To Clean Battery Terminals

I didn’t make a video for this part of the project because it seemed too much a waste of my time and yours. Auto parts stores sell an aerosol battery terminal cleaner that reacts with acid to neutralize it. Follow the directions on the can, then rinse away (in a manner conforming to local EPA regulations–don’t let it wash into a waterway). Just be sure that your cells aren’t exposed or you could neutralize all the electrolyte in the battery, rendering it intert.

A Serial Terminal For Windows Terminal

Since switching to Windows 11, I have fallen in love with Windows Terminal–the built-from-the-ground-up terminal emulator for Windows that combines everything that I loved about Linux and MacOS with the functionality of tabbed windows and a serious dose of customization. However, because much of my command line work falls into communicating with an external device over serial, I wanted to be able to keep that workflow within Windows Terminal like I’m used to doing already. In other words, I didn’t want to have to resort to using a separate GUI like PuTTY when a command-line tool like Screen or Minicom would do just fine. The problem is that, since the removal of HyperTerminal in Windows Vista, Windows has not included a CLI solution for serial communication (which is kinda weird because Telnet is still buried in Windows 11; if the reasoning was because obsolescence, you’d think that Telnet would also get the axe).

Now, since I have Ubuntu installed, I could just install Screen or Minicom and call it a day, but WSL 2 does not support serial communication. If I wanted to use those tools, I would either need to change the WSL version every time I wanted to use the serial port or install another instance of Linux under WSL 1. I mean, it works, but I really just felt it inefficient to have to fire up Debian (the install is smaller than Ubuntu) just so I could use Minicom.

After a little more digging, I found Makerdiary’s Terminal-S. It’s a simple serial terminal written in Python that can be compiled as a self-contained exe. This little gem was exactly what I was looking for in terms of functionality! It automatically connects to the COM port (or drops a list of available ports) and connects using some default settings for baud rate, stopbit, and parity. I can fire up Windows Terminal, invoke the command in PowerShell, and I’m good to go!

Windows Serial Terminal

But this is Windows Terminal, and I have this lovely menu of drop-down presets that will automatically spawn the environment of my choice with some lovely aesthetic theming. So, I want to be able to just click on a new tab and get that full retro terminal feel without needing to pretend I’m even in Windows! What I need to do is alter the program just a smidge so that instead of looking for flags in the command-line structure (ie -b for setting baud rate), the program will just ask me what settings I want to use (including some defaults for simplicity). To do this, I simply altered the @click.command section to only look for serial ports and moved the connection settings to a series of prompts in the main function, like so:

"""
Terminal for serial port

Requirement:

    + pyserial
    + colorama
    + py-getch
    + click
"""

import os
if os.name == 'nt':
    os.system('title Serial Console')

from collections import deque
import sys
import threading

import colorama
import click
import serial
from serial.tools import list_ports


def run(port, baudrate = 115200, parity='N', stopbits=1):
    try:
        device = serial.Serial(port=port,
                                baudrate=baudrate,
                                bytesize=8,
                                parity=parity,
                                stopbits=stopbits,
                                timeout=0.1)
    except:
        print('--- Failed to open {} ---'.format(port))
        return 0

    print('--- {} is connected. Press Ctrl+] to quit ---'.format(port))
    queue = deque()
    def read_input():
        if os.name == 'nt':
            from msvcrt import getch
        else:
            import tty
            import termios
            stdin_fd = sys.stdin.fileno()
            tty_attr = termios.tcgetattr(stdin_fd)
            tty.setraw(stdin_fd)
            getch = lambda: sys.stdin.read(1).encode()

        while device.is_open:
            ch = getch()
            # print(ch)
            if ch == b'\x1d':                   # 'ctrl + ]' to quit
                break
            if ch == b'\x00' or ch == b'\xe0':  # arrow keys' escape sequences
                ch2 = getch()
                esc_dict = { b'H': b'A', b'P': b'B', b'M': b'C', b'K': b'D', b'G': b'H', b'O': b'F' }
                if ch2 in esc_dict:
                    queue.append(b'\x1b[' + esc_dict[ch2])
                else:
                    queue.append(ch + ch2)
            else:  
                queue.append(ch)

        if os.name != 'nt':
            termios.tcsetattr(stdin_fd, termios.TCSADRAIN, tty_attr)

    colorama.init()

    thread = threading.Thread(target=read_input)
    thread.start()
    while thread.is_alive():
        try:
            length = len(queue)
            if length > 0:
                device.write(b''.join(queue.popleft() for _ in range(length)))

            line = device.readline()
            if line:
                print(line.decode(errors='replace'), end='', flush=True)
        except IOError:
            print('--- {} is disconnected ---'.format(port))
            break

    device.close()
    if thread.is_alive():
        print('--- Press R to reconnect the device, or press Enter to exit ---')
        thread.join()
        if queue and queue[0] in (b'r', b'R'):
            return 1
    return 0

@click.command()
@click.option('-p', '--port', default=None, help='serial port name')
@click.option('-l', is_flag=True, help='list serial ports')

def main(port, l):
    port is None
    if port is None:
        ports = list_ports.comports()
        if not ports:
            print('--- No serial port available ---')
            return
        if len(ports) == 1:
            port = ports[0][0]
        else:
            print('--- Available Ports ----')
            for i, v in enumerate(ports):
                print('---  {}: {} {}'.format(i, v[0], v[2]))
            if l:
                return
            raw = input('--- Select port index: ')
            try:
                n = int(raw)
                port = ports[n][0]
            except:
                return
    baudrate = input("Enter baud rate (Default 115200): ")
    if (len(baudrate) == 0):
        baudrate = 115200
    parity = input("Enter parity [N,E,O,S,M] (Default N): ")
    if (len(parity) == 0):
        parity = "N"
    stopbits = input("Enter stop bit (Default 1): ")
    if (len(stopbits) == 0):
        stopbits = 1    
    while run(port, baudrate, parity, stopbits):
        pass

if __name__ == "__main__":
    main()

Of course, it took me a little bit to deconstruct the program (as well as re-learn Python, which I hadn’t really used in any significant capacity for half a decade at least), but now I have it working exactly how I want it to work, and it feels right! Of course, I had never used Python on Windows before, either, so wrapping my head around PowerShell has been enlightening as well (Yes, I’m late to the PowerShell party, so I’m making up for it). Once I figured out how to use Pyinstaller (after remembering how to set a PATH variable in Windows), then I just have to drop the portable EXE file into a nice, out of the way place in Windows (might as well put it in a folder in C:) and make sure that folder is added to the PATH variable.

Add a folder to PATH variable

Adding a folder or application to the global PATH variable is a pretty simple proposition in Windows. From Windows Explorer, right-click on “This PC” and select “Properties”. This will bring up the settings dialog for System > About. Just under the “Device Specifications” section, click “Advanced System Settings” to bring up the traditional System Properties window. Click on the “Advanced” tab, then the “Environment Variables” button at the bottom of the window.

The “Environment Variables” window is divided into to groups: one for the current user and one for the system. In the system group dialog, find and double-click the line for “Path” to edit it. Click the “New” button to add a new line and type in the path for the folder or application you wish to add to the system PATH. When you’re done, click “OK” to close the window and save, then click “OK” to close the Environment Variables window, and finally click “OK” to close the System Properties window.

Customize Windows Terminal

In Windows Terminal, open the settings dialog and click “Add A New Profile”. Fill in the settings as appropriate. I’ve posted mine as a model:


Retrotacular

Of course, the real draw here is giving the terminal tab a lovely old-school green phosphor look which we can do either using the settings GUI to turn on the “Retro terminal effects” (this setting simulates CRT scan lines and gives a nice anti-alias that simulates the phosphorescent glow of the characters on the monitor). I’m using the Cascadia Mono font at 16pt weight to get the look I’m going for and the “Vintage” cursor style will round everything out nicely. For the color scheme, add the following block of code to the settings JSON file, then enable the new “Green Phosphor” color scheme.

{
            "background": "#000000",
            "black": "#000000",
            "blue": "#00FF00",
            "brightBlack": "#00FF00",
            "brightBlue": "#00FF00",
            "brightCyan": "#00FF00",
            "brightGreen": "#00FF00",
            "brightPurple": "#00FF00",
            "brightRed": "#00FF00",
            "brightWhite": "#00FF00",
            "brightYellow": "#00FF00",
            "cursorColor": "#00FF00",
            "cyan": "#00FF00",
            "foreground": "#00FF00",
            "green": "#00FF00",
            "name": "Green Phosphor",
            "purple": "#00FF00",
            "red": "#00FF00",
            "selectionBackground": "#FFFFFF",
            "white": "#00FF00",
            "yellow": "#00FF00"
        }

From here, everything is ready to go! Connect a serial device, fire up the terminal, and you’re off to the races!

How To Install Android Apps On Windows 11 Without Amazon

Microsoft has really leaned into the whole open source world since Staya Nadella took over in 2014, and that’s been pretty wonderful if you ask me. I am completely enamored with their use of GitHub for developing Windows modules, and especially with the Windows Subsystem for Linux that lets me run all my favorite Linux tools right from the convenience of Windows Terminal (which is also pretty awesome, by the way). While Apple has doubled-down on the closed-off, walled-garden ecosystem that they’ve been working on since the debut of the iPhone, Microsoft has gone in the opposite direction (to great benefit), embracing the same kinds of interoperability with Android devices through the Your Phone app. The only piece of the puzzle that’s been missing is the ability to run Android apps directly on the desktop which is where the new Windows Subsystem for Android comes in. Unfortunately, the system is immediately hobbled by having only the Amazon app store available, so we’ll need a way to get any and all apps (and app stores) installed. I generally prefer starting from the Google Play store (which has its own caveats, of course), so we’ll need to go through an alternative installation process to set up WSA rather than the straightforward installation via the Microsoft Store.

This tutorial is based on work previously put together by the WSA Community on GitHub with my own commentary to clarify or expand on the subject matter.

Install Windows Subsystem for Android and Windows Subsystem for Linux from the Microsoft Store

The first step in getting the Google version of WSA is to install the stock version (with Amazon) from the Microsoft Store. There are several dependencies that WSA requires, so this is the quickest and easiest way to have them installed on your machine. Once WSA is installed, you can skip signing into the Amazon App Store and uninstall the stock WSA.

To compile a custom version of WSA, we’re going to need a few tools that run exclusively in Linux (Android being based on the Linux kernel, but you knew that). Grab your preferred flavor from the Microsoft Store. I’m using Ubuntu because that’s the one I’m most familiar with (being my daily driver for half a decade). Once you have WSL installed, open a PowerShell terminal and type wsl --list --verbose to verify that your distro is running WSL version 2. If, for whatever reason, your distro is running WSL version 1, you’ll need to stop the WSL with wsl --shutdown and type the following command:

wsl --set-version <distro name> 2 where <distro name> is the name of your distro as listed when you ran the –list command earlier. This will take just a few moments, and you’ll be ready to continue!

Install Linux packages

If you’ve already set up your Linux distro as a tab in Windows Terminal, good on you! Open that tab and get ready to Bash. For the rest of you, start your distro by invoking the following in a PowerShell terminal:

wsl -d <distro name>

Now you’ve got your Linux distro up and running, so the following commands will be entered at the $ prompt (instead of the Windows > prompt):
sudo apt update
sudo apt install unzip lzip

Prepare Installation Folder

Back in Windows Explorer, create a folder at C:\WSA. This is going to be the working folder for our installation. Now, we need to download the installation package. However, since we’re going to be modifying the package, we can’t just grab it from the Microsoft Store (that’s what we did earlier). You’re also going to want to install a Zip archive manager like 7Zip or PeaZip.

Download the WSA installation package

We’re going to use a link generator service to get the installation package from the Microsoft Store’s repository. Navigate to https://store.rg-adguard.net and enter the following settings before clicking the check mark:

ProductID: 9P3395VX91NR

RP: Fast

You’ll be presented with a list of all the files related to that Product ID, but we’re looking for the *.msixbundle file extension associated with WindowsSubsystemForAndroid. The file should measure around 1.3GB. Download the package file to your C:\WSA folder and open it with your Zip manager. You’re going to see a lot of files with the *.msix extension, but sort them by size to find the biggest files. Find the one that matches your OS architecture (for example, WsaPackage_X.X.XXXXX.X_x64_Release-Nightly.msix for a 64-bit Windows) and extract it.

Now, extract the contents of the *.msix file to a new folder within C:\WSA. Locate and delete the following:

“AppxBlockMap.xml”

“AppxSignature.p7x”

“[Content_Types].xml”

and delete the “AppxMetadata” folder.

Download OpenGApps

Navigate to https://opengapps.org/ and download the Android 11.0 Pico variant for your architecture.

Save the Zip file in the C:\WSA folder, but don’t extract it.

Clone the GitHub Repo and Populate Directories

Fire up your WSL distro and mount your C:\WSA directrory so you can clone the WSAGAScript repo by running the following at your WSL ($) prompt:
cd /mnt/c/WSA
git clone https://github.com/WSA-Community/WSAGAScript

(NOTE: If this repository fails, I have a fork at https://github.com/airbornesurfer/WSAGAScript)

In Windows Explorer, go back to your extracted WsaPackage folder (the one you deleted files from earlier) and copy the following files into the C:\WSA\WSAGAScript#IMAGES folder:

product.img

system.img

system_ext.img

vendor.img

Lastly, copy the GApps Zip file downloaded earlier into C:\WSA\WSAGAScript#GAPPS (again, do not extract it).

Create the New Installation Package

Check the “VARIABLES.sh” file to verify that your architecture is set correctly, then set the permissions for the scripts that will create the new installation images. From your WSL terminal (you should still be in mnt/c/WSA/WSAGAScript), invoke the following command:

chmod +x *.sh

You can verify the scripts are now executable by invoking ls -l and checking that the *.sh files show “-rwxrwxrwx”. If all is set, then execute the scripts by invoking the following:

./extract_gapps_pico.sh
sudo ./extend_and_mount_images.sh
sudo ./apply.sh
sudo ./unmount_images.sh

Once complete, move the *.img files from the C:\WSA\WSAGAScript#IMAGES folder back to the WsaPackage folder you previously copied them from.

Register the New Installation Package and Install

Open Windows Developer Settings (search “Developer Settings” from the Start Menu) and enable Developer Mode. Close Windows Terminal and open a new PowerShell Terminal as Administrator, then invoke the following command: Add-AppxPackage -Register <path-to-extracted-msix>\AppxManifest.xml where <path-to-extracted-msix> is the path to the WsaPackage folder inside C:\WSA.

WSA will now install with GApps. Once complete, sign into the Google Play Store and install “Android System WebView” to make sure your apps don’t crash.

Restoring Wii Online Services With RiiConnect24 and Wiimmfi

There is something kinda fun about those early internet apps that landed on the Wii. They’re definitely not worth anything more than historical curiosity at this point, but I think they’re still worth having around for play with. Then again, I like to use a 40-year-old luggable to play games on because it’s interesting, so maybe I’m not the best judge of this.

Restore online services with RiiConnect24

First, hit up the RiiConnect24 GitHub and download the latest version of the WAD patcher. It’s a pretty straightforward endeavor from there to just run the batch or sh file (depending on your OS flavor preference). Just follow the directions and be patient.

Once the patcher has done its job, return your SD card to the Wii and launch Wii Mod Lite from the Homebrew Channel. Like we did with the USB Loader GX channel WAD, select the files you want to install, then press A twice to install the batch. One thing to note: there may be an update to one of the service channels listed in the batch with the base channel WAD. Do NOT attempt to install the update WAD with the batch as it will likely fail. Exclude the update, install the batch, then install the update WAD. If you forget, you’ll need to uninstall both the update and the base WAD, then install one at a time.

Patching Wii Mail

From the Homebrew Channel, launch the RiiConnect24 Mail Patcher. Follow the instructions on screen, then press HOME when it’s finished. You’ve got mail!

Connecting to the new servers

Just like we did for str2hax, we’ll need to change the Wii’s DNS servers. Go to Wii Settings, Internet, and Connection Settings, then scroll to the “Auto-Obtain DNS” page. Select “No” then “Advanced Options” and enter 164.132.44.106 as the primary DNS and 1.1.1.1 as the secondary DNS.

Click “Confirm” and “Save” then “OK” to perform the connection test. Of course, don’t update the Wii.

Return to the Settings menu, and select “WiiConnect24” to make sure that “WiiConnect24” and “Standby Connection” are both enabled.

Finally, return to the “Internet” section and read/agree to the User Agreement.

Enable Wiimmfi for online play

Since Nintendo shuttered the Nintendo Wi-Fi Connection, officially-sanctioned online play has been dead. However, thanks to dedicated fans of the system, robust online play still exists on Wiimmfi’s private servers. You’ll need to enable these in a few different places:

For disc-based games, you’ll need the Priiloader patch. Launch Priiloader by holding RESET and powering on the Wii. Select “System Menu Hacks” and enable “Wiimmfi Patch v4”. Save settings and exit.

For games loaded from hard drive, USB Loader GX has support for Wiimmfi built in. The global loader options will have a selection for “Private Server” that can be set to Wiimmfi. Save those settings and USB Loader GX will patch each game when it runs!

For WiiWare titles, you can use the RiiConnect24 WAD patcher as described above, then reinstall the patched WAD with Wii Mod Lite.

How To Install USB Loader GX on Wii

Now that we have The Homebrew Channel available to us, we can install a few niceties that can breathe a little life back into the unsupported mid-aughts console. First among these, we’ll need the ability to run custom firmware for the Wii (referred to as IOS). To do this, we’ll need the dx2 cIOS Installer. Download the application, unzip the archive, and place it in the apps folder of the SD card. Once the SD card is in the Wii, you can run the installer from The Homebrew Channel.

Install custom firmware on the Wii

Once the application loads, press A to continue, then match the settings as seen below:

Select cIOS: v10 beta52 d2x-v10-beta52

Select cIOS base: 57

Select cIOS slot: 249

Select cIOS version: 65535

Press A twice to install, then press A again to install the next cIOS:

Select cIOS: v10 beta52 d2x-v10-beta52

Select cIOS base: 56

Select cIOS slot: 250

Select cIOS version: 65535

Again, press A twice to install, then press A again to install the final cIOS needed:

Select cIOS: v10 beta52 d2x-v10-beta52

Select cIOS base: 38

Select cIOS slot: 251

Select cIOS version: 65535

Press A twice to install, then B to exit once completed.

Install USB Loader GX through Homebrew Browser

Download Homebrew Browser and place on the SD card like with the previous apps. Back on the Wii, launch The Homebrew Channel and select Homebrew Browser. At the very least, you’ll want to install USB Loader GX, Wii Mod Lite, and Nintendont. USB Loader GX is a full-fledged system menu replacement for Wii (and can be launched at boot through Priiloader) that will launch backup titles from a USB hard drive as well as install games to the hard drive. Wii Mod Lite will let you install custom channels to the system menu. Nintendont works inside USB Loader GX to handle launching GameCube games. Both apps are listed under the “Utilities” heading and should be at the very top (sort by popularity). Once the apps are installed, you can exit the Homebrew Browser.

A few notes about using USB Loader GX

USB Loader GX can be launched from the Homebrew Channel or through Priiloader. To launch from Priiloader, you’ll have to point the “Installed File” setting to the application and set the auto boot to “Installed File”.

The loader takes a few seconds longer than the stock Wii system menu to load because it’s checking for a USB hard drive. Also: make sure to use a USB hard drive. Flash drives tend to not work with USB Loader GX.

If a game does not load from the hard drive, try using a different cIOS. Select the problematic game, then click “Settings”. Click “Game Load”, then “Game IOS”. Enter the IOS you wish to try (249, 250, or 251), then click “OK”. Return to the banner screen and attempt to load the game. If the game doesn’t load, rinse and repeat. GBATemp has a pretty extensive compatibility list available here.

Installing USB Loader GX as a channel

If you prefer to keep the stock system menu on the Wii, you can still easily load USB Loader GX as a channel (saving you the step of having to go through The Homebrew Channel to launch). To do this, you’ll need to install the forwarder WAD. Download the WAD from the website and drop it in a folder called “wads” on your SD card. From The Homebrew Channel, launch Wii Mod Lite. Use the D-pad to select “WAD Manager”, then navigate to the wads folder on the SD card. Highlight the WAD file that you want to install and press A twice to install. Once installed, use the HOME button to return to the system menu. USB Loader GX will now appear as a channel!

How To Install The Homebrew Channel To Nintendo Wii

My wife’s Wii has been languishing on a shelf for the past several years, so I wanted to breathe a little life back into it. Ever since the NES Classic launched a wave of “mini” self-contained consoles, I wanted to extend that kind of convenience to all the consoles in our collection. There’s a much different experience playing a game on something resembling the original hardware than there is using an emulator on a PC, but I wanted to be able to do it without the wear and tear on optical drives or having to worry about damaged discs. So, I decided to install a USB loader on the Wii in order to be able to play those discs from backups stored on a hard drive and keep the originals in their cases for posterity!

Installing The Wii Homebrew Channel using str2hax

There are several different ways to install The Homebrew Channel on the Nintendo Wii, but this guide will be using str2hax since I don’t have an SD card available at the moment. (I’ll fix that soon.)

In the Wii settings menu, click on “Internet”, then “Connection Settings”, then your current connection.

From there, select “Change Settings” and skip forward until you reach the DNS settings (“Auto-Obtain DNS”) menu. Select “No” and then click “Advanced Settings”. Type in 18.188.135.9 as the primary and secondary DNS. Press “OK” and perform the connection test. If the connection was successful, you can click “No” to skip the system update.

Go back to Internet settings, then click “User Agreements”, then “Yes”. The system will appear to freeze for a couple of minutes. This is normal. In about 1.5-2 minutes, you will get a screen featuring a pixelated Rainbow Dash taking a nap. Welcome to the HackMii installer. Click “I ACCEPT” and wait for the installer to download.

After another few minutes, you will get a warning screen declaring that the software you are using is to be distributed free of charge and is not allowed to be exchanged for money. Thirty seconds later, “Press 1 to continue” will flash on the screen. Press 1 to continue.

On the Hackmii installer main menu, highlight “Install the Homebrew Channel” using the D pad, and press A to select. Select “Continue” once the installation is finished. At this point, I would install BootMii, but my SD card was having problems. I opted to skip this step and revisit it later once I knew my SD card worked, so for now, select “Exit”. (BootMii can be installed by launching the Hackmii Installer from The Homebrew Channel.)

Install Priiloader for brick protection

Since BootMii didn’t want to install yet, I opted to install Priiloader to have a level of brick protection. This application is a custom bootloader that allows you to select how you want the Wii to boot (either to stock system menu or to any number of bootable apps you can install). It also allows you to run recovery discs in case of a bricked system, so it’s pretty invaluable when embarking on this hackery nonsense. The trick to using any old SD card is making sure that you do a full (overwrite) format as FAT32. Once that’s formatted, you can download the Priiloader installer from GitHub, unzip the archive, and drop the “apps” folder into the root of your SD card.

A note about the Wii SD card

Homebrew apps on the Wii SD card live in a folder called “apps” in the root directory. Inside the “apps” folder, each app will have its own folder, and each app folder will contain a “boot.dol” or “boot.elf” file, an “icon.png” file, and a “meta.xml” file. If you’re having trouble with any Homebrew apps, check to make sure all these conditions are met.

Install Priiloader through The Homebrew Channel

Insert the SD card into the slot on the front of the Wii and launch The Homebrew Channel from the system menu. Click the Priiloader Installer and follow the directions on the screen. Once you return to The Homebrew Channel, power off the Wii.

Configure Priiloader

To boot into Priiloader, hold the RESET button while powering on the Wii. Once Priiloader loads, you can release RESET. For the initial configuration, highlight “System Menu Hacks” with the D-pad and select with A. For the initial configuration, enable “Region Free EVERYTHING”, “Block Disc Updates”, “Block Online Updates”, “Auto-Press A at Health Screen”, and “Replace Health Screen with Backmenu”. Save your settings, the press B to return to the main menu. Highlight “System Menu” to boot to the Wii home screen.

How To Activate Descaling Mode On A Keurig K-Supreme Plus

My wife loves her Keurig. I’m the one that has to maintain it, though.

When that “DESCALE” message comes up on the little screen, it’s time to run some citric acid through the machine and get rid of all those fun hard water deposits that inevitably make it through the filter. Don’t buy the overpriced Keurig brand, just grab the cheapest citric acid cleaner you can find.

However, before you dive in, you’ll need to invoke the special “Descale Mode” on the Keurig. Activate this mode by powering off the Keurig, then holding the “8oz” and “12oz” buttons until the “K” button lights up and “DESCALE” appears on the screen. Follow the directions on the bottle from here, and you’ll be in good shape! The Keurig will return to normal function once the program is finished.

How To Update Plex Plugin TrueNAS

Once upon a time, during the dark ages, we had to run several shell commands–like savages–to get the Plex plugin in TrueNAS (or FreeNAS, if you go back that far) to update. One had to fetch, then unpack the tarball, then move to the right directory, change ownership, and finally run the script! It was quite a pain when Plex was coming out with a new update every week (or so it seemed), and got to be more annoying than productive.

Fortunately, we don’t have to live like animals anymore because [mstinaff] wrote a nice, simple shell script to take care of all the heavy lifting! You can even set it up as a cron task to run on schedule (for when Plex decides to start issuing updates every few days again).

Let’s start by assuming that you know how to access your TrueNAS jails. On the Jails dialog, open Plex, then DO NOT CLICK “Update”. Click “Shell”.Once you’ve got your root prompt in the shell, download the updater by invoking the following command:
fetch https://raw.githubusercontent.com/mstinaff/PMS_Updater/master/PMS_Updater.sh

From here, you can just run the shell script with sh PMS_Updater.sh

Automating Plex updates on TrueNAS with cron jobs

To set up a cron job on your TrueNAS installation, navigate to the Tasks > Cron Jobs dialog. Click the “ADD” button to create a new cron job and give it a descriptive name such as “Plex update”. Then, enter the following in the “Command” field:

/usr/local/bin/iocage exec [plexjail] /bin/sh /usr/local/PMS_Updater/PMS_Updater.sh -r -a -v

Substitute the name of your Plex jail for [plexjail]. Mine is just called “plex“. The -r flag will keep your installation clean by removing the older packages before installing the new one. The -a flag automatically updates to the newest version without user intervention. Finally, the -v flag runs the script in verbose mode, so you’ll have a log available just in case anything goes wrong.

Set the “Run As User” field to root, and set your preferred schedule. I run mine weekly on Sunday nights. From here, make sure your job is enabled, and click “SAVE”. Now, you shouldn’t have to make another manual Plex update again!

How To Install Windows Applications To Removable Media

Not enough stickersI picked up one of those super-cheap ~$200 Windows 10 netbooks from Best Buy a while back because I wanted something inexpensive to keep at the shop for incidental tasks like programming microcontrollers or burning SD cards for Raspberry Pi. Unfortunately, someone at Microsoft boasted that Windows 10 could be installed on a 32GB storage drive, so manufacturers like Asus put exactly 32GB in their discount netbooks leaving very little space (after updates, usually less than 5GB) to install applications.

Fortunately, Windows 10 comes out of the box with the ability to change the default storage locations for the library folders and installation location for apps installed via the Windows Store. However, I use a lot of applications that aren’t available in the Store and I also require a fair bit of space for screen capture videos when I’m walking through a project, so I’m going to need some extra storage space. At least the little Asus that I selected has a MicroSD card slot so I can just grab a 128GB unit and leave it inserted. Windows treats it like any other removable media, but be warned: the MicroSD read/write speed isn’t anything you’re going to write home about! Applications are going to load more slowly, but in most cases will run just fine from RAM. (Writing that previous sentence gave me weird flashbacks of the 8- and 16-bit eras when we often ran applications directly from a floppy and experienced the associated slowdowns.)

Windows 10 Storage Options
Access Windows storage options by using the search function.

Install Windows Applications To SD Card

In most cases, Windows application installers will offer the option to select the install folder. For these, I just have the folder structure of the C: drive root copied to my MicroSD card, notably the Program Files and Program Files (x86) folders, so I just change the drive letter and everything installs like normal. However, many newer applications take advantage of the Windows User/AppData folder to store local data. One notorious example is Fusion360, which installs to the AppData folder and offers no option to do otherwise! For these exceptions, we’ll need to create a symbolic link from the C: version of the AppData folder to the D: drive location.

Use Symbolic Link To Redirect Folders

First off, using a symbolic link to redirect system folders to another location is generally bad practice because it can expose the machine to symlink attacks, but considering we’ve been backed into a corner by arrogant developers and clueless manufacturers, we’re going to need to pull this trick out of the bag. I wouldn’t use this kind of workaround on any mission critical systems, but it should be just fine for this little auxiliary machine. (Technically, Windows shortcuts are symbolic links, so we’re not doing anything too weird. We’re just forcing Windows to use a different storage location for something it prefers to have on the main storage device). The first step is to create a directory on the D: drive that will hold our AppData (since it’s a hidden folder and I’m the only user, I’ll just put it in D:\AppData). From here, just copy the contents of the AppData directory over to the new location and delete (yes, I said delete) the original.

Create Symbolic Links With Windows Command Line

Windows comes with the mlink command to create symbolic links, but you have to use the Command Line terminal to invoke it. Open an elevated command prompt (one with Admin privileges) by pressing Win + X and selecting the appropriate option from the list. The syntax for the command is as follows:

mlink /switch <link> <target>

So, to make C:\Users\<user>\AppData point to the new location on the D: drive, we’ll invoke the following command:

mlink /D "C:\Users\<user>\AppData" "D:\AppData"

Once the link is created, as far as Windows is concerned, the two locations are the same place. If an application needs to access the folder, it will seamlessly connect to the location on D:. As such, Fusion360 will run without a hitch (although it will load more slowly due to the reduced read/write speed)!

Unfortunately, this trick does not work to upgrade Windows 10 to 11, so this machine will be stuck in the late 2010s forever (or until I decide to install Linux on it…again).

How To Run Old Windows Games on Windows 11

As much as I love to dig out one of my vintage laptops to get theĀ full nostalgic retro gaming experience, sometimes it just isn’t very practical to fire up Windows 95 for a quick round of JezzBall. Unfortunately, the newer versions of Windows built on 32 and 64-bit architectures won’t run these old software relics. However, unlike Apple, Microsoft actually values backwards-compatibility. (Of course, this is mostly by necessity considering how many enterprises are running legacy software as well as due to the support of independent developers regularly bending the OS to their will, instead of the other way around.)

Windows Entertainment PackVirtue signalling aside, as part of my recent two-foot leap back into the daily-driver Windows world, I wanted to revisit one of my favorite casual diversions of the 16-bit era: Microsoft Entertainment Pack.

The only problem, of course, is that Entertainment Pack is a 16-bit application and Windows 11 won’t run 16-bit applications out of the box. Enter otvdm (forked from winevdm). Based on Wine, otvdm is a compatibility layer that adds the ability to run 16-bit Windows binaries in 64-bit exclusive versions of Windows much like the new Windows subsystems for Linux and Android. (At this point, Windows is almost a Swiss Army knife of computing, taking everything I’ve enjoyed from the Linux world without having to spend a few hours either setting up new hardware or reconfiguring everything after an update.)

How To Run 16-bit Windows Applications In 64-bit Windows

To use otvdm, download the latest release from GitHub, then unzip to the directory of your choice. From here, you can simply use otvdm as a portable installation by dragging and dropping your 16-bit application onto the otvdm.exe binary, and you’re all set!

If, like me, you prefer to have a more seamless integration into Windows, you can install otvdm with one of the included installer shortcuts. If you prefer to not show the console window while your application runs, use the “install (no console)” shortcut. At this point, 16-bit Windows applications (and their installers, for that matter) will run just like any other Windows application! Now, I’ll never get any work done ever again.

JezzBall
JezzBall on Windows 11!