The Daily Parker

Politics, Weather, Photography, and the Dog

Lunchtime links

We've just completed Sprint 50 at my day job, which included upgrading our codebase to .NET 6 and adding a much-desired feature to our administration tools. Plus, we wrote code to analyze 500,000 emails from a public dataset for stress testing one of our product's features. Not bad for a six-day sprint.

The sun is out, and while I don't hear a lot of birds singing, I do see a lot of squirrels gathering walnuts from the tree across the street. It's also an unseasonably warm 7°C at Inner Drive Technology World Headquarters, going up to 10°C today and 12°C by Thursday. So Cassie and I will head to the dog park in just a few minutes.

First, though, just a couple things of note:

And with that, Cassie has some running around to do.

Productive day so far

Having a day off with no real responsibilities gives me the space to take care of some niggling projects I've put off for a while. First, I finished updating a document for the Apollo Chorus that lists every sit and stand cue and every score marking for our Messiah performances. That took about 8 hours altogether.

I also updated my main NuGet packages to .NET 6. As a nice bonus, because of a quirk in how .NET assemblies get versioned, today's release is version 4.2.8000. (I kept the previous release active just in case someone needs it for an existing .NET 5 project.)

Oh, and I've got a pot of stew going that should finish in about an hour. I made a lot of it. I hope it freezes all right. Good thing I have tons of Mason jars. It looked like this at 3½ hours:

Short-term license agreements

Today is the 50th anniversary of DB Cooper jumping out of a hijacked airplane into the wilds of Washington State. It's also the day I will try to get a Covid-19 booster shot, since I have nothing scheduled for tomorrow that I'd have to cancel if I wind up sleeping all day while my immune system tries to beat the crap out of some spike proteins in my arm.

Meanwhile, for reasons passing understanding (at least if you have a good grasp of economics), President Biden's approval ratings have declined even though last week had fewer new unemployment claims than any week in my lifetime. (He's still more popular than the last guy, though.)

In other news:

Any moment now, my third DevOps build in the last hour will complete. I've had to run all three builds with full tests because I don't always write perfect code the first time. But this is exactly why I have a DevOps build pipeline with lots of tests.

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...