Welcome to the Wilcox Family weB LOG, your source for the latest Wilcox news, anecdotes, and rants; and, as Jack Benny quipped on his first radio show (March 29, 1932), “There will be a slight pause while you say, ‘Who cares?’â€â€
When I was about six, I constructed a theology of Sundays. I knew that Sundays were a celebration of the Resurrection of Jesus. I knew that “Sunday” had the words “Sun” and “day” in it. I surmised that God had ordained it that Sundays would be always sunny in honor of that most wonderful of miracles. I recalled that all the Sundays in my memory (at that time, perhaps as far back as a month) were, indeed, sunny.
And so this became an article of faith. My faith was confirmed for a number of Sundays thereafter.
And then, we had a cloudy, grey Sunday.
I revised my theology: God just made sure it didn’t actually rain on Sundays.
Then we had a drizzly Sunday. I reasoned that God had held back a larger storm. Then, rain that even I couldn’t explain away.
What to do? This could have shaken my faith in God, as happens to people when their faulty theology is exposed. I could have kept revising reality to fit my theology: people do this all the time. Or I could have concluded, as even at six I did, that my theology was wrong.
Theology is a human endeavor. Like that other human endeavor, science, we need to write our theology in pencil. That is what my professors at Gordon taught me.
Still more time saved by not showering or bathing.
Who needs to put on clean clothes every day?
Wait, what is that? …
Day 2, Continued.
Holy, freaking crap! There is nothing left of the Pop Tarts but wrappers. Do you children have no discipline at all?!
(The boogers mumble something about apples and trees.)
We’re ruined! Doomed. Do you hear me!? We’re going to starve, or worse, have to eat something I cook! Do you remember fiasco of the pancakes? Ashish remembers the pancakes? (“You cooked steak? I thought you were going to make pancakes.”)
Someone in this house smells. It seems to be worse around the children. And the kitchen.
Maybe the philosophy of, “Why clean? It’ll just get dirty again,” needs some reevaluation.
At least Juno is happy, although this morning she walked over to me, looked me right in the face, sniffed once, and ran away.
And. We’re hungry. The children are sticking firmly to their commitment to starve before they eat anything I might cook.
What we thought was thunder turned out to be the combined output of stomachs rumbling.
How much longer?
Day 4.
It’s midnight now. The house is dark. I am not sure how this will turn out. The kids are all desperately sick, throwing up. I can hear my son and daughter retching in separate bathrooms. I went in to check on them a few minutes ago, to see what was coming up.
…
I think I’m okay, at least for the moment. But of course the odds aren’t good: most of the people involved in this business are already dead. And there are so many things I can’t know for sure.
…
I have a ringing in my ears, which is a bad sign. And I feel a vibrating in my chest and abdomen. The baby is spitting up, not really vomiting. I am feeling dizzy. I hope I don’t lose consciousness. The kids need me, especially the little one. They’re frightened. I don’t blame them.
Back at one of Veracode’s Hackathons, I published the video below.
My Original Weasley Clock
The New and Improved Weasley Clock(s)
(Original post is here.) I was determined to update the code to use WiFi, and make some other improvements, so finally rewrote it. Here’s the first major revision:
#include
#include "Adafruit_IO_Client.h"
#include
/**
* https://www.amazon.com/gp/product/B015RQ97W8/ref=oh_aui_search_detailpage?ie=UTF8&psc=1
* 5-wire unipolar steppers with controller
* Longruner 5x Geared Stepper Motor 28byj 48 Uln2003 5v Stepper Motor Uln2003 Driver
* Board for arduino LK67
*
* AWESOME details on these motors/controllers:
* https://arduino-info.wikispaces.com/SmallSteppers
*
* Much Better than standard stepper library: AccelStepper
* http://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html
*
* 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."
*/
/************************* WiFi Access Point *********************************/
#define WLAN_SSID "DefinitelyNotMySSID" // "...your SSID..." Amusingly, the cannot contains spaces or hyphens.
#define WLAN_PASS "TotallyNotTheRealPassword" // "...your password..."
/************************* Adafruit.io Setup *********************************/
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883 // use 8883 for SSL, otherwise use 1883
#define AIO_USERNAME "TotallyNotMyAdaFruitIOUser" // "...your AIO username (see https://accounts.adafruit.com)..."
#define AIO_KEY "TotallyNotMyAdafruitIOKey" // "...your AIO key..."
#define AIO_FEED_PATH "/feeds/"
#define AIO_PUBLISH_FEED "weasleyclockposition"
#define AIO_SUBSCRIBE_FEED "weasleyclockstatus"
// Motor pin definitions
#define motorPin1 14 // IN1 on the ULN2003 driver 1
#define motorPin2 12 // IN2 on the ULN2003 driver 1
#define motorPin3 13 // IN3 on the ULN2003 driver 1
#define motorPin4 15 // IN4 on the ULN2003 driver 1
#define DELAY 1
#define HALFSTEP 8
/************ Global State (you don't need to change this!) ******************/
// Create an ESP8266 WiFiClient class to connect to the WiFi network.
WiFiClient client;
// or... use WiFiFlientSecure for SSL
// WiFiClientSecure client;
// 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_SUBSCRIBE_FEED, AIO_KEY);
// States
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";
const String PLUS_ONE = "plus_1";
const String MINUS_ONE = "minus_1";
const String PLUS_FIVE = "plus_5";
const String MINUS_FIVE = "minus_5";
const String NO_MOVEMENT = "none";
// Steps
const int STEPS_HOME = 0;
const int STEPS_TRAVELING = 600;
const int STEPS_VERACODE = 1250;
const int STEPS_CHURCH = 1900;
const int STEPS_MORTAL_PERIL = 2600;
const int STEPS_GLOUCESTER = 3450;
const int STEPS_ONE = 32;
const int STEPS_FIVE = 5 * 32;
String fValue = "";
const unsigned long requestInterval = 5000L; // delay between updates, in milliseconds
void stepBySteps(int newPosition, boolean resetWhenDone = false);
AccelStepper clockStepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
void setup() {
Serial.begin(115200);
delay(10);
// Connect to WiFi access point.
Serial.println(); Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);
WiFi.begin(WLAN_SSID, WLAN_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
clockStepper.setMaxSpeed(1000.0);
clockStepper.setAcceleration(100.0);
clockStepper.setSpeed(200);
clockStepper.setCurrentPosition(0);
}
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.
Serial.println(F("Checking feed ..."));
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. Also, beware. There seems to be a limit on how long the
// feed value can be. I had trouble when "minus_five" was used, which makes
// me think the limit is 8 characters.
// Want some fun? Learng about "conversion from 'FeedData' to non-scalar type 'String' requested" the hard way.
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);
}
if(fValue == PLUS_ONE) {
Serial.println("Forward one.");
stepBySteps(clockStepper.currentPosition() + STEPS_ONE, true);
}
if(fValue == MINUS_ONE) {
Serial.println("Back one.");
stepBySteps(clockStepper.currentPosition() - STEPS_ONE, true);
}
if(fValue == PLUS_FIVE) {
Serial.println("Forward five.");
stepBySteps(clockStepper.currentPosition() + STEPS_FIVE, true);
}
if(fValue == MINUS_FIVE) {
Serial.println("Back five.");
stepBySteps(clockStepper.currentPosition() - STEPS_FIVE, true);
}
if(fValue == NO_MOVEMENT || fValue == "") {
Serial.println("Not moving.");
}
} else {
Serial.print(F("Failed to receive the latest feed value!"));
}
}
void stepBySteps(int newPosition, boolean resetWhenDone) {
clockStepper.enableOutputs();
clockStepper.moveTo(newPosition);
while (clockStepper.isRunning()) {
clockStepper.run();
delay(DELAY);
}
clockStepper.disableOutputs();
if (resetWhenDone) {
clockStepper.setCurrentPosition(0);
}
}
Still to come, if I ever get around to it:
Alternative methodologies for reading the feed (publish/subscribe).
Secure WiFi communication.
Adjustment (such as after power disconnect) via an induction sensor.
Okay, wanna see something really cool? (Actually, it’s kinda hot …)
Below is a cropped image from a 1969 National Geographic map of the seafloor, showing the Pacific basin. What’s the cool part? See that long, almost L-shaped line of ridges and seamounts and islands that has Hawaii at the very end? That’s where the Pacific Plate has slowly moved over a hotspot in the earth’s mantle, which causes seamounts to form, and, occasionally, islands like Midway or Hawaii.
The ridges show the movement of the Pacific plate over the last 75,000,000 years. Kind of slow movement, only about 6,000 km in that time, or 0.000000009132 km/h, about 80 mm/year.
That bend in the L is where the Pacific plate shifted direction 43,000,000 years ago.
In case you’re wondering where it goes as it moves, you can see the trenches on the top and left edges of the plate. Those are subduction zones, including the Marianas Trench, the deepest part of the ocean on earth. That’s where the Pacific plate is moving underneath the other plates, getting recycled very, very slowly.
Notes:
This is something I stumbled across, looking at images Sarah was using for school. I looked over her shoulder, and exclaimed, “Oh my gosh! Look at that! Do you see what that is?!” I love personal moments of discovering the wonders of our universe like that, such as the time as a teen I took a borrowed telescope out one summer night, pointed it at a bright “star,” and discovered I was looking at Jupiter and the Galilean moons.
And all the kings of the north, far and near, one with another, and all the kingdoms of the world, which are upon the face of the earth: and the king of Sheshach shall drink after them. (Jeremiah 25:26)
SHESHACH in Jeremiah 25:26, and elsewhere, is a Hebrew backward alphabet cipher called ATHBASH (the English equivalent of which would be AZBY, although we would transliterate it as ATBASH). SHESHACH means BABYLON (or BABEL).
The same type of cipher is used in Jeremiah 51:1 and 51:41.
This is the summary of my mother’s life that I presented at her funeral.
(Okay, 1,027 words …)
I want to tell you a little bit about our mother.
Our mom, Rachel Adeline Sampson Wilcox Fortini (not her real name, which was Rachel Adeline Wilcox pretty much forever) was born a long time ago. She saw more than a few things in her life: The Great Hurricane of 1938, World War II, the invention and use of the atom bomb, jet travel, the Civil Rights movement, the moon landings (indeed, the entire space program), and the Internet. It won’t be easy to summarize her life in a few words, but there are some themes that stand out.
Mom grew up on a small farm in Freetown, Massachusetts, purchased by her father after a whaling voyage out of New Bedford on the bark Sunbeam. She moved to a tiny house on the same property after she got married, a house that would rapidly become far too small.
There are those who merely repeat the errors of their parents to Family Law Firm. Mom was the opposite. She had a strict policy of laissez faire for her adult children. If we wanted advice, almost always, we would need to ask for it. Cutting the umbilical was never a problem. In fact, my parents moved to Florida the same week I left for college, and they never gave me their new address. (I’m sure it was accidental.)
Mom seemed eternally young. She survived two husbands: My father, Paul Wilcox, and George Fortini, whom Mom married when she merely 80 years old. (This never fails to evoke a huge smile when I tell people.) My children, until a few weeks ago when it stopped being funny, insisted that Grandma would outlive us all. And, she will, having preceded us to Eternal Life.
I often think of Mom’s incredible practicality. In a time when women didn’t have bank accounts, it was my mother who always managed our finances, because she was a trained bookkeeper, and Dad wasn’t very good at it. She shoveled snow, painted the house, fixed things.
She was willing to defy social conventions in other ways: I am, like Paul John and Aaron, an adoptee. I never remember learning I was adopted; I do remember discussing it with Mom when I was young, but clearly learned about my own adoption at a very young age. She even made it clear that she would support me or help me in any way, if I wanted to contact my biological parents.
In the early days of the Cold War, my sisters remember Mom’s reaction to heading down into the basement in Easton, Massachusetts, evaluating it as a fallout shelter. Mom declared, “This isn’t going to protect us at all.†Scary, perhaps, but correct.
More importantly, we never learned prejudice in any form. Even in New England, this was unusual.
Although Fran often gets the credit, Cindy claims to be the one to first encounter saving faith in Jesus Christ—but, it seems she was merely the first to be vocal about it. Joyce remembers trusting Christ, albeit without much publication, even earlier than Cindy did. Fran followed soon after Cindy, but it was probably Cindy who was first actively praying for her family. (Cindy suggests that following Christ was an act of rebellion.)
Mom embraced Christ fully. Cindy remembers an immediate reduction in worry and even a slight reduction in the fanaticism of cleaning. (Mom used to lock the girls outside so she could clean.) That faith was evident her entire life. I got chewed out only a few weeks ago for taking too long to return one evening, because she wanted someone to pray with her, although she did nearly all the praying.
Indeed, she was, “a light of Christian faith, shining in a dark world.â€
But our mother was, most of all, a Mom. All caps. One hundred percent. She elevated what is a noble duty and profession to a veritable ministry.
Mom had more than few children. Four inferior biological ones, all girls. Fran, Cindy, Joyce, Martha. (Or, as Mom spoke, Mah-thuh.) When those started to become less fun and move away, she began the 15-year process of adopting three boys. Myself, Paul John, the brother I prayed for for years, and finally, Aaron.
Mom was an excellent parent. Strict but never, ever unfair. (Except when I, at a young age, called her a liar because she, for the first time ever, accused me of something I hadn’t done.) My perspective may be a little skewed, because, as my sisters point out, I had older parents, who had been well broken in by the time I came around. Judging from some stories I’ve heard this week, this is almost certainly an accurate interpretation.
When, at 2 or 3, I needed to be instructed in the art of, “Don’t get too close to the street,†Mom painted a line on a rock at the edge of the driveway, and said, “Don’t go past that line.†When I broke a treasured piggy bank at age 4, she explained that she would fix it this time, but if I left it on the edge of the bed again, and it broke, it would be destined for the rubbish bin. I did, and it did. I was sad, but she was true to her word, and eminently just.
She would often explain how things worked. I remember seeing the Apollo 15 or 16 launch on TV, and having her explain that the Saturn V was bringing people to the moon.
And, Mom loved babies. She did foster care for, we think, 57 of them. She retired from foster care, later in her life, at least four times. My friend Tim called them “trade-ins.†One time, while returning a trade-in back to Boston, she was in tears. A young Paul John patted her on the arm and said, “Don’t worry, we’ll get you another one.â€
Mom was very humble about this, indeed about everything. “I didn’t want it to seem like I was trying to do some big thing … I didn’t want the Lord to think that I was bragging.†Even days before her death, she was fretful that she hadn’t done a good enough job. I suppose all mothers suffer this unending guilt, and she had so many children who called her Mother.
It is the 5th of July. Despite only a 3-hour flight, I’ve devoted most of the day to travel. Finally, after almost 12 hours of driving/waiting/flying/waiting/driving, I make it to Hospice House. Surprisingly, this is my first time visiting a hospice location. Although hospice was very helpful with my father’s last weeks, that situation was very different.
He will wipe away every tear from their eyes, and death shall be no more, neither shall there be mourning, nor crying, nor pain anymore, for the former things have passed away. (Revelation 21:4, ESV)
The lobby is beautiful. With fireplaces and chairs, it reminds me more of a relaxed hotel than a hospital setting. There is a tiny chapel off to one side, and a beautiful stone list of donors, decorated splendidly with a carving of a great blue heron in flight. But, I barely notice it.
I make my way, of course, to the wrong end of the hall. It is relatively late, although not at all dark, yet, and very quiet. When I get to the other end, I quietly inquire for my mother’s room number, describing the various ways she might be named. Addie Wilcox? Rachel Wilcox? Wilcox-Fortini? Mom’s legal name is Rachel Adeline Wilcox, but she never liked her first name, so she was Addie to nearly everyone.
Room 12. Give us a few minutes, we’re getting her cleaned up. So, I wait a few minutes for the nurses to finish. Finally, I get to see Mom.
“Oh!” she greets strongly, “My ugly son!”
“Ugly?” I exclaim in disbelief, “Compared to Paul or Aaron? I don’t think so!”
I last saw Mom in October, when Sarah and I had a long-weekend visit because, as Sarah insisted, “Your mother is not going to be alive forever. We should see her while she is well.”
Now, not much later, Mom is markedly older. She looks tired. She is painfully thin, massing definitely under 45 kg. Her speech is slow, but clear. I also discover she can’t hear me unless I speak very loudly. She’s good at covering this, but her responses to questions she pretends to hear are often non sequiturs. (Later in my stay I will tackle this problem and diagnose a bad hearing aid, and come up with a good-enough-for-this-lifetime solution.) However, she is “all there.” Her mind and memory are, for the most part, intact. This is something of a disappointment to me, as I was hoping to be able to re-frame a few minor incidents from my childhood. This won’t be the case.
I know, given the hour, that Mom will be tired, soon, so this visit will be short. There is one complaint Mom mentions at least once a day, and today is no exception: “I don’t know why the Lord still has me here, but He must have some purpose. I just wish I knew what it was.”
I understand her impatience to meet the Savior. She knows the time is soon. She is nearly 91. In less than a year, she has gone from driving interstate, living alone in her own home, and being in near perfect health, to having trouble walking, needing in-home care, and frequently visiting the hospital. The past two months have been particularly difficult.
My children often claim that Grandma will outlive them. This joke, which we have enjoyed for years, doesn’t seem as funny this week. I can’t keep a few lines from a song in The Muppets Take Manhattan, out of my head: “Saying goodbye, why is it sad? / Makes us remember the good times we’ve had.” The brain does strange things at times, as I will discover tomorrow.
I don’t know, of course, if this will be my last visit with this woman of many children: Four biological, three adopted, 87 (we think) fostered. I wonder if, sometime between my leaving this night and returning in the morning, my mother will go from seeing the object of her faith “in a mirror, dimly,” to “face to face.”
All too soon, Mom slips into a quiet sleep, and I drive the rest of the way to her house, navigating through tears, to where my sister Cindy is “holding down the fort,” as Mom would say.
Yes, we are of good courage, and we would rather be away from the body and at home with the Lord. (2 Corinthians 5:8, ESV)Â
While my wife—Sarah Latimer—and I were walking our dog, Juno, we chanced upon an outside window of this history classroom at Nashua’s Fairgrounds Middle School, where our daughter, Naomi, attends.
I was moved to tears at the display, particularly given the anniversary of Kristallnacht. This was a meaningful reminder that, despite what we have seen all too often on social media and propaganda outlets, there are, indeed, those like this English teacher who are quietly and efficiently going about making the world a better place for all our children.