The Daily Parker

Politics, Weather, Photography, and the Dog

Heading for another boring deployment

Today my real job wraps up Sprint 109, an unexciting milestone that I hope has an unexciting deployment. I think in 109 sprints we've only had 3 or 4 exciting deployments, not counting the first production deployment, which always terrifies the dev team and always reminds them of what they left out of the Runbook.

The staging pipelines have already started churning, and if they uncover anything, the Dev pipelines might also run, so I've lined up a collection of stories from the last 24 hours to keep me calm (ah, ha ha, ha):

  • James Fallows, himself a former speechwriter for President Jimmy Carter, digs into President Biden's commencement address yesterday at Morehouse College, saying: "It showed care in craftsmanship and construction. Its phrasing matched Biden’s own style and diction. It navigated the political difficulties of the moment. And it represented Biden’s attempt to place those difficulties in a larger perspective."
  • Economist Paul Krugman explains the insignificance (to most people's lives) of the Dow Jones Industrial Average closing above 40,000 last week, and how the news nicely illustrates "he gap between what we know about the actual state of our economy and the way [the XPOTUS] and his allies describe it."
  • Speaking of the stock market, Ivan Boesky, one of the greediest people ever to walk the earth, died last week at the age of 87.
  • Speaking of economics, Bill McBride takes us through the history of paying off the national debt, or increasing it as tends to happen under Republican presidents. He lists 8 events from 2000 to 2021 that significantly increased it, only two of which Democratic administrations oversaw.
  • Speaking of debt, Crain's scoops up the Oberweis Dairy bankruptcy case, and how it appears that a failson (actually a failgrandson in this case) killed it, as sometimes happens with inherited wealth.
  • Speaking of things falling abruptly, a Singapore Airlines B777-312ER encountered severe turbulence over the Andaman Sea near Bangkok yesterday, and a 73-year-old British passenger died of what appears to be heart failure. Other passengers and crew suffered head injuries. This is why you need to keep your seatbelt on at all times in an airplane.

Finally, Block Club Chicago readers have sent in cicada photos from the south and west sides of the area. Still none in my neighborhood, though a colleague in Wilmette said she saw a couple yesterday. I want to see the bugs!

Gross weather day

Looking out my 30th-floor office window this afternoon doesn't cheer me. It's gray and snowy, but too warm for accumulation, so it just felt like rain when I sprinted across the street to get my burrito bowl for lunch.

I do have a boring deployment coming up in about an hour, requiring only that I show the business what we've built and then click "Run pipeline" twice. As a reward for getting ahead on development, I have time to read some of these absolutely horrifying news stories:

Finally, Cranky Flier examines American Airlines' European operations and singles out its heavy dependence on Heathrow as a key reason why its fares trans-Atlantic are lower than other US carriers. Since I am using one of those really low fares to visit Germany next month, I'm OK with American keeping their fares low.

Azure DevOps gotcha upgrading to .NET 5

Also known as: read all error messages carefully.

I've just spent about 90 minutes debugging an Azure DevOps pipeline after upgrading from .NET Core 3.1 to .NET 5 RC2. Everything compiled OK, all tests ran locally, but the Test step of my pipeline failed with this error message:

##[error]Unable to find D:\a\1\s\ProjectName.Tests\bin\Debug\net5.0\ref\ProjectName.Tests.deps.json.
Make sure test project has a nuget reference of package "Microsoft.NET.Test.Sdk".

The test step had this Test Files configuration:

**\bin\$(BuildConfiguration)\**\*Tests.dll
!**\*TestAdapter.dll
!**\obj\**

I'll save you all the steps I went through to determine that the .NET 5 build step only copied .dlls into the ref folder, without copying anything else (like the dependencies definition file). The solution turned out to be adding one line to the configuration:

**\bin\$(BuildConfiguration)\**\*Tests.dll
!**\ref\**
!**\*TestAdapter.dll
!**\obj\**

Excluding the ref folder fixed it. And I hope this post saves someone else 90 minutes of debugging.

Simple Azure management using CloudMonix

We've been using CloudMonix for a while to manage and monitor our Microsoft Azure assets. By "we" I mean both Inner Drive Technology (home of The Daily Parker) and Holden (my day job).

CloudMonix recently added a new feature that automates virtual machine (VM) management. See, Microsoft charges for VMs by the hour. So if you have a VM that is only used at specific times, you're wasting money by having it run all the time.

A great example: Our continuous integration (CI) server, which builds and tests our (Holden's) applications every time a developer publishes a change to our master Git repository. Typically no one is making changes outside of business hours. So most of the time, the CI server just sits there, doing nothing.

Last week I configured CloudMonix to shut down our CI server every night at 6pm and wake it up at 7am the next morning. I only made two minor errors.

First, shutting down a VM in Azure makes its IP address evaporate, which screwed up some of the tests that connect to Salesforce. Second, the CI server runs a weekly build and smoke test early Monday morning, so we know first thing that the build is OK for the week. It was running at 4:15; I had to move it to 7:15. And all is good.