• Think I may have my WordPress to Mastodon filtering in place so that it only posts from a specific category and doesn’t spam my Mastodon account with all of my link and highlight saves. Fingers crossed!


  • Adventures in Self-hosting HiFi Audio Streaming.

    I’ve been through a bunch of self-hosted music setups over the past 10 years or so. There are a long list of good reasons why owning and hosting your own music is better than streaming but I’ll save that for another post. Still, despite years of home streaming my audio collection, I haven’t found the perfect setup. I do though want to try to hone in on where things are and aren’t working on my current setup and maybe share some lessons learned that might help others navigating similar waters.

    Navidrome

    My most recent iteration uses Navidrome in a Docker container on an older Intel NUC that runs a bunch of other self-hosted/docker services. Navidrome offers a clean web interface and supports the Subsonic API/protocol so there are a handful of iOS (play:sub app is my current iOS app of choice) and MacOS clients (see section below for my MacOS client reviews) that I can use in addition to the web interface. You can access your music collection remotely by setting up Navidrome behind an nginx proxy, and the play:sub app even offers CarPlay integration – a nice bonus for my commute.

    That said, Navidrome is not without its quirks. From a HiFi listening perspective, the streaming can be temperamental; I’ve experienced issues where the play:sub app mysteriously repeats songs without being told to do so. Or, inexplicably, the web app will stop playing after each song instead of playing through the entire album. While these hiccups are minor, they can be frustrating when I just want to sit down and listen to some tunes.

    The Evolution

    Initially, I was content with using AirPlay from Navidrome’s web app or play:sub to an old AirPort Express, which connected optically to a Musical Fidelity V-DAC to my HiFi. This configuration worked, but never really sounded amazing.

    The game changed when I upgraded (or, well, crossgraded I suppose since they’re roughly similarly amps from a spec/price point) my NAD amp to a Cambridge Audio amp, which really brought my KEF speakers to life in my small listening room. However, this upgrade revealed some minor but annoying low-frequency issues that I thought might be interesting to try to correct. While play:sub offered basic EQ options, I needed something more sophisticated for proper room correction.

    Enter Moode

    During an early morning tinkering session, I decided to give Moode a shot on an older Raspberry Pi 3B paired with a HiFi Berry DAC. Unlike my previous attempts with Volumio, Moode immediately clicked. Its built-in support for room-tuning EQ settings was exactly what I needed. (the EQ settings I use were derived by measuring the room using https://housecurve.com)

    The difference in sound quality was immediately noticeable. While I was never quite sure about the lossless-ness of my Airplay streams, the direct connection from the Raspberry Pi DAC to my amp, combined with Moode’s room correction/PEQ settings, delivered outstanding results.

    Current Challenges

    Despite the really fantastic sound quality, the current setup isn’t perfect:

    • So this setup finds me using Moode on my Raspberry Pi when listening locally at my HiFi (which just mounts the same drive over my local network of music that Navidrome accesses). And then, using the Navidrome to stream music everywhere else. SO I’m juggling between Moode for home listening and Navidrome for office/mobile use
    • Moode’s browser interface feels sluggish, especially with volume control having such a lag. It’s definitely usable on an iPad, but frustrating to control playback on my iPhone mini. So it’s the best sounding option but the least satisfying to interact with.
    • Rigelian, an iOS native player for Moode, is functional but lacks polish and has rendering issues on my iPhone mini. Still, it’s “play me a 100 random songs” is great at times.
    • Also, Rigelian seems to not do an especially good job with album art. I’ve got art for every album embedded in the files as well as a cover.jpg in the folder and it just doesn’t pick up the covers in many cases, or at least hasn’t yet.
    • Playlist management across platforms remains a challenge

    Both systems scrobble to Last.fm, which opens up possibilities for smart playlist creation based on listening data at some point.

    Metadata

    One aspect I’ve mostly solved, for now at least, is metadata management, thanks to Lidarr. Running in a Docker container on the NUC, it automatically monitors my music folder and helps maintain a consistent folder structure. This is particularly useful for managing Bandcamp purchases, which often come with varying folder naming conventions. Lidarr effortlessly organizes everything into my preferred artist/album hierarchy.

    While I haven’t found the perfect all-in-one solution, the exceptional audio quality from my Moode + room-correction PEQ + HiFi Berry DAC + Cambridge Audio amp combination makes the compromises worthwhile. That said, I’m still hoping for a responsive, well-designed iOS app to control Moode and complete the experience.

    For now, I’m enjoying the tinkering and the improved sound quality but would love to hear suggestions.

    MacOS Listening

    As much as I spend a lot of time in my listening chair enjoying my Moode Audio setup, for better or worse I need to spend a lot of time in front of my desktop computer running MacOS. Finding the perfect desktop client for Navidrome has felt like searching for a rare vinyl in a crowded record store. It supports the open Subsonic streaming protocol so there a quite a few clients of varying degrees of quality, here are the one’s that I’ve found worth some attention:

    Submariner

    Submariner has a nice native Music app-like interface. However, its aggressive local caching is a deal-breaker. The app automatically downloads every streamed track to ~/Music/Submariner, turning your hard drive into an unwanted music hoarder. While a nightly cleanup script could theoretically solve this, it feels like applying a band-aid to a systemic issue. Playlist management is solid, mimicking Apple Music’s approach, but the constant local downloading overshadows these merits.

    Supersonic

    Supersonic is my current go-to, albeit with some notable limitations. Unlike Submariner’s MacOS vibe, it’s UI feels less native, more utilitarian. The app shines in library presentation and offers welcome extras like equalizer functions and scrobbling to last.fm (technically handled by Navidrome).

    However, Supersonic’s playlist functionality is frustratingly half-baked. You can view existing playlists, but I haven’t figured out how to create new ones. And track addition to existing playlist is temperamental.

    Navidrome’s Web Interface

    Out of sheer muscle memory, I still regularly hit my Navidrome instance through the browser. The web interface is a reliable backup. It’s functional, allowing playlist creation and management, though not without its own friction. Track addition requires more clicks than keystrokes which is tedious.

    Lately I have been immersed in full-album listening, thus allowing me mostly to sidestep the above playlist complexities and Supersonic has become my reluctant daily driver.

    So this is my current setup as of December, 2024. I often get emails from folks who stumble across here with streaming questions, so please don’t hesitate to drop me a line, I love discussing this stuff.


  • Made so much progress with learning this weekend. Got Home Kit Bridge working after learning way too much about mdns, built some iOS notifications w/ automation options and resuscitating some forgot NFC tags. Got power forecasting working, excited to start playing with “now’s a good time to run the washer” type notifications.


  • Aqara Hub and Home Assistant

    The Aqara sensors and such have been super reliable in my HomeKit environment, highly recommend. But, as I’m currently trying to solve what should be a simple use case, I’m getting into the weeds of Home Assistant.

    I’ve spent a grand total of about 4 hours in Home Assistant so far and I’m sure it will get easier but this is definitely not something you’d give to your mom to run her home (not that Apple’s HomeKit is that much better but at least it doesn’t use terms like “entities” and such).

    Anyway, this is to say that I really wanted to try to get my Aqara stuff connected to Home Assistant. I spent an hour or so digging through docs and YouTube videos and then finally found this (literally) 1 minute long movie that says to just remove the existing Aqara stuff from your HomeKit and it will show up in Home Assistant.

    I was admittedly a bit nervous, but I started simply by removing my G2h Camera/Hub from HomeKit and a second later all of my Aqara stuff disappeared from HomeKit and showed up in Home Assistant. Granted, I had to go around and figure out which room each sensor was in again but that wasn’t too bad.


  • It is apparently way too much to ask to only run my Roborock vacuum at 10AM each morning *if* no one is home. Seems like such a trivial condition to but now I’m deep in the weeds of home assistant trying to Rube Goldberg my way to a solution. We were promised jet packs (shakes fist at sky)!


  • Tech vs. Democracy

    The Outsourcing of Democracy

    It’s not news to me that the intersection of technology, democracy, and power has reached a critical junction but I now have a much better sense of what’s at stake. Over the past couple of weeks I’ve been diving deep into Marietje Schaake’s “The Tech Coup,” watching Ronan Farrow’s “Surveilled” documentary, and following Paris Marx’s excellent podcast series on tech billionaires. I see this pattern emerging: our democratic institutions are ceding control to unelected tech leaders and their companies.

    Perhaps the most alarming revelation is just how much the U.S. has outsourced core democratic functions to private industry. From voting systems to law enforcement, and now to the regulation of these technologies themselves, we have created a system where private companies aren’t just participating in governance—they’re actively shaping it. At play here is who gets to make the decisions that effect our daily lives..

    The Surveillance State

    I was especially put off by the privacy implications here. While Biden put out an executive order that in theory at least prevents government surveillance of citizens, the private sector has filled this gap with mindblowing tech. The proliferation of spyware tools (like Pegasus, which the FBI purchased) and the thriving data brokerage industry have lead to a surveillance infrastructure that operates with minimal oversight. When private companies can freely buy and sell personal information, train facial recognition systems on government-collected data, and deploy surveillance technology globally, we’ve essentially and collectively given a huge ok, fine, just go-ahead to the surveillance state.

    One of the most insidious aspects of this “tech coup” is how insights or knowledge/learning about critically transformative technologies like AI remain locked within corporate environments. While CEOs and employees gain valuable knowledge about these systems’ capabilities and risks, public officials and citizens are left in the dark. This creates an asymmetry of power where those folks we’ve elected to make decisions about technology’s role in society are often the least accountable to the public.

    Also, the role of private tech companies in international relations adds another layer of complexity. When companies like Google or Starlink provide internet access to countries during government shutdowns, they’re not just offering a service—they’re engaging in de facto diplomacy. Yes, it’s almost certainly a good thing when citizens of oppressive governments are provided Internet connectivity but the private companies but having these companies involved in international affairs raises should raise question about accountability and motivation.

    Reclaiming Democratic Control

    Per Schaake’s recommendations, the solution isn’t to reject technology or government involvement but to reestablish democratic control over these systems. This means:

    1. Creating robust regulatory frameworks for systemically important tech companies
    2. Building public technology infrastructure (a “public stack”) rather than relying solely on private solutions
    3. Extending public accountability requirements to private companies performing government functions
    4. Implementing meaningful transparency requirements for tech companies, especially regarding data center development (Shaake explains how companies like Amazon and MS hide behind fake company names when building out huge data centers in small town America) and algorithm audits
    5. Strengthening enforcement mechanisms for existing regulations

    The Path Forward

    I was glad that Schaake offered some suggestion on what we could do to solve the problems she presents. Granted, the page count of the solution section is dwarfed by her (excellent and detailed) explanations of the problems. Solving this isn’t about blind trust in government or wholesale rejection of private enterprise. Rather, it’s about giving citizens a broader role in technological development. We need to create spaces for public debate about technology’s role in society, elect leaders who understand these challenges, and hold them accountable for serving the public interest.

    The internet was once envisioned as a democratizing force, but it’s increasingly becoming a tool for corporate profit and surveillance. If we can more collectively get our heads around what’s at stake and taking action to restore democratic oversight, we can work toward a future where technology serves the many, not just the few.


  • Watched Ronan Farrow’s Surveilled last night on HBO, uncanny how well it pairs with Schaake’s The Tech Coup which I’m just finishing. If you enjoyed the documentary on spyware, definitely give Schaake’s Tech Coup a read: https://press.princeton.edu/books/hardcover/9780691241173/the-tech-coup


  • Crossposting Mastodon->Bluesky

    I found a handy node script from Alex Hyett that will grab whatever I post to my Mastodon account and post it to my bluesky account for me. The less I have to think about this stuff the better so I have the node script restart at boot up using this

    Install pm2 for node (npm install -g pm2)
    Type “pm2 startup” into the command line
    Paste in the resulting command as instructed.
    Change directories to where your app exists.
    Type “pm2 start filename.js”
    Type “pm2 save”

    Seems to be working. We’ll see.


  • I’ve been playing in bands for 30 years and can’t imagine trying to make a living at it. Now I’ve got a kid who is an amazing songwriter/musician. It’s heartbreaking to think how undervalued his skill is in this world. Good read: https://www.newyorker.com/magazine/2024/10/28/band-people-franz-nicolay-book-review


  • I like this take from 404 media and agree w/ much of this post on Bluesky, Mastodon and threads: “..But I have been impressed with the tools that the open source development community is building to bridge the gap between the AT protocol and ActivityPub, and I’m hopeful that some mixture of Bluesky and Mastodon will eventually serve most of my needs as a social media user…”


Current Spins

Top Albums

Check out my album Set It All Down on your favorite streaming service.


Posts Worth Reading:


Letterboxd


Reading Notes

  • Who profits from our constant state of dissatisfaction? The answer, of course, is painfully obvious. Every industry that sells a solution to a problem you […]
  • the shifts have been in place for awhile. A certain kind of book—say those reviewed in the NYRB—will become like opera, or theater, or ballet, […]
  • • No more struggle: “Whatever arises, train again and again in seeing it for what it is. The innermost essence of mind is without bias. […]
  • The real problem, in my mind, isn’t in the nature of this particular Venture-Capital operation. Because the whole raison-d’etre of Venture Capital is to make […]
  • . The EU invokes a mechanism called the precautionary principle in cases where an innovation, such as GMOs, has not yet been sufficiently researched for […]

Saved Links

RSS Error: A feed could not be found at `https://links.jimwillis.org/feed/atom?`; the status code is `404` and content-type is `text/html; charset=utf-8`