Categories
Coding Video

STEM Day 2026

Dash robot

I had the privilege of talking to first graders at the local elementary school about coding and robots for STEM Day! This was extra special because one of them happens to be my kiddo. 😀 I used Dash robots (graciously provided by the engineering teacher) to demonstrate how we communicate with computers and instruct them – one command at a time – to accomplish tasks.

Dash drove around, played a Xylophone, drew on paper, played sounds, catapulted a ball, and more. Using the drag and drop programming interface of the Wonder app was a great tool for this age range, and I think they had as much fun as I did.

Dash playing the Xylophone
Dash drawing

Categories
AI Arduino Projects Video

NeoPixel Christmas Tree 2025

I’ve hit the ground running this holiday season with two updates (so far!) to the NeoPixel Christmas Tree project.

Vibe coded goodies

I’ve been using an LLM to add some experimental goodies to the project such as:

  • A Python script that analyzes WAV files to synchronize light sequences to the beat
  • A local model rendered in Three.js to enable rapid prototyping

https://github.com/twstokes/neopixel-tree/pull/15

ESP32 upgrade

At the end of 2024 I experienced stability issues when updating many LEDs rapidly, e.g. a looping rainbow effect with a really low delay set. After some indeterminate amount of time the tree would crash and restart itself. I initially assumed it was bad C code on my part, but failed to spot anything and eventually put the tree away sometime in January of 2025 because it just got awkward. Now that we’re back to a socially acceptable time to have a Christmas tree out I’ve had a chance to do some deeper digging.

I added a new command to have the ESP return the reason it reset which was really helpful in confirming my suspicion that the ESP8266 just didn’t have enough oomph to drive pixels and run WiFi concurrently:

Fatal exception:4 flag:1 (Hardware Watchdog) epc1:0x40103341 epc2:0x00000000 e    pc3:0x00000000 excvaddr:0x00000000 depc:0x00000000

Long-ish story short I upgraded to an ESP32 with two cores (note: number of cores is model-dependent) and this provides the necessary headroom to bit bang LEDs and run WiFi stably. It required some re-soldering of the Perma-Proto board (since the pin layouts are different) as well as some code changes, but overall it was a relatively quick and straightforward upgrade. The tree hasn’t crashed since!

https://github.com/twstokes/neopixel-tree/pull/14

Categories
DOS Fun Video

Vibe coding like it’s 1999: Flappy Cow

This weekend I vibe coded a tribute to ’90s Gateways, 3Dfx, and DOS with DJGPP, Glide, and Allegro. I originally set up my build environment in DOSBox-X, but then moved to cross-compilation from Linux.

From there I dropped the game into 86Box, which I already had configured with an emulated Voodoo3 3000, for quicker testing.

Finally, I ran it on my Pentium 3 machine with Windows 98 and a real Voodoo3 3000. ChatGPT gets most of the credit for the C code that runs the game, I get credit for the cow voiceover work. 🐄

Categories
DOS Fun Projects Retro Computing Video

Merry DOS-mas!

Now I can control my LED Christmas Tree from DOS! 🎄💾 I hope to share more details on the code + dev stack, but basically I used:

GitHub commit.

Categories
Projects Video

RC Gyro

Maybe if I share videos of half-finished projects it’ll motivate me to finish them!

Categories
Technology Video

Controlling monitor inputs with DDC

I’m really happy that most modern monitors support DDC so that we can programmatically change settings rather than go through clunky OSDs.

The problem

At my desk I have my Mac Studio and my latest gaming PC and they both share a triple monitor setup. When I want to switch the monitors between the two, I either need to:

  1. Turn on auto-switching mode
  2. Manually change the input x 3

Auto-switching kinda worked, but has quirks I can’t live with. One is when I’m playing a game on the PC and the Mac wakes up for whatever reason, the PC receives a signal that hardware has been connected or disconnected and the screen freezes. It seems like a firmware bug to me – if an input is being actively used the others should be ignored.

The manual route is pretty bad as well. The M32U‘s input switchers are on the back of the monitor, which is pretty much the worst spot possible. Only the far right monitor is slightly more convenient to access.

How DDC solves it

By using m1ddc on the Mac we can easily script a way to switch between the two machines. 🎉 This means I can create a keyboard shortcut to toggle the inputs, a physical button, or even run it from an external computer. Hooray!

Edit: Now with web appi-ness!

I threw together a quick Flask app that can be accessed from any device on my network to switch inputs. Neato!

Here’s a GitHub repo for it.

Note: Once I connect the left monitor the same way I connect the other two, the transition should be more in sync. Currently it’s a little slower due to the HDMI connection.

What about audio?

For those who use desktop speakers there’s a similar dilemma for audio: sharing one output for multiple inputs. The M32U (like many monitors) has a mini-jack that outputs audio from the currently selected video input. You then can plug your desktop speakers into that jack and you’re good to go – switching to another video source also means switching to its audio.

Considerations

If that’s your only option there’s no problem, but do know that audio quality may be subpar as the DAC chip inside the monitor most likely isn’t great. I also found that I had no volume control in macOS for this setup, but was able to work around it using MonitorControl which – you guessed it – uses DDC.

Another option would be a powered stereo mixer like the Rolls MX51S that would let each system handle its own analog output. That should give you better quality, but introduces complexity via a new box to power and extra cables. You also may have to fight noise and hums. One upside to this setup would be that you could play audio from multiple machines at the same time – maybe the Mac plays music while the PC plays a game.

The solution I landed on is my favorite: A speaker system with USB input. The same way I share my keyboard input (via the monitor’s USB hub) I share the audio output. There’s no interference or noise, and quality is superb because the speakers are made for digital input.

Categories
Apple Retro Computing Video

It’s the little things

Since restoring a couple Mac OS 9 machines and playing with them, I’ve noticed some nice touches in various places.

One is that when you have the Platinum Sounds enabled and drag a window, the sound effect will pan in stereo with the window’s horizontal location.

I probably didn’t pick it up very well by recording with my iPhone, but just imagine it gets louder on the speaker the window is closest to. Pretty cool!

Categories
Video

Custom sounds in macOS

Just add them to ~/Library/Sounds!

Categories
Arduino Projects Video

NeoPixel LED Christmas Tree

https://twitter.com/tannerstokes/status/945026163805769728

See the GitHub repo for a parts list, wiring diagram, and Arduino code.

Categories
Arduino Coding Projects Scripts Video

Destroying the web with a plasma ball

I plan to do a more thorough write-up on my plasma-ball project, but for now here’s the video, some pictures, and a link to the repo.

Github: https://github.com/twstokes/arduino-plasma-ball

It made Boing Boing – woot!