The Daily Parker

Politics, Weather, Photography, and the Dog

The busy season

I've spent today alternately upgrading my code base for my real job to .NET 6.0, and preparing for the Apollo Chorus performances of Händel's Messiah on December 11th and 12th.

Cassie, for her part, enjoys when I work from home, even if we haven't spent a lot of time outside today because (a) I've had a lot to do and (b) it rained from 11am to just about now.

So, as I wait for the .NET 6 update to build and deploy on our dev/test CI/CD instance (I think I set the new environments on our app services correctly), I have a few things to read:

OK, the build has...well, crap. I didn't set the environment correctly after all.

Update: Fixed the build bit. And the rain stopped. But the test platform is the wrong version. FFS.

Update: Well, I have to pick something up from a store before 6, so I'll come back to this task later.

Update: Even though I've had 4 tiny commits of minor things that broke with the .NET 6 upgrade, this hasn't gone poorly. Kudos to Microsoft for providing a straightforward upgrade path.

Slouching towards fascism

The software release yesterday that I thought might be exciting turned out to be fairly boring, which was a relief. Today I'm looking through an ancient data set of emails sent to and from some white-collar criminals, which is annoying only because there are millions and I have to write some parsing tools for them.

So while I'm decompressing the data set, I'll amuse myself with these articles, from least to most frightening:

Whee! WinZip has finished decompressing all 517,000 files. Now to write a parser...

I'm going to beat this code, dammit

It's 22:20 on the last day of my sprint, and I have finally completed the refactoring project I started at the beginning of the sprint. And...bing! "Azure DevOps [Build Succeeded]" email. Whew!

Tomorrow we'll have a boring release of last sprint's code, since it has sat quietly in our Production Build pipeline just waiting for me to push it to the Production Deploy pipeline for two weeks.

Sometimes this happens. Both the (delayed) release tomorrow and the refactoring this sprint solve two major problems that prevented us from moving forward on development. But wow, until I cracked the nut on this code, it was not easy.

Stupid request limits

I had to pause the really tricky refactoring I worked on yesterday because we discovered a new performance issue that obscured an old throttling issue. It took me most of the morning to find the performance bottleneck, but after removing it a process went from 270 seconds to 80. Then I started looking into getting the 80 down to, say, 0.8, and discovered that because we're using an API limit with a request limit (180 requests in 15 minutes), I put in a 5-second delay between requests.

Sigh.

So now I've got all this to read...someday:

Finally, the economics of workers vs employers has taken an odd turn as job applicants have started simply ghosting interviewers. But, as Slate says, "employers have been doing this to workers for years, and their hand-wringing didn’t start until the tables were turned."

Busy day, time to read the news

Oh boy:

Cassie has bugged me for the last hour, even though we went out two hours ago. I assume she wants dinner. I will take care of that presently.

Yes, software is an ongoing F-up

Remy Porter, owner of the hilarious blog The Daily WTF, responded to Facebook's catastrophic BGP update by pointing out how software actually gets made:

IT in general, and software in specific, is a rather bizarre field in terms of how skills work. If, for example, you wanted to get good at basketball, you might practice free-throws. As you practice, you'd expect the number of free-throws you make to gradually increase. It'll never be 100%, but the error rate will decline, the success rate will increase. Big-name players can expect a 90% success rate, and on average a professional player can expect about an 80% success rate, at least according to this article. I don't actually know anything about basketball.

But my ignorance aside, I want you to imagine writing a non-trivial block of code and having it compile, run, and pass its tests on the first try. Now, imagine doing that 80% of the time.

It's a joke in our industry, right? It's a joke that's so overplayed that perhaps it should join "It's hard to exit VIM" in the bin of jokes that needs a break. But why is this experience so universal? Why do we have a moment of panic when our code just works the first time, and we wonder what we screwed up?

It's because we already know the truth of software development: effing up is actually your job.

You absolutely don't get a choice. Effing up is your job. You're going to watch your program crash. You're going to make a simple change and watch all the tests go from green to red. That semicolon you forgot is going to break the build. And you will stare at one line of code for six hours, silently screaming, WHY DON'T YOU WORK?

Yep. And still, we do it every day.

Facebook is as Facebook does

Josh Marshall points out that the harm Facebook causes comes from its basic design, making a quick fix impossible:

First, set aside all morality. Let’s say we have a 16 year old girl who’s been doing searches about average weights, whether boys care if a girl is overweight and maybe some diets. She’s also spent some time on a site called AmIFat.com. Now I set you this task. You’re on the other side of the Facebook screen and I want you to get her to click on as many things as possible and spend as much time clicking or reading as possible. Are you going to show her movie reviews? Funny cat videos? Homework tips? Of course, not. If you’re really trying to grab her attention you’re going to show her content about really thin girls, how their thinness has gotten them the attention of boys who turn out to really love them, and more diets. If you’re clever you probably wouldn’t start with content that’s going to make this 16 year old feel super bad about herself because that might just get her to log off. You’ll inspire or provoke enough negative feelings to get clicks and engagement without going too far.

This is what artificial intelligence and machine learning are. Facebook is a series of algorithms and goals aimed at maximizing engagement with Facebook. That’s why it’s worth hundreds of billions of dollars. It has a vast army of computer scientists and programmers whose job it is to make that machine more efficient. The truth is we’re all teen girls and boys about some topic. Maybe the subject isn’t tied as much to depression or self-destructive behavior. Maybe you don’t have the same amount of social anxiety or depressive thoughts in the mix. But the Facebook engine is designed to scope you out, take a psychographic profile of who you are and then use its data compiled from literally billions of humans to serve you content designed to maximize your engagement with Facebook.

Put in those terms, you barely have a chance.

He goes on to draw a comparison between Facebook's executives and Big Tobacco's, circa 1975:

At a certain point you realize: our product is bad. If used as intended it causes lung cancer, heart disease and various other ailments in a high proportion of the people who use the product. And our business model is based on the fact that the product is chemically addictive. Our product is getting people addicted to tobacco so that they no longer really have a choice over whether to buy it. And then a high proportion of them will die because we’ve succeeded.

So what to do? The decision of all the companies, if not all individuals, was just to lie. What else are you going to do? Say we’re closing down our multi-billion dollar company because our product shouldn’t exist?

You can add filters and claim you’re not marketing to kids. But really you’re only ramping back the vast social harm marginally at best. That’s the product. It is what it is.

Yesterday's 6-hour reprieve from Facebook seems to have hurt almost no one. The jokes started right away, about how anti-vaxxers could no longer "do research" and how people have started reading again. I didn't even notice until I read that it had gone offline, because I had too much work to do. So maybe that's what regulators should do: limit the company to 8 hours a day or something. What a thought...

Beautiful autumn morning

I've opened nearly every window in my house to let in the 15°C breeze and really experience the first real fall morning in a while. Chicago will get above-normal temperatures for the next 10 days or so, but in the beginning of October that means highs in the mid-20s and lows in the mid-teens. Even Cassie likes the change.

Since I plan to spend nearly every moment of daylight outside for the rest of this weekend, I want to note a few things to read this evening when I come back inside:

Finally, if you really want to dig into some cool stuff in C# 10, Scott Hanselman explains implicit namespace support.

Bug report: Garmin Venu - Usability - High severity

Summary: When displaying a notification over a paused activity, swiping down will delete the paused activity instead of the notification, without an Undo feature.

SeverityHigh (accidental but irrevocable data loss)

Steps to reproduce:

  1. Take a PTO day to enjoy a 7-hour outdoor exercise.
  2. Start the exercise on the Garmin Venu device.
  3. Spend 82 minutes in the exercise.
  4. Press Button A on the Venu to pause the activity. The activity will show as Paused, with a Discard (X) indication on the top of the display and a Save (check) indication on the bottom.
  5. Have a friend innocently text you about a nonessential matter. A notification shows up on the Venu display.
  6. As you have done thousands of times before, swipe down to dismiss the notification. The activity is deleted, but the notification just stays there, mocking you.
  7. Stare at the device for a moment in stunned silence.
  8. Frantically swipe up on the device to try to undo the deletion. Nothing happens because there is no Undo feature for this action.
  9. (Omitted)
  10. (Omitted again, but this time with reference to the usability engineers at Garmin who apparently forgot the rule that inadvertent data loss must never happen.)
  11. (Omitted once more, but this time with reference to said engineers' standardized test scores, parentage, and general usefulness to humanity.)
  12. Begin drafting a strongly-worded bug report to share with the above-mentioned Garmin usability engineers.
  13. Spend the next five and a half hours trying to calculate split times without knowing for sure that the first activity was 82 minutes, not 75 or 90.

Device details: Garmin Venu, SW version 6.30, API version 3.2.6

Welcome to autumn

The first day of autumn has brought us lovely cool weather with even lovelier cool dewpoints. We expect similar weather through the weekend. I hope so; Friday I plan another marathon walk, and Saturday I'm throwing a small party.

Meanwhile, we have a major deliverable tomorrow at my real job, and Cassie has a routine vet check-up this afternoon. But with this weather, I'm extra happy that I moved my office to the sunroom.