What Is Wrong with These People?

On the eve of the nomination of Donald Trump as President of the United States:

My biggest complaint* of the past year has been this: White “Evangelicals” ignored virtually all of Scripture to support a man who represents a near perfect antithesis of Christianity.

I have watched those on the fringes and outside of Christianity shake their heads, and wonder what is possibly going on in the minds of these Christians, and determine that they never, ever want to embrace a religion with such obvious hypocrisy. The Evangelical swell of blind support for a preacher of hate, lust, greed, lies, and ignorance has done more to harm the cause of Christ than anything else I have seen in my lifetime.

But I remind myself of this: Paul explained we should pray for our leaders—and I shall. Paul did this under perhaps the most corrupt government ever seen on earth, where his brothers were routinely murdered for sport.

So I will pray for (as of tomorrow) President Trump. I will also pray that we are spared from the horrors he has promised. I will also pray that the binding of extremism and near-insanity of the Republican Party to White Christianity is revealed for the disaster it is and forever abandoned. I will also pray for the healing of a nation terribly divided—while I, as promised and commanded, pray for the one who most wanted to divide it for his own gain.

1First of all, then, I urge that supplications, prayers, intercessions, and thanksgivings be made for all people, 2for kings and all who are in high positions, that we may lead a peaceful and quiet life, godly and dignified in every way. 3This is good, and it is pleasing in the sight of God our Savior, 4who desires all people to be saved and to come to the knowledge of the truth. 5For there is one God, and there is one mediator between God and men, the man[a] Christ Jesus, 6who gave himself as a ransom for all, which is the testimony given at the proper time. 7For this I was appointed a preacher and an apostle (I am telling the truth, I am not lying), a teacher of the Gentiles in faith and truth. (1 Timothy 2:1–7, ESV)

*This complaint is probably tied for first place with the practice of those same people chain-posting completely fraudulent and easily refutable propaganda. (No, that’s the Black Speech from Lord of the Rings, not a school distributing donuts with verses from the Qu’ran.)

Weasley Clock Code

Note: I’ve finally gotten around to a much-needed rewrite for WiFi. You can find that code and another video here.

Back at Veracode’s last Hackathon, I published the video below. People have started discovering this and asking questions about it, so here is the code for it:

/*
  Weasley Clock
  -------------

  Created by Doug "LegoDoug" Wilcox for Veracode Hackathon IX.

  Video of the completed project is at https://www.youtube.com/embed/oRUViFnxKsg.

  "Share and enjoy."

 */

// Arduino SPI (Serial Peripheral Interface) library - https://www.arduino.cc/en/Reference/SPI
#include <SPI.h>             
// Arduino Ethernet library - https://www.arduino.cc/en/Reference/Ethernet
#include <Ethernet.h>        
// Arduino Stepper library - https://www.arduino.cc/en/Reference/Stepper
#include <Stepper.h>         
// Adafruit REST IO library - https://learn.adafruit.com/adafruit-io/arduino
// See also https://www.arduino.cc/en/Tutorial/WebClientRepeating
#include "Adafruit_IO_Client.h"    
                                   

// assign a MAC address for the ethernet controller.
byte mac[] = {
  0x8C, 0xDC, 0xD4, 0x4A, 0xC9, 0xC2
};

// initialize the library instance:
EthernetClient client;

// last time the Arduino connected to the server, in milliseconds
unsigned long lastConnectionTime = 0;        
// delay between retrieving updates, in milliseconds
const unsigned long requestInterval = 5000L; 

// Configure Adafruit IO access. You will need to create your own 
// Adafruit IO account (free), and set up a feed, and provide your
// feed and AIO key in the code below.
#define AIO_FEED   "weasleyclockstatus"
#define AIO_KEY    "XXXXXXXXXXXXXXXXXXXXXXXXXXX"

// Create an Adafruit IO Client instance.  Notice that this needs to take a
// WiFiClient object as the first parameter, and as the second parameter a
// default Adafruit IO key to use when accessing feeds (however each feed can
// override this default key value if required, see further below).
Adafruit_IO_Client aio = Adafruit_IO_Client(client, AIO_KEY);

// Alternatively to access a feed with a specific key:
Adafruit_IO_Feed clockFeed = aio.getFeed(AIO_FEED, AIO_KEY);

// States - These are the codes that correspond to specific clock positions.
const String LD_HOME         = "ld_na";
const String LD_TRAVELING    = "ld_tr";
const String LD_VERACODE     = "ld_of";
const String LD_CHURCH       = "ld_ch";
const String LD_MORTAL_PERIL = "ld_mp";
const String LD_GLOUCESTER   = "ld_gl";

// Steps - How many steps the motor needs to move to point to a specific position 
// on the clock.
const int STEPS_HOME         = 0;
const int STEPS_TRAVELING    = 750;
const int STEPS_VERACODE     = 1600;
const int STEPS_CHURCH       = 2450;
const int STEPS_MORTAL_PERIL = 3350;
const int STEPS_GLOUCESTER   = 4350;

// Someday, I will determine what this actually does. (I don't think, functionally, 
// it has any affect.)
const int stepsPerRevolution = 200;  

long motorPosition = 0L;         // Number of steps the motor has taken.
String fValue = "";              // Feed value.

Stepper clockStepper(stepsPerRevolution, 7, 6, 5, 4, 8);

void setup() {
  // start serial port:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native 
      // USB port only, on certain Arduino models.
  }

  // give the ethernet module time to boot up:
  delay(1000);
  // start the Ethernet connection using a fixed IP address and DNS server:
  //Ethernet.begin(mac, ip, myDns);
  // Or, just start it with dynamic DNS by giving it a MAC address.
  Ethernet.begin(mac);
  // print the Ethernet board/shield's IP address:
  Serial.print("My IP address: ");
  Serial.println(Ethernet.localIP());

  clockStepper.setSpeed(20);
}

void loop() {

  // Wait for a bit and read the current feed value.
  Serial.println(F("Waiting ..."));
  delay(requestInterval);
  
  // To read the latest feed value call the receive function on the feed.
  // The returned object will be a FeedData instance and you can check if it's
  // valid (i.e. was successfully read) by calling isValid(), and then get the
  // value either as a text value, or converted to an int, float, etc.
  FeedData latest = clockFeed.receive();
  if (latest.isValid()) {
    Serial.print(F("Received value from feed: ")); Serial.println(latest);
    // By default the received feed data item has a string value, however you
    // can use the following functions to attempt to convert it to a numeric
    // value like an int or float.  Each function returns a boolean that indicates
    // if the conversion succeeded, and takes as a parameter by reference the
    // output value.

    // Want some fun? Learning about "conversion from 'FeedData' to non-scalar 
    // type 'String' requested" the hard way.
    //
    // If I remember correctly, it was a casting error caused by trying to use 
    // the 'latest' variable as a String, directly.
    // The following line casts 'latest' to a string and lets us use it as 'fValue'.
    fValue = latest;
    
    if(fValue == LD_HOME) {
      Serial.println("Nashua");
      stepBySteps(STEPS_HOME);
    }
    
    if(fValue == LD_TRAVELING) {
      Serial.println("Traveling");
      stepBySteps(STEPS_TRAVELING);
    }

    if(fValue == LD_VERACODE) {
      Serial.println("Veracode");
      stepBySteps(STEPS_VERACODE);
    }
    if(fValue == LD_CHURCH) {
      Serial.println("Church");
      stepBySteps(STEPS_CHURCH);
    }
    if(fValue == LD_MORTAL_PERIL) {
      Serial.println("Mortal Peril!");
      stepBySteps(STEPS_MORTAL_PERIL);
    }
    if(fValue == LD_GLOUCESTER) {
      Serial.println("Glostah");
      stepBySteps(STEPS_GLOUCESTER);
    }
    
  } else {
    Serial.print(F("Failed to receive the latest feed value!"));
  }

}

void stepBySteps(int newPosition) {
  if(motorPosition == newPosition) {
    Serial.println("No movement required.");
    return;
  }

  long steps = newPosition - motorPosition;
  
  clockStepper.step(steps);
  motorPosition = newPosition;
  Serial.print("position should now be:" );
  Serial.println(motorPosition);
}

Morally Hazardous Technology

1897 Van Cleve Ad

Voices were raised in protest. Bicycles were proclaimed morally hazardous. Until now, children and youth were unable to stray very far from home on foot. Now, one magazine warned, fifteen minutes could put them miles away. Because of bicycles, it was said, young people were not spending the time they should with books, and—more seriously—that suburban and country tours on bicycles were “not infrequently accompanied by seductions.”

The Wright Brothers, David McCullough

xkcd_1601_isolation

Humans don’t change, do they?

When You Marry a Lawyer’s Daughter …

THE REAL WORLD:

“Darling, you look radiant, today!”

(Woman beams appreciatively.)

WHEN YOU MARRY A LAWYER’S DAUGHTER:

“Darling, you look radiant, today!

(Woman waits. The Speaker continues.)

“The use of the word ‘today,’ should not by any means be interpreted as meaning that I (‘The Speaker’) do not believe you (‘The Addressee’) do not look radiant at every moment. Nor should you feel that subjective beauty is an expectation or requirement of gaining or maintaining the affection of The Speaker. The Speaker acknowledges the numerous beneficial and desirous qualities The Addressee possesses, which include, but are in no way limited to: supreme intelligence, unquestionable moral character, delightful humor, unparalleled business acumen, unassailable logic, perfect sexuality, and infallible parenting. The Addressee is the Speaker’s constant delight, his dearest companion, his partner in all ways. The Addressee is due The Speaker’s complete emotional involvement, financial remuneration, and temporal dedication. In the unlikely event of a disagreement, The Speaker preemptively cedes all possibility of correctness to The Addressee. The Speaker further acknowledges The Addressee is the solitary possessor of his undying affection and his eternal soul, world without end. Amen.”

(Woman nods in nonbinding acceptance.)

Crazy to Get to Space

Remember Scotty’s remark about his nephew in Star Trek II: The Wrath of Khan? (No, of course you don’t.) Scotty explains to Kirk, after an inappropriately emotional response by Midshipman Preston: “My sister’s youngest, Admiral. Crazy to get to space.”

going-to-space
“Come on, R2, we’re going.”

Although I never pursued a career as an astronaut, I certainly remain, “Crazy to get to space,” and the description from Khan still resonates with me. I may yet get there, in my lifetime, especially with companies like SpaceX competing to make the cost of getting to orbit as low as possible.

For now, I’m going to have to settle for a proxy. Eliszabeth* MacDougal, one of the human family members I inherited when I married Sarah Latimer, has a friend, Cian Branco, who offered her the chance to send something small up on the Terrior Improved Orion rocket as part of the RockSat-C program. Eliszabeth realized this would be thrilling to me, and passed along her opportunity.

I ordered a new Lego R2-D2 minifigure, and a few parts to complete another mini-me as an astronaut, and shipped them off to Eliszabeth. They will be going up on Thursday, June 23, 2016, somewhere between 6:00 and 10:00 am, from the NASA facility at Wallops Island, Virginia. (My son, David, and I stood on our roof in the cold in October, 2014, to watch a night launch from Wallops.)

Geeking out!

Thank you, Eliszabeth!

New: I have just learned that my minifigs will have company on this voyage: Benny, from The Lego Movie will also be on this flight.

———————–

*Yes, this is the correct spelling.

————————

Update: (June 23, 2016)

:: sigh :: Postponed until tomorrow.

postponed

————————

Update: (June 24, 2016) I got up early to watch the launch today! In my mind, I was thinking, Saturn V. Long, slow acceleration. This is, uh, quite a bit smaller, and it zoomed upward so quickly I missed the rocket itself in the launch video screen capture. (The video will be posted soon by NASA/Wallops, anyway.) The crew was worried about missing the launch window due to weather, and debated skipping the camera alignment step. In addition to the pad camera, there was a UAV (drone) flying around, as some of the pictures below show.

The rocket got to its apogee of 119.08 km (74.0 miles) almost immediately. The payload detached successfully, and hit splashdown in the Atlantic, where it would be recovered, only 8 or 9 minutes later.

Very exciting! I reiterate my gratitude.

Here’s the official NASA post: NASA Successfully Launches Suborbital Rocket from Wallops.

kdiff3 6242016 60716 AMs

kdiff3 6242016 60327 AMs

kdiff3 6242016 60614 AMs

kdiff3 6242016 60617 AMs

————————

Update: (June 24, 2016, 16:05) Just got the official word from Cian: “Hey Doug, will send pics a bit later, currently wrecked. Your minis all went up and returned fine. I have pics of reintegration. Cheers!”

————————

Here's the recovered payload module, showing where my guys were attached in their Crew Module.
Here’s the recovered payload module, showing where my guys were attached in their “Crew Module.”
The Crew Module was carefully sealed with electrical tape.
The Crew Module was carefully sealed with electrical tape.
 Another view of the Crew Module.
Another view of the Crew Module.
Here's how the minifigures actually traveled.
Here’s how the minifigures actually traveled.
 And here they are, reassembled, along with Benny, who was glued into another part of the payload module
And here they are, reassembled, along with Benny, who was glued into another part of the payload module.

Video of the Launch:

Video from an observer to whom I am grateful.

Here is the launch from the NASA/Wallops feed!

A Republican No More

My voter registration is now undeclared. (Sadly, no exotic options, like “Rational Anarchist” are available in New Hampshire—not even Communist.)

Man with a 1950s style fedora waves goodbye .
Goodbye, sewage-ridden idiocracy.

In a time when a voice of reason is desperately needed, your leadership has proven itself unable to take a stand against an obvious megalomaniac. You continue to propose revoking the victory of universal health care. You have protected and praised racists and worse. You have gone to war without cause, and destroyed our great nation’s international reputation. You have chosen a Presidential candidate who makes Vermin Supreme a rational choice by comparison. You have defended environmental destruction, and embraced ignorance over science.

I am saying goodbye to the sewage-ridden idiocracy the Republican Party has become. You are now, indeed, “Not my circus—not my monkeys.”

Adios.

“Sewage-ridden idiocracy,” is a phrase coined, as far as I know, by Connor Houghton.

Dear QuickBooks:

Dear Intuit/QuickBooks:

When importing an IIF (Intuit Interchange Format) file, you might report “The NAME field in this file is too long” as something other than “Error on line X – You can’t change the type of a name or a add a duplicate name.” (You may recall, this is the same problem that remains unfixed from QuickBooks ’99.)

—A Customer

P.S.: Thank you for removing my online banking support, unless I choose to upgrade for several hundred dollars.

ux_fail

What Have We Learned, Charlie Brown?

What Have We Learned, Charlie Brown?

Quite often I think about a Charlie Brown special I saw when I was in my mid-teens, in 1983. It’s designed to continue the story of the film, Bon Voyage, Charlie Brown (and Don’t Come Back!!), and commemorates some of the events of World War I and World War II.

Linus quotes John McCrae’s In Flanders Fields. I find it nearly as moving as the recitation of Luke 2 in “A Charlie Brown Christmas.”

In Flanders fields the poppies blow
Between the crosses, row on row,
That mark our place; and in the sky
The larks, still bravely singing, fly
Scarce heard amid the guns below.

We are the Dead. Short days ago
We lived, felt dawn, saw sunset glow,
Loved and were loved, and now we lie
In Flanders fields.

Take up our quarrel with the foe:
To you from failing hands we throw
The torch; be yours to hold it high.
If ye break faith with us who die
We shall not sleep, though poppies grow
In Flanders fields.

Periodically, I’ve searched Amazon, hoping that this had been released on DVD or better (the only consumer release was on VHS video). It’s finally coming this fall, as part of Peanuts: The EMMY Honored Collection (DVD)!

Sadly, the as-I-recall-excellent Bon Voyage, Charlie Brown (and Don’t Come Back!! is still, apparently, only available on used VHS.