Time Flies

It was either only 20 years ago or a lifetime ago that I had received the news. Peter was on Flight 175. That’s all I needed to hear. That was all anyone who knew anyone on any of the 4 flights needed to hear. There was no hope, no questions that followed. My best friend from high school had been killed because a man in a far away land had hatched a plan to turn four airliners into deadly missiles.

I have to be honest, Peter and I hadn’t really kept in touch after high school. I can’t really say why. But I had finally reached out to him a few weeks before 9/11 and we had made plans to get together in the next month. That moment, like all my memories of him is now frozen in time. His smile that lit up a room will always be in my mind.

On this 20th anniversary, I have mixed feelings on how much 9/11 has been played out as a national tragedy for most of the last 20 years. It was no doubt a horrible day for many. Friends and family were lost that day. And yet, it seems to have taken a special hold in our national consciousness for two decades. Like Pearl Harbor, the attack was a complete surprise and caused the US to launch a war overseas. But unlike Pearl Harbor, it seems as if at times we are stuck in time. I think this is perhaps because in this case, our own planes and passengers were turned on us and because unlike WWII, there has been no distinct victory. There is no simple closure. But, thanks to people like Peter’s family, there is hope.

It was tempting for many after 9/11 to want revenge, to strike back. Some I think lost the distinction between justice and vengeance. Peter’s family did something different and I think unique. And that has been what has been on my mind.

In their own way, and a way that the Peter I knew from high school would have approved of 100%, they struck back at the Taliban. They didn’t go on the warpath. They didn’t call for attacks or bombings or even deaths in return. Instead, they opened a school for girls in Afghanistan. They setup a scholarship program for students from Afghanistan to attend the private high school, Berkshire, where Peter and I met. They decided to fight hatred and ignorance with lovingkindness and education. They fought for a future. Peter was gone, but they fought for a better world, despite him not being in it.

As the Taliban slowly regained control of parts of Afghanistan over the past years and especially the past months, I was saddened. With the fall of Kabul, I was nearly in tears. While I grieve at times for Peter, I grieve more for the dying of the dreams inspired by his murder. And this happening near the 20th anniversary of 9/11 has only made it more poignant.

That said, I actually have hope. I think it’s a dark time in Afghanistan, the current promises of their leader not withstanding. Currently it appears they will continue to allow the education of girls, but I don’t know for how long and how well.

The land, like the country is a harsh environment, but yet things grow. His family and countless others I believe have planted seeds in Afghanistan. Seeds that when the time is right will sprout and grow. So, I have hope. His death may have led to just one school and a few students coming to Berkshire, but I know his family wasn’t alone.

It may take years, perhaps decades, but I think have to believe that Peter’s death was not in vain and that more good will ultimately come of it.

Peter Morgan Goodrich
Peter’s smile as I remember him

More on the foundation setup by his family: The Peter M. Goodrich Memorial Foundation

Paywalled (sorry) recent article on him: The Berkshire Eagle

From his college: Bates

About his mother: a powerhouse of a woman that cancer took far too soon

P.S. One last comment about Peter himself. I think one reason we got along so well was because he was so inquisitive and always learning. At his memorial we were all told how among his possessions was found a copy of an English copy of the Qur’an, replete with many dozens of bookmarks. While we were all looking for solace and understanding the preacher reminded us, “For the love of God, he read the Qur’an.” That was Peter, always wanting to learn and understand. And he would have appreciated the wordplay in that statement.

Time Crawls On

There’s a crevice at the top of a ridge, about 18.5 miles from my house as the crow flies. And as time flies, it’s been in my life for 36 or 37 years.

The crevice is locally known as The Snow Hole because it retains snow late into the year. Decades ago it had snow through August and sometimes beyond. Unfortunately the time for that is long past due the overall temperatures increasing a day or two.

I first visited this in the Spring of ’84 or ’85. I honestly can’t recall which year. As part of the Outdoor Education club or “OE” as we called it in high school, we did an overnight trip. The instructor liked to challenge us and in this particular case we literally arrived at a random parking lot at the base of a ridge and were purposely given a vague map and told to find a particular peak to camp on. With some bushwhacking we made it to the top of the ridge, struck south and arrived at the peak with a gorgeous view. We camped there and then the next day headed north, crossed a road, and eventually arrived at a crack in the ground full of snow. We explored the crack and I’m sure threw a few snowballs at each other. The crack has sheer walls on three sides and a walkable slope on the west side. At the very top of that slope there is a hole in the ground. Alas, no hobbit lived in it, but it was large enough to wiggle into and with some effort find oneself completely underground. It wasn’t much of a cave, but it was there. (Arguably, by some definitions, because one never got beyond what’s known as the twilight zone, it’s not really a cave, but to us, it was a cave.)

We hiked back to the road and in the parking lot there, not the one we started at, we packed up the vehicles and headed home. At the time, I honestly had no clue where we had gone. But I knew it was fun.

It was a couple of years later, I was now in college, when I joined the Rensselaer Outing Club on a day hike to Berlin Mountain. We drove east from campus and arrived at a parking lot. We unloaded and hiked south. I was having a mild sense of deja vu, but I wasn’t sure why. Several miles later, we arrived at the top of Berlin Mountain and I instantly recognized the view. I had camped there. To our east was Mount Greylock, the highest point in Massachusetts. I had returned.

On a later hike, we headed north to the Snowhole. This was the first of many return trips to both locations, the most recent being a hike this past weekend to the Snowhole with my wife.

As we headed north, I was trying to remember my last time there and I want to say close to a decade ago. As I move on in my years and I revisit locations from the past, I try to recall what they were like years ago. In some cases my memories are clouded and faded, in others though, I know my memories are accurate but the places have changed. Both were true on the hike in. In this case, there are two rather open spots about 2/3rds of the way in where one has gorgeous views. Or, more accurately had. The areas themselves are open, but the trees just downhill have continued to grow over the decades and now block much of the view.

View north of Berlin Mountain in the distance, but numerous trees in the foreground blocking much of the view. Taken from the Taconic Crest Trail on the way to the Snowhole.
Decades ago, you could see far more!

And as I mentioned above, the snow doesn’t persist as long in the Snowhole as it used it. But the Snowhole itself hasn’t changed much. Oh, I’m sure a rock or two has fallen since then, more leaves have filled the bottom and decade and I think there’s a bit of a subsistence at the bottom that’s opened up a bit, but overall it’s the same.

And one thing waiting there was that cave. For whatever reason I had not reentered that cave since my first time. This time I decided to do so. I’ve talked about in the past how sometimes we remember caves being bigger than they actually are. Well, in this case I swear the entrance was larger than I remember. I do think in fact the rock had shifted a bit, so perhaps it had been smaller in the past, but in any event, in this case I was able to crawl in without much effort. And the cave itself was deeper and far larger than I recall. Unlike most caves in New York, this is not a solutional cave formed by the breakdown of limestone. Instead, it’s really more of a breakdown cave, where as other stuff erodes away or shifts the layers of rock shift, break, or otherwise move. In my memory, the cave was about 6′ long and just enough to turn around in and peep out a much smaller window near the entrance. Now, it was probably a good 12′-15′ feet long and it dropped down about 6′. Technically I could probably have crawled over a ledge and down just enough to get out of the twilight zone. It truly is a cave, at least now. And it’s one of those rare cases where it’s far larger than I remember. I don’t know in this case if it’s just my memory, or if the cave had changed. It didn’t matter.

After a few minutes I crawled back out and started to do the math. That’s when I realized it had been nearly 40 years since I had last crawled in there. I do hope it’s not another 40 before I crawl in again.

Changes

Let’s start with what I’m not doing this week: teaching cave rescue. As I wrote two weeks ago, those of us in charge of annual upcoming National Cave Rescue training class decided to cancel it in light of the ongoing Covid pandemic. Of course over the weekend, on Facebook popped up images of the modular version of the Level 1 class I taught last year (because the National planned for June of 2020 had ben postponed due to Covid). This got me thinking about the numbers. Using the site 91-Dovic I was able to compare the infection rate year to year, and let’s just say it’s shocking. In New York State, the infection rate was roughly 3 people per 1000. Currently it’s hovering around 23 people per 1000. And this is with a high rate of vaccination. National numbers are similar in terms of the ratio of numbers. Clearly, despite vaccinations we’ve got a long ways to go, but I feel more confident in our decision to cancel.

That said, there were of course other personal consequences. For one, I’m able to actually spend time with a client on a project that’s seriously backlogged. I won’t go into details, but suffice to say, only recently, with the addition of a very competent project manager has this project gotten on track. My role is sort of the middle-man whose scripts passes data between two systems. It’s a critical part of the process, though my development work is mostly done at this point. But had I been teaching this week, it would have created issues for the goals for the project. So, I guess the client wins out on this one.

But there were some other positive consequences. While I couldn’t go to my daughter’s college to drop her off on her first day (the school was limiting move-ins to the student and two others, so my wife and son went, he had never seen the campus) I was able to see her off that morning. Something that wouldn’t have been possible otherwise. (though, despite that, all four of us forgot to take the cookies I had baked out of the fridge and put them in the car!)

Heading off to college!

But also, it meant my wife and I were able to drive my son to his college for his last semester. (the plan to provide him with his own car hasn’t quite gone according to plan).

My son, with my wife, settling in to his new apartment

Looking back, I realize the last time I had gone to my son’s school was last May to take him out there so he could pack up his dorm room after the school went entirely virtual. At some point, while driving the New York Thruway something creepy struck me: how empty it was! Due to the ban on all non-essential travel and the reduction in consumption, there were far fewer vehicles of all sorts on the highway. On the way back, the truck stop we stopped at to get some gas at was basically empty. I think it was ourselves, and 2 other cars and just the person working the counter. It reminded me very much of the post-apocalyptic scenes you see in some movies!

These two drives also represent the furthest I’ve been from my house in about 18 months.

Also last week, my wife’s job finally went back to in-person. So in the space of a week, I’ve gone from a full house to an empty nest. It’s quiet here not. Too quiet.

In the past 18 months or so I’ve gone from semi-regular travel all over the country to not going more than 30 miles from my house (except for very rare occasions) and from not wearing a mask to wearing one almost all the time and now more recently, from a full house to a much emptier one. Let me just say, the cats aren’t overly social.

So changes… Some big. Some small, but they all add up.

And Now the Good News…

The good news is my 2005 Subaru only needed some very minor repairs to get it back on the road so my son can take it to college. This is in contrast to the local dealer telling me last year that it had significant leaks and there was no way for it to pass inspection. I didn’t really believe their diagnosis, but figured they knew what they were talking about and ended up buying a 2015 Subaru last fall.

So why am I telling you about my car ownership? Because this is sort of a follow-up to my post from last week on decision making. After posting it and getting several positive comments, I realized it was actually a bit incomplete and decided I need to write a follow-up. You see, I sort of ignored a huge fact in my last post and it’s both generic and personal. The fact is, decision making in the abstract is easy, it’s when it gets personal it can get far harder. Generically this applies to everyone. Personally, last week I was struggling with the decision about my car repairs and realizing the emotional factors involved.

One of my favorite TV dramas of all time addresses this problem in a few episodes, the most clear one being Mr. Willis of Ohio where President Bartlet explains to his daughter Zoey the real concern:

My getting killed would be bad enough, but that is not the nightmare scenario. The nightmare scenario, sweetheart, is *you* getting kidnapped. You go out to a bar or a party in some club and you get up to go to the restroom and somebody comes from behind and puts their hand across your mouth and whisks you out the back door. You’re so petrified you don’t even notice the bodies of a few Secret Service agents lying on the ground with bullet holes in their heads. Then you’re whisked away in a car. It’s a big party with lots of noise and lots of people coming and going, and it’s a half hour before someone says, “Hey, where’s Zoey?” Another fifteen minutes before the first phone call. It’s another hour and a half before anyone even *thinks* to shut down all the airports. Now we’re off to the races. You’re tied to a chair in a cargo shack somewhere in the middle of Uganda and I am told that I have 72 hours to get Israel to free 460 terrorist prisoners. So I’m on the phone pleading with Be Yabin and he’s saying: “I’m sorry, Mr. President, but Israel simply does not negotiate with terrorists, period. It’s the only way we can survive.” So now we got a new problem because this country no longer has a Commander-in-chief, it has a father who’s out of his mind because his little girl is in a shack somewhere in Uganda with a gun to her head. Do you get it?

The West Wing: Mister Willis of Ohio.

This later becomes a plot point in a later season where basically this scenario gets played out and President Bartlet decides to invoke the 25th Amendment and temporarily steps aside (which, in my opinion leads to some great scenes with John Goodman who proves his acting chops include more than comedy).

The point is, he realizes he can be the President, or a father, but at times he can’t be both. And now back to my 2005 Subaru.

Last year when I thought I was facing over $3000 in repairs, it was a fairly easy decision to not get it repaired. I thought in the back of my mind that perhaps I’d make it a Covid project with my kids and do the work over the summer. As both the summer and my motivation slowly ran away, I realized this wasn’t going to happen.

That said, I still harbored an interesting in getting the car fixed, even though economically it didn’t seem to make sense. Thinking about it, I realized that several factors were driving my decision, one of which of course was it gave my son a car for his final time at college. But also, honestly, it was a fun car to drive. In some ways far more fun than my current Subaru (but I love the bells and whistles of my current car). But there was another factor, my dad had essentially helped me buy the car, just months before he got ill and passed away. There was a distinct emotional attachment to the car. It was looming larger than I had cared to admit.

But recently a new wrinkle appeared. Due to the Covid pandemic, there has been a distinct uptick in the price and value of used cars. A recent search of Subarus in a similar age range showed them now being sold for close to $4000. Suddenly putting that much money into an old car wasn’t an entirely bad idea. But again, I had to wonder, “was it worth it?”

I decided to take a “wait and see” attitude and got it insured and registered and took it to a local mechanic I’m starting to use more and more. I told him basically “Hey, if we can get it inspected without doing all the work, let’s do it.”

A few hours later he called me back. He had bad news. He couldn’t pass it. But, not because it needed the work the dealer had claimed. But because I had forgotten that the battery had recently died and I had had to jump it and recharge the battery. This meant the computer data on emissions wasn’t sufficient and it wouldn’t pass. Fortunately, this is an easy cure: drive it for around 100 miles. With that, it should pass!

I got lucky this time. I could get the car on the road for very little cost. The whole emotional attachment part could go away, at least for now. So what would I have done? Thinking about it, I suspect, since honestly, we had the money, and having the extra car would be useful and because of the increase in car prices I’d have gone ahead with it.

But what about bigger decisions? Fortunately I’ll never be in the position that writers put President Bartlet in. But, there are other situations where emotions might come into play. In cave rescue there’s a skill called a “pick-off” which can be used to help rescue a patient who is stuck on rope. We used to teach it at our standard weeklong cave rescue course and require proficiency in it to pass one of the upper levels. It can be very useful and if your patient is conscious and cooperative, it’s not hard to do. If they’re unconscious however, it can be very hard to do and in fact can be quite dangerous. If you do it wrong, you can also end up stuck on the rope with no way to go up or down. This can be fatal. I know of at least one situation where a friend tried to rescue another friend stuck on a rope in a cave in a waterfall. Both died. He didn’t have the skills (or honestly the best equipment to do so) and allowed his emotions to cloud his decision making. It’s easy to say that here, sitting in my nice dry office when I don’t hear a friend dying. In rescue, one of the hardest decisions one has to make is when to stop a rescue. It’s not easy and emotions and emotional attachments can come into play. But one has to look at the overall picture and try to not let emotions cloud ones decision making process.

As an aside, an excellent look at a real-life scenario where a climber had to cut the rope of his buddy: Touching the Void by Joe Simpson. I highly recommend it.

So, what is the take-away here?

When making decisions, there are often personal and emotional factors that come into play. Sometimes one can allow them (in my case with the car, it’s just money), in others (such as a pick-off) one might allow them, but probably shouldn’t, and if you’re President of the US, you probably should avail yourself of a way out so that your emotions don’t cloud your decision making process. Actually, even if you’re not President of the United States with a kidnapped daughter, I would recommend either turning the decision making process over to another competent person, or at least searching out the input of several folks, ideally ones without the same emotional biases as you, and getting a consensus of opinion. Ultimately though, be aware of the factors going into your decision and the possible consequences.

That’s it for now, until I decide to write another post about this topic.

Let’s Start with the bad news…

Last Thursday I had to send out an email that started with this line. I had to tell over 4 dozen students that the upcoming Cave Rescue training had to be cancelled due to the ongoing uptick in Covid infections.

Long-time readers of this blog are probably aware of the history of this class. In short, it was originally scheduled for last June. Last February we decided to postpone it to this June. This past February, based on where we thought the infection curve would be and vaccinations would be, the decision was made to postpone the major event to late August and do a much smaller, more limited event in June.

In hindsight, one could say, “well you should have had the National Class in June.” Most of our folks would have been vaccinated and the infection rate in June was extremely low.

And the reality is, we might find in the next 12 days or so before the class was scheduled a dramatic drop in the infection curve.

Since the Training Coordinator and I made the decision to cancel, I have received numerous emails expressing sympathy for all the hard work I had put in and how disappointed I must be. I appreciate them, but the truth is, I’m not disappointed or upset. And I’m definitely not second-guessing the decisions that got us here.

The thing is, despite an earlier post, I’m generally comfortable with making decisions and even enjoy making them at times. One thing to keep in mind, especially with decisions like this, is that one makes them based on the information one has available at the time. Back in February, when the decision was made to postpone, we didn’t know that the vaccination rate would be as high as it would be by May. We also didn’t know that there would be such a huge surge in infections in August. Had we known that, we’d have made a different decision.

The other factor that can help is to not make decisions in a vacuum. Ultimately, this seminar was my responsibility and I was the one who made the recommendation to our Board back in February to delay. While there was a vote and decision and vote by them, ultimately my input was a big factor there. (It was unlikely that the BORC would have rejected my advice to delay). In this most recent decision to outright cancel, it came down to the Training Coordinator and I. Neither decision was made in a vacuum (that can lead to bad decision making and also means less information is available) but ultimately the decision and responsibility came down to one or two people.

There were two overriding factors that led to this decision. One was a very practical factor. A number of our students and instructors simply had to cancel. Either they felt the risk was too great, or in several cases, their employers had revoked their time off since they were needed at work to help handle the impact of the ongoing rate of infections. So we simply were facing the fact that we were having a diminishing number of instructors and students and that fact alone was causing us to cancel portions of the seminar.

And the other was: we are charged with training and doing so in a safe environment. As the covid spike gets larger, we felt we could not do a training in a way we felt that was safe.

I’ll admit, had we gone ahead with the training I’d have been a nervous wreck for at least two weeks after the seminar until we knew we were safe (or not) from Covid.

Yes, it’s disappointing that we had to cancel, but I know it was the right decision. And I know each decision was the right one that led to this point.

It’s often tempting to second guess decisions. While at times it can be useful to review what went into making a decision, I would caution against dwelling on decisions.

So to review:

  • Remind yourself, decisions made in the past are generally made on the best information at the time. Don’t revaluate them based on information not available at that time.
  • When possible, get input from multiple people, but have a clear process for making the decision and at times that’s best done by one or two people.
  • Generally, decide towards safety. In our case, there was no pressing reason to lower our safety standards.
  • Also, it can be important to remember no matter how much effort or work was put in in the past, not to count that in the decision. A LOT of work has gone into planning this upcoming training. But that doesn’t change the factors that are currently in play. This is the sunk-cost fallacy. That work is done. But new factors determined the decision.
  • Don’t live in the past. Move forward.
  • Get vaccinated. (that has nothing to do with decision making, but is a good idea).

A Different Perspective

I was going to write a follow-up to last week’s article on Simon Biles and talk about teamwork, but decided to go with something a bit more lighthearted: a Hudson River cruise.

As many of you may know, I live in upstate New York, specifically near Troy. A dominant physical feature here is the Hudson River. Within a 10 miles of my house there are eight road bridges and one river bridge. But even with that many crossings, it’s a definite barrier to travel at times.

The eastern side of the river, other than Troy tends to be fairly rural with only a couple of large open-air shopping malls. But to the west is Albany and Colonie and they have the two largest indoor malls in the area, plus a number of open air malls, the State Capitol, and the bulk of the office space. This means to do a lot of what most of us on the eastern side want to do, we have to cross the Hudson.

I suspect most folks who cross the river don’t give it much thought, beyond it being a barrier to get over using one of the aforementioned bridges. I know as a bicyclist I definitely have to do some route planning when I want to get to the other side.

This past weekend, my family and I decided to experience the Hudson from a different perspective, actually on the Hudson. We signed up for a 90 minute tour on the Dutch Apple leaving from downtown Albany. I want to start with the name. I’d say most of my readers are probably aware that the name of the river comes from Hendrick Hudson, an early explorer of the area, who first sailed up the river that now bears his name in 1609, over 400 years ago. They might even recognize he was Dutch. But, given the state I live in is known as New York, most folks think of New York as primarily an English settled area.

But, the early history is definitely Dutch and there’s still a very strong Dutch influence in the area that extends beyond the name of the river. I live in Rensselaer county, named for Kiliaen Van Rensselaer. He was once claimed ownership of the most land by any European in North America, with his claimed holdings extending for miles on both sides of the river.

In addition, the first settlement in the Albany area was known as Fort Orange. Also, instead of streams in the area, many of smaller waterways are known as Kills. But enough of the early history and language lessons.

The cruise let us see the river from only about 10′ above the water level, not 100′ like some of the bridges (little side note, until late in the last century, the US Coast Guard required bridges as far north as Troy to have at least 60′ clearance.) And instead of crossing over the river, this allowed us to cruise along it.

After undocking, at first the Dutch Apple headed north from its mooring. We sailed under the Dunn Memorial Bridge where a Peregrine nesting box was pointed out and some could see a one of the nesting falcons. I could not.

Dunn Memorial Bridge (Peregrine box underneath on top of the concrete pier)
Dunn Memorial Bridge (Peregrine box underneath on top of the concrete pier)

Unfortunately for us, just north of there is the Livingston Avenue Railroad bridge. This is a swing bridge that’s too low for the Dutch Apple to pass under. Taller boats can pass upstream of it but need to make arrangements in advance with CSX/Amtrak. So from there we turned downriver.

One thing many people are not aware of is that the Hudson River is actually an estuary as far north as north Troy where the Federal Dam is located. This means that there are tides on the Hudson all the way to north Troy. When one crosses over the river one can notice the tides if one is observant or the tide is particularly low and the smell pungent. Saturday, as we headed south, the tide was coming in. Between this and the wind, it actually meant the boat had to make more effort going downriver than upriver!

River in foreground, with the old D&H building in the midground and Corning Tower left of center in the background.
Albany from the Hudson

Another reminder of the importance of the Hudson and the nearby Mohawk, and later Erie Canal was that the Albany/Troy area was once the gateway to the west. Besides the waterways, trains were an important part of this, and one of the major local railroads was the Delaware and Hudson. From the river you have a nice view of the old D&H building which now houses SUNY Albany offices and other offices.

Heading further south, on the eastern bank Fort Crailo was pointed out to us. Again, a Dutch influence, but also home to where Yankee Doodle Dandy was later written down.

Given that the Hudson is a tidal river and Albany is still an important gateway to the west, the Port of Albany is a key part of the local economy. But again, I would suspect most folks who drive across the Hudson aren’t aware of the size and scope of the port. I think most equate it with the area where the Dutch Apple and the USS Slater are docked. Really though that’s not the active part of the Port of Albany. But the following photos show facilities on both sides of the river.

Foreground is the Hudson, with a seawall and then a wide open area for the port of Albany.
Port of Albany with huge mobile cranes

Apparently the Port contains the largest grain elevator east of the Mississippi!

Sloping roof dominates image with storage towers on both sides. Part
Grain Storage at the Port of Albany

As you can see, even ocean going ships come this far north.

Large orange tank, with two tugboats pushing it into position.
A large ocean going tanker
Bulk cargo ship with 3 of 4 cranes in operation, loading scrap
Loading Scrap on the eastern short
Dark and light orange barge with tug headed up stream.
Barge with tug

Not all commercial craft on the Hudson are ocean going. The Mississippi isn’t the only major US river with barge traffic. That said, Hudson river barges are much smaller and as far as I know, are only moved one at a time. It’s hard to tell in this photo, but the barge actually has a small notch in the stern that the tug fits into for pushing. This barge is most likely loaded as its sitting low in the water and being pushed. Once empty, often the tug will move to the front and tow the barge as it will be riding higher in the water and by being in front the tug has better visibility.

But the Hudson is not all business. Folks also have lots of fun.

Powerboat passing us on the Hudson.
Having Fun

Finally after about 50 minutes of sailing, we headed north. Our tour was scheduled for 90 minutes, but because of the incoming tide, we actually headed upstream a bit faster.

Image is of the Hudson, with the Corning tower a speck in the background. Boat ensign in the foreground.
Looking north before we turned around

I’ll brag a bit and say I probably know a bit more about the Hudson and its history and influence than many in the area, but it still really helps to see it close up and realize things like exactly how large and busy he Port really is and to hear more history of it and even see some of the history (like the shore protection put in over a century ago, or some of the older residences on the river, some that are close to 300 years old).

We have a deep history here and its worth getting down to see it. And sometimes one needs to look at something that they see every day from a different perspective.

Close to the Edge

I had initially decided I wasn’t going to say much about Simone Biles’ decision to drop out of my of her Olympic events, but then I realized, when I had started this blog, one of the things I wanted to focus on was how we make decisions and how our brains work at times.

But before I comment on Biles’ choice, I want to delve a bit into what we teach in our cave rescue training. We have a core 3 levels and much of our training involves rigging of ropes, patient packaging, and patient extraction. In other words, all hands on activities that require certain skills and training. A typical weeklong class will have over 80 hours of training. This means by the time a person completes the core levels, they will have spend over 240 hours in training.

But the thing is, many rescues don’t require any of that. I’ve done rescues where there was absolutely no rigging involved. But there is one component that is involved in all rescues, but we spend less than an hour on: psychological considerations. Every rescue involves at least two parties, the person being rescued, and the rescuer. And this means that their mental statuses are involved. Now, I’ll admit in perhaps the vast majority of rescues the mental status of the rescuee or the rescuer aren’t really issues or a problem, but they exist.

I bring this up because of two incidents that come to mind in my caving career, both that involve how our brains work, or more specifically in these cases, my brain. The first involves a body recovery and the second just a simple caving trip.

About 20 years ago we had an unfortunate incident where a local caver became trapped while underwater and drowned. Recovery operations already have a different feel and tempo than rescue operations. There’s generally very little urgency and you have to deal with family members and others who are struggling with the death of a loved one. The mood is far more somber. The death occurred on a Monday night. It wasn’t until Wednesday night that we were able to free Rob. I wasn’t in the cave when he was finally extricated. But the word came out that they needed people to help transport him to the surface. One of the folks in charge, a friend came to me and asked, “Greg, can you do this?” I had to stop and think. I appreciated that she was asking. I knew that “No” would be a perfectly fine answer and she wouldn’t think any less of me. Not everyone is psychologically equipped to deal with a dead body so close up, especially when it’s someone they know. An important part of what went into my decision was making sure I’d be a help to the team and not a burden. I didn’t want to freeze up or otherwise hinder things. I ultimately answered “Yes” because in part, I felt he should be accompanied by someone who knew him on his final journey to the surface and felt confident I wouldn’t slow things down.

The second incident was a simple caving trip. A friend and I were rigging the entrance to a pit known as Cemetery Pit. Our choice of rigging involved wrapping our rope around a large boulder and tying a figure 8 knot in it. Between the two of us we have tied a figure 8 knot 1000s of times. It’s our go-to knot for most things. Yet, because of the way the rope was laying around the rock, the angle of the one of the ropes forming the loop just didn’t look right to me. I was pretty confident I had it right, but when you’re about to rappel 150′ into a cave “pretty confident” really isn’t quite good enough. So I asked my buddy to take a look at it. He had the same reaction as me, “I think that’s right, but I’m not 100% sure. I’ll retie it.” He retied it and his results still didn’t look quite right. We both made a few attempts at it and each one didn’t quite look right. I believe we ended up tying something else that did look right and we had 100% confidence in. In retrospect, I’m suspect we had it right the first time (and subsequent times) but our brains suddenly had a case of the yips, or perhaps the caving version of the twisties

What do these have to do with Simone Biles? Two things: she was a team member who did the right thing, and who suffered from a sudden lack of confidence, or as they call it in gymnastics, the twisties.

I’m going to deal with the twisties first. Now, I haven’t done any gymnastics since grammar school, but I did have an incident once while diving/playing in the water that I suspect was similar. I had jumped off the diving board, probably doing a flip of some sort, and found myself tumbling underwater. This was an experience I normally enjoyed. I love the freedom water gives and twisting and gyrating underwater. But this time was different. When I stopped, I realized I had no idea which way was the surface. There was a moment of panic before I realized I still had enough air in my lungs that if I just waited I’d float to the surface. But I had for a moment lost my complete kinesthetic sense. I have to imagine this is similar what happened to Biles. In my case, the consequences was simply a moment of panic, then a simple wait to rise to the surface. In her case, having seen some of her moves and listening to some of the commentators, I’ve come to realize that in the case of a gymnast, such a loss can result in severe injury. This article illustrates several such examples. Similarly, if we had not been able to tie rigging we felt safe on, we might have aborted our trip because a mistake could be fatal. Sometimes our brains simply get into that state where up is down and left is right and it’s not simple to fix that. So, in that aspect, I think she made the right decision, as has any person caving (or in another activity) who has turned back because they’ve lost confidence in their rigging or skills. Better to be safe and come back another day than be sorry.

In terms of being a member of a team, she also made the right choice. She could have said, “Well I’m the GOAT, I’m going to compete no matter what” but because of her state of mind, probably not performed at her best and pulled back on some of her more extreme moves ( thus reducing her points totals) and very likely not won medals. But, by pulling out, and she opened up spots for other members of the team, such as Mykayla Skinner to step up. In a world where Biles had forced herself to compete, my guess is due to the twisties, she would not have medaled on the vault, and Skinner would have never had the chance to compete, which means the US would not have won Silver in the vault. Sometimes being a team player means stepping aside so others can do the job. In my case of the body recovery, had I not felt comfortable in my ability to carry out my task, I would have rightly stepped aside.

I have to give Simone Biles a lot of credit. The weight of the world, or at least the US was on her shoulders. She was expected to perform at levels that no one else has reached. She also knows that few gymnasts at her level compete late into their 20s. This may be her last Olympics. All the pressure was on her to compete. But had she done so, she risked serious injury and very well may have kept the US from winning as many gymnastic medals as they did. I respected her before, but I have to admit I have even more respect for her now. She really is the GOAT.

SQL Server Scheduled Email Queries

Every once in a while I come across a problem that both surprises me that it exists and that the solution is often trivial. This is one of those. Basically developer at a client wanted to setup a scheduled task that would execute a query and email the results. Everything appeared to work, but the emails never went out. There were no errors that were obvious other than the emails never arrived. Some digging via profiler showed that the SQL Agent user was having permission issues. But basically giving it every permission possible didn’t solve it.

So let me walk you through it. First, let’s create a real simple stored procedure. This assumes you have AdventureWorks2014 installed (yeah, it’s old, but it’s what I had handy).

Use adventureworks2014
GO
Create or Alter Procedure Send_Test_Email
as
exec msdb.dbo.sp_send_dbmail @recipients=’test@example.com’, @body=’This is the body of the email’, @subject=’Test Email w query embedded’,
@query=’select * from adventureworks2014.sales.SalesOrderHeader where subtotal > 150000′;

Now, here’s an important detail I did discover during testing. If my query didn’t actually query a table, but instead was say @query=’select getdate()’ things worked fine.

That said, if you simply execute the query above in SSMS, it should work just fine. (I’d recommend you put your own email in it for testing. This way you’ll know if the email is actually being sent.)

Before you do that, also create the following stored procedure:

Use adventureworks2014
GO
Create or Alter Procedure Send_Test_Email_Query_attached
as
exec msdb.dbo.sp_send_dbmail @recipients=’test@example.com’, @body=’This is the body of the email’, @subject=’Test Email w query embedded’,
@query=’select * from adventureworks2014.sales.SalesOrderHeader where subtotal > 150000′,
@attach_query_result_as_file = 1,
@query_result_no_padding = 1,
@query_attachment_filename = ‘Sales Report.csv’,
@query_result_separator = ‘;’,
@exclude_query_output = 1,
@append_query_error = 0,
@query_result_header = 0

This will execute the same query as the original stored procedure, but place the contents in a CSV file as an attachment.

Again, if you execute the above directly from SSMS, you should receive the email without an issue. This is basically what the client was attempting to do.

Now create the following job:

USE [msdb]
GO

/ Object: Job [Send AdventureWorks Email] Script Date: 7/27/2021 9:12:49 AM / BEGIN TRANSACTION DECLARE @ReturnCode INT SELECT @ReturnCode = 0 / Object: JobCategory [[Uncategorized (Local)]] Script Date: 7/27/2021 9:12:49 AM /
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]’ AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N’JOB’, @type=N’LOCAL’, @name=N'[Uncategorized (Local)]’
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N’Send AdventureWorks Email’,
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N’No description available.’,
@category_name=N'[Uncategorized (Local)]’,
@owner_login_name=N’sa’, @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/ Object: Step [Send email] Script Date: 7/27/2021 9:12:50 AM /
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N’Send email’,
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N’TSQL’,
@command=N’exec Send_test_email_Query_attached’,
@database_name=N’adventureworks2014′,
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)’
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

If you execute this job as is, you should see the following:

Success! Or is it?

But you will never get the email!

Modify the above job and replace the line:

@command=N’exec Send_test_email_Query_attached’,

with

@command=N’exec Send_test_email’,

Now if you run the job, it will fail!

This time it clearly failed!

But as is usual with sp_send_dbmail, the error message isn’t overly helpful:

Executed as user: NT AUTHORITY\SYSTEM. Failed to initialize sqlcmd library with error number -2147467259. [SQLSTATE 42000] (Error 22050). The step failed.

But it does help give a clue. The problem seems to be some sort of permissions issue. So I’ll admit, at this point I tried all sorts of solutions, including setting up a proxy user, giving unfettered rights to my SQL Agent user and other things (thinking once I got it working I could then lock things back down). Instead, I found a much easier solution buried in a thread on the Microsoft site.

You’ll note when I wrote the original stored procedure I fully qualified the table name. This is often generally useful, but here I did it because I was cheating and knew I’d need it for this demo.

The solution is actually VERY simple and I’ll show it both graphically and via a script.

First: change the database to MSDB and then fully qualify your call to the stored procedure as below:

Execute it from the MSDB database

However, there’s one more critical step: under the ADVANCED tab in the step change the Run As User to dbo:

Seems simple, but it’s critical

Now if you script out the scheduled task it should look like:

USE [msdb]
GO

/ Object: Job [Send AdventureWorks Email] Script Date: 7/27/2021 9:26:37 AM /
EXEC msdb.dbo.sp_delete_job @job_id=N’08a55e18-eecf-4d4c-8197-8135a0d7520b’, @delete_unused_schedule=1
GO

/ Object: Job [Send AdventureWorks Email] Script Date: 7/27/2021 9:26:37 AM / BEGIN TRANSACTION DECLARE @ReturnCode INT SELECT @ReturnCode = 0 / Object: JobCategory [[Uncategorized (Local)]] Script Date: 7/27/2021 9:26:37 AM /
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]’ AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N’JOB’, @type=N’LOCAL’, @name=N'[Uncategorized (Local)]’
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N’Send AdventureWorks Email’,
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N’No description available.’,
@category_name=N'[Uncategorized (Local)]’,
@owner_login_name=N’sa’, @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/ Object: Step [Send email] Script Date: 7/27/2021 9:26:37 AM /
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N’Send email’,
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N’TSQL’,
@command=N’exec adventureworks2014.dbo.Send_Test_Email_Query_attached’,
@database_name=N’msdb’,
@database_user_name=N’dbo’,
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)’
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

If you then execute THIS scheduled task you’ll get both a success message:

And you should actually receive the email with the query results attached.

So, basically an issue that surprised me that it even existed, actually ended up with a fairly simple solution.

#YesAllMen

For over two years I’ve been wanting to put together a speaking topic using the above as a title or as a subtitle. The reason is because the alternative, #NotAllMen is NOT a good thing to use.

Yesterday I came across an article that said it better than I could. I would recommend you read it first: Buzzfeed Article.

It brings up several great points, including ones I had not given much thought to. Look, I know when a friend of yours is upset that a guy just made a pass at her in a professional setting, one of your first instincts is to think “I’d never do that” and are tempted to say “#notallmen” you’re not being helpful. In fact, you’ve just made it about yourself. Just don’t. That’s not what is needed.

Look, I’m pretty confident that all my male readers are pretty decent guys. I work with many of you professionally, some of you in volunteer positions, some are simply friends, and some readers, I suspect I don’t know, but you’re probably ok too. None of you are outright sexist or racist. If you were, I wouldn’t be associating with you. But all of us are still a product of our environments. We make the off-handed comment without thinking about it. Or someone around us makes a comment and we don’t react. This is also why I suggest when it comes to calling yourself an ally, just don’t.

Several years ago I helped organize and then participated in a Women in Tech panel for our local SQL Server User Group. I was the only man on the panel and expected to be asked what was the best thing I thought we, as men could do. The answer was of course somewhat ironic: “Sit down and shut up.” I of course expanded upon this. No, we can’t nor should we ever completely shut up. That wasn’t my point of course. My point was to make sure not to center the discussion about us. When a friend complains about a sexist incident, replying #NotAllMen is doing just that. Centering the discussion on us. Sorry, that’s a time to shut up and listen.

But when others make sexist comments, that’s a time when it may be appropriate to say something. And if someone calls you out, take it in stride. We make mistakes. And if someone takes you aside and says something (I’ve now heard that called a “call-in”) thank them. It means they think well enough of you to help you be a better person.

At the end of the day guys, we’re all still part of the problem, even when we do our best. That doesn’t make us evil. It simply means we have space to grow into. Let’s do that. Let’s grow.

… Other Duties as Assigned

I’ve mentioned once before that at one of my clients I describe my job as “DBA and other duties as assigned.”

This phrase has really been on my mind this week, especially during a phone call with another client yesterday. This second client is a local consulting company that has hired me a few times to back them with my skills in SQL Server and MS Access. This time around the work they’re looking for is definitely SQL Server related. It was refreshing.

But it reminded me of my last two weeks with two of my other clients. One is having an issue with their app (that they always call “the database”) that is most likely a design issue that I need to dig into. This is a perfect example of what I call “software archeology” where I at times have to shift through “pot shards” to determine what the original developer was thinking. At times it can be fun and interesting, at other times, frustrating. I’ll be shifting through more pot shards in the near future to get to the bottom of this problem.

For my largest client, I spent most of my hours with them last week trying to true up a file with some financial data in it. In this case it’s part of an ETL process where I receive data, compile it and send it to a vendor. The process uses a combination of PowerShell and Pentaho. So while they interact with the database, the work I was doing wasn’t in T-SQL or directly on the database server.

The numbers weren’t adding up. There was an undercurrent of “Greg, your numbers are wrong” or “You’re filtering on the wrong criteria.” I kept pointing out that “I simply add up the numbers you give me.” Eventually the problem was narrowed down to the fact that in the source system, which is the system of record, they had deleted rows. Arguably, one should never be deleting rows in such a system, but rather issuing a 2nd row (a credit if you want to reverse a debit, or a debit to reverse a credit) and this was typically what was done. But in this case the maintainers of the source of record decided to wholesale delete these rows. I explained that from day one, since deletions are never supposed to happen (and given the way the system works, extremely hard to detect) all I do is either insert new rows, or update existing rows. In any event, with one minor schema change, some updates to the rows in question and an updated PowerShell script, I was able to make the numbers come out to match with theirs. So, is that really DBA work? Not in the traditional sense. But it’s definitely other duties as assigned.

Now that’s not to say I didn’t do what some might consider actual DBA work. On Saturday morning I patched one of their servers. And at one point during the week, I deployed a script to production. So, out of 18 hours of work for the customer last week, I think I can say maybe 1-2 total was “dba work” or about 5%.

Now, I want to be clear. This is not a rant or a complaint. I’ll admit I tend to prefer to work directly with SQL Server, but I was reminded of a quick discussion I had with a fellow DBA over the weekend about how they probably needed to start to learn PowerShell for their job.

I’ve been arguing for years that the role of a DBA has changed, and will continue to change dramatically over the next few years. Once where we might spend days head down slinging T-SQL code, setting up backups and restores, tuning indices, etc. now much of that is automated or at least far easier to do. Which is a good thing. In years past, a DBA might be responsible for a dozen machines or so at the most. If it was more than that, we’d feel sorry for them. That’s no longer uniformly true. I know a DBA who is responsible for over 100 machines. They’re the soul DBA. But, through PowerShell and other modern tools, it’s generally not an overwhelming job.

However, like the online presentation from the Atlanta Azure Data User Group I attended last night on SQL Database Edge, there is a growing list of things DBAs need to learn. Steve Jones recently posted about whether DBAs need to learn Linux? The short take away is not necessarily, but it’s probably a good idea, but we definitely need to learn about containers.

I have heard for years, “Microsoft will automate everything and the DBA’s job will go away.” Not only is that not true in my experience, the exact opposite is. I think being a successful DBA is in some ways harder than it was a decade ago. There’s so much more to be aware of and to learn.

Off the top of my head, without any real priority I came up with the list below of technologies that a modern DBA might find useful to know. This is not to say I know them all, or that one has to be an expert in all of them. And I will note, this is far from an inclusive list. I also left out third-party tools which are so common place. But I think it illustrates just how broad the required skillset of a good DBA is these days.

  • T-SQL
  • PowerShell
  • Query Store
  • Linux – at least at the most basic level
  • Containers
  • SSIS
  • SSAS
  • SSRS
  • Storage – (at least how different types can impact performance and the advantages and disadvantages of each)
  • Azure
  • SQL Database Edge
  • git or some form of version control

In conclusion, I’ll say, I’m not going to make any predictions about where the Microsoft data platform will be a decade from now, but I can tell you that DBAs will still be needed but their skillset will be as different from today as today is from a decade ago.

And post conclusion, I’ll add I’ll continue to rely on #sqlfamily and all my fellow DBAs to help me out. And continue to help them.