Skip to content

Episode 33 - Times Like These

Welcome to the show

Published: June 8th, 2026

Paul and Tod are back and discuss a nostalgia archive on the web, Web Serial in Firefox, real time OSes, a follow-up to last episode's story on Parachord, and more.

Follow the show on Mastodon or Bluesky.

We have stickers! Request a free sticker here. (US Only, sorry!)

Full transcript available here.

Listen to the podcast

Show Notes

00:20 freemediaheckyeah (fmhy.net) (Tod #1)

"freemediaheckyeah" or fmhy.net

When I was younger, the Internet's promise was that it was to be this infinite playground of all of humanities knowledge. For the last decade or more instead it's seemed like a small collection of members-only big-box stores. That's not very techno utopian! But the FMHY.net site brings that feeling back! "FMHY.net" or "Free Media Heck Yeah" is a hand-curated categorized repository (sort of like Yahoo of old) of all kinds of free software, videos, audio, video games, tips & tricks, and more.

For instance, there's a huge "Books" section with links to many free ebook repositories (btw, did you know The Internet Archive has a huge collection of ebooks? They're all free and the modern ones you can "check out" for a bit like a library book?). There's links to a bunch of different ebook reader apps to find the one you like. But there's also these great lists of audiobooks, comics, STEM books, history, and academic paper repositories. All free.

And in the "Gaming" section, there's a long list of places to find abandoned games. Ever wanted to play the Windows 7 version of Minesweeper? Or play old Commodore 64 games? This site has links for you!

Of course there's a "Linux/macOS" section that leads to the various Linux distros and how to install them, but it also contains a bunch of great general commandline HOWTO guides. A favorite I found is called "You Don't Need GUI" that's showing you how to do things in the Terminal you might do with a GUI.

And yes, the FMHY site does also have sections on torrenting, which is a very efficient way to support distrution of free media, but it can also be used to acquire not-exactly-legal copies of media. Be warned and be informed! Torrenting is not illegal and it's a great way to take the pressure of big downloads from the kind people hosting them. It's a great way of getting a full copy of Wikipedia, for instance!

FMHY is huge and wonderful and it's been fun poking around in it. Highly recommended.

3:34 Flipper One (Paul #1)

The Flipper One is a follow-up to the popular Flipper Zero. The Flipper team is building the Flipper one as a fully open Linux cyberdeck, including support in the mainline Linux kernel for it. They're also building their own operating system on top of Debian, called FlipperOS.

8:55 "You Don't Need an RTOS" (Tod #2)

You Don't Need an RTOS (Part 2, Part 3, Part 4)

If you program embedded boards with Arduino or CircuitPython, you'll hear about "RTOS" or "Real-time OS" and how you should be using it to organize your code. But relax, you like do not need one. Nathan Jones on Embedded Related wrote a blog post series titled "You Don't Need An RTOS" describing the problem that RTOSes solve and some simpler alternative techniques. Most notably he favors the technique of the "superloop", or putting all your code into the main loop and seeing if that works. The posts target embedded C/C++ but the techniques, concepts, and math behind the concepts are valuable for any language you use.

In a superloop, you eschew the complexity of schedulers, interrupts, and other niceties and go as simple as possible. How much can you do in one big loop? Do you really need a complex scheduling system if all you're doing is reading some sensors every minute and logging that data to an SD card? With everything in a single loop, huge conceptual areas where bugs can live, like race conditions or resource contention, are absent by design. If you need explicit periodicity, a "task" within a superloop can check the current time and run only when a certain time has passed. (this is called the "blink-without-delay" pattern in the Arduino world from learners wanting to blink an LED without blocking the main loop)

The problem with superloops is "jitter", where a periodic task doesn't happen as regularly as you want. In many cases, this is where you start deviating from the superloop with hardware interrupts. You'll see this with fast datastreams like audio or video output, or sensors with critical timing requirements. But notice still no explicit scheduler is needed.

So what is an Real-Time Operating System and why then would we need one?
At its basic, an RTOS is just a scheduler of tasks you define. But importantly, when you schedule those tasks you define the period of your task (how often it's called) and the deadline of the task. For instance, you might have a task that checks a sensor once a second (it's period) but it can take no longer than 10 milliseconds to do it (it's deadline). You're specifying a contract to the RTOS and if your task breaks that contract, it gets killed. Normal OSes are "best effort" but RTOS guarantee that no task can overtake a higher-priority one. In a car, you must guarantee the antilock brake sensor be read exactly every 500 NANOseconds. In a Mars lander, reaction thrusters must be fired exactly every 64 milliseconds. There can be no pauses for file writes or other tasks taking over. RTOSes keep us alive.

In maker-level projects, RTOSes are usually not needed. We don't have those critical concerns. But if you want to learn, there are several event scheduler libraries for Arduino that lean towards RTOS behavior. And there is the very minimal FreeRTOS that works great on ESP32 and RP2040 chips. In fact, the ESP-IDF used by the ESP32 uses FreeRTOS under the hood to make dealing with the vagaries of WiFi a bit easier. In CircuitPython and MicroPython, you can investigate asyncio, a sort of DIY method of event scheduling. It won't be as precise or performant as in Arduino, but it can get you used to the ideas.

I used to work with aerospace hardware and now I play with making synthesizers in CircuitPython and Arduino. Most of the time I use something like a superloop. In CircuitPython it's a must, as you can't schedule things at the hardware level. CircuitPython is almost an OS unto itself, with its own scheduler and device drivers. And the "user task" that runs your code.py is just one of the many tasks it's dealing with. Usually that's fine, and really nice you don't have to deal with setting up DMA buffers and interrupts for audio & display output.

This blog post resonated because I've seen folk get bogged down and frustrated trying to set up an RTOS for their embedded project when it's overkill for what they're trying to accomplish. This blog post series is almost a college level course in concurrency and uses math and examples to show how much you can do with simple setups while also giving direction for more complicated concurrency models like interrupts, state machines, and finally RTOSes.

But if you're starting a new project, see how far you can get with a superloop.

15:22 Firefox adds Web Serial (Paul #2)

If you’ve ever wanted to plug in your microcontroller and use the web to install new firmware or code, your only choice up until now has been to use a Chromium-based browser like Chrome, Microsoft Edge or Vivaldi. But as of late May, Mozilla has joined the party and now supports Web Serial in Firefox with help from Adafruit.

Web Serial is a web API that uses Javascript to read and write to serial devices, like microcontoller boards or 3D printers. It’s been available for years in Chrome and it’s nice to see Adafruit and Mozilla partnering up to deliver this. For example, if you visit CircuitPython.org’s Download section and pick almost any ESP32 based board, there will be an option to download the UF2 or BIN files with the firmware, or to “open installer” and you can do it right over the Web.

17:40 USB Probester (Tod #3)

I "wrote" another app with my junior assistant Claude! It's called "USB Probester" and it replicates as much as possible the beloved (to me) creaky MacOS developer tool "USB Prober"

USB devices are fascinatingly complicated. When you plug in a USB device, it sends several different packets of information to your computer, telling the computer all about itself. First, there's the Device Descriptor telling your PC roughly what kind of device it is and who makes it. Then the Config Descriptor describes how much power it needs, and how many and what kind of Interfaces the device provides, like "keyboard" or "thumb drive" or "ethernet dongle". Each interface has their own descriptors. For Human Interface Devices (aka HID), there is a HID Report Descriptor that indicates if it's a keyboard or a mouse (or both!) and if that keyboard has the volume up/down buttons and if it's got LEDs to light up. And that's just one kind of interface!

This is a lot of information. It's packed up as byte codes in a concise way (as this standard was created back in the 20th century when doing USB was expensive). But getting AT this info in an OS has been surprisingly difficult. In MacOS and Windows, there's no good built-in tools.
In Linux it's a breeze: you can use the "lsusb" command, to see some of this data.

If you programmed USB stuff and used a Mac 20 years ago, buried in a hard-to-find developer bundle was a tool called USB Prober. It was great. It was able to get at all this USB descriptor info and it PARSED it, showing it in useful English in a nice tree view. And could save the entire state of your USB setup as a text file. As someone struggling to make Arduino pretend to be a USB device back then, USB Prober was so instructive. I would give a zip of it to anyone having USB questions. I use it almost every day when programming, since it's a great way to quickly answer questions like: is that Pico actually in boot mode? or did my changes to CircuitPython's "boot.py" to enable the second serial port actually work?

But MacOS has evolved and USB Prober has started not working right. The writing is on the wall: I need to find another tool. Nothing I could find replicated what USB Prober did, so I'm recreating it. I've become okay at these Tauri native apps where the backend is in Rust and the front-end is HTML, so I started there. There's a nice cross-platform Rust library "nusb" that's like a pure-Rust version of the libusb C library I'm a contributor on. That could get me most of the information. On both MacOS and Windows I still had to do some hacks to get the HID Report Descriptors. Thanks Claude for helping me figure that out.

And parsing of this descriptor data is something I did not want to work on. It's mostly grunt work, so I put Claude on it, with many test cases. Having lots of known-good output from the existing USB Prober for various USB devices made the task go quick, and is a pretty efficient use of these LLMs, it seems.

The end result is an app that looks a lot like the old USB Prober but updated in a few ways useful to me (including providing a commandline tool that acts like lsusb). And it's cross-platform! So I can easily see how the same device looks to different OSes. This is exciting to me.

If you're interested in this tool, give it a download and tell me what you think.

23:17 Achordion (Paul #3)

In a follow-up to one of Paul's picks from last episode, Parachord, the multi-format music player, has launched Achordion. Achordion is more than just a social network for music listeners. Built on the MusicBrainz and ListenBrainz APIs, you can share what you're listening to, an activity feed of what you've loved or playlists you've created, and more. The lead developer, J Herskowitz, describes it as: Identity, not just statistics: ListenBrainz holds your listening data. Achordion’s job is to turn that into something that reads as a person at a glance — not as a leaderboard or a heatmap - which I love. And one neat little feature is that it writes a one line bio about you based on your recent music listening, mine currently is "same-thing-on-repeat" as I've been listening to the same 2 albums non-stop for the last few weeks.

Then there's a whole "Explore" tab on the Achordion site. It displays a ton of information, from new releases of artists you listen to, playlist recommendations, recommended artists, similar listeners like you, and more. And it's all integrated with Parachord - choose one of the playlists in Explore and there is a "Play in Parachord" button that just starts it right up.