A sign of the times: basketball coaches speak up

I recently read an article in the local newspaper. Purdue men’s basketball coach Matt Painter was talking about the difference in how Black Lives Matter protesters were handled versus the insurrectionists who invaded the Capitol. Specifically, he said:

It’s just the double standard more than anything. America needs to see that—especially white America—and see the double standard that’s been going on for years. For that to happen, just makes you sick to your stomach.

This struck me as a significant statement. Not so much for what he said (which I agree with wholeheartedly), but the fact that he said it. I’ve never met Matt Painter. I know very little about him personally. This is probably by design. I don’t remember Painter offering much of a public opinion on anything that isn’t directly related to his basketball program in the decade and a half he’s been at Purdue.

For him to go on record with a statement like this, particularly in a right-leaning state like Indiana, is a sign of how the conversation has shifted. 2020 brought a lot of “hidden” things to the fore. I’m glad to see that basketball coaches, even generally tight-lipped ones, are comfortable making statements like this.

A few hours to the south, the University of Kentucky defended players kneeling for the national anthem in response to the insurrection. In fact, UK coach John Calipari joined his players in kneeling. A local sheriff burned his UK shirts and called for Calipari to be fired. Officials in another Kentucky county unanimously called for public funding to be pulled from the University.

To be sure, there’s an element of self-serving here. NCAA basketball players are disproportionately black, so Painter and Calipari are appealing to their target audiences. But they both coach in states that are both very into basketball and very conservative. It’s likely that a significant portion of fans (and donors) don’t share their views. They are using their privilege to speak up to an audience that may not want to hear the message.

One could certainly argue that these acts are insufficient on their own. I agree and acknowledge that I don’t know what else they may do more quietly. And this won’t solve the problem, but shows that acknowledging racial disparity in policing is mainstream. This is encouraging. We must first recognize problems before we can fix them. Coaches, who generally try to avoid controversy, using their platform to speak up is a good first step.

Did software stagnate in 1996?

Betteridge’s Law says “no”. But in a blog post last week, Jonathan Edwards says “yes”. Specifically, he says:

Software is eating the world. But progress in software technology itself largely stalled around 1996. 

It’s not clear what Edwards thinks happened in 1996. Maybe he blames the introduction of the Palm PIlot? In any case, he argues that the developments since 1996 have all been incremental improvements upon existing technology. Nothing revolutionary has happened in programming languages, databases, etc.

This has real “old man yells at cloud” energy. Literally. He includes “AWS” in his list of technology he dismisses.

Edwards sets up a strawman to knock down. Maybe “[t]his is as good as it gets: a 50 year old OS, 30 year old text editors, and 25 year old languages,” he proposes. “Bullshit,” he says.

I’d employ my expletive differently: who gives a shit?

Programming does not exist for the benefit of programmers. Software is written to do something for people. The universe of what is possible with computing is inarguably broader than in 1996. Much of that is owed to improvements in hardware, to be sure. And you can certainly argue of what’s possible with computing is bad. But that’s not what’s at issue here.

I don’t see carpenters bemoaning the lack of innovation in hammers. Software development isn’t special. It’s a trade like any other. And if the tools are working, let them work.

I won’t even bother with his “open source is stifling innovation” nonsense. Rebutting that is left as an exercise to the reader.

Other writing: December 2020

What have I been writing when I haven’t been writing here?

Stuff I wrote

Open Organization


Stuff I curated


Nothing changes on New Year’s Day

The start of the year is an arbitrary point in the planet’s revolution around the sun. It doesn’t have any inherent meaning, but the meaning we collectively ascribe to it matters. This year is different (how many times have we said that recently?)

2020 was a tremendously bad year in so many ways. A (hopefully) once-in-a-century pandemic has killed millions, sickened millions more, and affected basically everyone on the planet in some way. Systemic racism came to the fore in the United States in a way that society is actually reckoning with it. I won’t even touch the political events. It makes sense to celebrate the end of this year.

But as U2 reminds us, nothing changes on New Year’s Day. The world we woke up in is not meaningfully different than when we fell asleep. The first few months of 2021 will look a lot like the last few months of 2020—perhaps worse in some respects.

But there’s cause for optimism. Vaccines exist that, despite distribution issues, can help bring the pandemic to an end. A coming change in US government gives a lot of us hope for more competent governance. While it’s still dark, there is light at the end of tunnel. Where 2020 was a year when things seemed to get progressively worse, 2021 gives us the hope that it will end better than it started.

If you don’t feel like celebrating today, I understand. There’s still a long road ahead. But if you do feel like celebrating, then celebrate! We’ve earned it. (Just be sure to celebrate responsibly to avoid spreading the coronavirus. And wear a mask. Over your nose.)

Indiana COVID-19 update: 18 December 2020

It’s been a while since I’ve written one of these posts. Partly due to being busy, partly due to being burnt out, partly due to “how can I write ‘yep, everything is still terrible’ each week without repeating myself?”. And honestly, it’s been weird to realize that even though the situation in Indiana is worse than it has been at any point in the pandemic, it doesn’t feel that much worse to me. I realize how incredibly fortunate I am to be able to say that.

Since my last update, vaccines have received emergency use authorization and are in the early stages of being distributed. It will be months before we have widespread vaccination, but at least there’s hope. Of all the jobs I’m glad I don’t have, “decider of who gets vaccinated first” is one that I’m most glad about.

I haven’t made any major structural changes to my dashboard. The main difference is some tweaks to the model forecast graph to make it easier to read (I hope).


Anyway, the Institutes for Health Metrics and Evaluation (IHME) model runs keep nudging the total fatalities up. This is a reflection of how rapidly deaths have risen in the last month. The latest model run brings us to a peak of ~102 daily deaths in Indiana on January 5. It seems to track the general trend in the reported data pretty well, if you ignore the last few days. As the number of deaths has risen, it seems that the counts now frequently go up significantly for two or three days after, instead of just the day after. If anything, the model may be too optimistic.

Observed and forecast death counts for Indiana.


There is good news, though. While October and November featured a rapid rise in hospitalizations, with new records set almost every day, that trend has largely reversed. Even with the Thanksgiving holiday, we’re starting to see declines in hospitalizations most days. If that holds for a few more days, we might get below the 3,000 mark for the first time in over a month. As it stands, yesterday’s hospital census had about 13% fewer patients than the peak on November 30.

Day-over-day (blue) and week-over-week (red) changes in Indiana COVID hospitalizations.

Despite the downward trend in hospitalizations, the available ICU bed capacity continues to hold steady near 20%. Interestingly, non-COVID cases are driving this, according to the state’s dashboard. COVID ICU bed and ventilator usage, while still much higher than over the summer, is trending downward.

What I’m watching

In the coming week, I’ll be watching to see if the lower death tolls the last few days hold. It seems unlikely that there’s such a sudden drop in deaths. Tuesday and Wednesday of this week had a bunch of backdated deaths added to the report. I would expect the same next week.

With the coming Christmas and New Year holidays, the testing and new case data is about to get unreliable. But I’m interested to see if the apparent uptick in positivity holds or if we return to the general downward trend of the last two weeks. As of today’s update, we’re at 12.4% for all tests (24.4% individuals) statewide. This is very bad.

Other writing: November 2020

What have I been writing when I haven’t been writing here?

Stuff I wrote



Stuff I curated


Indiana COVID-19 update: 14 November 2020

Two weeks ago, I wrote “the news has been “good”-ish. More accurately: it’s getting less bad.” What an idiot. Since then, hospitalizations set a new record almost every day. Yesterday’s patient count was 52% higher than two weeks ago. We also set several new case records, including our first time above 5000, 6000, and 8000. We’re adding roughly twice as many new cases as we were a week ago, while only conducting about 35% more tests.

The Governor has finally given up on Stage 5 in favor of county-level restrictions based on weekly metrics updates. Doug Masson has a good discussion of it. It seems like where we should have been in September or earlier. I’m not sure how effective it will be, but it does seem to be relatively well-adapted to our current understanding, at least compared to previous plans.

The Institutes for Health Metrics and Evaluation (IHME) did not publish a new model run last week. I suppose there was other news that folks were paying attention to. Anyway, their new model run this week lowers Indiana’s peak death count slightly. It’s also earlier and with sharper ramp up and down times.

Observed and forecast death counts for Indiana.

The death count continues to exceed the October model forecasts, but it may be below the November runs. In the next few weeks, the increases in cases and hospitalizations will probably result in an increase in fatality.

Other than adding the hospitalization change graph below, I haven’t made any structural changes to my dashboard in the last few weeks.

Day-over-day (blue) and week-over-week (red) percent changes in hospitalization.

Other writing: October 2020

Stuff I wrote


Stuff I curated


Indiana COVID-19 update: 1 November 2020

In the last few days, the news has been “good”-ish. More accurately: it’s getting less bad. Wednesday set a record for new cases with 3,626. That’s nearly 29% higher than the previous record and the first time above 3,000. The next two days were also above 3,000, but not record-breaking. Still, the rate of increase appears to be slowing.

The trends look better for hospitalizations, which seem to have plateaued just shy of this spring’s peak. Given the still-increasing positivity rate, I would expect this to be short-lived. It’s a welcome change, regardless. Statewide, Indiana is not showing the hospital capacity problems that some areas have seen recently. It’s not clear without digging into each county’s stats if there are areas within the state with that problem.

Similarly, the deaths have largely plateaued as well. We’re holding relatively steady at just above 30 deaths per day (although there still seems to be a gentle increase). This brings us closer to the Institute of Health Metrics and Evaluation’s (IHME) October 15 and October 22 forecasts. The October 29 forecast, while not dramatically different in methodology, shows a more rapid rise in deaths. The peak moves a little earlier in December, but is not much higher than the last two forecasts. It also has a longer tail. As of right now, it appears to over-forecast deaths compared to current observations. However, as more data rolls in over the coming days, that may change.

Apart from adding more data, the only change I made this week to my dashboard is to remove older forecasts from the comparison. This brings it in line with the forecast error graph and makes it a little easier to read.

Moving the website to Lektor

Years ago, I moved all of funnelfiasco.com (except the blog, which runs on WordPress) from artisinally hand-crafted HTML to using a static site generator. At the time, I chose a project called “blatter” which used jinja2 templates to generate a site. This gave me the opportunity to change basic information across the whole site at once. Not something I do often, but it’s a pain when I do.

Unfortunately, blatter was apparently quietly abandoned by the developer. This wasn’t really a problem until Python 2 reached end of life. Fedora (reasonably) retired much of the Python 2 ecosystem. I tried to port it to Python 3, but ran into a few problems. And frankly, the idea of taking on the maintenance burden for a project that hadn’t been updated in years was not at all appealing. So I went looking for something else.

I wanted to find something that used jinja2 in order to minimize the amount of work involved. I also wanted something focused on websites, not blogs specifically. It seems like so many platforms today are blog-first. That’s fine, it’s just not what I want. After some searching and a little bit of trial and error, I ended up selecting Lektor.

The good

Lektor is written in (primarily) Python 3 and uses jinja2 templates, so it hit my most important points. It has a command to run a local webserver for testing. In addition, you can set up multiple servers configurations for deployment. So I can have the content sync to my local web server to verify it and then deploy that to my “production” webserver. Builds are destructive, but the deploys are not, which means I don’t have to shoe-horn everything into Lektor.

Another great feature is the ability to programmatically generate thumbnails of images. I’ve made a little bit of use of that for the time being. In the future, especially if I ever go storm chasing again, I can see myself using that feature a lot more.

Lektor optionally supports writing the page content in markdown. I haven’t done this much since I was migrating pre-written content. I expect new content will be much markdownier. Markdown isn’t flexible enough for a lot of web purposes, but it covers some use cases well. Why write HTML when it’s not needed?

Lektor uses databags to provide input data to templates. I do this using JSON files. Complex operations with that are a lot easier than the embedded Python data structures that Blatter supported.

If I were interested in translating my site into multiple languages, Lektor has good support for that (including changing URLs). It also has a built-in admin and editing console, which is not something I use, but I can see the appeal.

The bad

Unlike Blatter, Lektor puts contents and templates in separate files. This makes it a little more difficult to special-case a specific site.

It also has a “one directory, one file” paradigm. Directories can have “attachments”, which can include html files, but they won’t get processed, so they need to stand alone. This is not such an issue if you’re starting from scratch. Since I’m not, it was more of a headache. You can overwrite the page’s slug, but that also makes certain assumptions.

For the Forecast Discussion Hall of Fame, I wanted to keep URLs as-is. That site has been linked to from a lot of places, and I’d hate to break those inbound links. Writing an htaccess file to redirect to the new URLs didn’t sound ideal either. I ended up writing a one-line patch that passed the argument I need to the python-slugify library. I tried to do it the right way so that it would be configurable, but it was beyond my skill to do so.

The big down side is the fact that the development has ground to a halt. It’s not abandoned, but the development activity happens in spurts. Right now it’s doing what I need it to do, but I worry at some point I’ll have to make a switch again. I’d like to contribute more upstream, but my skills are not advanced enough for this.