The Daily Parker

Politics, Weather, Photography, and the Dog

Today's OAFPOTUS corruption watch

It's entirely possible that I will have something to post about the OAFPOTUS's self-dealing almost every one of the next 1,417 days. One hopes not, however. I mean, we only have 608 more days until the next election!

Jeff Maurer starts today's update with his take on the laughable proposal for the United States Government to buy cryptocurrency:

The president wants to spend taxpayer dollars to buy fake non-money that Twitch streamers use to buy drugs. And he’s not limiting the government to the less-laughable cryptocurrencies, like Bitcoin — if Bitcoin is Coca-Cola, Trump wants to also buy Jittery Jimmy’s High-Fructose Fizz Drink. Trump has mused that buying cryptocurrency could get the government out of debt, which sounds like the plan a degenerate gambler makes right before his body turns up in a New Jersey landfill.

This plan clearly benefits someone — the value of the cryptocurrencies Trump mentioned spiked after the announcement — but because cryptocurrencies are anonymous, we don’t know who got rich. It could be donors, foreign interests, or Trump family members — the only thing we know is that it was somebody terrible. Plus, someone placed a highly leveraged $200 million purchase right before Trump’s announcement, so there’s probably an old-timey insider trading scam happening alongside this Digital Age scam-of-the-future.

Another likely beneficiary is the guy who told Trump to do this: David Sacks. You may know Sacks as the ardent Trump backer and frequent repeater of Kremlin talking points whom Trump named as his “Crypto Czar”, with the “Czar” part really making sense given Sacks’ beliefs. Sacks says that he sold all of his cryptocurrency before Trump took office, but we can’t verify that, because crypto is anonymous. We do know that Sacks’ venture capital firm — the stake in which Sacks has not said that he sold — invests in a crypto fund whose top five holdings are exactly the five cryptocurrencies that Trump wants the government to buy. Sacks is a really lucky dude! It’s like if I was named Blog Czar and then got the government to buy a billion I Might Be Wrong subscriptions, and to be clear: President Trump, that offer is very much on the table.

Molly White also has a few things to say on the subject, with less satire and more technical expertise.

Given the raging corruption coming from the top of the party, is it any surprise that US Senator Joni Ernst (R-IA) has cozy relationships with the military contractors her committee regulates?

Meanwhile...

Finally, I was pleased to see that Amazon and MGM Studios have started development of a TV series based on the first novel in Iain M Banks' Culture series, Consider Phlebas. It's a fun novel, and a good introduction to the series—which makes sense as it's the first one he wrote. I hope it gets to production.

More Weather Now improvements

Weather Now v5.0.9194 just hit the hardware, with a new feature that allows you to browse the Gazetteer by finding all the places near a point. (Registration required.) I also added a couple of admin features that I will propagate to every other app I have in production, and made a few minor bug fixes.

Only one minor hiccup: I forgot to add a spatial index to the Gazetteer, which caused searches around a point to take minutes instead of seconds in production. I added the index to the database definition, and after about an hour it had indexed all 15 million locations in the database. So the Nearby Places feature should work perfectly now.

This is one of those things you don't notice in a dev-test environment. The dev-test database only has about 200,000 records in it, so even without the index it only took a moment to find all the places around a point. Nothing like testing in production to find a huge performance miss!

Why The Daily Parker costs so much

A longtime Daily Parker reader asked this about yesterday's post:

"The Daily Parker costs $4.87 per day" -- I'm really hoping that's a misprint, because that's almost $150 a month, which is ten times what I pay for my web hosting package which comes with unlimited domains, a full email service (IMAP+SMTP over TLS), click-to-install WordPress and MySQL database creation, SSH access to the back-end Linux machine, and excellent customer support.

Also -- and I *really* hate to say this to a fellow IT professional -- your web site often seems rather slow. So much so that I'd built a mental image of it running on an old PC in a corner of your apartment, and I'd put the slow response times down to the latency of a hard disk spinning up from idle.

So, he's not wrong: The Daily Parker right now is slow and buggy. And expensive*. (Ironically, when it was literally running on a PC in the corner of my apartment prior to 2013, it ran like Jesse Owens.)

Sherman, set the Wayback Machine to October 2015, when I deployed the current version of this blog. From the blog's separation from braverman.org in 2005 until 2015, it ran on DasBlog, a .NET 1.1 blog engine that worked most of the time and had a few features I liked. I dragged it kicking and screaming up to .NET 2.0 and later .NET 4.0, and there it stayed.

After 10 years and dozens of tweaks, I decided to modernize by moving to BlogEngine.NET, which I also forked and modified. This engine runs on .NET 4.8, which I had to shoehorn into an Azure App Service when Cloud Services went away a couple of years ago. BlogEngine.NET had modest performance problems when it had a nice virtual machine all to itself, as Cloud Services weren't too different from on-premises hardware. But Azure App Services don't quite work the same way, such that many of the performance optimizations in the BlogEngine.NET code actually cause performance headaches in App Services. For example, at app start, the engine loads the entire blog history into memory, because in 2007, when the project began, memory was fast and disks were slow. (NB: The Daily Parker has over 9,700 posts spanning 27 years.) Also, the code runs entirely synchronously, so under load it spins up more and more threads until it just collapses from exhaustion.

So here we are: running a very old blog engine on a nearing-end-of-life version of .NET that everyone is tired of.

But, aha! There is a solution, which I've been kicking around for almost as long as I've had a blog, and which I finally have the skills and time to work on. I'll simply build my own. It'll be idiosyncratic, sure, but it'll be fast and it'll be cool.

Or maybe I'll go back to DasBlog, now that someone has rebuilt it in .NET Core.

Nah. I'm going to write my own. Target date: October 15th, ten years after I released this version.

* It's actually now around $3.34 per day after a Microsoft Azure pricing change on February 12th which just showed up in the cost management tool today. The costs break down as follows: App Service type B2, $2.49; storage (media and event log), 52¢; database (serverless type B), 33¢. So, around $100 per month.

Fun Gazetteer facts

I meant to add this earlier today, but I had to do some work for my real job.

Uploading 15.4 million place records into Weather Now revealed some unexpected statistics. As you might expect from a military website, the National Geospatial-Intelligence Agency got a lot of its data from military sources. And the military tends to map things they care about in great detail. So the top 10 countries by place counts turn out to be:

  1. China, 2.1 million
  2. United States, 1.1 million
  3. Russia, 857,000
  4. Iran, 686,000
  5. Indonesia, 543,000
  6. Thailand, 530,000
  7. Finland, 495,000
  8. Mexico, 490,000
  9. Republic of Korea, 346,000
  10. Afghanistan, 343,000

The top 5 states by USGS place count might surprise you, too:

  1. California, 52,700
  2. Texas, 43,300
  3. Oregon, 36,800
  4. Tennessee, 33,400
  5. Arkansas, 29,800

Florida, New York, Pennsylvania, and Illinois, the 3rd through 6th most populous states, come in at 19th, 11th, 8th, and 33rd, respectively. I have no idea why.

And the smallest places? All of these NGIA files had fewer than 8 locations—probably because they contain places that are really part of some other country:

  1. Dramana and Shakhatoe, 1
  2. Kalapani, 1
  3. Minerva Reefs, 1
  4. Conejo Island, 2
  5. Geyser Reef, 2
  6. Hans Island, 2
  7. Siachen, 2

I honestly don't know why NGIA puts those places in their own files. I'll correct them eventually.

If you want to have a bit of fun, try searching for places you know and see what weather is closest.

Almost everywhere in the world

Late Tuesday night, Weather Now finished importing and indexing 15,430,045 places from around the world, ending with Mutirikwi Dam, Masvingo, Zimbabwe at 9:29 pm CST. (I need to re-import about 11,000 records for places that don't belong to any particular country, but that's low-priority.)

When I first built the Weather Now Gazetteer in July 2002, I only imported populated places, because database space was a lot more expensive then. So from 2002 until the v5 upgrade launched 3 years ago, the Gazetteer had about 7.5 million records and lived in a relational SQL database that migrated to the Cloud in 2013.

This time, I imported every scrap of geographic data I could find in the US, which added 8 million more. And starting later this year, I'll automate updates, particularly from sources that change frequently like the National Geospatial-Intelligence Agency and the Federal Aviation Administration. I may import other databases later on, but for now, I think we're good.

Pricing for Cosmos DB works differently than it used to for SQL Server. Weather Now v4 (2013-2022) used an Azure SQL DB size that cost $10 per month. That gave me up to 10 GB of relational storage for everything, which is why all the weather data moved to really inexpensive flat storage (Azure Tables) that cost about 4.5c per GB per month. When Weather Now lived on-premises through 2013, the Gazetteer and weather data took up about 50 GB (25 GB for the Gazetteer and 25 GB for the first 11 years of weather data), but it cost nothing except electricity—$100 a month of electricity, in fact.

With Cosmos DB, I pay for database transactions, called Request Units, plus a small fee of 25c per GB per month for storage. It gets a little complicated, but basically, the biggest expense for the database is the import, which cost about $75. Going forward, the biggest database expense will be the search service, which costs $2.42 per day. Storing 20 years of weather data costs $1.65 per day. Of course, the application service hosting Weather Now runs $3.60 a day, so it does all add up.

Because the daily cost summary takes a full UTC day to update, I don't have the new run rate for the application yet. When that comes out tonight, I may have to look into ways to defray the cost of the app, whether by voluntary donations or *gulp* advertising.

Incidentally, The Daily Parker costs $4.87 per day ($3.60 for the app service, 79c for storage, and 48c for the database. Now that Weather Now is pretty much where I want it, my next project will be to write a new blog engine and port this app to something that will cost about half that. So be on the lookout for a tip jar on this app as well.

Still chugging along

The Weather Now gazetteer import has gotten to the Ps (Pakistan) with 11,445,567 places imported and 10,890,186 indexed. (The indexer runs every three hours.) I'll have a bunch of statistics about the database when the import finishes, probably later tonight or tomorrow morning at the latest. I'm especially pleased with the import software I wrote, and with Azure Cosmos DB. They're churning through batches of about 30 files at a time and importing places at around 10,000 per minute.

Meanwhile, in the rest of the world:

Finally, in February 1852, a man calling himself David Kennison died in Chicago. He had clamed to be 115 years old, participated in the Boston Tea Party, and hobnobbed with the great and good in the early days of the Republic. And in the proud tradition of people giving undue acclaim to total charlatans, the entire city turned out for his funeral—173 years ago yesterday.

Some good news

First, the temperature at Inner Drive Technology WHQ has gotten up to 10.5°C for the first time since 3:33 pm on Monday December 9th. If it goes up just 0.1°C more, that will make today the warmest day since Monday November 25th. Fingers crossed.

Second, the National Geospatial-Intelligence Agency returned to DNS this morning. Someone at the Department of Defense must have noticed that the government's maps had vanished and was able to get the DNS entries restored. In consequence, I have downloaded everything through Romania, imported everything through Comoros (except China; that's importing right now), and the automatic indexer has captured 274,194 new places for a total gazetteer size of 2,668,565 places. That will rise dramatically later today; there are 2.05 million records for China, of which the import tool has already saved 1 million.

Updates as conditions warrant.

Update: As of 2:29 pm the temperature hit 10.6°C for the first time since 1:49 pm on Monday November 25th. Today is officially the warmest day of the 2024-25 winter season!

Weather Now update

Last night I released Weather Now v5.0.9183, with a few bug fixes including a patch to the Gazetteer that recognizes the UK's four constituent parts (example). I've spent a few evenings the past week and a half fixing everything I could think of in the Gazetteer code, plus integrating with Azure Maps to allow me to correct time zones and parent places.

Then, starting around 5pm yesterday, I re-imported the existing data from fresh sources, including the NCDC update Monday and the FAA update yesterday. And just now I've completed importing all 970,000 USGS names records for the 50 United States plus DC and Puerto Rico. The Gazetteer now has 1.6 million records, and there are still a lot of places to import from the National Geospatial-Intelligence Agency.

If you're curious, you can go to the About the Gazetteer page to see what all I've imported. I plan to start importing the NGIA country files this afternoon, once I've downloaded them.

The Azure Search indexer that populates the full-text search for the application runs every three hours, so most of the USGS records won't show up in the search feature until just after noon US Central time (a bit more than an hour for now).

Also, after lunch, I'll have a Butters update. Spoiler: she sleeps 21 hours a day.

Ribbentrop, meet Rubio

The US meeting with Russia and not Ukraine to discuss the fate of Ukraine seems unmistakably similar to the Molotov-Ribbentrop discussions in August 1939 that divvied up Poland between the Nazis and Stalin's Russia. The meeting in Riyadh between US Secretary of State Marco Rubio and Russian Foreign Minister Sergei Lavrov seems more focused on a colonial-style mineral extraction concession for the US than on Ukrainian sovereignty. This comes just days after Vice President JD Vance channeled UK Prime Minister Neville Chamberlain (a known Nazi sympathizer) in a speech in Munich just before meeting with actual Nazis.

("'I never thought leopards would eat my face,' sobs woman who voted for the Leopards Eating People's Faces Party."—Adrian Bott)

Meanwhile, back home:

  • The State Department has decided to cancel most of its news subscriptions, because why would our diplomats need to know what's going on in the world?
  • Fortunately (for now), the OAFPOTUS violently dismantling the US government's bureaucracy has gotten in the way of him dismantling the regulations that he claims to hate, further showing (a) how fundamentally stupid he is and (b) how it has nothing to do with regulations.
  • Apparently jealous of the OAFPOTUS's successful raiding of public funds for his own benefit, Argentine president Javier Milei and his friends appear to have raked in close to $100 million in what looks like a classic memecoin rug-pull.
  • The Chicago City Council may vote today on a proposal to borrow $830 m in an issue that would not pay back principal until 2045, a structure that (a) would result in a constant cash-flow to the private investors of something like $80 m per year and (b) cost the city $2 bn once we finally pay it all back. It would be the dumbest thing the city's government has done since the parking-meter scam.
  • Researchers have determined that both work-from-home and return-to-office have drawbacks and benefits, and that mandating all of one or the other isn't great for any company. (But we knew that, even if some CEOs didn't.)
  • Beware anyone asking you to send a code that you see on the screen; this is a device-code authentication attack, which is increasing in popularity among your finer criminals.

Finally, one of my least-favorite Brews & Choos stops has threatened planned to open a new brewpub in Irving Park. Crust Brewing in Rosemont wants to bring the same hellish experience to the former Leader Bar at 3000 W Irving Park Rd. Yes, this is a B&C-qualifying location, but no, I won't review it until I run out of other things to review.

Punzun Ltd: 25 years (this iteration)

Punzun Ltd. (an Illinois corporation doing business as Inner Drive Technology) turns 25 today! I set up the corporation before I moved back to Illinois from New York, so that I could take either a contract or full-time job when I got here.

I can scarcely believe I've been back nearly 25 years.

And 25 years ago—this was months before Bush v Gore, remember—I would not have believed that these would be the news stories I'd care about in 2025:

Finally, on this Presidents Day, let's return to Washington's farewell address for just a moment:

All obstructions to the execution of the Laws, all combinations and associations, under whatever plausible character, with the real design to direct, control, counteract, or awe the regular deliberation and action of the constituted authorities, are destructive of this fundamental principle, and of fatal tendency. They serve to organize faction, to give it an artificial and extraordinary force; to put, in the place of the delegated will of the nation, the will of a party, often a small but artful and enterprising minority of the community; and, according to the alternate triumphs of different parties, to make the public administration the mirror of the ill-concerted and incongruous projects of faction, rather than the organ of consistent and wholesome plans digested by common counsels, and modified by mutual interests.

However combinations or associations of the above description may now and then answer popular ends, they are likely, in the course of time and things, to become potent engines, by which cunning, ambitious, and unprincipled men will be enabled to subvert the power of the people, and to usurp for themselves the reins of government; destroying afterwards the very engines, which have lifted them to unjust dominion.

Towards the preservation of your government, and the permanency of your present happy state, it is requisite, not only that you steadily discountenance irregular oppositions to its acknowledged authority, but also that you resist with care the spirit of innovation upon its principles, however specious the pretexts.

Can't say what made me go back to that source today...