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.

Month: May 2014

  • Maximum-Strength Homeopathic Medicine

    This ought to cure what ails me:

    Empty Size 4 Gelatin Capsules
    Empty Size 4 Gelatin Capsules

    Actually, with the advice & consent of my health-care provider (back in the day, we called them “doctors”), I’m titrating melatonin doses to see whether it has any effect on my wake-up-and-toss-and-turn. The pharmacology seems dubious, at best, but the stuff doesn’t appear to have any amusing side effects.

    We’re both well aware that you can’t run a blinded experiment on yourself and that the placebo effect confounds null results.

    I picked up some 10 mg melatonin in donkey-choking Size 00 capsules, then (lacking a balance with sub-0.1 mg resolution) cut it down using the drug-addict razor-blade-on-glass trick. I can easily do power-of-two divisions, cross-check by eyeballing the capsule fill, and assume the resulting accuracy will be Good Enough.

    Useful ratios to get 8 cut-down capsules, starting with the indicated number of 10 mg capsules:

    • 1.25 mg = 1 x 10 mg/8
    • 2.5 mg = 2 x 10 mg/8
    • 3.75 mg = 3 x 10 mg/8
    • 5.0 mg = 4 x 10 mg/8
    • 6.25 mg = 5 x 10 mg/8
    • 7.5 mg = 6 x 10 mg/8
    • 8.75 mg = 7 x 10 mg/8

    In principle, those capsules are US-made, kosher, halal, and blah blah blah. They’re a third the price of the local health-food store’s offerings: Size 00, Size 0, and Size 2 (out of stock) capsules. I hope that a bag of 500 isn’t a lifetime supply…

    A capsule size chart, swiped directly from one of the eBay suppliers, so I can find it again:

    Gelatin Capsule Sizes
    Gelatin Capsule Sizes

    Cutting 10 mg retail capsules down to 5 mg shows there’s about 320 mg of powder inside: 5 mg requires 1 + 1/8 Size 4 capsules.

    If you’re interested in debating homeopathy, do it somewhere else; it has no physical or clinical basis.

  • Toyota Sienna Brake Wear: No Trouble Found

    Over the decades, the same local repair shop has performed the annual NYS inspection on our cars; we started there when it was conveniently near to jobs at the IBM plant and continued out of habit. In the last, oh, five years or so, they’ve begun reporting all manner of Things That Need Work, ranging from “dirty fluids” to worn shocks. Oddly, none of those problems recurred from year to year and were never written up on the inspection summary; they were always phoned to Mary, who politely declined the service.

    On several occasions, I’d drop off the car and walk to the mall across the road to pick up this-and-that. They’d call Mary (I don’t carry the phone), she’d say she would pass the message to me, and they would never mention the problems when I picked up the car. Huh.

    Most recently, they told her the front brakes had “wafer thin” pads and the rotor disks were severely worn. She declined the service, as always. When I change the oil, I do an under-the-car lookaround and the brakes have always looked fine, but, being that type of guy, I pulled the front wheels and took a closer look at the situation:

    Right Front Brake
    Right Front Brake

    The pads start at 7 mm and wear to a minimum thickness of 1 mm, at which point the cross-pad wear indicating groove will vanish and a little metal tab will touch the rotor and start screaming. These pads have about 2 mm left to the bottom of the grooves and are wearing evenly.

    The rotors start at 28 mm thick and wear to 26 mm. These rotors measure 27.73 mm and have no serious grooves or scars.

    Just for grins, I pulled the rotors and measured the thickness at the middle of the swept ring, aligned with the bolt holes:

    Sienna rotor thickness
    Sienna rotor thickness

    Bottom line: the rotors match to within 0.0015 inch = 0.04 mm and have 0.0005 inch = 0.013 mm of variation around the circumference.

    With 91 k miles on the OEM pads and rotors, I’d say they’re doing fine and that we don’t use the brakes nearly enough.

    It may be time to start patronizing a new shop…

  • Monthly Science: Minimum Groundwater Temperatures, 2006-2014

    The picture says it all:

    Basement Air Groundwater Minimum Temperatures - 2006-2014
    Basement Air Groundwater Minimum Temperatures – 2006-2014

    Much as we thought, this past winter was really cold.

    The data consists of all 3/4 million data logger records concatenated into one huge CSV file, fed through a Sed pipe to normalize all the dates & suchlike, then passed into a Python script that produces one record for each day (all 2561 of ’em) containing the date, minimum air & water temperatures, and the minimum relative humidity.

    This needs (a lot) more work to be pretty, but at least the pieces hang together.

    The Python source code:

    #!/usr/bin/python3
    ''' Extract minimum groundwater / air temperatures & humidity from CSV files
    '''
    
    import sys
    import csv
    import datetime
    import string
    
    # Columns in Hobo datalogger CSV file
    
    SEQNUM = 0
    DATETIME = 1
    AIRTEMP = 2
    RELHUM = 3
    WATERTEMP = 4
    
    datapoints = {}
    
    with open('AllClean.csv',encoding='iso-8859-15') as dbi:
        for row in csv.reader(dbi):
            if (not row[SEQNUM].startswith("#")):            # discard comments
                logdt = datetime.datetime.strptime(row[DATETIME],'%m/%d/%Y %H:%M:%S')
                logdate = datetime.datetime.date(logdt)
                if (logdate in datapoints):             # accumulate minimum temps & RH
                    datapoints[logdate][0] = min(datapoints[logdate][0],row[AIRTEMP]) 
                    datapoints[logdate][1] = min(datapoints[logdate][1],row[RELHUM]) 
                    datapoints[logdate][2] = min(datapoints[logdate][2],row[WATERTEMP]) 
                else:
                    datapoints[logdate] = [row[AIRTEMP], row[RELHUM], row[WATERTEMP]]
    
    with open('AllMinData.csv','w',newline='') as csvf:
        dbo = csv.writer(csvf)
        dbo.writerow(('#Date','Min Air T','Min RH','Min Water T'))
        for key,value in sorted(datapoints.items()):
            dbo.writerow([key,value[0],value[1],value[2]])
    

    The encoding='iso-8859-15' for the input file turns out to be absolutely essential, as the Hoboware program generating the CSV files uses a 0xb0 character for the usual degree symbol. Alas, that chokes the default utf-8, ascii, and even cp437 codecs. Took a while to figure that out, it did, indeed.

    There remain random anomalies in the data, in addition to the glitches produced by unplugging the remote temperature sensor cable. I may simply discard the last few records of each CSV file; right now, the Gnuplot code simply ignores temperatures under 30 °F and over 80 °F.

    The Gnuplot script that produced the graph consisted of some hand-fed tweakery based on the guts of the routine that plotted the original records, with the output image bank-shotting off the clipboard into GIMP on its way to becoming a PNG file. Phew!