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

  • Why Friends Don’t Let Friends Run Windows: Conficker

    Mary gave a gardening presentation at the local library, popping a 4 GB USB memory stick with the presentation into a library computer connected to the display projector. Back home, she deleted the presentations and was about to add more files, when she noticed something interesting:

    drwx------  4 ed   ed    4096 Dec 31  1969 ./
    drwxr-x---+ 3 root root  4096 Jan 31 19:21 ../
    -r--r--r--  1 ed   ed   59288 Mar 21  2009 autorun.inf
    drwx------  3 ed   ed    4096 Jan 30 19:31 RECYCLER/
    drwx------  4 ed   ed    4096 Jan 31 19:10 .Trash-1001/
    

    Ubuntu 12.10 automagically mounts FAT filesystems with the current user as owner and group. The .Trash-1001 directory is the Linux trash heap, but where did all that other stuff come from? The autorun.inf definitely looks Window-y, doesn’t it?

    Perforce, the library runs Windows, but that shouldn’t add files to a USB memory stick that just was plugged in and used for a read-only presentation, should it?

    Huh. You know where this is going…

    Let’s hand autorun.inf to VirusTotal for a second opinion. The first three results from their long list confirm my suspicion:

    Antivirus Result Update
    Agnitum INF.Conficker.F 20130131
    AhnLab-V3 Win32/Conficker.worm 20130131
    AntiVir Worm/Kido.IH.40 20130131

    The executable file containing the actual payload is, of course, buried in a subdirectory that might look more innocent on a Windows box:
    /RECYCLER/S-5-3-42-2819952290-8240758988-879315005-3665/

    It sports a randomized name to evade a really stupid malware detector:
    jwgkvsq.vmx

    Here’s what VirusTotal reports from some heavy hitters in the AV field:

    Kaspersky Net-Worm.Win32.Kido.ih 20130131
    Kingsoft Worm.Kido.ih.(kcloud) 20130131
    Malwarebytes Worm.Conficker 20130131
    McAfee W32/Conficker.worm 20130201
    McAfee-GW-Edition W32/Conficker.worm 20130131
    Microsoft Worm:Win32/Conficker.B 20130131

    The Wikipedia article gives the details. I suppose that PC got it from somebody else’s USB stick, but the library really should be running some defensive software; Conficker dates back to 2008, so it’s not new news these days.

    That kind of Windows Genuine Advantage makes up for all the hassles of running Linux, right there. Mary reported the problem to the library; we’ll never know the rest of the story.

    [Update: We got an update!]

  • Dishwasher Rack Pins: More Plastic

    Those 3D printed dishwasher rack protectors solved the problem on the bottom of the pins, but the tops also had some rust. I dosed the pins with Evapo-Rust to stabilize the corrosion:

    Dishwasher rack - rusted pins
    Dishwasher rack – rusted pins

    After that picture, the pins soaked for a while, got a rinse & blotting, then sat for a while to dry. I can’t say that’s in complete accordance with the directions, but it’s close to the spirit of the thing.

    Meanwhile, the MEK / xylene / acetone I added to the bottle of stiffened ReRACK repair coating had softened it up pretty well.  They recommend several coats at half-hour intervals, of which this was the first:

    Dishwasher rack - first plastic layer
    Dishwasher rack – first plastic layer

    I probably should have chewed off the corrosion bulging the OEM coating, but, given the number of pins that needed chewing, that started looking like a major project. Let’s face it, I can always touch things up if the pins continue rotting out.

    The next morning, the rack was back in service:

    Dishwasher rack - recoated pins
    Dishwasher rack – recoated pins

    One advantage of a big blob atop each pin: the printed rack protectors might not wriggle off quite so easily.

     

  • Kill A Watt: IEC Adapters

    I should have done this a long time ago:

    Kill-A-Watt - IEC plug and socket
    Kill-A-Watt – IEC plug and socket

    It makes measuring PC power consumption much easier!

    I picked up some cheap AC plugs and sockets, cut a short IEC extender cable in half, and wired ’em up. If the IEC extender link breaks again, search amazon.com for something like “computer power cord extension” and rummage around.

    IEC color code hint: brown = hot, blue = neutral (unless they cheat).

    US NEMA 5 plug / socket hint: the blade marked W is neutral. More expensive hardware will have dark brass = hot, light brass = neutral, but don’t bet your life on it.

  • LibreOffice 3.6: Fixing Font Selection Problems

    This may not be a LibreOffice problem, but that’s where it shows up: the font selection dialog won’t display fonts with nonstandard Style names. There is, of course, no documentation anywhere (that I can find, anyway) on what Style names are permitted, so you discover this only when a font style that’s properly installed and accessible by other programs (like, say, Inkscape or Scribus) doesn’t render properly and doesn’t appear in the list.

    In Xubuntu 12.10, LibreOffice 3.6.2.2 can’t handle the American Typewriter font style called Medium, which is what I’ve been using for the return address field on my (very few, these days) mail envelopes. Over the years, various versions of OpenOffice and LibreOffice have alternately accepted and rejected the Medium style, so this isn’t exactly a regression. It is, however, Yet Another Annoyance.

    The solution, hinted at in that thread, involves using FontForge to rename the offending Style to, say, Regular, then saving the font. It’s actually the Weight property, hidden in Element → Font Info → PS Names tab. In this case, I changed the word “Medium” in the Fontname, Name for Humans, and Weight fields to “Regular”, which also updates the values in the TTF Names tab.

    I save the modified font files in ~/.local/share/fonts using TrueType format, just to be sure I don’t confuse them with the original Postscript version in /usr/share/fonts/custom, delete the original, and then run fc-cache -v -f to update the caches. This surely isn’t the cleanest way to make it happen and almost certainly isn’t allowed by the Adobe EULA I agreed to, back when I actually bought the fonts, but so it goes.

    And then It Just Works…

    LibreOffice vs American Typewriter font
    LibreOffice vs American Typewriter font
  • Long-term Paint Storage: Just Don’t

    We probably should have noticed this sooner, but …

    Leaking paint can
    Leaking paint can

    Yes, that can really does did contain white paint!

    It cleaned up about as well as you’d expect, which is to say not very well at all:

    Leaking paint can - residue
    Leaking paint can – residue

    Fortunately, we’re not particularly fussy about shelves in the Basement Laboratory Paint Storage Wing.

    Memo to Self: Just throw the nearly empty paint cans out, OK?

  • Dishwasher Rack Protectors: Into The Maw

    Three rack protectors have gone missing over the last few months, presumably being digested by the dishwasher’s grinder, so I ran off another batch:

    Dishwasher Rack Protectors - on platform
    Dishwasher Rack Protectors – on platform

    I used the original solid model, shown here with the support structure outside for visibility:

    Dishwasher rack protector - support model
    Dishwasher rack protector – support model

    I re-sliced the model to pick up whatever printer config tweakage happened since then. Those ribbed doodads snapped out easily and, in fact, some remained bonded to the platform:

    Dishwasher Rack Protectors - support structures
    Dishwasher Rack Protectors – support structures

    No finishing required: just slide them over the pins atop a blob of acrylic caulk. Despite the few missing protectors, it does a good job of bonding them to the rack and sealing gaps in the worn vinyl coating.

    I picked up a jar of ReRack glop on closeout duing my last pass through the Big Box Home Repair Store. It seemed a bit stiff, so I’ve added generous dollops of xylene, acetone, and MEK to thin it out; that’ll take a while to stabilize.

  • Samsung VAC-9048 Vaccuum Cleaner: Floor Brush Strips

    After beating the Samsung’s nozzle handle and hose into submission, I made a set of floor brush strips for the hard-floor attachment:

    Floor brush strips - replacements in place
    Floor brush strips – replacements in place

    The original brushes had non-woven felt glued to a cleverly molded strip of white plastic, which lasted not very long at all. I’d replaced them (*) with wool fabric glued to hand-hewn strips of polypropylene cut from the usual blister pack material, but that was so labor-intensive as to make no sense at all; it did show that replacement brushes would work, though, which was the whole point. This view looks through a finished strip to the urethane glue and wool fabric:

    Floor brush strip - manual version
    Floor brush strip – manual version

    Fortunately, there’s an easier way to make the strips:

    Floor brush strip - solid model
    Floor brush strip – solid model

    Note that the smaller tab (the one in the front) is not centered on the midline. The openings for the larger tab in the floor brush housing seem to have a small offset, but it’s not worth worrying about. The printed ones are 4 layers thick, but I think 3 layers will work as well; that’s what the OpenSCAD source will produce.

    This is one of the few situation where the hand-knitted top surface of a 3D-printed object is an advantage: that, plus the holes, provides enough griptitude for urethane glue to hold the fabric strips firmly in place.

    Obviously, you print them in multiples:

    Floor brush strips - on platform
    Floor brush strips – on platform

    A trial fit:

    Floor brush strip - trial fit
    Floor brush strip – trial fit

    They really are bowed slightly outward in the middle, which ensures there’s more pressure on the middle of the strip against the floor. I think the weird indented pattern in the brush housing under the strips was for a complex spring assembly that never made it into production; the OEM strips looked just like the ones I’m making, minus the perforations.

    I glued two strips individually to make sure everything lined up, then glued these two in one operation and separated them with a razor knife:

    Floor brush strips - gluing fabric
    Floor brush strips – gluing fabric

    (*) It goes without saying that OEM replacement brushes weren’t available and, in fact, they have never been available at any time when we’ve owned the vacuum cleaner. Maybe I’m not looking in the right place, but so it goes.

    The OpenSCAD source code, which you’ll want to print with Multiply set to maybe 8:

    // Samsung Vacuum cleaner nozzle floor strips
    // Ed Nisley KE4ZNU January 2013
    
    Layout = "Build";			// Show, Build
    
    //- Extrusion parameters must match reality!
    //  Print with +0 shells and 3 solid layers
    
    ThreadThick = 0.25;
    ThreadWidth = 2.0 * ThreadThick;
    
    HoleWindage = 0.75;
    
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    
    Protrusion = 0.1;           // make holes end cleanly
    
    //----------------------
    // Dimensions
    
    Body = [6.0,59.0,3*ThreadThick];	// width, length, thick
    
    Tab1 = [4.5,5.0,0.0];				// width, length, offset from centerline
    Tab2 = [3.5,5.0,0.5];
    
    HoleOC = 8.0;						// adhesive anchoring holes
    HoleDia = 1.0;
    HoleSides = 4;
    HoleMax = floor(Body[1]/(2*HoleOC));
    
    echo("HoleMax: ",HoleMax);
    
    //----------------------
    // 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);
    }
    
    module ShowPegGrid(Space = 10.0,Size = 1.0) {
    
        Range = floor(50 / Space);
    
        for (x=[-Range:Range])
            for (y=[-Range:Range])
                translate([x*Space,y*Space,Size/2])
                %cube(Size,center=true);
    
    }
    
    module BackingStrip() {
    
    	difference() {
    		union() {
    			translate([0,0,Body[2]/2])
    			cube(Body,center=true);
    			translate([Tab1[2],-1*Body[1]/2,Body[2]/2])
    			cube([Tab1[0],2*Tab1[1],Body[2]],center=true);
    			translate([Tab2[2],+1*Body[1]/2,Body[2]/2])
    			cube([Tab2[0],2*Tab2[1],Body[2]],center=true);
    		}
    		for (i = [-HoleMax:HoleMax])
    			translate([0,i*HoleOC,-Protrusion])
    			rotate(45)
    			PolyCyl(HoleDia,(Body[2] + 2*Protrusion),HoleSides);
    	}
    }
    
    //----------------------
    // Build it!
    
    ShowPegGrid();
    
    if (Layout == "Show")
    	BackingStrip();
    
    if (Layout == "Build")
    	rotate(90) BackingStrip();