Sunday, September 20, 2015

10-20-30 interval training?

From "A Way to Get Fit and Also Have Fun By Gretchen Reynolds July 29, 2015" in the NY Times blogs:
“We wanted to create a workout that could be employed by everyone, from the nonexperienced person to the elite athlete,” Dr. Bangsbo said.

After some trial and error, they came up with a candidate routine and named it 10-20-30 training.

It has become my favorite interval program.

The short version is, this is a routine you're more likely to stick with, probably because it's less grueling; it's as beneficial or more so than tougher regimes. Here's a summary of the steps involved:
  1. warm up
  2. 30 seconds of relaxed movement
  3. 20 seconds of moderate exercise
  4. 10 seconds of maximum effort
  5. repeat steps 2-4 for a total of five cycles (elapsed time 5 minutes)
  6. rest 2 minutes
  7. repeat step 5 (i.e., another 5 minutes)
  8. cool down
As you can see, it's warm-up, 12 minutes, cool-down. The article has a link to a journal article where the aforementioned Dr. Bangsbo is an author: The 10-20-30 training concept improves performance and health profile in moderately trained runners.
J Appl Physiol (1985). 2012 Jul;113(1):16-24. doi: 10.1152/japplphysiol.00334.2012. Epub 2012 May 3.

Tuesday, September 15, 2015

Reflections

Dad was admitted to hospital on Monday August 31, and my sister Donna flew to Honolulu Wednesday to be with him. He was confused but improving, and everyone was talking about his recovery/rehab. Still, as the week wore on, I felt a strong desire to be with him. As I wrote earlier, I responded immediately to the blood center's reminder email, and that gave me a sense of connection with Dad. Yet I also wanted to see him in person.

It was September 3rd and I considered the possibilities. We had a plan to meet my daughter and son-in-law and grandson and niece in Felton Monday the 7th (Labor Day), so I wanted to leave after that. The lovely Carol had reservations to fly to Asia on the 17th, so I wanted to return before that. I'd briefly considered flying to Honolulu Monday morning and canceling our plans with the young folks, but since everyone in Honolulu was optimistic, I left those plans intact and planned to fly out Friday 9/11 (an auspicious date).

We enjoyed our time with the young folks on Monday, but our house phone rang that night, close to midnight. Nothing good happens at that hour, and this was when I heard Dad was in a crisis. An hour later he stopped breathing.

I was distressed about this, and wanted to see my mom and sisters immediately. I briefly considered taking the first flight I could get, which would have been about 6 hours later. Instead I opted for a flight out Wednesday morning.

Tuesday morning I went to the office and set up an email auto-reply. I also preemptively told my colleagues that I was leaving due to a death in the family. Several friends (and colleagues) stopped by to convey their condolences. Two gave me the same excellent advice: DO NOT indulge the "what if?"s.

Should I rent a car? I wasn't sure so I texted my sisters.

As I packed, I thought, well, if I had left Monday morning I might have seen him alive one more time. I thought, if I had "facetime"d him Monday afternoon, as my cousin-by-marriage had, I would have talked to him alive one more time. Then I remembered my friends' excellent advice and renounced those thoughts. No one is ever told what would have happened…

Thursday afternoon we had an appointment at the mortuary to look at Dad's body before cremation. I wasn't sure I liked the cremation idea, but when I saw his body (it had been in the 'fridge and condensation was forming at several places) I changed my mind. The past few weeks he had lost quite a bit of weight. I wanted to remember him as he was during my previous visits.

We all wept. We agreed that things could have been much worse: it might have been months in a hospital bed in the house, a life he would not have liked. We knew all this, but still it was hard to accept that he was really gone. A world without my father in it is an idea that repels the mind.

Donna said it was good for us to see him here; without it we might imagine he was just at the hospital or somewhere else. I agreed. It's a necessary shock to force the mind to accept an idea that repels it.

Mom asked if someone could pray, and I said, "Not me; I can't even see." My sister Inga spoke to God for us.

We had a memorial service Saturday: the urn holding his ashes sat on a table in front, with a 20"x30" pic of him nearby. Several people shared their memories of him. I heard things I hadn't known before—things that made me desire even more to be like him.

Monday morning we buried his ashes. In a small ceremony at the cemetery we watched the urn go into the underground concrete "vault" and we filed by, dropping flowers into the hole in the earth. Workers from the cemetery closed the vault and shoveled soil to fill the hole, then replaced the sod.

It was important, for me at least, to witness this. As our pastor says sometimes, our bodies know things different from what our heads know. By dropping a flower into the vault (into the hole at least) and mentally saying good-bye to Dad, my body was forced to acknowledge that Dad is really no longer with us on this earth. Without this ritual, my mind would still have known that he's gone, but my body would not be sure.

Sometimes we go to funerals to comfort the bereaved, and I appreciate everyone who came to Dad's memorial to comfort us. But at least from my perspective, the important thing I got was that I acknowledged with both my mind and my body that my dad is no longer with us.

That way, the mind and the body and the reality in the world can all agree—this promotes mental and spiritual health. And I need all of that I can get.

Sunday, September 13, 2015

I try my best to be just like I am…

I heard Bob Dylan's Maggie's Farm on NPR recently, and these lines especially struck me:
Well, I try my best
To be just like I am
But everybody wants you
To be just like them
A worthy endeavor, that. But it's difficult. As Thomas Merton wrote:
We cannot be ourselves unless we know ourselves. But self-knowledge is impossible when thoughtless and automatic activity keeps our souls in confusion. In order to know ourselves … we have to cut down our activity to the point where we can think calmly and reasonably about our actions.
Merton, No Man Is an Island (1955) 7.8 (p. 126)
Thoughtless and automatic activity: that'll keep us from knowing who we are, what we actually admire, what we want to become.

Tolstoy's Ivan Ilych was bedridden as he neared death; I think this enforced reduction in activity was part of how he discovered the vanity in his life:

It occurred to him that what had appeared perfectly impossible before, namely that he had not spent his life as he should have done, might after all be true. It occurred to him that his scarcely perceptible attempts to struggle against what was considered good by the most highly placed people, those scarcely noticeable impulses which he had immediately suppressed, might have been the real thing, and all the rest false.
The Death of Ivan Ilych by Leo Tolstoy, XI (p. 55)
trans. Louise and Aylmar Maude
http://opie.wvnet.edu/~jelkins/lawyerslit/stories/death-of-ivan-ilych.pdf
(downloaded September 2015)
Ivan Ilych's life was certainly not as busy and distracted as the life of a middle-class Millennial, but he kept busy enough with his work and social engagements. It was only when those distractions were curtailed, and when he contemplated his suffering, that he realized that the only real thing in his life may have been the feeble impulses to resist the values of high-status people—impulses which he'd immediately suppressed anyway.

If I do not know who I am, it is because I think I am the sort of person everyone around me wants to be. Perhaps I have never asked myself whether I really wanted to become what everybody else seems to want to become. Perhaps if I only realized that I do not admire what everyone seems to admire, I would really begin to live after all.
Merton, op. cit. 77.8 (pp. 125f)
Ivan Ilych didn't know who he was, really; he didn't know what he actually admired. His folly was also Merton's at times, and I dare say ours as well.

Does it matter, really, if we know ourselves? In the introduction to No Man Is an Island, Merton writes that it's quite important—that it's part of salvation, part of what everyone seeks:

What every man looks for in life is his own salvation and the salvation of the men he lives with. By salvation I mean first of all the full discovery of who he himself really is. Then I mean something of the fulfillment of his own God-given powers, in the love of others and of God.
Merton, op. cit. p. xv
He has more to say about salvation, but he lists self-discovery first. I've been thinking lately about "salvation" so I found Merton's comments particularly interesting.

When he says "salvation," what is he talking about? What are we being saved from? We need to be saved from a life Merton describes here:

Why do we have to spend our lives striving to be something that we would never want to be, if we only knew what we wanted? Why do we waste our time doing things which, if we only stopped to think about them, are just the opposite of what we were made for?
op. cit. 7.8 (p. 126)
There is an even more basic thing we need: we need to know that we are loved by God. We need to know that we're not perfect, and we need to know that it's okay, because nobody is. We need to know that life doesn't consist in possessions or status or even physical health.

And so we must disconnect from thoughtless and automatic activity once in a while. We need to take time for what's important, to tend to our souls. To have unscheduled time. As Buechner wrote in Secrets in the Dark, there are times when it is quiet and you don't really have to do anything, when

[t]he time is ripe for looking back over the day, the week, the year, and trying to figure out where we have come from and where we are going to, for sifting through the things we have done and the things we have left undone for a clue to who we are and who, for better or worse, we are becoming. (59)
Rather than doing the usual thing, once in a while we need to look back, to consider the clues about who we are and who we are becoming.

I'm doing that now, particularly as I try to adjust to the idea of a world where my earthly father no longer lives.

Another memory of Dad

I took a right turn and heard a thumping from the trunk. It was a big roll of paper, "butcher paper" I think, that we used for covering tables for yesterday's lunch reception. The sound reminded me of something Dad told me.

"Did Dad ever tell you that story about the bottle in the trunk?" Neither Mom nor my sister Donna had heard it.

I guess he was still single when this happened, so probably more than 60 years ago. He and a friend were driving, and there was a bottle or something in the trunk. They turned a corner and heard this Bah-dum-bah-dum-bah-dum from the trunk. They found this amusing. "Hey, that's pretty good!" They checked for traffic and swerved left.

Bah-dum-bah-dum-bah-dum. Swerved right. Bah-dum-bah-dum-bah-dum

Pretty soon another sound was heard: a siren, accompanied by flashing lights in the rear-view mirror. They pulled over.

"Lemme smell your breath!" The cop was not pleased.

"The steering seemed a little loose," my dad said.

After checking his license and registration, the cop let them go. "Next time test your steering in a parking lot," he growled.

Is that the kind of thing to tell your son, but not your wife or daughter?

Saturday, September 12, 2015

Dad: some notes

Dad's memorial service was today. They asked me to do the bio—but then… well:
I was asked to do the biography, but since that's printed in your bulletins, I'll elaborate [on it], and start the remembrances early.

Dad was born August 6, 1923 in Fairview, Oregon. He never knew his mother; she died before his 2nd birthday. As a single father overwhelmed with a farm to run, Grandpa Kyung Soo sent little Arthur away to the "Waverly Baby Home." There, Art unfortunately learned something of racism and the dark side of human nature.

One day, a strange man came to retrieve Art from the institution. Art was so afraid of this stranger that on the train ride home, he couldn't bring himself to ask for the bathroom. You can imagine what happened next. Grandpa asked Art why he didn't say anything; when he heard about Art's fear, he spoke kindly to him.

Art moved to Honolulu in 1941 to live with sister Louvie and her husband Kenneth, now both deceased. He wrote home that he got seasick on the boat ride, and that Kenneth seemed to be "a good egg." Then December 7th came.

Dad worked for the Army as an electronics instructor, first as a draftee and later as a civilian. He had an interesting and varied career before the FAA. He was the engineer at the UH radio station near Date and Kapiolani. He sold insurance, which is how he met our mom. They would have celebrated their 60th anniversary next month.

Dad had quite the sense of humor. One day, back when Mom was, ah, "great with child" (me I think), she had lunch with Dad downtown. They were heading their separate ways -- she was on an escalator -- and he called out, "Don't tell your husband."

The FAA would send Dad to school on the mainland, sometimes for months. Mom would record audio letters to him, and include voices of us kids on them. These were small reels of 1/4" magnetic tape.

On one of these stays on the mainland, Dad had an idea. "Hey fellas," he told his classmates, "Let's move our chairs forward 2 inches." They did this every day for a week or two. One morning, the instructor turned around to walk to the blackboard and bumped into it instead. He told me this story just a couple of months ago, in July.

Dad didn't preach a lot, but he impressed upon me the idea that there are other perspectives than mine. "That's a funny-looking caterpillar," I remarked once. I might have been four or five. "You probably look pretty funny to him too, Son," he replied. Indeed.

Way back, when all of us kids were still living at home, Dad habitually went to the blood bank. He'd call out, "going to give blood" before driving off. I don't know how many gallons he gave. I learned from him that giving blood is something that a man does. Part of why I give blood today is that I wanted to be like him. Still do, in fact.

Dad lived a generous and loving life. My wife often recalls meeting him before our wedding. At first sight, Dad said to her, "Here's the girl that's making my son so happy!"

Back when he was only in his 80s, he taught computer skills at HCC. It wasn't for the money. He was always fixing something for somebody.

He also volunteered a lot at this church. In fact he was about 10 feet above the concrete floor of the Parish Hall here, when the ladder slid out from under him; that's how he broke his back.

After that, I heard him praying more. In one of those prayers he was thankful for that experience because it brought him closer to God. When we say Dad never stopped learning, we don't just mean technology.

Oh, and he didn't stop volunteering at the church after that incident either. I learned that a man doesn't stop giving and helping just because of some inconvenience.

Dad was diagnosed with prostate cancer in the summer of 2014, and that was when I finally realized that he might die some day. He had surgeries, and courses of various medicines. He's had a few health crises, and we all knew the end was coming soon. When I last visited, he was very interested in what happens after this life.

The past couple of weeks have been quite frightening, but he'd been improving until Monday; none of us expected we'd be gathered here quite so soon.

But how can we complain? We've all had our lives touched by this wonderful man; I had the distinct pleasure of having him for my dad, of learning from his example and seeing him enjoy his long life.

I can hardly believe he's gone, and sometimes I can barely hold myself together. But then I remember that one of his fondest wishes was that we survive him. So even in our grief, we can rejoice with him that his wish was granted.


That's basically what I said. I wish you could have known him.

Update: And now you can, a little

through some short videos made by his super-talented granddaughter Jana (my niece):
  • Arthur W. Park Memorial Video
    Through this video, I hoped to allow Grandpa to "speak" at his own Memorial Service. Although tears were shed, there was so much laughter, just the way Grandpa would want it. Hope you all enjoy this! (w/clips from the many commercials/films he's starred in!)
  • "Arthur" (Championships Winner: Showdown in Chinatown 2015)
    Published on Nov 9, 2014
    We had less than 3 weeks to make this film, starring 91-year old korean-American senior, Arthur Park, and shot in Honolulu, Hawaii.

Saturday, September 05, 2015

Forwarding non-web email (but not spam) to another address while traveling

We might be the last dinosaurs in California that use a non-web email service, but just in case we aren't, here's the problem and solution. At least I hope the solution works; I'm gonna document it here while developing…

Email arrives at our ISP, and fetchmail(1) brings it to our home using POP over a port forwarded with ssh(1). Here at home, the MDA is procmail(1), which may (it does in my case) sort the inbound messages into folders in maildir format. We read our home email using Thunderbird/Linux or Mail.app/OS X or the IOS Mail thing. These MUAs talk IMAP to the server (dovecot(1) running on Mac Mini). All this works great until we're out of the area.

The lovely Carol will be out of town for a while, and she wants me to send email to one of her webmail accounts (gmail, yahoo, etc.)—but only email originating from an address in her Address Book.

Fly-in-the-ointment #1

She uses Mail.app on both a Macbook Air (portable) and iMac (desktop). These MUAs see the same messages (folders, etc.) because they manipulate email on the server. But that's it! Meaning that each mail client has its own address book. In addition, the Mini is running OS X 10.10.3, where the addressbook is called "Contacts" whereas the MBA runs 10.6.8, where addressbook is called "Address Book."

Address list #1

Starting with the mini, we go into Contacts and say File⇒Export... and select "export archive" or something like this. This creates a new directory named "Contacts - MM-DD-YYYY.abbu" or something like this. In that directory is a file named "AddressBook-v22.abcddb". And file(1) reports that it's a
Contacts - 09-05-2015.abbu/AddressBook-v22.abcddb: SQLite 3.x database
I copied it to my homedir and then had to go get sqlite3.
collin@p64:~$ sudo aptitude install sqlite3
collin@p64:~$ sudo aptitude install sqlite3-doc
collin@p64:~$ 
Then I had to learn how sqlite3 works. Fortunately I've used mysql before, and I could always rtfm...
collin@p64:~$ man sqlite3
SQLITE3(1)                                                          SQLITE3(1)

NAME
       sqlite3 - A command line interface for SQLite version 3

SYNOPSIS
       sqlite3 [options] [databasefile] [SQL]

SUMMARY
       sqlite3  is  a  terminal-based front-end to the SQLite library that can
…
Yippee! Now let's see what's there…
collin@p64:/mnt/home/collin$ sqlite3 from-carol/AddressBook-v22.abcddb 
SQLite version 3.7.13 2012-06-11 02:05:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .databases
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main             /mnt/home/collin/from-carol/AddressBook-v22.abcddb        
sqlite> .tables
ZABCDALERTTONE                  ZABCDPOSTALADDRESS            
ZABCDCALENDARURI                ZABCDRECORD                   
ZABCDCONTACTDATE                ZABCDRELATEDNAME              
ZABCDCONTACTINDEX               ZABCDREMOTELOCATION           
ZABCDCUSTOMPROPERTY             ZABCDSERVICE                  
ZABCDCUSTOMPROPERTYVALUE        ZABCDSHARINGACCESSCONTROLENTRY
ZABCDDATECOMPONENTS             ZABCDSOCIALPROFILE            
ZABCDDELETEDRECORDLOG           ZABCDUNKNOWNPROPERTY          
ZABCDDISTRIBUTIONLISTCONFIG     ZABCDURLADDRESS               
ZABCDEMAILADDRESS               Z_16PARENTGROUPS              
…
sqlite> .schema ZABCDEMAILADDRESS
CREATE TABLE ZABCDEMAILADDRESS ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZISPRIMARY INTEGER, ZISPRIVATE INTEGER, ZORDERINGINDEX INTEGER, ZOWNER INTEGER, Z21_OWNER INTEGER, ZADDRESS VARCHAR, ZADDRESSNORMALIZED VARCHAR, ZLABEL VARCHAR, ZUNIQUEID VARCHAR );
CREATE INDEX ZABCDEMAILADDRESS_ZADDRESSNORMALIZED_INDEX ON ZABCDEMAILADDRESS (ZADDRESSNORMALIZED);
CREATE INDEX ZABCDEMAILADDRESS_ZADDRESS_INDEX ON ZABCDEMAILADDRESS (ZADDRESS);
CREATE INDEX ZABCDEMAILADDRESS_ZOWNER_INDEX ON ZABCDEMAILADDRESS (ZOWNER);
sqlite> select ZADDRESSNORMALIZED from ZABCDEMAILADDRESS;
foo@bar.com
…
That's right: there came a whole slew of email addresses. These are "good" ones.

Combine with address list #2

List #2 is "Address Book" from the MBA running 10.6.8; we export the archive somewhere and get a directory named "Address Book - 2015-09-05.abbu", which contains a file also named "AddressBook-v22.abcddb"; I saved this to a different name, actually "MBA-AddressBook-v22.abcddb", and moved the one from the mini to "miniAddressBook-v22.abcddb", whence it was time to create a combined address list. Like this:
collin@p64:~/tmp$ DBs=$HOME/from-carol/*.abcddb
collin@p64:~/tmp$ for F in $DBs; do \
   echo "select ZADDRESSNORMALIZED from ZABCDEMAILADDRESS;" | sqlite3 $F; \
done
…all done under script(1) Then take the output from that... which may contain whitespace, and also entries like
[16-bit characters] <some@addr>
To deal with that, do this:
collin@p64:~/tmp$ grep @ typescript | grep -v "<" | tr -d ' ' > a1
collin@p64:~/tmp$ grep @ typescript | grep '<' | cut '-d<' -f2 | cut '-d>' -f1 | tr -d ' ' >> a1
collin@p64:~/tmp$ sort -f a1 | uniq > a2
collin@p64:~/tmp$ less a2
That yielded some stuff I don't like, such as:
collin@p64:~/tmp$forFin$DBs;doecho"selectZADDRESSNORMALIZEDfromZAB^MCDEMAILADDRE
A little tweaking covered the bad addresses...
collin@p64:~/tmp$ grep -ve p64 -e / a2 > a3
collin@p64:~/tmp$ 
One more thing: because it was a script(1) output, we need to get rid of the '\r' characters, shown below as 0d. We can do it like so:
collin@p64:~/tmp$ head -n1 a3 | hexdump -C
00000000  31 30 31 36 36 31 2e 33  30 33 33 40 63 6f 6d 70  |101661.3033@comp|
00000010  75 73 65 72 76 65 2e 63  6f 6d 0d 0a              |userve.com..|
0000001c
collin@p64:~/tmp$ view a3
collin@p64:~/tmp$ tr -d '^M' a3 > a4
tr: extra operand `a3'
Only one string may be given when deleting without squeezing repeats.
Try `tr --help' for more information.
collin@p64:~/tmp$ tr -d '^M' < a3 > a4
collin@p64:~/tmp$ head -n2 a3 | hexdump -C
00000000  31 30 31 36 36 31 2e 33  30 33 33 40 63 6f 6d 70  |101661.3033@comp|
00000010  75 73 65 72 76 65 2e 63  6f 6d 0d 0a 31 30 33 33  |userve.com..1033|
00000020  35 33 2e 32 33 31 30 40  63 6f 6d 70 75 73 65 72  |53.2310@compuser|
00000030  76 65 2e 63 6f 6d 0d 0a                           |ve.com..|
00000038
collin@p64:~/tmp$ head -n2 a4 | hexdump -C
00000000  31 30 31 36 36 31 2e 33  30 33 33 40 63 6f 6d 70  |101661.3033@comp|
00000010  75 73 65 72 76 65 2e 63  6f 6d 0a 31 30 33 33 35  |userve.com.10335|
00000020  33 2e 32 33 31 30 40 63  6f 6d 70 75 73 65 72 76  |3.2310@compuserv|
00000030  65 2e 63 6f 6d 0a                                 |e.com.|
00000036
collin@p64:~/tmp$ 
Now we have a file of known good addresses. Let's put them where Carol's procmail can find them.
collin@p64:~/tmp$ cp a4 $HOME/../carol/from-collin/known-good-addresses.txt
collin@p64:~/tmp$ 
So far so good. Then on the mini:
mini1:~ collin$ sudo su - carol
mini1:~ carol$ mv from-collin/known-good-addresses.txt Maildir/  
mini1:~ carol$ ls -o Maildir/kn*
-rw-r--r--  1 collin  15377 Sep  5 15:51 Maildir/known-good-addresses.txt
mini1:~ carol$ 
Whoops! Carol doesn't want a file owned by me, to refer to.
mini1:~ carol$ cp Maildir/known-good-addresses.txt Maildir/known-good-addresses.2015-09-05.txt 
mini1:~ carol$ ls -l Maildir/kn*
-rw-r--r--  1 carol   _lpoperator  15377 Sep  5 15:54 Maildir/known-good-addresses.2015-09-05.txt
-rw-r--r--  1 collin  _lpoperator  15377 Sep  5 15:51 Maildir/known-good-addresses.txt
mini1:~ carol$ mv Maildir/known-good-addresses.txt ~/from-collin/
mini1:~ carol$ ^Dlogout
skipping clear
mini1:~ collin$ 

Now to tell procmail about that

I'm just gonna write this...
    1   # auto-forward to ALT DEST?
    2   :0
    3   * AUTOFORWARD ?? yes
    4   {
    5       VERBOSE=yes LOGABSTRACT=yes
    6   
    7       KNOWNGOOD=known-good-addresses.2015-09-05.txt
    8       ALT_DEST=redacted@redacted.com
    9   
   10       SENDIT=no
   11   
   12       :0 Whc
   13       | formail -zxfrom: -xsender: | grep -qif $KNOWNGOOD
   14   
   15       :0 a
   16       { SENDIT=yes }
   17   
   18       :0 EWhc
   19       | formail -rzxto: | grep -qif $KNOWNGOOD
   20   
   21       :0 a
   22       { SENDIT=yes }
   23   
   24       :0 c                ← See below for workaround
   25       * SENDIT ?? yes
   26       ! $ALT_DEST
   27   
   28       VERBOSE=no
   29   }
Added to Carol's .procmailrc. Here's what it does.
  • Line 3 basically says not to bother with lines 4-29 unless "AUTOFORWARD=yes" appears somewhere before here.
  • Lines 7-8 set some values that we'll use later. We'll refer to them as $KNOWNGOOD and… well, you get the idea
  • Line 12 says that this recipe:
    • W: must Wait for the pipe (line 13) to complete and check the exit code;
    • h: pass only the header to the recipe
    • c: continue (i.e., don't terminate) in case the pipe is successful
    and line 13 takes the header and passes it to formail(1). We then check the from: and sender: fields for a match with the $KNOWNGOOD list.
  • Lines 15-16 say: if we ran line 13 and it was successful (that's the "a" on 15), then set variable SENDIT to "yes"
  • Lines 18 says that this recipe:
    • E: will run only if we did not execute line 16
    • W, h, c: as line 12
    and line 19 tells formail to create a reply, then remove the "to:" field from said reply, then check (grep) the result against $KNOWNGOOD
  • Lines 21-22 are like 15-16
  • Line 24 says to continue on success (as explained for line 12);
    line 25 says keep going only if SENDIT was set to "yes"
    and if so, run line 26, which forwards the email to $ALT_DEST... which now that I think of it will probably fail sometimes.
    Fly-in-the-ointment #2
    Because if the email came from, say, yahoo.com, we're now going to forward it using our ISP's mail server. So the email address at $ALT_DEST will see an email, supposedly from yahoo.com, coming from our ISP and not from any authorized sender of yahoo.com-originated email. That violates sender psomething framework (SPF) and the mail will either bounce or get spam-filed. Urp! I'll figure out a fix later... Time now to make dinner.
  • You can ignore lines 5 and 28; that's "For Nerds Only"
I did a quick test, and at least to an initial approximation "basically, it works." I haven't tried either a "sender" or a "address in reply but not in 'from'" test, but those are pretty rare; I guess I could claim they're there only for completeness...

Workaround for fly-in-the-ointment #2

OK, replace lines 24-26 with the following to resolve the SPF issue. And I think… yep, it's Sender Policy Framework:
24          :0
25          * SENDIT ?? yes
26          {
27      
28              :0
29              * ^From: *\/.*
30              { FROM=$MATCH }
31      
32              :0 fhw
33              * FROM ?? @(facebook|google|gmail|aol|yahoo).com
34              | formail "-iReply-To: $FROM" "-iFrom: redacted@redacted (See Reply-To)"
35      
36              :0 c
37              ! $ALT_DEST
38          }
Here's how it works.
  • 24 is the usual beginning of a procmail recipe. Initially I tried ":0c" here but that resulted in some odd messages and non-functioning. I suspect another procmail+MacOS issue but didn't want to take more time to investigate that; it might be the 4th fly in the ointment… In any case, I coded no "c" here.
  • 25 says to do lines 26-38 only if we set SENDIT to "yes" (i.e., in 16 or 22)
  • Lines 28-30 let us find who the sender is. Normally I would say something like
    FROM=`formail -zxfrom:`
    or maybe
    FROM=`formail -rzxto:`
    but because of fly-in-the-ointment #3, aka the procmail-on-Mac problem documented in https://trac.macports.org/ticket/46623 (and referenced here) that won't work.
  • Line 32 says
    • f: treat the recipe as a filter: that is, modify the message and pass it on to the next recipe.
    • h: pass only the header to the pipe
    • w: wait for the pipe to complete. This ought to be implied for "f" recipes, really, but I'm not sure if it's automatic. I seem to remember being disappointed by this assumption before, but can't say for sure and don't really want to experiment to find out.
  • Line 33 says to do the recipe only if $FROM (set in line 30) matches @facebook.com or @google.com or @gmail.com, etc. The parentheses and the "|" character mean what you probably think they do. One bit of sloppiness here: I should perhaps have escaped the "."; as the recipe stands, an address like "whatever@aolxcommunity" would match. But it's close enough
  • Line 34 fixes the addressing for the email message. First, we put the original "From:" address into the "Reply-To" header.
    Rather than claiming that the message comes from facebook, google, gmail, etc., we'll say that the lovely Carol is sending it from our ISP. That gets past the SPF filters. The "From:" line will remind her, when she sees one of these, to look at the Reply-To: header to find out where the mail really came from.
  • Finally, lines 36-37 send the mail to the alternate destination, which she'll be able to read while on the road. The "c" in line 36 like the "c" in line 12.
I gave this version a quick test, too, and it seems to work.

Thoughts toward the end

Dad is 92, so statistically speaking he’s probably not long for this world. His cancer is metastatic and he’s in the hospital, which only reinforces the prognosis.

We’ve spoken about his approaching end, but as I’ve told many grieving friends and colleagues in the past, one can never actually be ready for it—no matter how long we’ve seen it coming.

What is happening inside me? Well, I have to tell you I’m rather a mess. Dad’s fondest wish is that his descendants all outlive him. Indeed, the alternative would be awful. I know all this, but I’m not actually ready to go through it.

So how am I processing all this? Not very well. And yet part of what’s happening is that I feel compelled to be a better man. When I got Thursday morning’s notice, “You’re eligible to donate life-giving blood!” the urge to run over to the blood center was powerful.

You see, Dad had a habit of donating blood. When I was still living at home, he would sometimes announce, “Going to give blood” before heading to the blood bank. Part of that was prudence: you build up credit, and if you need some units of blood in the future, you don’t have to buy them. I don’t know how many gallons he gave, but it was way beyond what he might ever credibly need. So the savings aspect wasn’t his only motivation. Giving blood, I learned, is something a man does.

And so, with Dad so many steps closer to the grave, I wanted to do something life-affirming—something Dad would do, or rather, something Dad did.

As Phillip stuck the needle into my arm that afternoon, I mentioned Dad’s habit. “Part of why I do this is I wanted to be like him. Still do!” I said, barely retaining my composure.

“That’s what a parent wants,” he returned. Indeed.

Something else is happening to me in these days: when I see young people, my paternal feelings arise a little more strongly than before. Perhaps that Socioemotional selectivity theory is kicking in: 18 months ago I felt like I’d live forever, but today I know better—that I’m unlikely to double my years. I probably don’t have even four decades left.

I can hear some of you laughing: “Four decades? I haven’t even been alive that long!” But I remember my grandmother telling me just the other day, when I six or seven years old, that this world goes by fast. I’m here to tell you that she was right. The other day I reported for work at my first “real” job as a development engineer at hp. That was about four decades ago.
A colleague spoke about a lack of enjoyment in life—particularly his work life. I thought about his words and wrote him a few paragraphs with my thoughts. Another young guy stood up to the boss in a meeting. He wasn’t defiant, but he declined to promise an earlier delivery date for one of his tasks. I wrote him some paragraphs about a similar experience I’d had in my earlier years, and encouraged him to keep up his self-awareness. Bowing to the pressure will only get you in trouble, I told him.

I’m not sure I would have done that two years ago; two years ago I’m not even sure I would have noticed what these guys were saying, or how it was an invitation for me to speak [or write] into their lives.

With young women, my paternal feelings come out even more strongly, perhaps because I have daughters. A young friend is starting a career in elementary education, and as I thought of her energy and her love blessing those kids, it made me feel so happy. I told her so, too.

And that brought to mind the passion and experience that the lovely Carol brings to her lessons, and to young mothers at a church group—I thought about how she’s blessing those students and those young mothers, and that made me happy, too. (I also told her.)

It is good to think about death sometimes, as this article notes. I’m not sure I want to greet each morning with, “It is a good day to die,” but I need to remember that I will die some day, probably before four decades are out. And also to think about people in my life who deserve good words from me—comfort or encouragement—and remember to be liberal with those gifts. If not today, then when? As the Bible says, Do not withhold good from those to whom it is due, when it is in your power to act. And not because something Bad will happen if I don’t, but because doing it will bring good into the world, in and through my life. And because that's what a man does.