Ohio jewel box bank 1
June 29, 2026 at 9:42 PM by Dr. Drang
Last year, around Labor Day, I visited five of Louis Sullivan’s jewel box banks:
- Farmers and Merchants Union Bank in Columbus, Wisconsin
- National Farmers’ Bank in Owatonna, Minnesota
- Henry Adams Building in Algona, Iowa
- Merchant’s National Bank in Grinnell, Iowa
- People’s Savings Bank in Cedar Rapids, Iowa
These all fit in with a little driving circuit that included visiting my daughter and my younger son. This year, I headed east to pick up the last three.
This morning’s bank was the People’s Federal Savings and Loan Association in Sidney, Ohio. Despite what that Wikipedia page says, it’s now operated by F&M Bank, which bought out People’s in 2022. You can sort of tell by the large but tasteful “F&M Bank” lettering on the front (north) façade.

F&M could have used a font in which their F was a better match to the F in the original THRIFT lettering, but you can’t expect bank executives to notice things like that. At least they didn’t go with the sans serif font they use in their logo. The horizontal line of slightly damaged bricks is where the old name of the bank used to be.
The bank was built in 1917, which puts it second to last in the sequence, younger than all the other jewel boxes except the Farmers and Merchants Bank. The date of construction is prominent on the west façade.

You’ll probably need to zoom in to see the date; it’s not only small, but I was shooting into the sun, so the contrast isn’t great. The 1886 date you see at the left end is when People’s Federal Savings and Loan was founded.
While we’re on the west side, let’s check out some of the details.




The lion with the shield on top of a pilaster is at the southwest corner of the building, off the right edge of my west façade photo. You may recognize him—he’s basically the same as the entranceway lions at the Merchant’s National Bank.
Each of the lion heads that appear along the bottom of the windows has a copper pipe in its open mouth. Clearly this is to drain rainwater that collects on the sills, although I don’t know if the pipes are still working. Sullivan undoubtedly considered this a “form follows function” thing.
Most of the decorative elements on this building are organic, but there are geometric features along the cornice at the top of the building and around the arch on the north façade.

Sullivan “signed” this building in the architrave above the entrance. Not just in the little LOUIS SULLIVAN ARCHITECT in the lower left corner, but in the big stylized LSA at the center of the piece.

Just inside the entrance is the landmark designation plaque.

After seeing the lovely exterior, I have to say I was a little disappointed when I went through the foyer into the interior. It’s nice enough, but I was ready to be hit by something like the interior of the National Farmers’ Bank. No such luck. The lines are clean, there’s a good view of the west windows, and there’s a gorgeous skylight running down the center of the ceiling, but no murals or hanging lights.



One of the tellers told me there used to be stencils of some sort running along the tops of the walls, but they were painted over. An odd decision, given how well the rest of the building has been preserved, but maybe they couldn’t be saved—or weren’t original.
Another small disappointment was the lack of documentation. Other banks had small shrines to their buildings, with displays of drawings, old photographs, or even pieces of original terra cotta and brickwork. F&M had a little pamphlet and a visitors’ signature book, but that was it.
I don’t want to be too hard on this bank. It really is beautiful and in great shape. I guess my expectations for the interior were just too high after walking around and photographing the north and west façades. F&M can’t be blamed if the previous owner didn’t keep the original drawings. Also, it’s a pretty small space—no second floor or mezzanine for a shrine.
Classic
June 24, 2026 at 5:52 PM by Dr. Drang
This week’s episode of Upgrade (which I listened to on a longish drive yesterday) has a preview of Jason Snell and Myke Hurley’s upcoming Designed in California podcast. No, not the “Road to the Apple II” series they’ve been squeezing into the Upgrade feed these past few weeks. This sneak preview—with special guest John Siracusa—is about the state of the classic Mac OS in the late 90s.
In a word, the state was sorry. This was largely due to some expedient decisions made in the early 80s that were necessary to get the Mac out the door. Unfortunately, those decisions made the Mac a less and less stable computing environment as the years went on.
The instability had to do with memory and multitasking. Jason and John cover it well in the podcast, so there’s no need for me to get into it. I will say, though, that if you listen to the podcast and think Jason is exaggerating when he says that he would often have to reboot his Mac a dozen or so times per day, I can assure you that’s no exaggeration. The frustration of using a Mac back then was the reason I abandoned it for Linux at the end of 1996.
The problem with the Mac was that it had a great user interface for multitasking but a lousy infrastructure. In the mid-80s, the lousy infrastructure didn’t matter so much because computer users were used to doing one thing at a time, which the Mac handled well. But the windowing OS, the consistency of Mac applications, and the multitasking tease of desk accessories slowly got users hungry to run many apps simultaneously and switch between them at will. The infrastructure couldn’t handle that.
I want to emphasize how important the consistency was. For example, all Mac apps had cut, copy, and paste, and those commands were always in the Edit menu and they always had the ⌘X, ⌘C, and ⌘V keyboard shortcuts.1 Similarly for Save and ⌘S. DOS programs—and before Windows 95, most PC users were running DOS—didn’t have that consistency. I remember reading back in ’85 or ’86 that Mac users tended to regularly use many more applications than PC users. There were lots of PC users, especially in the workplace, who basically used one program; their computers were configured to boot into WordPerfect or Lotus 1-2-3, and that would be the only program they used until they turned off their machine at the end of the day.
Mac users weren’t like that. Because the Mac had a consistent language, users felt comfortable taking on new apps. They didn’t have to start at ground zero to learn a new set of commands. And when you’re comfortable using three, four, or more programs, you want them all running and available at a moment’s notice. MultiFinder, incorporated into the Finder itself in System 7, offered you the promise of being able to do that, but the underlying deficiencies of the OS reneged on that promise. Classic Mac OS was Lucy and you were Charlie Brown.

-
OK, in the very early days, not every app had keyboard shortcuts for Cut, Copy, and Paste, but that didn’t last long. ↩
Short memories
June 19, 2026 at 12:46 PM by Dr. Drang
I’ve been thinking about 1984 lately—the year, not the novel. What got me thinking about it was the reduction in gas prices over the past few weeks,

and this article in the New York Times about Donald Trump’s declining poll numbers among white working-class voters and how that might affect November’s elections.1
Forgive me for not being especially optimistic, but one of my distinct memories from 1984 makes me think the polls are lagging.
A news story on one of the networks back in 1984 included short interviews with prospective voters. One of the voters was a young white man (he was about my age at the time) who said he was voting for Ronald Reagan. When asked why, he said “He got me my job back.”
Of course, the man had been laid off early in the Reagan administration,2 but that didn’t enter into his reasoning. The only thing that mattered was that he was working again. It was my introduction to the short memories of American voters.

via MoMA
I can’t help but think we’ll see the same thing this November. As long as the price of gas—like the unemployment rate in 1984—keeps going down, it won’t matter whether it gets back to where it had been or who caused it to go up in the first place. White working-class voters (especially men) will credit Trump with bringing gas prices down and vote Republican again, regardless of what they told pollsters recently. Only another major fuckup close to the election will get them to vote blue or just stay home in large numbers.
-
If, like me, you don’t have a subscription to the Times, see if your local library gives you access to it. Mine does. ↩
-
Constant Republican propaganda has people thinking the Reagan years were all about prosperity, but the recession early in his first term was the worst economic downturn since the Great Depression, a distinction it held until 2008. ↩
World Cup combinatorics again
June 16, 2026 at 10:12 PM by Dr. Drang
At the end of yesterday’s post about the combinatorics of the World Cup group stage, I said “this is good enough for me.” Turns out that was a lie. Today I rewrote some of the code to come up with a slightly more detailed result.
The last bit of work in that post was to generate the 40 unique point totals that can come from a group. These are the possible totals, with no regard for which team gets which total:
9 6 3 0 7 6 3 1 7 3 2 2 5 5 3 2
9 6 1 1 7 6 2 1 6 6 6 0 5 5 3 1
9 4 4 0 7 5 4 0 6 6 4 1 5 5 2 2
9 4 3 1 7 5 3 1 6 6 3 3 5 4 4 3
9 4 2 1 7 5 2 1 6 5 4 1 5 4 4 2
9 3 3 3 7 4 4 1 6 5 2 2 5 4 3 2
9 2 2 2 7 4 3 3 6 4 4 3 5 3 3 2
7 7 3 0 7 4 3 2 6 4 4 2 4 4 4 4
7 7 1 1 7 4 3 1 5 5 5 0 4 4 4 3
7 6 4 0 7 4 2 2 5 5 4 1 3 3 3 3
As discussed early in yesterday’s post, there are ways the six games of a group can turn out, so today’s script associates each of the above totals with the game results that add up to that total. I built a dictionary in which the keys are the totals shown above—expressed as tuples, like (7, 7, 1, 1)—and the values are lists of lists of game result lists, like
[[[3, 0, 0, 0],
[3, 0, 0, 0],
[1, 0, 0, 1],
[0, 1, 1, 0],
[0, 0, 0, 3],
[0, 0, 0, 3]],
[[3, 0, 0, 0],
[1, 0, 1, 0],
[3, 0, 0, 0],
[0, 0, 3, 0],
[0, 1, 0, 1],
[0, 0, 3, 0]],
[[0, 3, 0, 0],
[0, 0, 3, 0],
[1, 0, 0, 1],
[0, 1, 1, 0],
[0, 3, 0, 0],
[0, 0, 3, 0]],
[[0, 3, 0, 0],
[1, 0, 1, 0],
[0, 0, 0, 3],
[0, 3, 0, 0],
[0, 1, 0, 1],
[0, 0, 0, 3]],
[[1, 1, 0, 0],
[3, 0, 0, 0],
[3, 0, 0, 0],
[0, 3, 0, 0],
[0, 3, 0, 0],
[0, 0, 1, 1]],
[[1, 1, 0, 0],
[0, 0, 3, 0],
[0, 0, 0, 3],
[0, 0, 3, 0],
[0, 0, 0, 3],
[0, 0, 1, 1]]]
The innermost lists in this output are the points accumulated in a single game. For example, [1, 1, 0, 0] represents a game in which the first two teams in the group played to a draw. So the above result tells us that there are six ways the six games in a group can lead to a (7, 7, 1, 1) table at the end of the stage.
Here’s the Python code that built the dictionary and printed out a summary of the results:
python:
1: #!/usr/bin/env python3
2:
3: from itertools import product
4: from collections import defaultdict
5: import numpy as np
6:
7: # Possible point distributions from each game.
8: game1 = [[3, 0, 0, 0], [0, 3, 0, 0], [1, 1, 0, 0]]
9: game2 = [[3, 0, 0, 0], [0, 0, 3, 0], [1, 0, 1, 0]]
10: game3 = [[3, 0, 0, 0], [0, 0, 0, 3], [1, 0, 0, 1]]
11: game4 = [[0, 3, 0, 0], [0, 0, 3, 0], [0, 1, 1, 0]]
12: game5 = [[0, 3, 0, 0], [0, 0, 0, 3], [0, 1, 0, 1]]
13: game6 = [[0, 0, 3, 0], [0, 0, 0, 3], [0, 0, 1, 1]]
14:
15: # Enumerate all possible six-game results, and put them in a dictionary.
16: # The keys are the sorted point totals and the values are the list of
17: # game results.
18: games = defaultdict(list)
19: results = np.array(list(product(game1, game2, game3, game4, game5, game6)))
20: for r in results:
21: points = tuple(sorted(r.sum(axis=0).tolist(), reverse=True))
22: games[points].append(r.tolist())
23:
24: # Show how many game results lead to each tuple of sorted point totals.
25: count = 0
26: p = sorted(games.keys(), reverse=True)
27: for k in p:
28: count += len(games[k])
29: print(f'({" ".join(str(p) for p in k)}): {len(games[k]):3d}')
30: print(f' Total: {count:3d}')
The output is
(9 6 3 0): 24
(9 6 1 1): 12
(9 4 4 0): 12
(9 4 3 1): 24
(9 4 2 1): 24
(9 3 3 3): 8
(9 2 2 2): 4
(7 7 3 0): 12
(7 7 1 1): 6
(7 6 4 0): 24
(7 6 3 1): 24
(7 6 2 1): 24
(7 5 4 0): 24
(7 5 3 1): 24
(7 5 2 1): 24
(7 4 4 1): 36
(7 4 3 3): 24
(7 4 3 2): 24
(7 4 3 1): 24
(7 4 2 2): 24
(7 3 2 2): 12
(6 6 6 0): 8
(6 6 4 1): 24
(6 6 3 3): 24
(6 5 4 1): 24
(6 5 2 2): 12
(6 4 4 3): 36
(6 4 4 2): 24
(5 5 5 0): 4
(5 5 4 1): 24
(5 5 3 2): 12
(5 5 3 1): 12
(5 5 2 2): 12
(5 4 4 3): 24
(5 4 4 2): 24
(5 4 3 2): 24
(5 3 3 2): 12
(4 4 4 4): 6
(4 4 4 3): 8
(3 3 3 3): 1
Total: 729
where the numbers after the colons are the number of ways the games can go to result in the given totals. There is, for example, only one way to get (3, 3, 3, 3), which is for every game to end in a draw.
The code is not clever in any way. I build the games dictionary (actually a defaultdict) one step at a time via the loop in Lines 20–22. As with yesterday’s script, I generate all the 729 game results using the product function from the itertools library and use NumPy’s sum function to add up the points from each of those results. The output comes from Lines 25–30.
If I run this script in an interactive environment, like IPython or Jupyter, I can pull out the games that lead to any set of points. I think the (5, 4, 3, 2) total is fun because it’s the only straight among the 40 possibilities. After some reformatting, here’s what games[(5, 4, 3, 2)] returns:
(3 0 0 0) (0 0 3 0) (1 0 0 1) (0 1 1 0) (0 1 0 1) (0 0 1 1)
(3 0 0 0) (1 0 1 0) (0 0 0 3) (0 1 1 0) (0 1 0 1) (0 0 1 1)
(3 0 0 0) (1 0 1 0) (1 0 0 1) (0 3 0 0) (0 1 0 1) (0 0 1 1)
(3 0 0 0) (1 0 1 0) (1 0 0 1) (0 1 1 0) (0 3 0 0) (0 0 1 1)
(0 3 0 0) (3 0 0 0) (1 0 0 1) (0 1 1 0) (0 1 0 1) (0 0 1 1)
(0 3 0 0) (1 0 1 0) (3 0 0 0) (0 1 1 0) (0 1 0 1) (0 0 1 1)
(0 3 0 0) (1 0 1 0) (1 0 0 1) (0 0 3 0) (0 1 0 1) (0 0 1 1)
(0 3 0 0) (1 0 1 0) (1 0 0 1) (0 1 1 0) (0 0 0 3) (0 0 1 1)
(1 1 0 0) (3 0 0 0) (0 0 0 3) (0 1 1 0) (0 1 0 1) (0 0 1 1)
(1 1 0 0) (3 0 0 0) (1 0 0 1) (0 0 3 0) (0 1 0 1) (0 0 1 1)
(1 1 0 0) (3 0 0 0) (1 0 0 1) (0 1 1 0) (0 1 0 1) (0 0 3 0)
(1 1 0 0) (0 0 3 0) (3 0 0 0) (0 1 1 0) (0 1 0 1) (0 0 1 1)
(1 1 0 0) (0 0 3 0) (1 0 0 1) (0 3 0 0) (0 1 0 1) (0 0 1 1)
(1 1 0 0) (0 0 3 0) (1 0 0 1) (0 1 1 0) (0 1 0 1) (0 0 0 3)
(1 1 0 0) (1 0 1 0) (3 0 0 0) (0 1 1 0) (0 0 0 3) (0 0 1 1)
(1 1 0 0) (1 0 1 0) (3 0 0 0) (0 1 1 0) (0 1 0 1) (0 0 0 3)
(1 1 0 0) (1 0 1 0) (0 0 0 3) (0 1 1 0) (0 3 0 0) (0 0 1 1)
(1 1 0 0) (1 0 1 0) (0 0 0 3) (0 1 1 0) (0 1 0 1) (0 0 3 0)
(1 1 0 0) (1 0 1 0) (1 0 0 1) (0 3 0 0) (0 0 0 3) (0 0 1 1)
(1 1 0 0) (1 0 1 0) (1 0 0 1) (0 3 0 0) (0 1 0 1) (0 0 3 0)
(1 1 0 0) (1 0 1 0) (1 0 0 1) (0 0 3 0) (0 3 0 0) (0 0 1 1)
(1 1 0 0) (1 0 1 0) (1 0 0 1) (0 0 3 0) (0 1 0 1) (0 0 0 3)
(1 1 0 0) (1 0 1 0) (1 0 0 1) (0 1 1 0) (0 3 0 0) (0 0 0 3)
(1 1 0 0) (1 0 1 0) (1 0 0 1) (0 1 1 0) (0 0 0 3) (0 0 3 0)
Notice that in every set of six games (i.e., each row), there are two games that end in a win and four that end in a draw. The team with five points has a win and two draws; the team with four points has a win, a draw, and a loss; the team with three points has three draws; and the team with two points has two draws and a loss.
OK, now I’m done.