Thursday, December 26, 2019

Some things I'm thankful for (particularly at work)

Some weeks ago at Trinity Menlo Park, Pastor Aaron reminded us that life is short, and we don’t have many days to bless those around us. Inspired by that remark, I emailed the below to a few (i.e., quite a few) of my co-workers.
2019-12-04 2:12pm Pacific
Colleagues,

I was reflecting the other day on things I’m grateful for. Family and friends, of course; a measure of health; vehicles and home appliances that work well enough. Not least is the opportunity to work together with so many intelligent, hard-working folks (yes I mean you).

And as I reflect on the ONTAP development experience at NetApp, it strikes me how much better that experience is today as compared to what it has been. Reviewboard is just one of the major improvements that came in over the past 15 years or so.

In the “old days,” you could check something into ontap/main, only to get a nasty-gram from the build daemon. Then you’d find out that the build daemon had been failing for several hours because somebody broke it and no one fixed it!

Auto-heal isn’t perfect, but it’s pretty close, which we can tell by how surprised everybody is when it can’t back out a bad checkin.

I also remember a day when Isabelle submitted something and the build-ng daemon whined at her. She backed her change out and the daemon kept failing! It took several days to figure out that missing dependencies had hidden the real culprit, which had been submitted some weeks before :-(

Bedrock and DOT/dev aren’t perfect either, but again we’re surprised at sporadic failures...

I think of Anchorsteam, which shipped at least a full year late. We added Scrimshaw after Fullsail, because customers were waiting so long for another release—but Scrimshaw was late, too! Back then, managers really had no idea how close we were to being ready. Or they wouldn’t say :-(

Although the six-month release cadence hasn’t been a panacea, it has brought some reality into the management ranks.

And do you remember how much stuff we shipped without testing? Scrimshaw.3 had no snapmirror testing whatsoever! A former VP demanded that we test patches more thoroughly—and also ship them more rapidly—that didn’t work too well.

I am so thankful that today we have CITs and auto-heal, daily code coverage reports, CTL, and other tools to enhance ONTAP’s quality.

All these things took a lot of work from a lot of folks. Reviewboard, bedrock, bammbamm, CITs, auto-heal on both build and CIT, and so much more. You know who you are.

Thank you thank you thank you for how you’ve improved life for developers, and thereby for all the folks that rely on our products every day.

Monday, December 23, 2019

What did Jesus mean when he said “salvation”?

Recently the story of Jesus’s encounter with Zacchaeus appeared on pray-as-you-go at this link for November 19th; “coincidentally,” Menlo Church’s November 24th sermon covered the same passage. The lovely Carol showed me a page from her devotional guide that also focused on this passage, and encouraged its readers to write a few paragraphs about salvation: what does that mean to me? Following are a few thoughts.
9Jesus said to him, “Today salvation has come to this house, because this man, too, is a son of Abraham. 10For the Son of Man came to seek and to save the lost.”
Luke 19:9–10, NIV (2013)
Perhaps you know the story: Zacchaeus, a rich and corrupt tax collector in first-century Israel, encounters Jesus in Jericho; Jesus goes to Zack’s house for a meal, Zack repents, and Jesus says that salvation had come to the house. The full text is here.

Reflecting on this story, and particularly what Jesus says about salvation, it struck me that my understanding of the passage is quite different from the way I understood it 20–30 years ago. Back then, as a young evangelical, I would have had a very narrow idea of “salvation”: I thought it meant the shift from a dim eternal destiny to a bright one. Before salvation, Zacchaeus was headed for hell; once saved, he was headed for heaven.

The way this happened, I would have said, was that some time during the visit, Zack came to “believe in Jesus” (in a John 3:16 sort of way), and at that point, became a child of God, as John 1:12 promises. Being thus adopted by God, he was now destined for heaven. And I would have said that his proclamation (“Here and now I give half of my possessions to the poor…”) was evidence of Zack’s belief and perhaps of an incipient transformation wrought by God.

That belief somehow caused God to change his mind about Zack; God’s view used to be that Zack was deserving of hell, but after Zack came to believe, God saw him as forgiven: in the words of the hymn, “clothed in His righteousness alone / faultless to stand before the throne.”

OK, that explanation wasn’t as clear and crisp as I’d have liked, though, because as Romans 3 teaches, nobody ever looks for God. Ephesians 2:8 says we’re saved by grace through faith, but even faith is a gift from God; we can’t generate that faith by ourselves.

Suppose that Zacchaeus had said nothing about providing for the poor, or about making restitution to those he cheated? It would not have made any difference to me back then; my view, based on verses like John 1:12 and John 3:16 and John 5:24, was that basically “all you need is to believe.”

Although there was some muddiness in my understanding, that’s how I thought about the “salvation” thing.

Thirty years later…

How is my thinking different today? For one thing, my understanding of “salvation” is broader and with a different focus. As I understand it, in first-century Israel, Eternity-in-Hell-after-you-die was not the thing people would feel most in need of being saved from. They would be thinking of how to be saved from oppression, poverty, fear or shame. Or from being a pariah in the community.

Which Zacchaeus was. I wonder how his short stature affected his experience growing up. Was he ridiculed or bullied? Is that why he he decided to collaborate with the Roman oppressors to exploit his own people? And to cheat them besides?

So he became a tax collector, then chief. He got money, and maybe some sort of revenge against his persecutors, but his wealth didn’t gain him respect within the community. I see him as caught in a viscious cycle partly of his own making. And I think that when Zacchaeus saw Jesus, he didn’t see the kind of hate and judgment that he saw on the faces of those around him. Somehow, during the party, he was enabled to see a way out of that viscious cycle—he saw a better way to be. This is the kind of thing that can happen when Jesus encounters us: we find ourselves suddenly able to take a step we had not previously imagined.

As Paul wrote in Titus 3: “For we ourselves were once foolish, disobedient, led astray, slaves to various passions and pleasures, spending our days in malice and envy, hated by others and hating one another. But when the goodness and mercy of God our savior appeared, he saved us, not on the basis of our good deeds, but according to his mercy…”

God, in the person of Jesus, made it possible for Zacchaeus to escape the slavery of those various passions and pleasures—or at least, to begin the journey. How could Zacchaeus keep on the journey? How can any of us do so? The author of Hebrews exhorts us to pay attention so as not to drift away.

1We must pay more careful attention, therefore, to what we have heard, so that we do not drift away. 2For if the message spoken by angels was binding, and every violation and disobedience received its just punishment, 3how shall we escape if we ignore such a great salvation?
from Hebrews 2
She writes that Jesus is “the source of eternal salvation to all who obey him” (5:9). She exhorts us to be diligent in pursuing our hope, that we may not be sluggish, but “imitators of those who through faith and patience inherit the promises” (6:12).

What does this look like? Suppose I fall into the ocean at night. I can’t touch bottom. Suddenly I hear a life preserver splash in the water but I can’t see it. A voice tells me to swim ahead. It tells me to turn right; I pay careful attention and do what I’m told. Eventually I grab it. In this story, I have a big problem: I’m helpless in the water. Do I want to be saved? Well, yes—but I’m way more concerned about drowning than about eternal destiny. I had to pay attention; I couldn’t ignore such a salvation. I had to obey.

But I might also be worried about eternal destiny; it’s the kind of thing we tend to postpone thinking about until the last possible moment. And a first-century Israelite might very well be thinking about sin and forgiveness. The book of Leviticus has the most instances of “forgiven” of any in the English Bible. John baptized people “for the remission of sins.”

So I think people would be concerned about both. Actually, as I was thinking and writing about this, I remembered that first-century Greek has a lot fewer words than modern American English. The word translated “saved” can be (and sometimes is) translated “healed.” And in Matthew’s gospel, we read that the angel told Joseph to call the baby Jesus, “because he will save his people from their sins” (1:21).

I now think of salvation as being much broader: as saving the whole person from every kind of hurt: ostracism, drowning, cancer, PTSD, guilt and shame, loneliness, depression, famine, sword. Ultimately, from death: as the Apostle Paul writes, we are destined not for wrath but for obtaining salvation through our Lord Jesus Christ, who died for us so that whether we are awake or asleep (a euphemism for dying), we may live together with him. I think that’s in 1 Thessalonians… yes it is: link here (NASB)

Tuesday, December 10, 2019

Wednesday with Poppy

being a shortened version of this post from July

with Carol in July

with me, June campout in Big Sur
17 July 2019

I do and I don’t want to forget this day. The past several months, Poppy has been clingy, maybe feeling uncomfortable because of her kidney disease. Last week I was wishing she could pee normally. But as they say, “Be careful what you wish for,” because yesterday she let loose with a puddle on the hardwood floor.

Before walking her, I surveyed the back yard. There on the path was a normal-looking #2. I never thought I’d be so happy to see one of these; her elimination had been out of whack since the vet put her on a low-protein diet. I found her lead and a pet refuse bag, and invited her out. She bounded over with almost her former intensity, and exploded out the gate once I opened it. She soon ran out of gas, but we walked fully 20 minutes.

Carol would be out most of the day; I worked from home so Poppy wouldn’t be alone. The past few days I prepared her meals from leftovers. Poppy was refusing the weird stuff from the vet, and didn’t even want her old kibble. On this morning I put a little water and rice on the stove, and some salmon, under her close supervision. After it simmered a few minutes, I stirred in a fiber capsule, let it cool for a bit, and walked it to her crate. “Sit!” I commanded. She promptly obeyed. Placing her bowl on the floor, I said, “OK,” and she fell to.

In a couple of minutes she found me and gave me her “More?” look. I scooped a handful of her formerly-favorite kibble into her bowl. She ate most of that, and then stopped. “Well,” I thought, “She must be feeling better.”

A while later, it was time to go to the bank. “Want to go for a ride?” I called.

She jumped off the couch and looked at me expectantly. I gathered my things and she followed me to the garage. The van is too high for her to get into by herself, so I lifted her onto my seat. She jumped to the passenger side. I lowered her window, belted myself in, and off we went. About half-way through town, she began looking toward my window. “Want to come over?” I asked.

At the next traffic signal, I scooted back a few inches, and she took a tentative step. I lifted her onto my lap, and as the light turned green, she put her paws onto the door. A few blocks later, she wanted to go back; I gave her a one-handed boost to the passenger seat.

I left both front windows open a few inches. “I’ll be back in a flash,” I told her, and went into the bank.

I returned to find her in the driver’s seat. “Excuse me,” I said as I opened the door. She returned to the passenger seat and we went for her last ride back to the house. I gave her a half-tablet of the antiemetic, to help her feel more comfortable in her final hours.

I fed her for the last time. Well, almost the last: she came to me in the kitchen with her “Carrot?” look. I handed her one, which she cheerfully chomped. (She did that Monday, too, but immediately vomited the whole thing. This time everything stayed down.)

Carol came home to take Poppy to the vet. I just wanted to be somewhere else, so I gathered a few things and went to the office. Poppy followed me outside. Maybe she suspected something was up, because when I leave I always say, “Be a good girl”; this time I knelt down and stroked her fur. “I’m sorry, Poppy,” I said. “I’m so sorry.” I’m sure she could tell I was really broken up about something.

At work it was “Employee Appreciation Week” and there was an ice cream social. But I didn’t want ice cream and didn’t feel social, so I skipped it. I did something vaguely productive and went home. As I entered the house there was no jingle of Poppy’s tags on her collar, no little footsteps.

Monday, September 09, 2019

LG 34UM58-P Revisited: a Puzzle

I wrote earlier about this LG ultrawide monitor: 2560x1080 pixels, about 34" diagonal. Although it's great having all the pixels, the screen didn't look all that good on my Linux machine.
I created the image file you see at left. The squares in the upper-left corner have the red pixel turned on at x=0, 5, 10, 15, etc., and at y=0, 5, 10, 15, etc. I wanted to have just one of the color-dots on in each pixel, and I thought a black background would show up better what was going on.

I ran the display(1) program (from ImageMagick) and pulled out my camera. The picture below shows the sad story.

As you can see, the horizontal lines look more or less like lines, but the vertical lines are a mess. Before I examined the screen carefully, I had assumed the card didn't have enough horizontal pixels; maybe it had just 1920 per line, and it was dithering or something to decide what signal to send. But then I thought we ought to get a clean vertical line at some point.

So this is a puzzle. When I hooked this monitor up to the lovely Carol's macbook, the display looked great, not muddy at all. I wondered if it was the cable; I bought a new one with better specs. Maybe it looks a little better, but the photo was shot while using the new cable. Maybe I should be using the card's DVI outputs rather than the mini-HDMI output? I have no idea.

Saturday, July 20, 2019

Poppy's Last Day

I woke at about six on Poppy's last morning. She watched me leave the bedroom and return with her last thyro-tab (0.1), covered with cream cheese. She took it from my hand, and I went out to the den to open the patio door. A few minutes later she padded out.

Before taking her for a last walk, I surveyed the back yard. There on the path was a normal-looking #2. I never thought I'd be so happy to see one of these, because her elimination had been out of whack since the vet put her on the protein-restricted diet. Anyway, I pulled out her lead and a pet refuse bag, and invited her out. She bounded over with almost her former intensity, and exploded out the gate once I opened it. She soon ran out of gas, although we walked fully 20 minutes, about 1600 yards.

I do and I don't want to forget this day. The past several months, Poppy has been clingy. I think she's been feeling uncomfortable because of her kidney disease. Last week I was wishing that Poppy could pee normally. But as they say, "Be careful what you wish for," because yesterday she let loose with a puddle on the hardwood floor.

Carol would be out most of the day; I worked from home so Poppy wouldn't be alone in the house. The past few days I prepared her meals from leftovers. Poppy was refusing all the low-protein stuff we got from the vet, and didn't even want her old kibble. On this morning I put a little water and rice on the stove, and some salmon, with her close supervision. After it simmered a few minutes, I stirred in a fiber capsule, let it cool for a bit, and walked it to her crate. "Sit!" I commanded. She promptly obeyed. Placing her bowl on the floor, I said, "OK" and she fell to.

In a couple of minutes she found me and gave me her "More?" look. I scooped a handful of her formerly-favorite kibble into her bowl. She ate most of that, and then stopped. "Well," I thought, "She must be feeling better."

A while later, it was time to go to the bank. "Want to go for a ride?" I called.

She jumped off the couch and looked at me expectantly. I gathered my things and she followed me to the garage. The van is too high for her to get into by herself, so I lifted her onto my seat. She jumped to the passenger side as I climbed in. I lowered her window, belted myself in, and off we went. About half-way through town, she began looking toward my window. "Want to come over?" I asked.

At the next traffic signal, I scooted back a few inches, and she took a tentative step. I lifted her onto my lap, and she put her paws onto the door as the light turned green. A few blocks later, she wanted to go back; I gave her a one-handed boost to the passenger seat. She sat the rest of the way. My eyes were mostly dry on the drive.

I left both front windows open a few inches as I went into the bank. "I'll be back in a flash," I told her.

A few minutes later, I returned to find her in the driver's seat. "Excuse me," I said as I opened the door. She returned to the passenger seat and we went for her last ride back to the house. I gave her the last half-tablet of the antiemetic, to help her feel more comfortable in her final hours.

I worked another hour or so at my desk, then it was time for lunch. I heated some rice in the microwave and added a little leftover chicken juice. A few more flakes of salmon, some bits of chicken this time, and another fiber capsule went in, and it was lunch time. The same sitting ritual followed.

I teared up a little as I fed her for the last time. Well, almost the last: she came to me in the kitchen with her "Carrot?" look. I handed her one, which she cheerfully chomped. (She did that Monday, too, but immediately vomited the whole thing. This time everything stayed down.)

Carol came home to take Poppy to the vet for the last time. I just wanted to be somewhere else, so I gathered a few things and went to the office. Was I wimping out? Maybe. Poppy followed me outside. Maybe she suspected something was up, because when I leave I always say, "Be a good girl"; this time I knelt down and stroked her fur. "I'm sorry, Poppy," I said. "I'm so sorry." I'm sure she could tell I was really broken up about something.

I was there just a couple of hours. It was "Employee Appreciation Week" and there was an ice cream social. But I didn't want ice cream and didn't feel social, so I skipped it. I did something vaguely productive and went home. There was no jingle of Poppy's tags on her collar, no little footsteps as I entered the house.

Sunday, July 14, 2019

The best possible today

On a recent walk, as on many recent walks, Popsie—our beloved “toy” poodle mix—would squat a little, and a pool would grow larger and larger until it hit one or more of her feet. I imagined those feet jumping onto our laps, and then tried not to.

Little did I know that I would soon be wishing for her to do that again. Our Popsie’s kidneys are failing, and she only ever leaves a few drops anywhere. She hardly drinks anything, and eats even less, so we will likely soon be saying good-bye.

She has lost her appetite; put differently, she’s gotten a lot pickier. The new diet (for kidney care) is only part of the reason. I wish she would drink more, because that would dilute the things her kidneys are trying to get rid of, and make her feel better. But she doesn’t know that, and we can’t explain that “you won’t like it, but you really have to drink two quarts of water today.”—or in her case I guess it would be “a full cup of water.”

The doctor came over to administer subcutaneous fluids and draw some blood to see how things are going. But then what?

I can see a few different directions this could go. One would be to aim for the Vulcan slogan, Live long and prosper. In this scenario, we’d try to dress up the kidney-health diet, learn how to administer sub-q fluids (as the doctor calls them), and so on. We would likely witness a long, slow decline, and at some point would decide for her to end it. To be fair, in this plan we’d be deciding on her behalf to start it.

Another possibility would be my slacker paraphrase of a hospice-esque priority, viz., to choose the best possible today, regardless how many possible tomorrows (of unknown quality) we might forgo. A motto for this scenario might be, Let us eat and drink, for tomorrow we die. (That’s in the Bible by the way.)

A friend told me about his mother-in-law, who moved in with him and his wife in her later years. As it happened, she was nowhere near her last year, but nobody knew that at the time. He told me that they encouraged her to eat “healthy” foods until she got to be 90, but after that, she went the Epicurean route. She went to restaurants and ordered mounds of tasty deep-fried stuff. Of course she couldn’t finish it there, so she brought it home and ate more of that TDFS until it was time to go back and get more! Let us eat and drink, for tomorrow we die! Well, that last part came maybe nine years later. Yep, she only made it to 99.

In case you don’t see my tongue nearly puncturing my cheek, I think they made terrific decisions in that case. I suppose they may wonder from time to time if they should have started in Mom’s 85th year instead…

From Atul Gawande’s masterpiece Being Mortal I learned that for certain kinds of cancer, you live longer and more comfortably by going for palliative care than you by opting for one medical intervention after another. By the way, under the palliative option, you also don’t wipe out your grandchildren’s inheritance.

Lest you think me a reckless Epicurean, a couple of thoughts. In my single years (back when dinosaurs roamed the earth), I took one of those quizzes you sometimes see in the paper. According to my answers, I was a guy who “lives life to the hilt and seldom takes stock of where he is going,” which my housemates thought was hilarious. Apparently I liked to think of myself that way, but the reality was, as one put it, “I can’t think of anyone less like that than you are.”

I think she was right, actually: we saved for the kids’ college education; we have enough in various accounts that I can retire any time we’re ready; I have life insurance beyond the employer-supplied policy in case something happens to me before we’re ready; etc.

Another thought, which perhaps is a mere continuation of that one, is that I do somewhat believe in taking care of oneself. I read a few months ago that the ability to run a nine-minute mile is associated with better outcomes, and consequently decided to get on the treadmill a few times a week. I got down to a 9:00 mile and have since slacked off to running a mile at 6.4mph. I do this 2–3 times a week, and I’ve gotta say, “epicurean” would not be the word.

If a guy goes to the doctor, and the doc says to lose weight and eat less fast food, and he ignores that advice and dies 15–20 years before he should, I think that’s tragic because the world (and especially his family) is poorer by 15–20 years’ worth of contributions he likely would’ve made.

Popsie is some ninety years old, according to a “poodle years” conversion chart I found today. The Humane Society thought she was somewhere between six and nine when she came home with us in 2009 (yes, about ten years ago) so she’s probably 16–19, a ripe old age. She’s entitled to her version of TDFS, and this morning I made her some fried rice. It had a little (just a little, in case Dr. Lowery reads this) chicken, and some carrots, and some of the juice that was in the leftover container.

For the best possible today.

Toward the end of her life, my own mother said she wanted no more surgeries. No more tests. By this time the doctors knew she had some kind of cancer in her pancreas—which is probably what killed her appetite. So she was done.

When the doctor came by yesterday, I saw Popsie’s distress around needles. She doesn’t want any more needles and in fact doesn’t even want to go to the vet’s office.


But of course it’s not quite that simple. In the middle of writing the above, the doc called and talked about the level of ionized calcium in the blood sample, and appetite stimulants (quite a common treatment for kidney disease in dogs). And I began to think, “Well, if her appetite picks up and she feels better and enjoys walking and can pee a puddle like she used to…” but then I remembered, she’s a 90-year-old lady, and she doesn’t want any more needles.

But if a couple pokes this week means she could enjoy another six months, would it be worth it?

But she’s a 90-year-old lady!

But…

Sunday, July 07, 2019

What is “obstruction of justice” and why is it such a big deal?

IANAL, as I'd often read on electronic bulletin-board systems, but I was curious about the so-called Mueller Report, officially titled Report On The Investigation Into Russion Interference In The 2016 Presidential Election (here's a link to a PDF of the redacted version).

Volume II of the Report “addresses the President’s actions toward the FBI’s investigation into Russia’s interference in the 2016 presedential election and related matters, and his actions towards the Special Counsel’s investigation.” (p. 3, or page 11 of 448 in the PDF). It begins with some terms of reference, or rules of engagement, which I’ll summarize here. In this list, when I write “they” or “their” I refer to the office of the special counsel, i.e., Mueller’s team.

  • First… we determined not to make a traditional prosecutorial judgment.”

    A traditional decision means they’d decide to either prosecute or decline to do so. Because the Office of Legal Counsel (OLC) said that you can’t indict or criminally prosecute a sitting President, they avoided that traditional decision process.

  • Second…the OLC opinion…recognizes that a criminal investigation during a President’s term is permissible.”

    Also the OLC opinion says a President’s immunity from prosecution doesn’t extend beyond his term. Therefore they “conducted a thorough factual investigation in order to preserve the evidence when memories were fresh and documentary materials were available.” Does this sound to you like Mueller is anticipating criminal prosecution later?

  • Third,” they avoided “an approach that could potentially result in a judgment that the President committed crimes.… Fairness concerns counseled against potentially reaching that judgment when no charges can be brought.”

    If you can’t charge someone, it’s unfair to them to say “we would file charges if we could” because that person has no chance to clear themselves at trial.

  • Fourth, if we had confidence… that the President clearly did not commit obstruction of justice, we would so state. …[H]owever, we are unable to reach that judgment.”

    They can’t conclude that he committed obstruction of justice because they avoided an approach that could potentially result in such a conclusion. They can’t conclude that he did not commit a crime “[b]ased on the facts and the applicable legal standards.”

I hope you consider whether Barr’s “not a summary” fairly represented the 1st and 3rd points above.

The Report also provides a surprisingly readable introduction to what “obstruction of justice” means. The summary, which begins on page 9 of Volume II (page 221 of 448 if you're reading the redacted PDF), outlines three basic elements

  1. Obstructive act.
    which includes conduct that could obstruct or impede the administration of justice;
  2. Nexus to a pending or contemplated official proceeding.
    meaning a connection to a judicial or grand jury proceeding (1503) or a pending federal agency proceeding or a congressional inquiry or investigation (1505). The proceeding need not be in progress; it can be “contemplated” (1512).

    The obstructive act has to be likely to obstruct justice in the proceeding, inquiry, or investigation in question.

  3. Corrupt intent
    here meaning an intent to obstruct justice knowingly and dishonestly, or with improper motive.
With all that, why would it be a big deal if the President did in fact do things that would likely impede or obstruct the administration of justice in a pending or in-progress or soon-to-start proceeding or investigation, and did so knowingly and dishonestly, or with improper motive?

I’ll leave the answer as an exercise for the reader :-(