<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>jevans.bio</title>
    <link href="https://jevans.bio/atom.xml" rel="self"/>
    <link href="https:&#x2F;&#x2F;jevans.bio"/>
    <updated>2025-12-25T05:25:42-0700</updated>
    <id>https:&#x2F;&#x2F;jevans.bio</id>

    
    
    
    
        
        <entry>
            <title>now</title>
            <link href="https:&#x2F;&#x2F;jevans.bio&#x2F;now&#x2F;"/>
            <updated>2025-02-14T00:00:00+0000</updated>
            <id>https:&#x2F;&#x2F;jevans.bio&#x2F;now&#x2F;</id>
            <content type="html">&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;designing a home theater cabinet&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;upgrading my Voron&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;designing a portable monitor using Framework laptop components&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;building a Monolith&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;reading:
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Blood in the Machine by Brian Merchant&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;American Trade Unionism by William Z. Foster&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;The Mechanic and the Luddite by Jathan Sadowski&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;2025-02-14&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Why a now page? &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;nownownow.com&amp;#x2F;about&amp;quot;&amp;gt;https:&amp;#x2F;&amp;#x2F;nownownow.com&amp;#x2F;about&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
</content>
        </entry>
        
    
    
    
        
        
            
            <entry>
                <title>Phones Suck</title>
                <link href="https:&#x2F;&#x2F;jevans.bio&#x2F;blog&#x2F;20250222-phones-suck&#x2F;"/>
                <updated>2025-02-22T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;jevans.bio&#x2F;blog&#x2F;20250222-phones-suck&#x2F;</id>
                <content type="html">&amp;lt;p&amp;gt;I&amp;#x27;ve thought about this a lot since listening to investigative journalist &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;infosec.exchange&amp;#x2F;@josephcox&amp;quot;&amp;gt;Joseph Cox&amp;lt;&amp;#x2F;a&amp;gt; &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.404media.co&amp;#x2F;podcast-pokemon-go-to-the-military-industrial-complex&amp;#x2F;&amp;quot;&amp;gt;talk about that he doesn&amp;#x27;t have a phone and why&amp;lt;&amp;#x2F;a&amp;gt;. At that point, I already had a Google Pixel phone that I loaded &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;grapheneos.org&amp;#x2F;&amp;quot;&amp;gt;GrapheneOS&amp;lt;&amp;#x2F;a&amp;gt; onto, which is the absolute best you can do in terms of &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;en.wikipedia.org&amp;#x2F;wiki&amp;#x2F;DeGoogle&amp;quot;&amp;gt;DeGoogle&amp;lt;&amp;#x2F;a&amp;gt;-ing and security if you want to use Android. Since then I&amp;#x27;ve been trying to see what it takes to really break away for someone who uses their phone A LOT, simply as an exercise and to learn more.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;how-you-are-being-tracked&amp;quot;&amp;gt;How You are Being Tracked&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;First, there are multiple levels of tracking to be aware of:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;span id=&amp;quot;continue-reading&amp;quot;&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Per-app tracking&amp;lt;&amp;#x2F;strong&amp;gt;. This is the most obvious form of tracking, and is what is usually talked about in the news.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Advertising ID (MAID) and cross-site cookies&amp;lt;&amp;#x2F;strong&amp;gt;. MAID is an operating-system-wide identifier that apps can use to identify you and connect your activity to other apps even without directly communicating between apps on your device. This is what most of those scary tracking apps that you might &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.eff.org&amp;#x2F;deeplinks&amp;#x2F;2022&amp;#x2F;06&amp;#x2F;how-federal-government-buys-our-cell-phone-location-data&amp;quot;&amp;gt;see in the news&amp;lt;&amp;#x2F;a&amp;gt; use. They get their data from apps selling your data to them after you give those apps access to your MAID and GPS when you install them. Alternative versions of Android like GrapheneOS get rid of this. Cross-site cookies can usually be turned off on your mobile web browser, but they can have similar functionality to the MAID.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;SIM-level ID (IMSI)&amp;lt;&amp;#x2F;strong&amp;gt;. This is tied to your SIM card or eSIM and can be tracked using using devices like Stingrays (often used by law enforcement). Some software has access to this. Swapping to a different SIM card or eSIM is how you generally can change this.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Device ID (MEID or IMEI)&amp;lt;&amp;#x2F;strong&amp;gt;. This is a hardware ID for your phone that stays with it no matter if you change SIMs or not. This can also be tracked by law enforcement. This can generally not be changed.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ol&amp;gt;
&amp;lt;p&amp;gt;Even if you put your phone in Airplane mode, it will still communicate your IMSI and MEID to nearby cell towers. The only way to make it not do that is to cut power to your modem which, in pretty much every phone, means not only powering off your phone, but draining your battery all the way (since you can&amp;#x27;t remove them in the vast majority of phones these days). Even with your phone off, it may still transmit because you aren&amp;#x27;t in full control of the software or firmware on your phone and their definition of &amp;quot;off&amp;quot;.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The best thing you can do if you want to keep a single phone and be tracked as little as possible is to keep to keep it in a Faraday bag and only pull it out when you absolutely need it. I don&amp;#x27;t do this yet, but I&amp;#x27;ve considered it.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;smartphones&amp;quot;&amp;gt;Smartphones&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;There are other alternative Android versions that have some of the same features, but buying a used Google Pixel 8a for $260, throwing GrapheneOS on it, and getting security updates until May 1, 2031 is very difficult to beat. Yes, I am fully aware of the irony of using Google hardware to DeGoogle, but there are just no other companies creating competitive hardware from a security perspective. If you are in the market for a new phone, and you want to install an alternative Android OS on it, it doesn&amp;#x27;t matter what your &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;en.wikipedia.org&amp;#x2F;wiki&amp;#x2F;Threat_model&amp;quot;&amp;gt;threat model&amp;lt;&amp;#x2F;a&amp;gt; is, just get the best since it&amp;#x27;s so easy.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Cox uses a WiFi-only iPad Mini to do his mobile computing which, I have to admit, is beautiful hardware. If you are okay with Apple &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.bundeskartellamt.de&amp;#x2F;SharedDocs&amp;#x2F;Meldung&amp;#x2F;EN&amp;#x2F;Pressemitteilungen&amp;#x2F;2025&amp;#x2F;02_13_2025_ATTF.html?nn=48916&amp;quot;&amp;gt;not holding itself to the same non-tracking standard it holds third parties to&amp;lt;&amp;#x2F;a&amp;gt;, and you don&amp;#x27;t care about running a locked-down proprietary operating system, then that is a fine option. I&amp;#x27;m not okay with those things, so I&amp;#x27;ll be staying away from Apple products.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The third option here is to get something like a OnePlus 6 and installing a Linux operating system on the phone. This, very unfortunately, just isn&amp;#x27;t ready for prime time. Often the core features of the phone (microphone, speakers, camera, on-screen keyboard, etc.) simply do not work.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Even with GrapheneOS or Linux, there are still problems with smartphones that are baked into the hardware that are not easy to get around.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;There is a new cell service company called Cape that claims to rotate or randomize your IMSI and MEID. Their plan costs $99&amp;#x2F;month, and it&amp;#x27;s not immediately clear if that functionality is available with just their plan, or if you need their special phone + plan that they don&amp;#x27;t even advertise a price for. Joseph Cox &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.404media.co&amp;#x2F;i-dont-own-a-cellphone-can-this-privacy-focused-network-change-that&amp;#x2F;&amp;quot;&amp;gt;looked into this company as well&amp;lt;&amp;#x2F;a&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;dumb-phones&amp;quot;&amp;gt;&amp;quot;Dumb&amp;quot; Phones&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Switching to a &amp;quot;dumb&amp;quot; phone might get rid of the MAID, but lots of dumb phone operating systems like KaiOS (what Nokia and other companies use) have OS-level ads and track the hell out of you, too. They&amp;#x27;re even more difficult to reason about than Android because they&amp;#x27;re just not as common, so they get less attention. The &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;ivan-hc.github.io&amp;#x2F;bananahackers&amp;#x2F;&amp;quot;&amp;gt;BananaHackers&amp;lt;&amp;#x2F;a&amp;gt; mods for KaiOS can block ads and probably block tracking, but it&amp;#x27;s all very murky.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I considered switching to something like a Nokia 800 Tough for a while, normally keeping it off and in a Faraday bag, and I still might, but only for cost savings ($100 for the phone and $8&amp;#x2F;month for phone service) and long battery life. The weirdness with KaiOS and the lack of hardware support puts me off, though.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Mudita is a dumb-phone manufacturer that uses their own &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;mudita&amp;#x2F;MuditaOS&amp;quot;&amp;gt;open-source operating system&amp;lt;&amp;#x2F;a&amp;gt; which makes their devices potentially a better option. Unfortunately their Mudita Pure phone has not been well received, &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;idiomdrottning.org&amp;#x2F;mudita-pure&amp;quot;&amp;gt;even by people working on the project&amp;lt;&amp;#x2F;a&amp;gt;, so it&amp;#x27;s safe to say they have some growing pains.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;They have a new device coming out this year, the Mudita Kompakt, that they claim will fix a lot of the issues that people had with the Pure, but I&amp;#x27;ll remain skeptical until it gets fully reviewed. One feature that makes the Kompakt a potentially &amp;lt;em&amp;gt;very&amp;lt;&amp;#x2F;em&amp;gt; interesting device is the &amp;quot;Offline+&amp;quot; feature they are shipping with it that is both a hardware and a software switch to power off the modem and microphones on the device. This could potentially replace the need for a Faraday bag and could be awesome.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;what-to-do-then&amp;quot;&amp;gt;What To Do, Then?&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;My current plan is to keep my Pixel, get a Faraday bag, treat it like a dumb phone, and supplement it with a &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.crowdsupply.com&amp;#x2F;cool-tech-zone&amp;#x2F;tangara&amp;quot;&amp;gt;Tangara portable music player&amp;lt;&amp;#x2F;a&amp;gt; for podcasts and music, a digital camera, and a &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;shop.mntre.com&amp;#x2F;products&amp;#x2F;mnt-pocket-reform&amp;quot;&amp;gt;MNT Pocket Reform&amp;lt;&amp;#x2F;a&amp;gt; laptop.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;If the Mudita Kompakt is any good, I&amp;#x27;ll probably switch to that eventually and get the cheapest cell service available.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;With this plan in mind, I&amp;#x27;ve been combing through all of the apps I use to come up with a way to perform those functions without a smartphone. The biggest pain-points I&amp;#x27;ve found are public transit which is increasingly requiring a smart phone (which is absolutely insane), concert venues which are doing the same, and my local grocery store which is increasingly locking &amp;quot;member deals&amp;quot; behind an app specifically designed to track you. &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.theguardian.com&amp;#x2F;money&amp;#x2F;2025&amp;#x2F;feb&amp;#x2F;22&amp;#x2F;the-tyranny-of-apps-those-without-smartphones-are-unfairly-penalised-say-campaigners&amp;quot;&amp;gt;I&amp;#x27;m not the only one frustrated about this&amp;lt;&amp;#x2F;a&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Thankfully my local transit agency will give you a card to use instead of a phone if you order it online. I had to wait &amp;lt;strong&amp;gt;a month&amp;lt;&amp;#x2F;strong&amp;gt; for mine to come in the mail, though. The small concerts that I care about still let you purchase tickets with cash day-of, so I&amp;#x27;ll just be doing that. As for my grocery store, I&amp;#x27;ll just be paying more for groceries and looking for alternative stores.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;also-worth-a-look&amp;quot;&amp;gt;Also Worth a Look&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;The &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.crowdsupply.com&amp;#x2F;sutajio-kosagi&amp;#x2F;precursor&amp;quot;&amp;gt;Precursor&amp;lt;&amp;#x2F;a&amp;gt; device is &amp;lt;em&amp;gt;very&amp;lt;&amp;#x2F;em&amp;gt; cool. It&amp;#x27;s nowhere near becoming a phone replacement, but maybe it will be something like that in a decade. It&amp;#x27;s something I&amp;#x27;ll be keeping my eye on for a while.&amp;lt;&amp;#x2F;p&amp;gt;
</content>
            </entry>
            
        
            
            <entry>
                <title>Trials and Tribulations of Setting Up a Home Theater</title>
                <link href="https:&#x2F;&#x2F;jevans.bio&#x2F;blog&#x2F;20241123-trials-and-tribulations-of-setting-up-a-home-theater&#x2F;"/>
                <updated>2024-11-23T00:00:00+0000</updated>
                <id>https:&#x2F;&#x2F;jevans.bio&#x2F;blog&#x2F;20241123-trials-and-tribulations-of-setting-up-a-home-theater&#x2F;</id>
                <content type="html">&amp;lt;p&amp;gt;&amp;lt;img src=&amp;quot;https:&amp;#x2F;&amp;#x2F;i.snap.as&amp;#x2F;hL7khtR5.png&amp;quot; alt=&amp;quot;&amp;quot; &amp;#x2F;&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;the-problem&amp;quot;&amp;gt;The Problem&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;I share a small apartment with my partner and I have a love for locally-controlled smart-home stuff. One of the biggest hurdles when trying to make our apartment &amp;quot;smart&amp;quot;, is that I want to make sure that my partner, and anyone who visits can interact with everything intuitively. This means that light switches have to work like normal switches, that a remote control does what you think it does, and, above all, that you never &amp;lt;em&amp;gt;need&amp;lt;&amp;#x2F;em&amp;gt; to open an app to do anything you would do in any other home.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;At the same, I try to avoid all-in-one devices as much as possible because they afford far less customization and control, and because they become a single point of failure that can end up being expensive and create a lot of e-waste. The biggest downside to this approach is that I often take a big hit in the “convenience” department.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;It’s undeniable that integrating many parts of a system makes the user experience a lot easier. This is part of why internet service providers give customers an all-in-one modem, firewall, router, switch, and wireless access point. Managing individual devices for all of those functions for an normal user would be overkill and a nightmare to maintain.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;At the same time, modem interfaces, CPU power, Ethernet controllers, and WiFi versions all evolve at different rates, and with an all-in-one device, you have to replace the whole thing any time you want a new feature in any one of those parts, or risk having to dive into the software&amp;#x2F;firmware of your device to make it work nicely with other parts and&amp;#x2F;or having the old device reduce the functionality of your new part.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;span id=&amp;quot;continue-reading&amp;quot;&amp;gt;&amp;lt;&amp;#x2F;span&amp;gt;&amp;lt;h2 id=&amp;quot;the-hardware&amp;quot;&amp;gt;The Hardware&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;Applying this philosophy to my home theater, I have it broken down into many components:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;TV with most “smart” features disabled and with no access to the internet&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;NVIDIA Shield as the main TV user interface with as many default apps as possible disabled and replaced with open-source alternatives that don’t phone home&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;MiniDSP Flex acting as digital-to-analog converter (DAC), digital signal processor (DSP), and pre-amplifier&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;basic stereo speaker amplifier&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;stereo speakers&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;powered subwoofer&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;separate headphone amplifier&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;phono pre-amplifier&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;record player&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;my pc is also hooked up for couch gaming&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;As you probably noticed, there are still some devices that are performing multiple functions, namely the MiniDSP Flex and the powered subwoofer. Nothing is without compromise, and these components are far more difficult or expensive to separate.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;With this set of components, there are three remote controls, a keyboard, a mouse, and a game controller needed to control everything and get the system into the state you need at a given time. Not only that, but each of the three remotes has volume controls that may or may not change the volume of a given state, and having multiple volume controls makes it very difficult to know how loud some content will be at a glance. This problem also makes it difficult to know what state the system is in at all.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;For me (only because I was the one who set it up), this is a fairly middling annoyance, but for my partner and anyone else that might ever want to use the system, it’s a pretty insurmountable barrier without a detailed instruction manual next to the remotes. Since I have a Home Assistant server, I figured this would be a perfect time to put it to use!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;making-it-smart&amp;quot;&amp;gt;Making It Smart&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;To start with, I wanted to figure out what my constraints are:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;On the TV, I just want to be able to turn it on&amp;#x2F;off and switch the inputs.&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;On the MiniDSP Flex, I want to be able to switch inputs, change volume, mute, switch outputs, and control connected Bluetooth devices (play&amp;#x2F;pause, fast-forward, and rewind).&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;For the NVIDIA Shield, I want to be able to turn it on&amp;#x2F;off, use navigation buttons, and have a microphone in the remote for voice search.&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;For my computer I want to have a controller to play games and a way to navigate the desktop when needed.&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;I&amp;#x27;d also like to be able to turn on&amp;#x2F;off every device to conserve power when parts of the system aren&amp;#x27;t being used.&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ul&amp;gt;
&amp;lt;p&amp;gt;Adding power control is as simple as adding a couple TP-Link HS-300 smart power strips. These can be set up to work entirely locally and allow for both switching on&amp;#x2F;off and monitoring power usage in Home Assistant&amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;jevans.bio&amp;#x2F;blog&amp;#x2F;20241123-trials-and-tribulations-of-setting-up-a-home-theater&amp;#x2F;#references&amp;quot;&amp;gt;[1]&amp;lt;&amp;#x2F;a&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;It turns out that the biggest restriction here is the voice search functionality on the NVIDIA Shield. This is only possible on the official remote for the device, so to keep all of this functionality, I will at least need to have that remote.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;For the computer, I certainly need a keyboard, but a nice feature of my favorite controller (the PS5 DualSense controller) is that it has a trackpad in the middle that works as a standard trackpad when connected to my computer, so I don’t need a separate mouse. One device gone!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The TV has wake-on-LAN functionality and, when it is on, can be entirely controlled by Home Assistant. Another down!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;MiniDSP actually publishes the NEC IR codes to use for universal remotes, which is very helpful&amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;jevans.bio&amp;#x2F;blog&amp;#x2F;20241123-trials-and-tribulations-of-setting-up-a-home-theater&amp;#x2F;#references&amp;quot;&amp;gt;[2]&amp;lt;&amp;#x2F;a&amp;gt;. NVIDIA also added a nice feature to the Shield where users can choose to use the volume buttons on the remote to control a separate IR device instead of controlling volume on the Shield itself. Nice!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;his-blue-period&amp;quot;&amp;gt;His Blue Period&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Unfortunately, this is where things start to fall apart. That NVIDIA IR feature only lets you select from a pre-supplied set of IR codes for common AV Receiver manufacturers, and of course MiniDSP is not in that list. I tried all of the other options to see if any of them just happen to work. No dice.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I did find some chatter in forums about being able to program the MiniDSP Flex to use other IR codes, but after lots of digging, it turns out that they &amp;lt;strong&amp;gt;removed&amp;lt;&amp;#x2F;strong&amp;gt; that feature when they changed the configuration software that they provide from a plugin for another piece of software to a standalone configuration application.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;They are also &amp;lt;em&amp;gt;very&amp;lt;&amp;#x2F;em&amp;gt; restrictive about what software they allow customers to download. To access any software at all, you need to provide the serial number that came with your product, and then they only give you access the most recent software for your specific device, so there is literally no way for me to use the old software and firmware to regain the feature. It&amp;#x27;s a terrible model and leaves an awful taste in my mouth. I will think twice before purchasing anything from them in the future.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;ir-struggles-part-1-all-the-big-movie-studios-are-doing-it-these-days&amp;quot;&amp;gt;IR Struggles, Part 1 (all the big movie studios are doing it these days)&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;I wasn&amp;#x27;t going to let this roadblock deter me, though. My first attempt to get around it was to use an IR blaster connected to Home Assistant and a button-remapping app on the Shield to call a shortcut that runs a webhook on Home Assistant when the volume up&amp;#x2F;down buttons are pressed. At the same time, I also remapped the Netflix button on the remote to run a webhook on Home Assistant to toggle the TV input between the NVIDIA Shield and the PC.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;It was a bit of a chore to get the IR blaster to produce IR signals that worked for the MiniDSP Flex. I had to learn a lot about the structure of NEC IR commands and the raw IR commands that my IR blaster could produce. I ended up writing a Python script to convert the NEC codes to raw IR. These actually kind of worked!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Eventually, though, this process became a problem. There was a significant delay when pressing the remote buttons and the IR blaster sending commands. After lots of testing, I was able to determine that the vast majority of the delay was between the remote button press and the webhook call to Home Assistant. I also discovered that some Android apps don&amp;#x27;t like it when you run a shortcut while watching a video. The process causes the video app to lose focus for a split second, which can result in the screen flashing white, and the video pausing for that time.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;As you can probably imagine, both of these problems were very annoying and caused both myself and my partner great frustration. To combat this I decided to try using the IR volume functionality on the Shield remote with an IR receiver from which I could tell Home Assistant to send commands through the IR blaster.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I whipped up a quick-and-dirty IR receiver using a TSOP38438 IR Receiver Module, and an ESP32 loaded with ESPHome firmware, set it up to work with codes that the Shield remote could emit, and it completely got rid of any perceptible lag in using the volume buttons. Success?&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Well, it turns out that I should have thought about this a bit deeper. When you want to change the volume, you rarely only want to hit the button on the remote once, so when I was sending the second command to my IR receiver, the IR blaster was sending the first command to the MiniDSP Flex. This of course created a ton of interference and made the volume buttons do nothing. You would think that having a graduate degree in physics and a lot of experience with signal processing would have helped me foresee this pitfall, but nope 🙃.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I moved the IR receiver to the other side of the room, and covered most of the IR blaster in electrical tape to try and make the signals more directional. This helped, but I still needed to limit how rapidly I pressed the volume buttons and I certainly could not hold them down, which meant that changing the volume was slow.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;This was a temporarily acceptable solution, and I was getting a bit burnt out with this aspect of the system, so I moved my focus elsewhere.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;brought-to-you-by-node-red&amp;quot;&amp;gt;Brought To You By Node-RED&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;Node-RED is awesome. It&amp;#x27;s a Home Assistant add-on with a Home Assistant Community Store (HACS) integration that lets you use visual programming to create automations in Home Assistant, and it really makes building complex automations a breeze. &amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;addons.community&amp;#x2F;#node-red&amp;quot;&amp;gt;Go get it&amp;lt;&amp;#x2F;a&amp;gt;.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I would have certainly given up on this project if I had to write the automations I needed in YAML or ... **&amp;lt;em&amp;gt;shudders&amp;lt;&amp;#x2F;em&amp;gt;** ... in the Home Assistant GUI. The problem is that there are just so many inputs and so many states that all of the equipment can be in that it becomes unwieldy quite quickly. Even in Node-RED, building out the automations for this system was a bit of a chore. Thankfully, I was able to contain most of the craziness inside of a single state machine node.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h4 id=&amp;quot;the-state-machine&amp;quot;&amp;gt;The State Machine&amp;lt;&amp;#x2F;h4&amp;gt;
&amp;lt;p&amp;gt;If you&amp;#x27;re not familiar, a (finite) state machine is a set of states and allowed transitions between those states to define a dynamical system. This is a concept that is often talked about in the context of game design.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img src=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.mariowiki.com&amp;#x2F;images&amp;#x2F;5&amp;#x2F;59&amp;#x2F;Smw_powerup_chart.jpg&amp;quot; alt=&amp;quot;Super Mario World state machine example&amp;quot; &amp;#x2F;&amp;gt;
&amp;lt;em&amp;gt;An visual example of a finite state machine from the instruction manual that came with Super Mario World&amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;jevans.bio&amp;#x2F;blog&amp;#x2F;20241123-trials-and-tribulations-of-setting-up-a-home-theater&amp;#x2F;#references&amp;quot;&amp;gt;[3]&amp;lt;&amp;#x2F;a&amp;gt;.&amp;lt;&amp;#x2F;em&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;For my system, there are 5 input states (off, PC, NVIDIA Shield, record player, and Bluetooth), 3 output states (off, speakers, and headphones), and 3 PC states (off, at my desk, and at the TV). A fully connected state machine would have \(5 \times 3 \times 3 = 45\) states and \(44^{45} = 9 \times 10^{73}\) transitions. Yikes!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Thankfully, the whole point of a state machine is that it is not fully connected, and in my case, the number of states is smaller, too. There are only 2 states when the home theater is off (PC off or PC at my desk). There are only 2 states when my PC is at the TV (headphone output or speaker output). For the rest of the inputs, there are 4 states each (speakers or headphones and PC off or PC at my desk). This makes the total number of states \(2 + 2 + 4 \times 4 = 20\).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The number of transitions is also &amp;lt;em&amp;gt;much&amp;lt;&amp;#x2F;em&amp;gt; lower because transitions can only happen when one of either the input, the output, or the PC state changes. This means the number of transitions is \(4 + 2 + 2 = 8\) per state for a total of \(20 * 8 = 160\) transitions. This still sucks, but it&amp;#x27;s 71 orders of magnitude better, so I&amp;#x27;ll take it!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;ℹ️&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;This is not the exact number of transitions because I have multiple ways that you can interact with the system that each trigger state transitions differently (the Shield remote, Home Assistant dashboard, turning on the headphone amp, etc.), but it is pretty close.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;blockquote&amp;gt;
&amp;lt;h4 id=&amp;quot;implementation&amp;quot;&amp;gt;Implementation&amp;lt;&amp;#x2F;h4&amp;gt;
&amp;lt;p&amp;gt;After spending roughly an hour writing in states and transitions into a single node, I could finally make the automation that uses that state machine.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I first created nodes and connections for each of the various triggers for possible transitions, and feed them all into the state machine. For the output side of the state machine, I formatted the states like &amp;lt;code&amp;gt;&amp;amp;lt;input&amp;amp;gt;, &amp;amp;lt;output&amp;amp;gt;, &amp;amp;lt;pc state&amp;amp;gt;&amp;lt;&amp;#x2F;code&amp;gt; and fed the result into a function node. This allowed me to split the state into its three components and use them to update a selection node for each one.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;pre data-lang=&amp;quot;javascript&amp;quot; class=&amp;quot;language-javascript &amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;var states = String(msg.payload).split(&amp;amp;quot;, &amp;amp;quot;);
var msg1 = RED.util.cloneMessage(msg);
var msg2 = RED.util.cloneMessage(msg);
var msg3 = RED.util.cloneMessage(msg);
msg1.payload = states[0];
msg2.payload = states[1];
msg3.payload = states[2];
return [msg1, msg2, msg3];
&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;pre&amp;gt;
&amp;lt;p&amp;gt;The selection nodes create entities in Home Assistant that you can watch for changes on, so for each one I created a flow that checks to see if the state has changed, and if so, performs a different action based on what the new state is.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The beauty of the state machine node is that it just ignores any trigger that doesn&amp;#x27;t cause a valid transition from the current state. This makes troubleshooting just so damn easy. If something weird happens, I know what state I was in, what state I changed to, and probably what triggered it, so it&amp;#x27;s as simple as checking the specific trigger node, one line in the state machine node, and one sub-flow after the state machine. Without a state machine, this automation would have to have connections that feed into nodes earlier in the system which could lead to undefined behavior because of the time it takes for signals to propagate through the flow.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;ssh-wlroots-and-pipewire&amp;quot;&amp;gt;SSH, wlroots, and PipeWire&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;I wanted to also make my Linux PC play nice with the automations, and automatically turn on&amp;#x2F;off my desk peripherals to save power. Home Assistant has a nice feature that allows you to add SSH commands as entities that you can include in your automations or dashboards.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I made sure that wake-on-LAN was enabled on my PC so that Home Assistant could turn it on. To turn it off, I added an SSH command to run &amp;lt;code&amp;gt;systemctl suspend&amp;lt;&amp;#x2F;code&amp;gt;. Easy enough.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Switching the PC between my desk and the TV was a bit more complicated. I wanted to switch both audio and video outputs for each state.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;For video, I run the Sway window manager which runs on top of the wlroots compositor, so I can use &amp;lt;code&amp;gt;wl-randr&amp;lt;&amp;#x2F;code&amp;gt; to set the display configuration to be exactly what I need via the terminal (if you are running an X11-based window manager or desktop environment, &amp;lt;code&amp;gt;xrandr&amp;lt;&amp;#x2F;code&amp;gt; has the same functionality).&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;For audio, I use PipeWire as my audio framework and WirePlumber as the session manager (this setup is pretty common these days). WirePlumber does have a tool to change audio outputs: &amp;lt;code&amp;gt;wpctl set-default [ID]&amp;lt;&amp;#x2F;code&amp;gt;. The tricky thing is that the ID needed is not a static number that permanently matches a device; it changes all the time, and there is no other identifier that you can use to do this! Thankfully, there is a way to get the entire current PipeWire configuration in JSON: &amp;lt;code&amp;gt;pw-dump&amp;lt;&amp;#x2F;code&amp;gt;. From here, it&amp;#x27;s the magical &amp;lt;code&amp;gt;jq&amp;lt;&amp;#x2F;code&amp;gt; JSON query tool to the rescue.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;After digging through the JSON output from &amp;lt;code&amp;gt;pw-dump&amp;lt;&amp;#x2F;code&amp;gt;, I found that the ID is in &amp;lt;code&amp;gt;.info.props.&amp;quot;object-id&amp;quot;&amp;lt;&amp;#x2F;code&amp;gt;, the device name is in &amp;lt;code&amp;gt;.info.props.&amp;quot;node.name&amp;quot;&amp;lt;&amp;#x2F;code&amp;gt;, and the device type is in &amp;lt;code&amp;gt;.info.props.&amp;quot;media.class&amp;quot;&amp;lt;&amp;#x2F;code&amp;gt;. I want the device to be an audio output aka sink, I want to then grab a specific device and get its ID. I can then pipe that ID into &amp;lt;code&amp;gt;wpctl set-default&amp;lt;&amp;#x2F;code&amp;gt; and end up with this monstrosity for my TV:&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;pre data-lang=&amp;quot;bash&amp;quot; class=&amp;quot;language-bash &amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;wpctl set-default &amp;amp;quot;$(pw-dump -N | jq &amp;amp;#x27;.[] | select(.info.props.&amp;amp;quot;media.class&amp;amp;quot; == &amp;amp;quot;Audio&amp;amp;#x2F;Sink&amp;amp;quot;) | select(.info.props.&amp;amp;quot;node.name&amp;amp;quot; == &amp;amp;quot;alsa_output.pci-0000_0a_00.1.hdmi-stereo&amp;amp;quot;) | .info.props.&amp;amp;quot;object.id&amp;amp;quot;&amp;amp;#x27;)&amp;amp;quot;
&amp;lt;&amp;#x2F;code&amp;gt;&amp;lt;&amp;#x2F;pre&amp;gt;
&amp;lt;p&amp;gt;Now I can swap my PC outputs and sleep&amp;#x2F;wake my PC directly from my automations in Home Assistant. Woo hoo!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h3 id=&amp;quot;ir-struggles-part-2-the-re-struggling&amp;quot;&amp;gt;IR Struggles, Part 2 - The Re-struggling&amp;lt;&amp;#x2F;h3&amp;gt;
&amp;lt;p&amp;gt;At this point, there was nothing left to do but be frustrated with the IR setup, and I had enough. I decided that, if I&amp;#x27;m going to use an IR blaster for the MiniDSP Flex, and not for anything else, why not attach it directly to the device and isolate that IR pair from the outside world. This would allow me to put my ESP32 IR receiver right next to the device and it would just work.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;Hey, if I&amp;#x27;m doing that, do I even need a separate IR blaster? Nope! ESPHome can do that, too. This way, I can also just have it act as an IR relay for volume commands from the Shield remote, and have them immediately trigger sending the commands to the MiniDSP Flex without ever having to go through Home Assistant. Lag free, baby! After a bunch of testing, I ended up with a short YAML file that just handles everything! I cannot stress this enough: !!!&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I designed and 3D-printed a face plate for the Flex that I could mount an IR LED into. I coated the inside with electrical tape which blocks enough outside IR, while leaving a small hole for the LED. I soldered up a perf board with the IR receiver, a current-limiting resistor, and headers for the ESP32 and for the wires to the IR LED. And I made a simple enclosure for the ESP32.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;the-end&amp;quot;&amp;gt;The End&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;It fucking works.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;It&amp;#x27;s done.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I now have &amp;lt;strong&amp;gt;one&amp;lt;&amp;#x2F;strong&amp;gt; remote (and some buttons to swap to record player or Bluetooth mode) that handles &amp;lt;strong&amp;gt;everything&amp;lt;&amp;#x2F;strong&amp;gt;. To use it, you point the remote where you would expect. To the user, the NVIDIA Shield might as well be built-in to the TV, and the speaker amplifier, headphone amplifier, and MiniDSP Flex might as well be an integrated receiver.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;or-is-it-addendum-cable-management-sucks&amp;quot;&amp;gt;Or Is It? Addendum: Cable Management Sucks.&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;p&amp;gt;After finally getting everything working, the rats nest of cables behind my media console started to give me nightmares. I spent a long time trying to decide how to tackle it. I looked at all of the pre-made cable management systems, and honestly, they all are too expensive and too bad at what they do.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;The solution I ended up with was cheap, easy to get from a local hardware store, and is flexible enough to work with a bunch of setups.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;I got a 2&amp;#x27;x4&amp;#x27; sheet of pegboard and screwed it to the back of my media console with some spacers so I could get behind it. I picked up a 50&amp;#x27; roll of 1&amp;#x2F;2&amp;quot; double-sided hook-and-loop and bundled all cables into a wiring harness based on where they run with hook-and-loop every 12&amp;quot; or so, keeping power and signal cables separate. I got the biggest bag of various zip ties I could and zip-tied my power strips, network switch, and whatever cables made sense to the pegboard, noting to keep power and signal cables far apart or have them cross at \(90^\circ\) angles.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;p&amp;gt;It took me roughly 5 hours to deal with it all, but it&amp;#x27;s done. Sure, it&amp;#x27;s slightly more inconvenient than some popular expensive systems, but the whole thing cost less than $50, and I have tons of extra hook-and-loop and zip ties.&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;h2 id=&amp;quot;references&amp;quot;&amp;gt;References&amp;lt;&amp;#x2F;h2&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;python-kasa.readthedocs.io&amp;#x2F;en&amp;#x2F;stable&amp;#x2F;&amp;quot;&amp;gt;https:&amp;#x2F;&amp;#x2F;python-kasa.readthedocs.io&amp;#x2F;en&amp;#x2F;stable&amp;#x2F;&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;support.minidsp.com&amp;#x2F;support&amp;#x2F;solutions&amp;#x2F;articles&amp;#x2F;47001137495-ir-commands-for-minidsp-products&amp;quot;&amp;gt;https:&amp;#x2F;&amp;#x2F;support.minidsp.com&amp;#x2F;support&amp;#x2F;solutions&amp;#x2F;articles&amp;#x2F;47001137495-ir-commands-for-minidsp-products&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https:&amp;#x2F;&amp;#x2F;www.mariowiki.com&amp;#x2F;Super_Mario_World#Power-ups&amp;quot;&amp;gt;https:&amp;#x2F;&amp;#x2F;www.mariowiki.com&amp;#x2F;Super_Mario_World#Power-ups&amp;lt;&amp;#x2F;a&amp;gt;&amp;lt;&amp;#x2F;p&amp;gt;
&amp;lt;&amp;#x2F;li&amp;gt;
&amp;lt;&amp;#x2F;ol&amp;gt;
</content>
            </entry>
            
        
    
</feed>
