Self-Cleaning Bird Nest Box

We celebrate the start of Spring by cleaning the previous season’s nest(s) from our bird boxes, so this “improved” design caught our eye on a walk around the neighborhood:

Self-cleaning bird nest box

Self-cleaning bird nest box

Birds being the way they are, the most recent occupants surely piled more twigs & grass atop their foundation to make the level come out right. An industrious mouse might find a convenient route inside.


Autodesk Privacy Statement: “Do Not Track” and Similar Mechanisms

Autodesk just Borged Netfabb and, in the process of merging their address lists, asked me to update my info and agree to their very detailed Privacy Statement. You should take a look at it; the link will open in a new tab / window / whatever, so you don’t lose your place here.

Have you noticed how those “statements” always have a very long and firmly fixed line width that doesn’t adapt to your window size, use various shades of light-gray-on-white typefaces in the smallest sizes, and continue for pages and pages. I don’t believe in coincidences, either.

Here’s what they think of my Do Not Track browser setting (emphasis added):

“Do not track” and similar mechanisms

Some web browsers may transmit “do-not-track” signals to websites with which the browser communicates. Because of differences in how web browsers incorporate and activate this feature, it is not always clear whether users intend for these signals to be transmitted, or whether they are even aware of them.

Participants in the leading Internet standards-setting organization that is addressing this issue are in the process of determining what, if anything, websites should do when they receive such signals. Autodesk currently does not take action in response to these signals. If and when a final standard is established and accepted, we will reassess how to respond to these signals.

For information about cookies, web beacons and similar technologies, please read our Cookie Policy.

After plowing through much of their “statement”, I decided Autodesk doesn’t do anything I need to know about and, seeing as how Netfabb gradually faded from my attention when their web service joined Microsoft’s Azure cloud, I declined to “confirm my preferences” and didn’t click the big blue button. I doubt such inaction will remove my email address from their list, but it’s the only choice they offer.

Because I can’t tell if a website really wants to track me, I block ads, disable Flash, and destroy all cookies when I leave their site, Just In Case they inadvertently deployed all that crap. I’m sure they never intend to serve malware through an ad slot brokered on their site, but mistakes do happen, and I’m glad to assist them.

If you’re seeing ads on this page right now, they come from WordPress and I get a small cut. You should start using an ad blocker right now; if your browser doesn’t permit you to block ads, change browsers. If you worry that reducing my advertising revenue will compromise the quality and quantity of what you see here, send me a sack of money through Paypal. Fair enough?

Also: Linux, dammit.


Vacuum Tube LEDs: Ersatz Heat Sink Plate Cap

I wanted a slightly larger “plate cap” to fit a big incandescent bulb and it seemed a fake heatsink might add gravitas to the proceedings:

Vacuum Tube LEDs - large incandescent bulb

Vacuum Tube LEDs – large incandescent bulb

Yeah, that antique ceramic socket holds the bulb at a rakish angle. Worse, even though I painstakingly laid out the position of the heatsink atop the bulb, it’s visibly off-center. Which wouldn’t be so bad, had I not epoxied the damn thing in place.

After reaming out the M2’s filament drive, the entire blue base printed without incident.

A closer look at the cap:

Vacuum Tube LEDs - ersatz heatsink plate cap

Vacuum Tube LEDs – ersatz heatsink plate cap

Memo to Self: Next time, line it up with the vertical glass support inside the bulb and ignore the external evidence.

The boss has a hole for the braid-enclosed cable to the knockoff Neopixel:

Vacuum Tube Lights - finned cap - Slic3r preview

Vacuum Tube Lights – finned cap – Slic3r preview

The cupped surface perfectly fits the bulb’s 3.75 inch diameter. While you wouldn’t mill out a real heatsink, it definitely looks better this way and (alas) gives the epoxy more footprint for a better grip.

I built the fins with a 1/8 inch cutter in mind, so the fin root radius allows for a G3/G3 arc without gouging. I doubt machining a fake heatsink from aluminum makes any sense, but the cheap extruded heatsinks on eBay don’t look very good. Plus, they sport completely unnecessary tapped holes for LED mounts and suchlike.

A cross-section shows the wiring channel and cable entry:

Vacuum Tube Lights - fin cap solid model - section

Vacuum Tube Lights – fin cap solid model – section

I epoxied the Neopixel in place, applied double-sided carpet tape to the whole thing, then painstakingly trimmed around the fins with an Xacto knife:

Vacuum Tube LEDs - Ersatz Heatsink plate cap - tape

Vacuum Tube LEDs – Ersatz Heatsink plate cap – tape

That looked better from the top side (where it was completely hidden) and came heartbreakingly close to working, but after about a day the cable + braid put enough torque on the cap to peel it off the bulb. Obviously, the tape holds much less enthusiastically after that.

Part of the problem came from the cable’s rather sharp angle just outside the cap:

Vacuum Tube LEDs - Ersatz Heatink plate cap - detail

Vacuum Tube LEDs – Ersatz Heatink plate cap – detail

Rakish angle, indeed. Two of ’em, in fact.

Unlike the smaller cap on the halogen bulb, this time I didn’t bother with a brass tube ferrule, mostly to see how it looks. I think it came out OK and the black braid looks striking in person. Conversely, a touch of brass never detracts from the appearance.

Obviously, the cable wasn’t long enough, either. Part of that problem came from underestimating the braid length: it shortens dramatically when slipped over the cable, even when you expect shortening. Somehow I managed to overlook that, despite cutting the cable quite long enough, thankyouverymuch. There’s a tradeoff between gentle angles and having the cable stick out too far for comfort.

Memo to Self: Use a cable at least four inches longer than necessary, measure the combined cable + braid assembly after screwing the bulb in the socket, and don’t epoxy anything before all the parts are ready for assembly.

That’s why it’s a prototype made out of blue PETG…

Protip: running old ceramic sockets through the dishwasher greatly simplifies their subsequent cleanup.

All in all, I like it.

The OpenSCAD source code as a GitHub gist:

, ,


Vacuum Tube LEDs: First Light!

A test lashup to see how it all works, with an ersatz plate cap atop the IBM 21HB5A Beam Power tube on the far right end:

Vacuum Tube LEDs - test lashup

Vacuum Tube LEDs – test lashup

Those sockets must mount in a chassis, not flop around loose on the cable.

I hacked the code out of the Hard Drive Platter Mood Light; there’s a lot to not like about what’s left and I must rethink the overall structure. The colors now run an order of magnitude faster than the Platter Mood Light, with a 90° phase angle between successive Neopixels.

The mica spacers in the 12AT7 Dual Triode tube (second in the sequence, Noval socket) look cool & crystalline:

Vacuum Tube LEDs - Noval tube - blue phase

Vacuum Tube LEDs – Noval tube – blue phase

When the red phase comes around, it becomes a firebottle:

Vacuum Tube LEDs - Noval tube - red phase

Vacuum Tube LEDs – Noval tube – red phase

With a touch of fire in its hole, the IBM 21HB5A Beam Power tube looks just flat-out gorgeous, despite that translucent blue plate cap:

Vacuum Tube LEDs - IBM 21HB5A Beam Power Tube - violet amber phase

Vacuum Tube LEDs – IBM 21HB5A Beam Power Tube – violet amber phase

Cool green works pretty well:

Vacuum Tube LEDs - IBM 21HB5A Beam Power Tube - green violet phase

Vacuum Tube LEDs – IBM 21HB5A Beam Power Tube – green violet phase

If you wait long enough, it’ll probably turn True IBM Blue.

This worked out even better than I expected!

The Arduino source code as a GitHub gist:


Vacuum Tube LEDs: Ersatz Tube Sockets

Even vacuum tubes destined to be decorations need sockets:

Vacuum Tube Bases - solid models

Vacuum Tube Bases – solid models

They’re entirely plastic, of course, but they match the dimensions of “real” tube sockets pretty closely. The bosses around the pins have hard-inch dimensions, so you (well, I) can unleash Genuine Greenlee Radio Chassis Punches on sheet metal.

All the key dimensions come from a table, so you can build whatever sockets you need. These four seem to cover the most common relics of the Hollow State Empire:

T_NAME = 0;                                             // common name
T_NUMPINS = 1;                                          // total, with no allowance for keying
T_PINBCD = 2;                                           // tube pin circle diameter
T_PINOD = 3;                                            //  ... diameter
T_PINLEN = 4;                                           //  ... length (overestimate)
T_HOLEOD = 5;                                           // nominal panel hole from various sources
T_PUNCHOD = 6;                                          // panel hole optimized for inch-size Greenlee punches
T_TUBEOD = 7;                                           // envelope or base diameter
T_PIPEOD = 8;                                           // light pipe from LED to tube base
T_SCREWOC = 9;                                          // mounting screw holes

//    Name      pins     BCD   dia  length   hole            punch       env  pipe screw
TubeData = [
    ["Mini7",     8,    9.53, 1.016,   7.0,  16.0,        11/16 * inch,  18.0,  5.0, 22.5],
    ["Octal",     8,   17.45, 2.36,   10.0,  36.2,    (8 + 1)/8 * inch,  32.0, 11.5, 39.0],
    ["Noval",    10,   11.89, 1.1016,  7.0,  22.0,          7/8 * inch,  21.0,  5.0, 28.0],
    ["Duodecar", 13,   19.10, 1.05,    9.0,  32.0,         1.25 * inch,  38.0, 12.5, 39.0],

Given that the tubes lack electrical connections, I omitted the base keying: plug them in for best visual effect.

The hole through the middle passes light from a knockoff Neopixel on a 10 mm OD PCB:

Vacuum Tube LEDs - Octal base - top

Vacuum Tube LEDs – Octal base – top

Seen from the bottom, each base traps a pair of 6-32 nuts for chassis mounting and has a Neopixel press-fit in the middle:

Vacuum Tube LEDs - Duodecar base - bottom

Vacuum Tube LEDs – Duodecar base – bottom

Those recesses require support structures:

Vacuum Tube Bases - solid models - support

Vacuum Tube Bases – solid models – support

The Miniature 7-pin socket has the least space for the 10 mm OD Neopixel PCB and shows the thin layer between the bottom of the pin holes and the top of the openings.

Vacuum Tube Base - Mini7 - solid model section

Vacuum Tube Base – Mini7 – solid model section

You see half of the eight holes in the “7 pin” socket, because it has the eighth hole where a standard socket has a gap between pins 1 and 7.

Somewhat to my surprise, punching the support spiders out with a 6-32 stud (grabbed in the drill press) worked perfectly:

Vacuum Tube Base - nut trap overhang - detail

Vacuum Tube Base – nut trap overhang – detail

They look like I intended to build tiny decorations:

Vacuum Tube Base - support structure - detail

Vacuum Tube Base – support structure – detail

The cookies held on tenuously, then released with a loud bang! as I gradually increased the pressure. A PETG support structure in a blind recess wouldn’t pop out nearly so well.

The OpenSCAD source code as a GitHub gist:




Sears Sewing Table Hinge Covers

The extension surfaces on the Sears sewing table in the Basement Sewing Room unfold from the top, leaving the hinges exposed:

Sears Sewing Table - hinge

Sears Sewing Table – hinge

Alas, quilts snag on the squared-off ends of the hinges, a situation that is not to be tolerated…

This protective cap isn’t as small as we’d like, but it must be that thick to cover the hinge, that long to cover the squared-off ends, and that wide for symmetry:

Sears Sewing Table Hinge Cover - solid model

Sears Sewing Table Hinge Cover – solid model

Two neodymium magnets fit in the holes and secure the cover to the all-steel “bronzed” hinges:

Sears Sewing Table - hinge covers

Sears Sewing Table – hinge covers

We’re not sure how well that will work in the long term, but early returns seem promising.

It could be slightly narrower left-to-right and maybe fewer vertices should be oriented differently.

The OpenSCAD source code as a GitHub gist:

, ,


Raspberry Pi: Jessie Lite Setup for Streaming Audio

As a first pass at a featureless box that simply streams music from various sources, I set up a Raspberry Pi with a Jessie Lite Raspbian image. I’m mildly astonished that they use dd to transfer the image to the MicroSD card, but it certainly cuts out a whole bunch of felgercarb that comes with a more user-friendly interface.

I used dcfldd (for progress reports while copying) and verify the copied image:

sudo dcfldd statusinterval=10 bs=4M if=/mnt/diskimages/ISOs/Raspberry\ Pi/2015-11-21-raspbian-jessie-lite.img of=/dev/sdb
sudo dcfldd statusinterval=10 bs=4M if=/dev/sdb of=/tmp/rpi.img count=350
truncate --reference /mnt/diskimages/ISOs/Raspberry\ Pi/2015-11-21-raspbian-jessie-lite.img /tmp/rpi.img
diff -s /tmp/rpi.img /mnt/diskimages/ISOs/Raspberry\ Pi/2015-11-21-raspbian-jessie-lite.img

That fits neatly on a minuscule 2 GB MicroSD card:

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       1.8G  1.1G  549M  67% /
devtmpfs        214M     0  214M   0% /dev
tmpfs           218M     0  218M   0% /dev/shm
tmpfs           218M  4.5M  213M   3% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           218M     0  218M   0% /sys/fs/cgroup
/dev/mmcblk0p1   60M   20M   41M  34% /boot

Set the name of the Raspberry Pi to something memorable, perhaps streamer1.

Disable IPV6, because nothing around here supports it, by tweaking /etc/modprobe.d/ipv6.conf:

alias ipv6 off

Enable the USB WiFi dongle by adding network credentials to /etc/wpa-supplicant/wpa-supplicant.conf:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

 ssid="your network SSID goes here"
 psk="pick your own"

Nowadays, there’s no need for a fixed IP address, because after adding your public key to the (empty) list in ~/.ssh/authorized_keys, you can sign in using a magic alias:

ssh -p12345 pi@streamer1.local

I have absolutely no idea how that works, nor how to find out. If it ever stops working, I’m doomed.

The Raspberry Pi Model B+ has “improved” audio that, to Mary’s ears, comes across as pure crap; even my deflicted ears can hear low-level hissing and bad distortion at moderate volumes. An old Creative Labs Sound Blaster USB box sidesteps that problem, but requires a tweak to route the audio to the proper destination:

# Make USB sound gadget the default output

pcm.!default {
 type hw card 1
ctl.!default {
 type hw card 1

ALSA then seems to default to the wrong channel (or something), although this tweak in the middle of /usr/share/alsa/alsa.conf may not be needed:

#pcm.front cards.pcm.front
pcm.front cards.pcm.default

Good old mplayer seems to handle everything involved in streaming audio from the Interwebs.

Set up blank /etc/mplayer/input.conf and ~/.mplayer/input.conf files to eliminate kvetching:

# Dummy file to quiet the "not found" error message

Set up ~/.mplayer/config thusly:


The commented-out ao option will force the output to the USB gadget if you want to route the default audio to the built-in headphone jack or HDMI output.

Telling mplayer to use its own software volume control eliminates a whole bunch of screwing around with the ALSA mixer configuration.

The quiet option silences the buffer progress display, while still showing the station ID and track information.

With that in hand, the Public Domain Project has a classical music stream that is strictly from noncommercial:

mplayer -playlist

Send them a sack of money if you like them as much as we do.

By contrast, the local NPR station comes across as talk radio:


You can’t feed nested playlists into mplayer, but fetching the contents of the stream playlists produces a one-station-per-line playlist file that one might call RadioList.txt:

So far, I’ve been manually starting mplayer just to get a feel for reliability and suchlike, but the setup really needs an autostart option with some user-friendly way to select various streams, plus a way to cleanly halt the system. A USB numeric keypad may be in order, rather than dinking around with discrete buttons and similar nonsense.

There exists a horrible hack to transfer the stream metadata from mplayer onto an LCD, but I’m flat-out not using PHP or Perl. Perhaps the Python subprocess management module will suffice to auto-start a Python program that:

  • starts mplayer with the default playlist
  • parses mplayer’s piped output
  • updates the LCD accordingly
  • reads / translates keypad input

This being a Pi, not an Arduino, one could actually use a touchscreen LCD without plumbing the depths of absurdity, but that starts looking like a lot of work…