For ~$50 you can find digital “microscopes” on Amazon that save images to SD cards. Here’s an iPhone OLED screen displaying the letter “T”.
All the colors you see on your phone, computer, TV, etc. are just some additive combo of red, green, and blue. In the manufacturing process of these newer “diamond” layouts you’ll find that the green sub-pixels are physically smaller – this is because our eyes pick up green the best (it’s in the middle of the visible electromagnetic spectrum). ROYGBIV 4lyfe.
The ESP8266 was swapped for an ESP-WROOM-32 with dual cores
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:
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!
I mentioned in my previous post about the Juicy Crumb DockLite G4 that there were two shortcomings with the product:
Their software to control the brightness of the display was macOS only.
The display doesn’t support sleep, so you’re required to press a physical button to turn off the backlight.
Thanks to some USB packet snooping and GPT, both of these problems were solved quickly. 😎
I wanted Linux software control
What started this exploration was that I wanted to control the display from Linux because it’s currently connected to a Raspberry Pi, not a Mac.
Step 0: Check for an open source repo
Negative. I didn’t spot anything, so it’ll take a little more grunt work. I did run their helper app through a disassembler and spotted functions like getting and setting the backlight via IOKit which were all expected. It wasn’t necessary to go this far, it just confirms that we have some USB packet snooping to do.
Step 1: Get lsusb output
Running lsusb with the display connected to the RPi showed:
Bus 001 Device 009: ID 4a43:1d8a Juicy Crumb Systems DockLite
So I grabbed the output of lsusb -v -d 4a43:1d8a to feed it to the LLM later to provide more details about its USB specs.
Step 2: Capture USB packets on the Mac
The double-edged sword of Apple’s security is that it introduces all sorts of challenges for devs who need to get to lower level functionality, like capturing raw data from interfaces.
To successfully USB capture packets on a Mac I had to:
After installing the pyusb module I could run python set-brightness.py 700 and it worked from Linux! The range from lowest backlight brightness to highest is around 700 – 5000.
The extra bonus (which I’m most excited about) is that sending a value of 0 will truly turn off the backlight! This isn’t even (currently) possible with their software. (Obligatory “do this at your own risk”)
Now I can hook into something like D-Bus signals to potentially toggle the display depending on the desktop’s locked state.
Success
✅ The display’s brightness can be set from any OS, not just macOS.
✅ The display’s backlight can be turned off via software.
It took a couple LLM prompts plus a few simple syntax tweaks from my side and now DOOM on the Apple Watch has audio. 🤯 It was almost as easy as typing iddqd. To get around lack of SDL support, AVFoundation is used. Check out the GitHub commits.
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. 🐄
Overall, the instructions make sense – pull out the old PPC logic board, pop in the DockLite G4 board, connect power and the display, and you’re kinda done.
The board also features a USB hub, a speaker amplifier, and brightness-adjustment buttons. They all line up nicely with the back of the chassis, even if it’s not airtight, Apple-level industrial design.
DockLite G4 ports
Software control
If you’re running a Mac you can install Juicy-Link and connect to the USB hub to set the display brightness and upgrade firmware. It’s simple to install and seems to work well (as long as it’s a Mac).
Their software is currently only available on macOS although their website claims Windows support is coming soon. Software control is better than nothing, but still not as nice as DDC/CI. If you find yourself on something other than macOS you’ll need to reach around the back and press the buttons to adjust the brightness.
More disappointing is that the display doesn’t support sleep mode, so turning off the backlight requires pressing the physical power button in the back. This makes the challenge of preserving an old backlight even harder.
The good news is that I think much of this can be fixed with software and firmware updates, so I’d love to see that happen.
It’s still an old LCD
Modern macOS looks great on this design (round all the borders!), but your eyes won’t be fooled coming from HiDPI Retina displays. LCDs have come a long way with higher resolutions and greater pixel densities, uniform and bright LED backlights, wider viewing angles, and higher refresh rates to name a few. This display has none of that. It’s not a suitable daily driver for my eyes, but it works great as a toy.
The drives can go
Juicy Crumb recommends that you leave the CD-ROM and HDD installed so the base retains a proper weight for stability. Interestingly their instructions don’t have you unplug the power from these drives even though they aren’t in use.
I understand keeping things simple, but the type of user who is disassembling an iMac G4 can surely unplug a couple cables to reduce unnecessary power consumption and strain on an old PSU.
I removed both from my 17″ system and I have no concerns about its stability. I recommend doing the same. Plus, you’ll get better airflow with the system fan (although I question if that’s really necessary, too).
Old PSU is old
Although Apple is known for high quality hardware, installing this board doesn’t really lower the risk that the 20+ year old power supply will fail and burn something up. It’d be nice to have an alternative DC input like a barrel pin connector.
The original fan is audible
Do yourself a favor and replace the factory fan with something modern and quiet. Without a hard drive and CD-ROM spinning away, the fan becomes more noticeable. The replacement should be a standard size, though you may want to match the color—anything non-white might be distracting.
Final thoughts
Raspberry Pi OSiPadOSWindows 3.1
I’m really happy with the purchase and have had a blast playing around with different systems. If you’ve got a compatible iMac G4 and want to do more than Mac OS 9, this is a great solution. Just promise that if you order one and don’t want your Tim Tam biscuit, you’ll send it my way.
Thirteen years ago🤯 I made a silly little browser plugin that got some Internet attention. It was featured on websites and a few big podcasts, and even served as inspiration for a WordPress plugin written by Jamie Zawinski. 😎 I’d occasionally see it pop up as a suggestion by Redditors and even learned of use cases I hadn’t anticipated – like preventing movie spoilers or making the site more suitable for classroom environments.
Reviews on the plugin page were overwhelmingly positive (many of them hilarious – one was even framed in my home) and I was delighted to see that the Internet could take a joke. On a serious note I also want to make it very clear that the term “herp derp” here meant “saying something meaningless”. I later learned there can be different interpretations of the term that don’t carry the same spirit – to be whimsical, silly, and most of all harmless. (this is why we can’t have nice things)
On the technical side the biggest surprise was that Google’s DOM structure stayed extremely stable throughout the whole run and only needed one update. I’m amazed it ran as long as it did with so little effort from my side.
Now that we’re in 2025 I think YouTube has improved comment moderation. Features like “Top comments” seem to help, and in this era of LLMs the accuracy of “quality scoring” should increase as well.
So with that, it’s time to say farewell to Herp Derp for YouTube! I mean, herp derp. 👋
In the past I’ve blogged about my Alfa-Zeta flip dots (one, two) and how I got them working with the Arduino platform. I’ve taken some time to turn the work into a consumable library that should make it much easier for others who want a turn-key way to drive the display.
The library is available in the Arduino IDE as well as the PlatformIO registry and comes with examples to get started. When added to a project it’ll grab all its dependencies so you can get going as quickly as possible.
Most of the heavy lifting is done by the excellent Adafruit GFX Library and it’s been updated to support 7×7 and 14×7 panels in addition to 28×7. Flip on! 🔴