The Smell of Molten Projects in the Morning

Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.

Category: Home Ec

Things around the home & hearth

  • Firefox + uBlock Origin vs. CNN Autoplay Videos

    Set up these filters in uBlock Origin, per some hints:

    ||registry.api.cnn.io/assets/fave/theoplayer$domain=cnn.com
    cnn.com###large-media

    All those annoying CNN auto-play videos will vanish, along with any videos you might have wanted. For me, it’s a reasonable tradeoff, as most (useful) videos will be available on Youtube or elsewhere.

    The built-in browser controls you might think of activating, as I have, don’t work on CNN videos, because CNN uses theoplayer, a “universal” Javascript-based player. It’s not Flash, it’s not HTML5, it’s not a specific video thing, it’s a way to work around all those blocking mechanisms.

    Mostly, I don’t get news from CNN, but occasionally a link will lead there, a video appears, and instantly gets muted.

    Burn them. Burn them all.

    Update: Some sites run auto-play videos through JW Player, which you kill thusly:

    ||jwcdn.com
    ||content.jwplatform.com

    That blocks the source of the player, which seems to not depend on the site using it. So far, so good.

  • Sonicare Essence: Final Battery Replacement

    After a bit over five years, the NiMH cells in my ancient Philips Sonicare Essence toothbrush finally gave out:

    Sonicare recharge dates - 2017-2018
    Sonicare recharge dates – 2017-2018

    Down near the end, the poor thing barely gave one brushing after an overnight charge.

    While I was dismantling the case, I charged the last two new-old-stock NiMH cells:

    Sonicare Essence - charging short cells
    Sonicare Essence – charging short cells

    They arrived the same five years ago as the deaders in the toothbrush, but haven’t been used in the interim and charged well enough. The NiteCore D4 charger arrived after they did and isn’t really intended for 2/3 AA cells, so I used short brass tubes to make up the difference. I should have used the 300 mA low-current charging option (press-and-hold the Mode button for a second), although it didn’t overcook them at 750 mA.

    The process went pretty much as before, with the new cells soldered in place atop the PCB:

    Sonicare Essence - batteries on PCB
    Sonicare Essence – batteries on PCB

    And the PCB tucked back into the case:

    Sonicare Essence - batteries installed
    Sonicare Essence – batteries installed

    I applied a solder bridge to the BLINKY pads, which seemed to disable the blinking and turn the LED on full with the toothbrush in the charger. Without waiting for a full charge cycle, I sucked the solder off the pads and restored the previous blinkiness.

    A few strips of Kapton tape and it’s back in operation:

    Sonicare Essence - retaped
    Sonicare Essence – retaped

    The first charge lasted for two weeks, so things are looking good again. When the stock of knockoff replacement brush heads wears out, it’ll be time to get a whole new toothbrush … even if the batteries aren’t completely dead yet.

  • Chair Reupholstering

    We were tasked with replacing the foam cushion and seat covering on a pair of kitchen chairs. Removing the existing fabric seemed simple, until I pulled a dozen staples holding the cardboard cover to the bottom of the chair and exposed the fabric stapled to the MDF plate:

    Chair reupholstering - stapled fabric
    Chair reupholstering – stapled fabric

    That’s just part of one corner. Obviously, whoever built the chair wanted to be very very very sure the fabric didn’t come loose!

    Removing the staples from one corner produced a pile:

    Chair reupholstering - one corner of staples
    Chair reupholstering – one corner of staples

    Piling up all the staples from the other chair looked even more impressive:

    Chair reupholstering - staple pile
    Chair reupholstering – staple pile

    I fired maybe a third as many staples into the new fabric, which seems secure enough.

  • ShopVac vs. Samsung Vacuum Cleaner Bags

    While cleaning the filter in the 1 gallon ShopVac for the bandsaw and lathe, I found the last few bags from the never-sufficiently-to-be-damned and long-gone Samsung vacuum cleaner that seemed about the right size for upcycling:

    Shopvac vs Samsung vacuum cleaner bags - overview
    Shopvac vs Samsung vacuum cleaner bags – overview

    They’re a bit bulky:

    Shopvac vs Samsung vacuum cleaner bags - trial fit
    Shopvac vs Samsung vacuum cleaner bags – trial fit

    It’s surely not worth buying bags just to cut ’em up, but, with a stock on the shelf, why not?

  • Monthly Image: Wall Painting

    One day, long ago, this tree grew in a certain bedroom:

    Outlet tree
    Outlet tree

    And then a flower appeared in the laundry room:

    Outlet flower
    Outlet flower

    Much to our delight, she asked for forgiveness, not permission … which was, of course, granted immediately.

  • Desk Drawer Stops

    The stops aligning the top two drawers of an old desk vanished, so I got the job of replacing them. They’re hammered into the wood frame:

    Drawer Stops - width measurement
    Drawer Stops – width measurement

    And stand up just enough to engage the back of the drawer face:

    Drawer Stops - height measurement
    Drawer Stops – height measurement

    Back in the Basement Laboratory Shop Wing, I harvested steel strips from a defunct PC case, rubber-hammered them flat, sharpened a cold chisel (un-hardened, so it always needs sharpening), and got to work:

    Drawer Stops - chiseled blanks
    Drawer Stops – chiseled blanks

    The pointy sides should have sharp edges, which you get for free with a chisel. You also get a bench full of little steel slivers perfectly suited for embedding in human flesh. Wearing eye protection is more than just a good idea, too.

    Introducing what will become the visible edges to Mr Disk Sander makes them marginally less hazardous:

    Drawer Stops - in progress
    Drawer Stops – in progress

    A slightly fuzzy picture of a test fit shows the stops should suffice:

    Drawer Stops - trial fit
    Drawer Stops – trial fit

    Which they did:

    Drawer Stops - installed
    Drawer Stops – installed

    Nobody will ever notice the blob of hot melt glue behind each one:

    Drawer Stops - glue blob
    Drawer Stops – glue blob

    Done!

  • Six Gallon Can Lid Adapter to Platform Bird Feeder

    A House Finch suffering from Finch Eye Disease prompted me to sterilize our feeder, which meant providing a temporary feeder to keep the birds flying. Having an abundance of lids from six gallon plastic cans / buckets, this made sense:

    Can Lid Feeder - installed
    Can Lid Feeder – installed

    Which required an adapter betwixt pole and lid:

    Can Lid Feeder - assembled
    Can Lid Feeder – assembled

    Which requires a bit of solid modeling:

    Can Lid Platform Feeder Mount - solid model - bottom
    Can Lid Platform Feeder Mount – solid model – bottom

    The lids have a central boss, presumably for stiffening, so the model includes a suitable recess:

    Can Lid Platform Feeder Mount - solid model - support structure
    Can Lid Platform Feeder Mount – solid model – support structure

    As usual, automatically generated support fills the entire recess, so I designed a minimal support structure into the model and cracked it out with very little effort:

    Can Lid Feeder - support structure
    Can Lid Feeder – support structure

    The tangle off to the right comes from a bridge layer with a hole in the middle, which never works well even with support:

    Can Lid Platform Feeder Mount - Slic3r - bridge layer
    Can Lid Platform Feeder Mount – Slic3r – bridge layer

    Didn’t bother the birds in the least, though, so it’s all good.

    I loves me my 3D printer …

    The OpenSCAD source code as a GitHub Gist:

    // Adapter from steel pole to 5 gallon plastic can lid
    // Turns the lid into a improvised platform feeder
    // Ed Nisley – KE4ZNU – 2018-11
    Layout = "Build"; // Show Build
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    HoleWindage = 0.2;
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    Protrusion = 0.1; // make holes end cleanly
    // Sizes
    ID = 0;
    OD = 1;
    LENGTH = 2;
    Wall = 10; // minimum thickness or width for anything
    Boss = [15,50,9]; // central boss on lie
    Flange = [50,110,Boss[LENGTH] + Wall];
    echo(Boss);
    echo(Flange);
    Pole = [(23.5 + 4*HoleWindage),26,45]; // small end of steel pole
    Screw = [5.0,8.0,25.0]; // 5 mm or 10-32
    ScrewOC = 80; // lid mounting screws
    NumScrews = 3;
    NumSides = NumScrews*2*4;
    $fn = NumSides;
    //———————-
    // Useful routines
    module PolyCyl(Dia,Height,ForceSides=0) { // based on nophead's polyholes
    Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);
    FixDia = Dia / cos(180/Sides);
    cylinder(r=(FixDia + HoleWindage)/2,h=Height,$fn=Sides);
    }
    //———————-
    // Build it
    module Bracket() {
    difference() {
    union() {
    rotate(180/(NumSides/2)) {
    cylinder(d=Flange[OD],h=Flange[LENGTH],$fn=NumSides/2); // fewer sides is OK
    cylinder(d=Pole[OD] + 2*Wall,h=Pole[LENGTH] + Flange[LENGTH],$fn=NumSides/2);
    }
    }
    translate([0,0,-Protrusion])
    rotate(180/NumSides)
    cylinder(d=Boss[OD],h=Boss[LENGTH] + Protrusion,$fn=NumSides);
    translate([0,0,-Protrusion])
    rotate(180/NumSides)
    cylinder(d=Pole[ID],h=2*(Pole[LENGTH] + Flange[LENGTH]),$fn=NumSides);
    for (i=[0:NumScrews-1])
    rotate(i*(360/NumScrews))
    translate([ScrewOC/2,0,-Protrusion])
    PolyCyl(Screw[ID],2*Flange[LENGTH],6);
    }
    }
    module Support() {
    NumRibs = NumSides/2;
    Rib = [0.95*(Boss[OD] – Pole[ID])/2,2*ThreadWidth,Boss[LENGTH] – ThreadThick];
    color("Yellow") {
    for (i=[0:NumRibs-1]) {
    a = i*360/NumRibs;
    rotate(a)
    translate([Pole[ID]/2 + Rib.x/2,0,Rib.z/2])
    cube(Rib,center=true);
    }
    rotate(180/NumSides)
    difference() {
    cylinder(d=Pole[ID] + 10*ThreadWidth,h=1*ThreadThick,$fn=NumSides);
    translate([0,0,-Protrusion])
    cylinder(d=Pole[ID],h=Rib.z + 2*Protrusion,$fn=NumSides);
    }
    }
    }
    if (Layout == "Show")
    Bracket();
    if (Layout == "Build") {
    Bracket();
    Support();
    }