The Daily Parker

Politics, Weather, Photography, and the Dog

Twenty Five Years

The Daily Parker began as a joke-of-the-day engine at the newly-established braverman.org on 13 May 1998. This will be my 8,907th post since 1998 and my 8,710th since 13 November 2005. And according to a quick SQL Server query I just ran, The Daily Parker contains 15,043,497 bytes of text and HTML.

A large portion of posts just curate the news and opinions that I've read during the day. But sometimes I actually employ thought and creativity, as in these favorites from the past 25 years:

Also interesting is how I can chart key events in my life just by looking at how often I posted:

Right now, I'm predicting the 10,000th post on 5 August 2025. Keep reading and find out.

Beautiful morning in Chicago

We finally have a real May-appropriate day in Chicago, with a breezy 26°C under clear skies (but 23°C closer to the Lake, where I live). Over to my right, my work computer—a 2017-era Lenovo laptop I desperately want to fling onto the railroad tracks—has had some struggles with the UI redesign I just completed, giving me a dose of frustration but also time to line up some lunchtime reading:

Finally, today marks the 30th anniversary of Aimee Mann releasing one of my favorite albums, her solo debut Whatever. She perfectly summed up the early-'90s ennui that followed the insanity of the '80s as we Gen-Xers came of age. It still sounds as fresh to me today as it did then.

Pneumonia front on Sunday

Ah, Spring in Chicago, when the wind shifts ever so slightly to make you wish you'd layered better:

WGN's Tom Skilling explains what happened:

Temps down more than 16°C from Sunday’s levels Monday, largely the product of winds off the 9°C lake waters—warming returns over coming week with temps surging from 21°C Tuesday to 25°C Wednesday, 27°C Thursday and 26°C Friday but expect easterly lake breezes to cool immediate lakeshore areas each day this week. Weather dries and mixed sun appears Tuesday with lots of sun Wednesday, but wet weather returns with gulf moisture late week and this weekend.

The southbound pneumonia front which induced Sunday afternoon and evening’s sharp pullback ignited explosive t-storm development mainly south of Chicago late Sunday into Sunday night. These storm’s lightning displays and hail production were impressive with some stunning rainfalls—like the 92 mm which fell at Grant Park in Kankakee County and the 82 mm in Will county’s Wilmington. Other impressive totals include 81 mm at Mendota, 71 mm at Carbon Hill and 62 mm at Channahon. But, while those rains were impressive, only 4 mm were reported at O’Hare and 3 mm at Midway Sunday into Monday.

It's unusual for me to go from A/C to heat in one day, but again, this is Chicago in May.

Sleepy Sunday

Today got away from me. I performed Beethoven's 9th Symphony last night and caught up on Cassie time today. We had beautiful, warm weather until about 8pm, too, so I didn't do any work at all.

Tomorrow we have crappy weather, so I'll post as usual.

Weather Now update

I just released a couple of minor fixes to Weather Now. Build 8126 has slightly tidier top and nav bars, and I can configure the front page "latest weather" list on the fly. Previously the list lived in a static application config file that I could only change by redeploying the app.

Enjoy.

Word of the Day: Graupel

Graupel are snowflakes covered in rime ice. They're like big styrofoam snowflakes, and because they form in warmer air, they melt almost immediately on contact with anything solid. Yesterday the Chicago Tribune had a handy explainer on the back page, just in case people were curious what was hitting them on the head standing on "temporary" railway platforms this morning. (Fuck Bruce Rauner and his entire party.)

Sorry. I get a little grumpy when I wake up on May Day to mid-March weather. With graupel.

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.