The Daily Parker

Politics, Weather, Photography, and the Dog

Who could have predicted this?

As professional narcissist Elon Musk threatened, on Thursday Twitter abruptly ended their verified "blue check" program. Suddenly, Twitter users had no way to know for sure whether tens of thousands of government agencies, celebrities, journalists, and other people whose jobs depend to some extent on their credibility, were who their Twitter accounts purported to be.

It only took two days for someone to hoax the City of Chicago:

Impostors posing as Chicago government officials, including Mayor Lori Lightfoot, posted a series of tweets early Friday morning falsely claiming that North Jean Baptiste Point DuSable Lake Shore Drive is being permanently closed.

The accounts posting the false tweets claimed to be Lightfoot, the Chicago Department of Transportation and the Illinois Department of Transportation. Their posts were seen by well over 100,000 people early in the day, according to Twitter data.

The impersonation effort came just a day after Twitter removed verification from accounts that had been previously verified for the purpose of credibility. Twitter CEO Elon Musk’s controversial decision to remove the “legacy” verifications took away the authenticated status of all three of the impersonated accounts.

Before Friday, the usernames of the true mayoral account, CDOT account and IDOT account had all previously appeared alongside a blue check mark signaling that the accounts had been proved to actually represent the authorities they claimed to represent. However, those check marks were taken away Thursday because of Musk’s decision.

New York City's government also had their own problem.

But this highlights a real problem: in a disaster, or an election, how will people know what information is real? I think "by not using Twitter" seems like the right answer but I also don't think Twitter will fully die by next November.

I didn't publish on Twitter very much before. Today, I'm just standing on shore, watching the ship sink. But it's a big ship, and its sinking will foul the environment for a long time.

Ambivalent about self-identity

Emma Camp, an assistant editor at Reason, initially found an autism diagnosis comforting, but now has second thoughts:

In many online circles — particularly those frequented by young, white, middle-class women like me — certain diagnoses are treated like a zodiac sign or Myers-Briggs type. Once they were primarily serious medical conditions, perhaps ones of which to be ashamed. Now, absent social stigma, mental health status functions as yet another category in our ever-expanding identity politics, transforming what it means to have a psychological or neurological disorder for a generation of young people, though not entirely for the better.

I was first diagnosed with autism at age 20, shortly after my sophomore year of college. After my costly evaluation, I was relieved. Knowing I had autism gave me the permission I needed to accept my quirks and insecurities.

The condition quickly became a core part of my identity.

Under the kind of identity politics most frequently found on left-wing internet circles, immutable identity characteristics like race, gender and sexual orientation are a person’s most important features, giving those in certain historically disfavored groups special authority to comment on issues affecting their community. There’s a constant throat-clearing among many left-leaning young people — “as a queer person,” “as a woman of color”— phrases used to assert epistemic authority or dodge accusations of wrongthink. I myself have started many a sentence with “as an autistic person” to pre-empt criticism.

But mental health diagnoses, along with most other categories up for examination under our identity politics, are accidents of birth. To make them central features of our identities is to focus on the things we can’t control ourselves — an approach that is ultimately disempowering.

Her whole essay is worth a read.

Stuff I may come back to later

First, because it's April 20th, we have a a couple of stories about marijuana:

(The Daily Parker owns shares in Chicago-based Green Thumb Industries.)

Second, because it's the 21st Century, we have a collection of articles about the end of democracy:

And in me. I've got software to write.

Rails to trails

Freelance writer John Carpenter (a "husky man of 60, with the approximate flexibility of a rusty old tractor") explores some of the abandoned railroads that now have bike paths on them in the Chicago area:

Chicago is teeming with them — rail trails, I mean. Once extolled by the poet Carl Sandburg as the “player with railroads and the nation’s freight handler,” it remains a national railroad hub. That means there are bike paths along existing lines, like the Green Bay Trail beside Metra’s North Line, and trails along the roadbed of long-abandoned lines, like the west suburban Illinois Prairie Path and the city’s Bloomingdale Trail, also known as The 606.

Chicago is also home to a stretch of the Great American Rail Trail, a 6,000-km bike path from coast to coast that passes through northwest Indiana and the south suburbs. Though supported by the national Rails to Trails Conservancy, it is really a network of more than 125 locally backed trails that is still filling out some gaps in the run from Washington, D.C., to the Pacific Ocean west of Seattle. I did a relatively short stretch in Indiana, and it left me wanting to ride more.

The magic of rail trails is rooted in the laws of physics. Massively heavy freight and passenger trains simply cannot handle steep grades up and down. That’s why tracks are built up on bridges and artificial berms in some places, and carved into the land in others, leveling out elevation changes to allow trains to move up and down at a gentle rate.

The result is that riders can easily get into a comfortable cruise. One can maintain a pleasant speed with a steady churn in the higher gears, pushing hard enough to get the heart beating, without the extreme strains of steep uphill slogs. There is also the satisfaction of feeling the miles click away.

He identifies the North Shore trail as "along" a right-of-way, but in fact it covers the old North Shore Line, abandoned in 1964. I used to ride that trail a lot when I was a kid. These days, I sometimes walk a long stretch of it.

Time for a transit tech update?

WBEZ reporter Michael Gerstein went out to the IKEA in Schaumburg, Ill., to test our transit system and its navigation apps. It went fine, but Gerstein had an unusual experience:

Major construction projects have snarled the Kennedy Expressway and the Blue Line’s weekend service, so my editor sent me on a 29-mile odyssey to Schaumburg. The idea was to test how Chicago’s regional transit agencies (CTA, PACE, Metra) work with each other and how many apps, trackers and planning devices I’d need to use to get there.

We were trying to see firsthand how accurate the region’s tracking technology is and why apps often promise buses and trains that don’t show up when they’re supposed to. All this comes at a time when public officials are encouraging more drivers to take public transit to and from downtown.

My two-hour sojourn to IKEA was unremarkable and pretty much on time (barring some initial inaccurate estimates from every app I tried except the city’s Ventra app). Still, other riders have experienced inaccuracies with trackers, and it’s hard to get to the bottom of why. In a recent WBEZ survey of nearly 2,000 CTA riders, about 9 in 10 survey takers said they’d experienced a delay taking a bus or train in the past 30 days.

Chicago, which used to be a leader in transit technology, now has some catching up to do with the broader tech world. “Our train and bus tracker were among the first tools of its time among any U.S. transit agency,” Brian Steele, CTA’s chief spokesman, said in an interview. But predictive algorithms have evolved, Steele acknowledged, and Chicago needs an upgrade that would give it the ability to automatically update the position of a bus that goes off a route or a train that falls behind.

Real-time information is only available after a train or bus leaves the terminal – and only if that bus or train is on its scheduled route, Steele said.

I also learned that I really don’t like being in IKEA. Some people prefer navigating a maze-like furniture store where you can’t find anything, that’s about 5 degrees too warm, and where every aisle and bathroom stall is packed.

I do like living 400 meters from the Metra station that takes me to downtown Chicago in 14 minutes, though. From dropping Cassie at doggy day care to sitting at my desk, my commute usually takes about 30-35 minutes. I would not take any job that had me drive out to the suburbs again, unless they paid me for travel time.

Clear, cool April morning

The clouds have moved off to the east, so it's a bit warmer and a lot sunnier than yesterday. I still have to wait for an automated build to run. For some reason (which I will have to track down after lunch), our CI builds have gone from 22 minutes to 37. Somewhere in the 90 kB of logs I'll find out why.

Meanwhile, happy Fox News On Trial Day:

Finally, I've started reading The Odyssey, so I applaud National Geographic's article this month on the history of the ancient world in which Homer set the poem.

Today is April Februaryth

As happens about every other year, we woke up this morning to barely-above-freezing temperatures and this crap on the ground:

After record warmth last week, April decided to balance the scales yesterday:

All of the snow will melt in the next 24 hours as tomorrow's forecast calls for 11°C and sun, going up to 22°C by Thursday, but not before we get "scattered rain and snow showers" all day with winds up to 45 km/h. But then it goes back down to 2°C by Saturday...because April.

And hey, a bug

Not five minutes after my last post, I discovered a completely borked feature, caused by a change to the way Azure.Data.Tables executes queries.

The Daily Temperatures feature stores data in the same table as the History feature. Each row represents a weather report, where the table partition key is the weather station identifier and the row key is the date and time of the report. So, for example, the first row of data for Chicago-O'Hare in the 2023 table has a partition key of KORD and a row key of 20230101-0051.

Climate records use a row key of "Climate-" and the date. So yesterday's climate data for Chicago-O'Hare has a partition key of KORD and a row key of "Climate-20230415". Easy to remember, and easy to construct queries.

To that end, the original (.NET 6) code looked like this:

var query = 
	from entity in table.CreateQuery<ClimateRecordTableServiceEntity>()
	where entity.PartitionKey == locationId
		&& string.Compare(entity.RowKey, lowerRowKey, StringComparison.InvariantCultureIgnoreCase) >= 0
		&& string.Compare(entity.RowKey, upperRowKey, StringComparison.InvariantCultureIgnoreCase) <= 0
	select entity;

When I upgraded to .NET 7, I naïvely just changed the first line, to this:

var query = 
	from entity in table.Query<ClimateRecordTableServiceEntity>()
	where entity.PartitionKey == locationId
		&& string.Compare(entity.RowKey, lowerRowKey, StringComparison.InvariantCultureIgnoreCase) >= 0
		&& string.Compare(entity.RowKey, upperRowKey, StringComparison.InvariantCultureIgnoreCase) <= 0
	select entity;

When confronted with a 30-day query, though, it spun off into the abyss and crashed the whole app.

The correct code looks like this:

var query = table.QueryAsync<ClimateRecordTableServiceEntity>(entity =>
	entity.PartitionKey == locationId
		&& string.Compare(entity.RowKey, lowerRowKey, StringComparison.InvariantCultureIgnoreCase) >= 0
		&& string.Compare(entity.RowKey, upperRowKey, StringComparison.InvariantCultureIgnoreCase) <= 0);

See, now the filter part of the query goes inside the method call. (There's an extra step in reading the async results back, too.)

So the effect of the naïve fix was to hit the table 30 times getting back the entire partition each time. Remember that all of the weather reports go into the table? So, yeah, the 2023 table already has something like 7.5 million rows, or about 2,500 in each partition. So it tried to read 75,000 rows just to bring back 30. Oopsi.

I'm deploying the fix now.

New Weather Now build

It took a few weeks at odd hours, but I have finally deployed the latest version of Weather Now (5.0.8507). I didn't update anything visual, but all the plumbing got a refresh. It's now running in .NET 7 (until November, when .NET 8 comes out), and I did a top-to-bottom review of its asynchronous code.

The app now runs noticeably faster, and I believe the corrections to the async bits will cure the nagging (but invisible) problem of thread exhaustion that happened from time to time.

Now I can start making some other fixes and adding some long-missing features. Really, I just needed to get back into the swing of it.