<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>And now it’s all this</title>
	<atom:link href="https://leancrew.com/all-this/feed/" rel="self" type="application/rss+xml" />
	<link>https://leancrew.com/all-this/</link>
	<description>I just said what I said and it was wrong. Or was taken wrong.</description>
	<lastBuildDate>Fri, 03 Jul 2026 00:50:26 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0</generator>
  <atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/>
  <atom:link rel="hub" href="http://aniat.superfeedr.com"/>

<item>
<title>Indiana jewel box bank</title>
<link>https://leancrew.com/all-this/2026/07/indiana-jewel-box-bank/</link>
<pubDate>Fri, 03 Jul 2026 00:50:26 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/07/indiana-jewel-box-bank/</guid>
<description>
  <![CDATA[I visited my eighth and final Louis Sullivan jewel box bank yesterday morning. The <a href="https://en.wikipedia.org/wiki/Purdue_State_Bank">Purdue State Bank</a> (now a Chase branch) is in West Lafayette, Indiana. As a graduate of the University of Illinois, I have thoughts about Purdue University and its substandard engineering program, but I will keep those thoughts to myself and focus on the bank.]]>
</description>
<content:encoded>
  <![CDATA[<p>I visited my eighth and final Louis Sullivan jewel box bank yesterday morning. The <a href="https://en.wikipedia.org/wiki/Purdue_State_Bank">Purdue State Bank</a> (now a Chase branch) is in West Lafayette, Indiana. As a graduate of the University of Illinois, I have thoughts about Purdue University and its substandard engineering program, but I will keep those thoughts to myself and focus on the bank.</p>
<p><img alt="North side of building with addition" class="ss" src="https://leancrew.com/all-this/images2026/20260702-North%20side%20of%20building%20with%20addition.jpg" title="North side of building with addition" width="100%"/></p>
<p>This is the north side of the bank. The thoroughly incompatible stone addition to the building was (according to Wikipedia) built in the 50s, but I must say the original brick and terra cotta portion of the building is in excellent shape. I don’t know when Chase took over, but they’ve done a great job with the old exterior.</p>
<p>A fun thing about the bank is that it’s wedge-shaped. Here’s an aerial view I pulled from Apple Maps:</p>
<p><img alt="Apple Maps aerial view" class="ss" src="https://leancrew.com/all-this/images2026/20260702-Apple%20Maps%20aerial%20view.jpg" title="Apple Maps aerial view" width="80%"/></p>
<p>The narrow west side of the building used to be the entrance, but it’s now an ATM.</p>
<p><img alt="West side and former entrance" class="ss" src="https://leancrew.com/all-this/images2026/20260702-West%20side%20and%20former%20entrance.jpg" title="West side and former entrance" width="80%"/></p>
<p>You may be surprised to learn that I don’t find this sacrilegious. It’s a reasonable reuse of a part of the building that wouldn’t make sense as an entrance anymore, and they’ve preserved the glazed terra cotta around it. The signage, though, is awful. Maybe Chase felt the big empty space above the old entrance—which presumably had “Purdue State Bank” removed long ago—didn’t look right without its branding. Wrong.</p>
<p>There are some very nice details around and above the windows. Here’s a closer look at the north side:</p>
<p><img alt="North facade details" class="ss" src="https://leancrew.com/all-this/images2026/20260702-North%20facade%20details.jpg" title="North facade details" width="100%"/></p>
<p>And here are essentially the same details on the south side, where the sun didn’t create such harsh shadows:</p>
<p><img alt="South side details 1" class="ss" src="https://leancrew.com/all-this/images2026/20260702-South%20side%20details%201.jpg" title="South side details 1" width="100%"/></p>
<p><img alt="South side details 2" class="ss" src="https://leancrew.com/all-this/images2026/20260702-South%20side%20details%202.jpg" title="South side details 2" width="100%"/></p>
<p><img alt="South side details 3" class="ss" src="https://leancrew.com/all-this/images2026/20260702-South%20side%20details%203.jpg" title="South side details 3" width="100%"/></p>
<p>The shade on the south side also allowed a decent view of the sides of the pillars between the windows.</p>
<p><img alt="South side of building" class="ss" src="https://leancrew.com/all-this/images2026/20260702-South%20side%20of%20building.jpg" title="South side of building" width="80%"/></p>
<p>I have no photos of the interior because it was terribly disappointing. I knew the east half of the building would be generic, but I thought they might have preserved something of the original in the west half. But as I turned right after going through the doors, I saw that wasn’t the case. The entire interior is just white painted drywall and LED lighting. The only thing that sets it apart from any other Chase branch is that the offices in the west half are noticeably squeezed together.</p>
<p>Given the care taken to preserve the exterior, I suspect the interior had been defiled before Chase took over, and there was nothing left in there to care for. That’s a shame, and it was an unfortunate way to end my visits. But the exterior was really nice and certainly worth the trip.</p>
<hr/>
<p>One last thing: Are you surprised to see the Sun hitting the north side of the building? I confess I was. But after thinking about it, it made sense. First, my visit was on July 1, less than two weeks after the summer solstice, which means the Sun rises pretty far north of due east. Second, we’re in Daylight Saving Time, which means the bank’s opening time of 9:00 AM is closer to sunrise than it would be if we were on Standard Time. Finally, West Lafayette is just east of the boundary between the Eastern and Central time zones, and I live just west of the boundary. I’m used to sunrise happening nearly an hour earlier (in local time) than it happens in West Lafayette.</p>
<p>Of course I couldn’t leave it at that. I fired up Mathematica and used its <a href="https://reference.wolfram.com/language/ref/SunPosition.html"><code>SunPosition</code> function</a> to figure out where the Sun was in the sky when I took that photo (9:22 AM EDT) of the north side of the bank:</p>
<iframe height="300" src="https://www.wolframcloud.com/obj/mark80/Published/west-lafayette-sun.nb?_embed=iframe" width="100%"></iframe>
<p>As you can see, the Sun’s azimuth, the first item of the result, was about 85°, making it slightly north of east. The same calculation (with the same result) can be made on the web using the <a href="https://gml.noaa.gov/grad/solcalc/">NOAA Solar Calculator</a>.</p>]]>
</content:encoded>
</item>

<item>
<title>Ohio jewel box bank 2</title>
<link>https://leancrew.com/all-this/2026/07/ohio-jewel-box-bank-2/</link>
<pubDate>Wed, 01 Jul 2026 22:01:49 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/07/ohio-jewel-box-bank-2/</guid>
<description>
  <![CDATA[Yesterday I visited the <a href="https://en.wikipedia.org/wiki/Home_Building_Association_Bank">Home Building Association Bank</a> in Newark, Ohio, a Louis Sullivan jewel box bank built in 1914. It’s currently owned by the <a href="https://explorelc.squarespace.com/louis-sullivan">Licking County Foundation</a> (oh, grow up), which restored it at considerable cost over several years and reopened it to the public last fall.]]>
</description>
<content:encoded>
  <![CDATA[<p>Yesterday I visited the <a href="https://en.wikipedia.org/wiki/Home_Building_Association_Bank">Home Building Association Bank</a> in Newark, Ohio, a Louis Sullivan jewel box bank built in 1914. It’s currently owned by the <a href="https://explorelc.squarespace.com/louis-sullivan">Licking County Foundation</a> (oh, grow up), which restored it at considerable cost over several years and reopened it to the public last fall.</p>
<p><img alt="South and east façades" class="ss" src="https://leancrew.com/all-this/images2026/20260701-South%20and%20east%20facades.jpg" title="South and east façades" width="100%"/></p>
<p>As you can see from the photo above, the Old Home differs from the other jewel box banks in that its exterior is clad entirely in terra cotta—it’s not mostly brick with terra cotta accents. But the accents still manage to stand out.</p>
<p><img alt="Detail of east façade" class="ss" src="https://leancrew.com/all-this/images2026/20260701-Detail%20of%20east%20facade.jpg" title="Detail of east façade" width="100%"/></p>
<p><img alt="South façade banner detail" class="ss" src="https://leancrew.com/all-this/images2026/20260701-South%20facade%20banner%20detail.jpg" title="South façade banner detail" width="100%"/></p>
<p><img alt="Southwest lower detail" class="ss" src="https://leancrew.com/all-this/images2026/20260701-Southwest%20lower%20detail.jpg" title="Southwest lower detail" width="100%"/></p>
<p><img alt="Southwest upper corner detail" class="ss" src="https://leancrew.com/all-this/images2026/20260701-Southwest%20upper%20corner%20detail.jpg" title="Southwest upper corner detail" width="80%"/></p>
<p>Let’s not forget the lions, which we’ve seen before. Like the <a href="https://leancrew.com/all-this/2026/06/ohio-jewel-box-bank-1/">Sidney</a> and <a href="https://leancrew.com/all-this/2025/09/iowa-jewel-box-bank-2/">Grinnell</a> banks, this one has a protective lion with wings and a shield.</p>
<p><img alt="Lion on south side" class="ss" src="https://leancrew.com/all-this/images2026/20260701-Lion%20on%20south%20side.jpg" title="Lion on south side" width="80%"/></p>
<p>And like the <a href="https://leancrew.com/all-this/2026/06/ohio-jewel-box-bank-1/">Sidney</a> bank, it has a couple of lion heads with pipes in their mouths to drain rainwater.</p>
<p><img alt="Lion head drain" class="ss" src="https://leancrew.com/all-this/images2026/20260701-Lion%20head%20drain.jpg" title="Lion head drain" width="80%"/></p>
<p>The pipes could be a little more subtle.</p>
<p>This is a pretty small building, so when you walk in the door on the east side, you’re put in a fairly narrow space.</p>
<p><img alt="Looking west from the doorway" class="ss" src="https://leancrew.com/all-this/images2026/20260701-Looking%20west%20from%20the%20doorway.jpg" title="Looking west from the doorway" width="80%"/></p>
<p>Not as narrow as it used to be for visitors to the bank. Near the entrance is this photo from the early days, showing how the teller areas took up the northern half of the space:</p>
<p><img alt="Early photo of interior" class="ss" src="https://leancrew.com/all-this/images2026/20260701-Early%20photo%20of%20interior.jpg" title="Early photo of interior" width="80%"/></p>
<p>The serpentine flooring that runs east-west along the south half of the building is original, which you can see if you compare the vein patterns in my photo and the old one.</p>
<p>The stenciling on the ceiling and walls is mostly original, as evidenced by the discoloration and missing paint in some areas.</p>
<p><img alt="Ceiling stencils and lighting" class="ss" src="https://leancrew.com/all-this/images2026/20260701-Ceiling%20stencils%20and%20lighting.jpg" title="Ceiling stencils and lighting" width="80%"/></p>
<p><img alt="North wall stencils" class="ss" src="https://leancrew.com/all-this/images2026/20260701-North%20wall%20stencils.jpg" title="North wall stencils" width="100%"/></p>
<p>The colored window panels on the south wall are original, as are the mechanisms that used to open them. The panels don’t open now because we have air conditioning, and it’s better to keep them sealed.</p>
<p><img alt="South windows" class="ss" src="https://leancrew.com/all-this/images2026/20260701-South%20windows.jpg" title="South windows" width="100%"/></p>
<p>The benches and check-writing desks along the south wall are original and were found in the building’s basement.</p>
<p><img alt="Bench and check-writing desk" class="ss" src="https://leancrew.com/all-this/images2026/20260701-Bench%20and%20check-writing%20desk.jpg" title="Bench and check-writing desk" width="100%"/></p>
<p>I find the detail on the post highly reminiscent of Frank Lloyd Wright:</p>
<p><img alt="Detail from check-writing desk" class="ss" src="https://leancrew.com/all-this/images2026/20260701-Detail%20from%20check-writing%20desk.jpg" title="Detail from check-writing desk" width="100%"/></p>
<p>Wright worked for Sullivan early in his career but had been gone for over twenty years by the time the Old Home was designed. I don’t know if this was a typical Sullivan detail or whether he was being influenced by his former apprentice.</p>
<p>The basement currently has a handful of old building artifacts: pieces of broken terra cotta, original lighting fixtures, doorknobs, alarm bells, teller cage grills, and safe deposit boxes.</p>
<p><img alt="Artifacts 1" class="ss" src="https://leancrew.com/all-this/images2026/20260701-Artifacts%201.jpg" title="Artifacts 1" width="100%"/></p>
<p><img alt="Artifacts 2" class="ss" src="https://leancrew.com/all-this/images2026/20260701-Artifacts%202.jpg" title="Artifacts 2" width="80%"/></p>
<p><img alt="Artifacts 3" class="ss" src="https://leancrew.com/all-this/images2026/20260701-Artifacts%203.jpg" title="Artifacts 3" width="100%"/></p>
<p>There’s also an odd panel with wiring (at the bottom of the second photo) that looks a lot like a printed circuit board.</p>
<p>Finally, in the Foundation’s office space on the second floor is this gorgeous Sullivan drawing of the building’s south elevation:</p>
<p><img alt="South elevation drawing" class="ss" src="https://leancrew.com/all-this/images2026/20260701-South%20elevation%20drawing.jpg" title="South elevation drawing" width="100%"/></p>
<p>Fun fact: the original boiler room was just outside the footprint of the building, under the sidewalk that ran along the east side. Second fun fact: the locker doors shown in the Women’s Room at the west end of the basement are still in the basement but currently decorating a wall.</p>
<p><img alt="Locker doors mounted on wall" class="ss" src="https://leancrew.com/all-this/images2026/20260701-Locker%20doors%20mounted%20on%20wall.jpg" title="Locker doors mounted on wall" width="100%"/></p>
<p>The building’s drawings are at the <a href="https://www.artic.edu/research-center/discover-our-collections/library">Ryerson and Burnham Library</a> at the Art Institute. They’re <a href="https://artic.contentdm.oclc.org/digital/collection/mqc/id/64883/rec/149">digitized</a> and available to download, but at a pretty low resolution. Too bad.</p>]]>
</content:encoded>
</item>

<item>
<title>Ohio jewel box bank 1</title>
<link>https://leancrew.com/all-this/2026/06/ohio-jewel-box-bank-1/</link>
<pubDate>Tue, 30 Jun 2026 02:42:51 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/ohio-jewel-box-bank-1/</guid>
<description>
  <![CDATA[Last year, around Labor Day, I visited five of <a href="https://scholarworks.uni.edu/sullivanjewel_images/">Louis Sullivan’s jewel box banks</a>:]]>
</description>
<content:encoded>
  <![CDATA[<p>Last year, around Labor Day, I visited five of <a href="https://scholarworks.uni.edu/sullivanjewel_images/">Louis Sullivan’s jewel box banks</a>:</p>
<ul>
<li><a href="https://leancrew.com/all-this/2025/08/wisconsin-jewel-box-bank/">Farmers and Merchants Union Bank</a> in Columbus, Wisconsin</li>
<li><a href="https://leancrew.com/all-this/2025/08/minnesota-jewel-box-bank/">National Farmers’ Bank</a> in Owatonna, Minnesota</li>
<li><a href="https://leancrew.com/all-this/2025/09/iowa-jewel-box-bank-1/">Henry Adams Building</a> in Algona, Iowa</li>
<li><a href="https://leancrew.com/all-this/2025/09/iowa-jewel-box-bank-2/">Merchant’s National Bank</a> in Grinnell, Iowa</li>
<li><a href="https://leancrew.com/all-this/2025/09/iowa-jewel-box-bank-3/">People’s Savings Bank</a> in Cedar Rapids, Iowa</li>
</ul>
<p>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.</p>
<p>This morning’s bank was the <a href="https://en.wikipedia.org/wiki/People%27s_Federal_Savings_and_Loan_Association">People’s Federal Savings and Loan Association</a> in Sidney, Ohio. Despite what that Wikipedia page says, it’s now operated by <a href="https://www.fm.bank/">F&amp;M Bank</a>, which bought out People’s in 2022. You can sort of tell by the large but tasteful “F&amp;M Bank” lettering on the front (north) façade.</p>
<p><img alt="North facade" class="ss" src="https://leancrew.com/all-this/images2026/20260629-North%20facade.jpg" title="North facade" width="100%"/></p>
<p>F&amp;M could have used a font in which their <em>F</em> was a better match to the <em>F</em> 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.</p>
<p>The bank was built in 1917, which puts it second to last in the sequence, younger than all the other jewel boxes except the <a href="https://leancrew.com/all-this/2025/08/wisconsin-jewel-box-bank/">Farmers and Merchants Bank</a>. The date of construction is prominent on the west façade.</p>
<p><img alt="West facade" class="ss" src="https://leancrew.com/all-this/images2026/20260629-West%20facade.jpg" title="West facade" width="100%"/></p>
<p>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.</p>
<p>While we’re on the west side, let’s check out some of the details.</p>
<p><img alt="West window details" class="ss" src="https://leancrew.com/all-this/images2026/20260629-West%20window%20details.jpg" title="West window details" width="80%"/></p>
<p><img alt="West end decoration" class="ss" src="https://leancrew.com/all-this/images2026/20260629-West%20end%20decoration.jpg" title="West end decoration" width="100%"/></p>
<p><img alt="Block above west window" class="ss" src="https://leancrew.com/all-this/images2026/20260629-Block%20above%20west%20window.jpg" title="Block above west window" width="100%"/></p>
<p><img alt="Southwest corner lion" class="ss" src="https://leancrew.com/all-this/images2026/20260629-Southwest%20corner%20lion.jpg" title="Southwest corner lion" width="80%"/></p>
<p>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 <a href="https://leancrew.com/all-this/2025/09/iowa-jewel-box-bank-2/">Merchant’s National Bank</a>.</p>
<p>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.</p>
<p>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.</p>
<p><img alt="North top center" class="ss" src="https://leancrew.com/all-this/images2026/20260629-North%20top%20center.jpg" title="North top center" width="100%"/></p>
<p>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.</p>
<p><img alt="Entranceway" class="ss" src="https://leancrew.com/all-this/images2026/20260629-Entranceway.jpg" title="Entranceway" width="100%"/></p>
<p>Just inside the entrance is the landmark designation plaque.</p>
<p><img alt="Landmark plaque" class="ss" src="https://leancrew.com/all-this/images2026/20260629-Landmark%20plaque.jpg" title="Landmark plaque" width="100%"/></p>
<p>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 <a href="https://leancrew.com/all-this/2025/08/minnesota-jewel-box-bank/">National Farmers’ Bank</a>. 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.</p>
<p><img alt="Interior looking south" class="ss" src="https://leancrew.com/all-this/images2026/20260629-Interior%20looking%20south.jpg" title="Interior looking south" width="80%"/></p>
<p><img alt="West windows interior" class="ss" src="https://leancrew.com/all-this/images2026/20260629-West%20windows%20interior.jpg" title="West windows interior" width="100%"/></p>
<p><img alt="Skylight" class="ss" src="https://leancrew.com/all-this/images2026/20260629-Skylight.jpg" title="Skylight" width="80%"/></p>
<p>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.</p>
<p>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&amp;M had a little pamphlet and a visitors’ signature book, but that was it.</p>
<p>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&amp;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.</p>]]>
</content:encoded>
</item>

<item>
<title>Classic</title>
<link>https://leancrew.com/all-this/2026/06/Classic/</link>
<pubDate>Wed, 24 Jun 2026 22:52:10 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/Classic/</guid>
<description>
  <![CDATA[<a href="https://relay.fm/upgrade/624">This week’s episode of <em>Upgrade</em></a> (which I listened to on a longish drive yesterday) has a preview of Jason Snell and Myke Hurley’s upcoming <a href="https://www.kickstarter.com/projects/designedincalifornia/designed-in-california-an-apple-history-podcast"><em>Designed in California</em> podcast</a>. No, not the “Road to the Apple II” series they’ve been squeezing into the <em>Upgrade</em> 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.]]>
</description>
<content:encoded>
  <![CDATA[<p><a href="https://relay.fm/upgrade/624">This week’s episode of <em>Upgrade</em></a> (which I listened to on a longish drive yesterday) has a preview of Jason Snell and Myke Hurley’s upcoming <a href="https://www.kickstarter.com/projects/designedincalifornia/designed-in-california-an-apple-history-podcast"><em>Designed in California</em> podcast</a>. No, not the “Road to the Apple II” series they’ve been squeezing into the <em>Upgrade</em> 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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.<sup id="fnref:early"><a href="#fn:early" rel="footnote">1</a></sup> 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.</p>
<p>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. <a href="https://en.wikipedia.org/wiki/MultiFinder">MultiFinder</a>, 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.</p>
<p><img alt="Lucy and Charlie Brown" class="ss" src="https://leancrew.com/all-this/images2026/20260624-Lucy%20and%20Charlie%20Brown.jpg" title="Lucy and Charlie Brown" width="100%"/></p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:early">
<p>OK, in the <em>very</em> early days, not every app had keyboard shortcuts for Cut, Copy, and Paste, but that didn’t last long. <a href="#fnref:early" rev="footnote">↩</a></p>
</li>
</ol>
</div>]]>
</content:encoded>
</item>

<item>
<title>Short memories</title>
<link>https://leancrew.com/all-this/2026/06/short-memories/</link>
<pubDate>Fri, 19 Jun 2026 17:46:18 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/short-memories/</guid>
<description>
  <![CDATA[I’ve been thinking about 1984 lately—the year, not the novel. What got me thinking about it was the reduction in <a href="https://www.eia.gov/dnav/pet/hist/LeafHandler.ashx?n=pet&amp;s=emm_epm0_pte_nus_dpg&amp;f=w">gas prices</a> over the past few weeks,]]>
</description>
<content:encoded>
  <![CDATA[<p>I’ve been thinking about 1984 lately—the year, not the novel. What got me thinking about it was the reduction in <a href="https://www.eia.gov/dnav/pet/hist/LeafHandler.ashx?n=pet&amp;s=emm_epm0_pte_nus_dpg&amp;f=w">gas prices</a> over the past few weeks,</p>
<p><img alt="Gasoline prices" class="ss" src="https://leancrew.com/all-this/images2026/20260619-Gasoline%20prices.png" title="Gasoline prices" width="100%"/></p>
<p>and <a href="https://www.nytimes.com/2026/06/13/us/politics/trump-white-working-class-voters-economy.html?searchResultPosition=1">this article</a> in the <em>New York Times</em> about Donald Trump’s declining poll numbers among white working-class voters and how that might affect November’s elections.<sup id="fnref:access"><a href="#fn:access" rel="footnote">1</a></sup></p>
<p>Forgive me for not being especially optimistic, but one of my distinct memories from 1984 makes me think the polls are lagging.</p>
<p>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.”</p>
<p>Of course, the man had been laid off early in the Reagan administration,<sup id="fnref:recession"><a href="#fn:recession" rel="footnote">2</a></sup> 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.</p>
<p><img alt="Dali's The Persistence of Memory" class="ss" src="https://leancrew.com/all-this/images2026/20260619-The%20Persistence%20of%20Memory.jpg" title="Dali's The Persistence of Memory" width="100%"/></p>
<p class="caption">via <a href="https://www.moma.org/collection/works/79018">MoMA</a></p>
<p>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.</p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:access">
<p>If, like me, you don’t have a subscription to the <em>Times</em>, see if your local library gives you access to it. Mine does. <a href="#fnref:access" rev="footnote">↩</a></p>
</li>
<li id="fn:recession">
<p>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. <a href="#fnref:recession" rev="footnote">↩</a></p>
</li>
</ol>
</div>]]>
</content:encoded>
</item>

<item>
<title>World Cup combinatorics again</title>
<link>https://leancrew.com/all-this/2026/06/world-cup-combinatorics-again/</link>
<pubDate>Wed, 17 Jun 2026 03:12:47 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/world-cup-combinatorics-again/</guid>
<description>
  <![CDATA[At the end of yesterday’s post about <a href="https://leancrew.com/all-this/2026/06/world-cup-combinatorics/">the combinatorics of the World Cup group stage</a>, 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.]]>
</description>
<content:encoded>
  <![CDATA[<p>[Equations in this post may not look right (or appear at all) in your RSS reader. Go to <a href="https://leancrew.com/all-this/2026/06/world-cup-combinatorics-again/">the original article</a> to see them rendered properly.]</p>
  <hr />
  <p>At the end of yesterday’s post about <a href="https://leancrew.com/all-this/2026/06/world-cup-combinatorics/">the combinatorics of the World Cup group stage</a>, 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.</p>
<p>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:</p>
<pre><code>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
</code></pre>
<p>As discussed early in yesterday’s post, there are <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msup><mn>3</mn><mn>6</mn></msup><mo>=</mo><mn>729</mn></mrow></math> 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 <code>(7, 7, 1, 1)</code>—and the values are lists of lists of game result lists, like</p>
<pre><code>[[[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]]]
</code></pre>
<p>The innermost lists in this output are the points accumulated in a single game. For example, <code>[1, 1, 0, 0]</code> 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 <code>(7, 7, 1, 1)</code> table at the end of the stage.</p>
<p>Here’s the Python code that built the dictionary and printed out a summary of the results:</p>
<pre><code>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}')
</code></pre>
<p>The output is</p>
<pre><code>(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
</code></pre>
<p>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 <code>(3, 3, 3, 3)</code>, which is for every game to end in a draw.</p>
<p>The code is not clever in any way. I build the <code>games</code> dictionary (actually a <a href="https://docs.python.org/3/library/collections.html#collections.defaultdict"><code>defaultdict</code></a>) 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 <a href="https://docs.python.org/3.13/library/itertools.html#itertools.product"><code>product</code> function</a> from the <code>itertools</code> library and use NumPy’s <a href="https://numpy.org/doc/stable/reference/generated/numpy.sum.html"><code>sum</code> function</a> to add up the points from each of those results. The output comes from Lines 25–30.</p>
<p>If I run this script in an interactive environment, like <a href="https://ipython.readthedocs.io/en/stable/">IPython</a> or <a href="https://jupyter-console.readthedocs.io/en/latest/">Jupyter</a>, I can pull out the games that lead to any set of points. I think the <code>(5, 4, 3, 2)</code> total is fun because it’s the only straight among the 40 possibilities. After some reformatting, here’s what <code>games[(5, 4, 3, 2)]</code> returns:</p>
<pre><code>(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) 
</code></pre>
<p>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.</p>
<p>OK, <em>now</em> I’m done.</p>
  ]]>
</content:encoded>
</item>

<item>
<title>World Cup combinatorics</title>
<link>https://leancrew.com/all-this/2026/06/world-cup-combinatorics/</link>
<pubDate>Tue, 16 Jun 2026 01:54:48 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/world-cup-combinatorics/</guid>
<description>
  <![CDATA[We’re in the middle of the first set of games in the group stage of the <a href="https://www.fifa.com/en/tournaments/mens/worldcup/canadamexicousa2026/scores-fixtures?country=US&amp;wtw-filter=ALL">2026 World Cup</a>, and I’ve been thinking about how many ways the points can be distributed among the teams in a given group. I used Python to help with the enumeration.]]>
</description>
<content:encoded>
  <![CDATA[<p>[Equations in this post may not look right (or appear at all) in your RSS reader. Go to <a href="https://leancrew.com/all-this/2026/06/world-cup-combinatorics/">the original article</a> to see them rendered properly.]</p>
  <hr />
  <p>We’re in the middle of the first set of games in the group stage of the <a href="https://www.fifa.com/en/tournaments/mens/worldcup/canadamexicousa2026/scores-fixtures?country=US&amp;wtw-filter=ALL">2026 World Cup</a>, and I’ve been thinking about how many ways the points can be distributed among the teams in a given group. I used Python to help with the enumeration.</p>
<p>Here’s a quick summary of how the group stage works: The teams are split into groups of four. Within each group, all the teams play each other once. A team gets three points for a win and one point for a draw in each of the three games it plays. The teams are ranked by their point totals within their group when this stage is over.<sup id="fnref:advances"><a href="#fn:advances" rel="footnote">1</a></sup></p>
<p>Six games are played in each group. You can calculate that number in several ways, but it’s easy enough to just list them all. Let’s say the teams in our group are Alpha, Beta, Gamma, and Delta. Then the six games are:</p>
<pre><code>Alpha vs. Beta
Alpha vs. Gamma     Beta vs. Gamma
Alpha vs. Delta     Beta vs. Delta     Gamma vs. Delta
</code></pre>
<p>Since there are three possible outcomes in each game (W–L, L–W, and D–D), there are</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msup><mn>3</mn><mn>6</mn></msup><mo>=</mo><mn>729</mn></mrow></math>
<p>possible results for the six games of the group stage.</p>
<p>We can get the point distribution among the teams for each of these possible results with this bit of Python code:</p>
<pre><code>python:
 1:  #!/usr/bin/env python3
 2:  
 3:  from itertools import product
 4:  import numpy as np
 5:  
 6:  # Possible point distributions from each game.
 7:  game1 = [[3, 0, 0, 0], [0, 3, 0, 0], [1, 1, 0, 0]]
 8:  game2 = [[3, 0, 0, 0], [0, 0, 3, 0], [1, 0, 1, 0]]
 9:  game3 = [[3, 0, 0, 0], [0, 0, 0, 3], [1, 0, 0, 1]]
10:  game4 = [[0, 3, 0, 0], [0, 0, 3, 0], [0, 1, 1, 0]]
11:  game5 = [[0, 3, 0, 0], [0, 0, 0, 3], [0, 1, 0, 1]]
12:  game6 = [[0, 0, 3, 0], [0, 0, 0, 3], [0, 0, 1, 1]]
13:  
14:  # Enumerate all possible six-game results, add up the points, and sort.
15:  games = np.array(list(product(game1, game2, game3, game4, game5, game6)))
16:  points = games.sum(axis=1)
17:  points = points.tolist()
18:  points.sort(reverse=True)
19:  print(f'Number of point arrangements: {len(points)}')
</code></pre>
<p>The output is</p>
<pre><code>Number of point arrangements: 729
</code></pre>
<p>which matches our calculation above.</p>
<p>Lines 7–12 give the three possible point allocations for each of the games, where the inner lists are the points given to Alpha, Beta, Gamma, and Delta—in that order. Line 15 uses the <a href="https://docs.python.org/3.13/library/itertools.html#itertools.product"><code>product</code> function</a> from the <code>itertools</code> library to build all 729 outcomes. It turns them into a NumPy array because I wanted to use the <a href="https://numpy.org/doc/stable/reference/generated/numpy.sum.html"><code>sum</code> function</a> (Line 16) to add up the points from each game without any laborious looping. After this step, <code>points</code> is a 729×4 NumPy array.</p>
<p>Line 17 then turns <code>points</code> into a list of lists, and Line 18 sorts the 729 entries. It looks like this:</p>
<pre><code>[[9, 6, 3, 0],
 [9, 6, 1, 1],
 [9, 6, 0, 3],
 [9, 4, 4, 0],
 [9, 4, 3, 1],
    .
    .
    .
 [0, 4, 5, 7],
 [0, 4, 4, 9],
 [0, 3, 9, 6],
 [0, 3, 7, 7],
 [0, 3, 6, 9]]
</code></pre>
<p>There are repeats among these results. For example, there are two ways to get the result</p>
<pre><code>[5, 5, 4, 1]
</code></pre>
<p>This set of points can come from either</p>
<pre><code>Alpha draws Beta       [1, 1, 0, 0]
Alpha beats Gamma      [3, 0, 0, 0]
Alpha draws Delta      [1, 0, 0, 1]
Beta draws Gamma       [0, 1, 1, 0]
Beta beats Delta       [0, 3, 0, 0]
Gamma beats Delta      [0, 0, 3, 0]
</code></pre>
<p>or</p>
<pre><code>Alpha draws Beta       [1, 1, 0, 0]
Alpha draws Gamma      [1, 0, 1, 0]
Alpha beats Delta      [3, 0, 0, 0]
Beta beats Gamma       [0, 3, 0, 0]
Beta draws Delta       [0, 1, 0, 1]
Gamma beats Delta      [0, 0, 3, 0]
</code></pre>
<p>Sum down the columns to prove to yourself that this yields point totals of</p>
<pre><code>[5, 5, 4, 1]
</code></pre>
<p>OK, so how many unique point total results can there be? To answer this, I added the following code:</p>
<pre><code>python:
21:  # Unique points, team-by-team.
22:  unique_team_points = [ list(q) for q in set(tuple(p) for p in points) ]
23:  unique_team_points.sort(reverse=True)
24:  print(f'Number of unique point arrangements: {len(unique_team_points)}')
</code></pre>
<p>which output</p>
<pre><code>Number of unique point arrangements: 556
</code></pre>
<p>Unlike the 729 results we got earlier, I have no formula for calculating this number, and I have no interest in trying to come up with one. This is one of those situations where brute force programming is the best use of my time.</p>
<p>Line 22 uses the common Python trick of turning a list into a set to eliminate duplicates and then turns the set back into a list. The less-common trick is that it first turns the inner lists into tuples. This is needed because something like</p>
<pre><code>set(points)
</code></pre>
<p>returns this error:</p>
<pre><code>TypeError: cannot use 'list' as a set element (unhashable type: 'list')
</code></pre>
<p>In these 556 results, we kept the teams separated. In other words, we considered results</p>
<pre><code>[9, 6, 3, 0]
[9, 6, 0, 3]
[9, 3, 6, 0]
[9, 3, 0, 6]
[9, 0, 6, 3]
[9, 0, 3, 6]
    etc.
</code></pre>
<p>to be different because the team scores were different. But what if we just wanted to know the possible point combinations without regard to which team got which point total? Again, I have no formula for this, but it was easy to work it out in code:</p>
<pre><code>python:
26:  # Unique points without regard to team.
27:  sorted_points = sorted((sorted(p, reverse=True) for p in points), reverse=True)
28:  unique_points = [ list(q) for q in set(tuple(p) for p in sorted_points) ]
29:  unique_points.sort(reverse=True)
30:  print(f'Number of unique sets of points: {len(unique_points)}')
31:  print()
32:  point_strings = [ f'{p[0]} {p[1]} {p[2]} {p[3]}' for p in unique_points ]
33:  print('\n'.join(point_strings))
</code></pre>
<p>The first line of output is</p>
<pre><code>Number of unique sets of points: 40
</code></pre>
<p>which is quite a reduction. The number is now small enough to show all of them. Reshaping the 40 output lines that follow into four columns of ten gives</p>
<pre><code>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
</code></pre>
<p>These are the point totals for the 40 different ways a group stage can end. The two levels of sorting in Line 27 are the key to bringing the results down from 729.</p>
<p>You can go to <a href="https://www.espn.com/soccer/standings/_/league/FIFA.WORLD/season/2022">ESPN’s World Cup table for 2022</a> to show which of these 40 results occurred that year. There’s a popup menu button on the page that lets you check 2018, 2014, 2010, and 2006, too.</p>
<p>I’m sure serious soccer fans have been digging into the math behind this year’s change from eight groups to twelve. I’m not a serious fan, so this is good enough for me.</p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:advances">
<p>I won’t be going through the rules of how teams advance to the next stage—they start out simple but can get complicated quickly, especially now that the tournament has expanded. <a href="#fnref:advances" rev="footnote">↩</a></p>
</li>
</ol>
</div>
  ]]>
</content:encoded>
</item>

<item>
<title>Missing miles</title>
<link>https://leancrew.com/all-this/2026/06/missing-miles/</link>
<pubDate>Sun, 14 Jun 2026 02:21:04 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/missing-miles/</guid>
<description>
  <![CDATA[I took a bike ride this morning on a portion of the <a href="https://bikeiandm.com/">I&amp;M Canal Trail</a> from Romeoville to Joliet and back. It’s a fairly short ride, eight miles each way, and that distance got me thinking about using Mathematica to do some calculations after I got back home.]]>
</description>
<content:encoded>
  <![CDATA[<p>I took a bike ride this morning on a portion of the <a href="https://bikeiandm.com/">I&amp;M Canal Trail</a> from Romeoville to Joliet and back. It’s a fairly short ride, eight miles each way, and that distance got me thinking about using Mathematica to do some calculations after I got back home.</p>
<p>The trail has mile markers with little snippets of information about the canal and the surrounding area. Here are the markers I passed this morning:</p>
<p><a href="https://leancrew.com/all-this/images2026/20260613-Mileage%20markers%2027%20through%2031.jpg"><img alt="Mileage markers 27 through 31" class="ss" src="https://leancrew.com/all-this/images2026/20260613-Mileage%20markers%2027%20through%2031.jpg" title="Mileage markers 27 through 31" width="100%"/></a></p>
<p>The mileage figures on the markers increase as you go south and west, which is downstream. There are several more markers in Lockport, where they’re graduated in tenths of a mile, but these will do for our purposes.</p>
<p>My ride started nearly a mile before Marker 27 and continued about a mile after Marker 31, which would lead you to believe I rode six miles, not eight. But the trip is definitely eight miles. I have my Fitness app set to record in kilometers, and it always tells me this trip is 13 kilometers one way. And as we know from the <a href="https://leancrew.com/all-this/2024/11/kilometers-miles-fibonacci-and-lucas/">Fibonacci conversion</a>, 13 km = 8 mi.</p>
<p>As I passed Marker 27 on the way south, I was reminded of this anomaly and decided to use the trip to figure out why the markers and the mileage don’t match up. I checked my Workout screen on my watch as I passed each marker and learned that there were two miles between Markers 28 and 29 and between Markers 30 and 31. After turning around in the parking lot of the <a href="https://www.reconnectwithnature.org/preserves-trails/preserves/joliet-iron-works-historic-site">Joliet Iron Works</a>, I decided to take a photo of each marker on the way back north and use the photos to calculate distances.</p>
<p>I already knew about Mathematica’s <a href="http://reference.wolfram.com/language/ref/GeoDistance.html"><code>GeoDistance</code> function</a>, and I figured it must have a way of extracting the latitude and longitude of photos from their EXIF data. That turned out to be the <a href="http://reference.wolfram.com/language/ref/Import.html"><code>Import</code> function</a>, and I was able to put the two together to make this short notebook:</p>
<iframe height="700" src="https://www.wolframcloud.com/obj/mark80/Published/mile-markers.nb?_embed=iframe" width="100%"></iframe>
<p>As you can see, the distances between the photos (and therefore between the markers) were:</p>
<table>
<thead>
<tr>
<th align="center">Markers</th>
<th align="right">Distance</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">27–28</td>
<td align="right">1.019 mi</td>
</tr>
<tr>
<td align="center">28–29</td>
<td align="right">1.886 mi</td>
</tr>
<tr>
<td align="center">29–30</td>
<td align="right">1.041 mi</td>
</tr>
<tr>
<td align="center">30–31</td>
<td align="right">1.939 mi</td>
</tr>
</tbody>
</table>
<p>These are <a href="https://en.wikipedia.org/wiki/Geodesic">geodesic</a> or “as the crow flies” distances. The canal and its trail are pretty straight, but there are a couple of doglegs between Markers 28 and 29, which explains why the distance between them is over a tenth of a mile off from two miles.</p>
<p>As you can see near the bottom of the notebook, I used the <a href="http://reference.wolfram.com/language/ref/GeoListPlot.html"><code>GeoListPlot</code> function</a> to make a map with the marker positions on it. I combined that in <a href="https://flyingmeat.com/acorn/">Acorn</a> with the map from my iPhone’s Fitness app to make this image:</p>
<p><a href="https://leancrew.com/all-this/images2026/20260613-Mathematica%20and%20Fitness%20app%20maps.jpg"><img alt="Mathematica and Fitness app maps" class="ss" src="https://leancrew.com/all-this/images2026/20260613-Mathematica%20and%20Fitness%20app%20maps.jpg" title="Mathematica and Fitness app maps" width="100%"/></a></p>
<p>It took some trial and error with the <a href="http://reference.wolfram.com/language/ref/GeoRange.html"><code>GeoRange</code> option</a> to get the scales to match up reasonably well, but I think it was worth it. You can see where the mile markers fall on my route, and it’s clear that the distances between Markers 28 and 29 and Markers 30 and 31 are about twice as far as the other distances. Also, you can see how the geodesic distance between Markers 28 and 29 cuts the corners, making it less than two miles.</p>
<p>So I’ve solved the six-mile/eight-mile mystery, but I still don’t understand why the mileage on the markers is wrong.</p>]]>
</content:encoded>
</item>

<item>
<title>Fourier series in Mathematica</title>
<link>https://leancrew.com/all-this/2026/06/fourier-series-in-mathematica/</link>
<pubDate>Mon, 08 Jun 2026 16:35:18 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/fourier-series-in-mathematica/</guid>
<description>
  <![CDATA[After <a href="https://leancrew.com/all-this/2026/06/simply-supported-beam-fourier-series-solution-of-the-ode/">my last post</a>—the one about using Fourier series—I started thinking about how to use Mathematica to develop Fourier series.<sup id="fnref:cheating"><a href="#fn:cheating" rel="footnote">1</a></sup> I could, of course, use the <a href="http://reference.wolfram.com/language/ref/Integrate.html"><code>Integrate</code></a> function to determine the Fourier coefficients, but Mathematica has other functions that can do the job directly once you understand how they work.]]>
</description>
<content:encoded>
  <![CDATA[<p>[Equations in this post may not look right (or appear at all) in your RSS reader. Go to <a href="https://leancrew.com/all-this/2026/06/fourier-series-in-mathematica/">the original article</a> to see them rendered properly.]</p>
  <hr />
  <p>After <a href="https://leancrew.com/all-this/2026/06/simply-supported-beam-fourier-series-solution-of-the-ode/">my last post</a>—the one about using Fourier series—I started thinking about how to use Mathematica to develop Fourier series.<sup id="fnref:cheating"><a href="#fn:cheating" rel="footnote">1</a></sup> I could, of course, use the <a href="http://reference.wolfram.com/language/ref/Integrate.html"><code>Integrate</code></a> function to determine the Fourier coefficients, but Mathematica has other functions that can do the job directly once you understand how they work.</p>
<p>Mathematica has several Fourier functions, but I’m going to stick with the ones associated with sine series, <a href="http://reference.wolfram.com/language/ref/FourierSinCoefficient.html"><code>FourierSinCoefficient</code></a> and <a href="http://reference.wolfram.com/language/ref/FourierSinSeries.html"><code>FourierSinSeries</code></a>. They’re meant to be easy to use, and they are, but you need to know how they’re defined.</p>
<p>The coefficients used in both of these functions are defined this way:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>f</mi><mi>n</mi></msub><mo>=</mo><mfrac><mn>2</mn><mi>π</mi></mfrac><mspace width="0.167em"></mspace><msubsup><mo>∫</mo><mn>0</mn><mi>π</mi></msubsup><mi>f</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mi>n</mi><mi>x</mi><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi></mrow></math>
<p>This doesn’t match up exactly with the definition I used for getting the Fourier coefficients of a loading function, <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>q</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo></mrow></math>:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>q</mi><mi>n</mi></msub><mo>=</mo><mfrac><mn>2</mn><mi>L</mi></mfrac><mspace width="0.167em"></mspace><msubsup><mo>∫</mo><mn>0</mn><mi>L</mi></msubsup><mi>q</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>n</mi><mi>π</mi><mi>x</mi></mrow><mi>L</mi></mfrac><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi></mrow></math>
<p>To use the Mathematica functions to get the <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>q</mi><mi>n</mi></msub></math>, we have to do a change of variable. Let</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>z</mi><mo>=</mo><mfrac><mrow><mi>π</mi><mi>x</mi></mrow><mi>L</mi></mfrac></mrow></math>
<p>so</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>x</mi><mo>=</mo><mfrac><mrow><mi>L</mi><mi>z</mi></mrow><mi>π</mi></mfrac><mspace width="1.0em"></mspace><mtext mathvariant="normal">and</mtext><mspace width="1.0em"></mspace><mi>d</mi><mi>x</mi><mo>=</mo><mfrac><mi>L</mi><mi>π</mi></mfrac><mspace width="0.167em"></mspace><mi>d</mi><mi>z</mi></mrow></math>
<p>(Here, <em>z</em> is just another variable name; I’m not using it to represent a complex number.)</p>
<p>This changes the expression for <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>q</mi><mi>n</mi></msub></math> to</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>q</mi><mi>n</mi></msub><mo>=</mo><mfrac><mn>2</mn><mi>π</mi></mfrac><mspace width="0.167em"></mspace><msubsup><mo>∫</mo><mn>0</mn><mi>π</mi></msubsup><mi>q</mi><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mrow><mi>L</mi><mi>z</mi></mrow><mi>π</mi></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mo form="prefix" stretchy="false">(</mo><mi>n</mi><mi>z</mi><mo form="postfix" stretchy="false">)</mo><mspace width="0.167em"></mspace><mi>d</mi><mi>z</mi></mrow></math>
<p>which means we can use the Mathematica functions as long as we substitute <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>L</mi><mi>z</mi><mi>/</mi><mi>π</mi></mrow></math> in for <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi></math> in the expression for <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>q</mi></math>.</p>
<p>Let’s give it a try on this parabolic loading function:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>q</mi><mo>=</mo><mn>4</mn><mspace width="0.167em"></mspace><msub><mi>q</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub><mi>x</mi><mspace width="0.167em"></mspace><mo form="prefix" stretchy="false">(</mo><mi>L</mi><mo>−</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo></mrow></math>
<p>It shouldn’t take many Fourier terms to get a good approximation of this.</p>
<p><img alt="Parabolic loading" class="ss" src="https://leancrew.com/all-this/images2026/20260608-Parabolic%20loading.png" title="Parabolic loading" width="100%"/></p>
<p>Here are the Mathematica commands I used:</p>
<pre><code>q = 4 qmax x (L - x)
qn = FourierSinCoefficient[q /. x -&gt; L z/Pi, z, n]
</code></pre>
<p>You can see the substitution in the first argument to <code>FourierSinCoefficient</code>.</p>
<p>After simplification, the results were</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>q</mi><mi>n</mi></msub><mo>=</mo><mrow><mo form="prefix" stretchy="true">{</mo><mtable displaystyle="true"><mtr><mtd columnalign="right" style="text-align: left"><mfrac><mrow><mn>32</mn><mspace width="0.167em"></mspace><msup><mi>L</mi><mn>2</mn></msup><msub><mi>q</mi><mi>m</mi></msub><mi>a</mi><mi>x</mi></mrow><mrow><msup><mi>n</mi><mn>3</mn></msup><msup><mi>π</mi><mn>3</mn></msup></mrow></mfrac><mspace width="2.0em"></mspace><mrow><mtext mathvariant="normal">for odd </mtext><mspace width="0.333em"></mspace></mrow><mi>n</mi></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right"><mn>0</mn><mspace width="2.0em"></mspace><mrow><mtext mathvariant="normal">for even </mtext><mspace width="0.333em"></mspace></mrow><mi>n</mi></mtd></mtr></mtable></mrow></mrow></math>
<p>We could also get the series (through <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>n</mi><mo>=</mo><mn>7</mn></mrow></math>) directly with <code>FourierSinSeries</code>:</p>
<pre><code>qapprox2 = FourierSinSeries[q /. x -&gt; L z/Pi, z, 7] /. z -&gt; Pi x /L
</code></pre>
<p>where the inverse substitution comes at the end to put the expression back in the form we want. Here’s a screenshot from the Mathematica notebook:</p>
<p><img alt="Mathematica notebook screenshot of Fourier series" class="ss" src="https://leancrew.com/all-this/images2026/20260608-Mathematica%20notebook%20screenshot%20of%20Fourier%20series.png" title="Mathematica notebook screenshot of Fourier series" width="100%"/></p>
<p>You can see that the coefficients match what we got earlier.</p>
<p>A quick plot of the difference between this truncated Fourier series and the original parabolic function shows that, as expected, the series does a good job of replicating the original. The largest error, near the ends, is just 0.3% of <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>q</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub></math>, and that’s with only four terms.</p>
<p><img alt="Error of Fourier series estimate" class="ss" src="https://leancrew.com/all-this/images2026/20260608-Error%20of%20Fourier%20series%20estimate.png" title="Error of Fourier series estimate" width="100%"/></p>
<p>If you’re interested, here’s the entire Mathematica notebook:</p>
<iframe height="800" src="https://www.wolframcloud.com/obj/mark80/Published/Fourier%20parabola.nb?_embed=iframe" width="100%"></iframe>
<p>Now that I understand the way these functions work, I can do more complicated Fourier analysis in Mathematica without questioning myself on whether I’m using them correctly.</p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:cheating">
<p>Something I couldn’t do in any of the posts in <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">that series</a>, as that would be breaking the rules I had set up for myself. <a href="#fnref:cheating" rev="footnote">↩</a></p>
</li>
</ol>
</div>
  ]]>
</content:encoded>
</item>

<item>
<title>Simply supported beam—Fourier series solution of the ODE</title>
<link>https://leancrew.com/all-this/2026/06/simply-supported-beam-fourier-series-solution-of-the-ode/</link>
<pubDate>Sat, 06 Jun 2026 20:36:43 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/simply-supported-beam-fourier-series-solution-of-the-ode/</guid>
<description>
  <![CDATA[We’re finally here, at the end of <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">all things</a>. In this post, we’ll use a Fourier series to get the formula for the center deflection of a simply supported beam with a uniformly distributed load. We’ll see some of the same math that we saw in the <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-energy-minimization-with-fourier-series/">previous Fourier series solution</a>, but the fundamental approach will be different.]]>
</description>
<content:encoded>
  <![CDATA[<p>[Equations in this post may not look right (or appear at all) in your RSS reader. Go to <a href="https://leancrew.com/all-this/2026/06/simply-supported-beam-fourier-series-solution-of-the-ode/">the original article</a> to see them rendered properly.]</p>
  <hr />
  <p>We’re finally here, at the end of <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">all things</a>. In this post, we’ll use a Fourier series to get the formula for the center deflection of a simply supported beam with a uniformly distributed load. We’ll see some of the same math that we saw in the <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-energy-minimization-with-fourier-series/">previous Fourier series solution</a>, but the fundamental approach will be different.</p>
<p>Let’s start with the fourth-order ordinary differential equation for a beam with a general loading function, <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>q</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo></mrow></math>:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>E</mi><mi>I</mi><msup><mi>y</mi><mrow><mi>i</mi><mi>v</mi></mrow></msup><mo>=</mo><mi>q</mi></mrow></math>
<p>The simple supports at both ends give us these boundary conditions:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>y</mi><mo form="prefix" stretchy="false">(</mo><mn>0</mn><mo form="postfix" stretchy="false">)</mo><mo>=</mo><mi>y</mi><mo form="prefix" stretchy="false">(</mo><mi>L</mi><mo form="postfix" stretchy="false">)</mo><mo>=</mo><mi>y</mi><mi>″</mi><mo form="prefix" stretchy="false">(</mo><mn>0</mn><mo form="postfix" stretchy="false">)</mo><mo>=</mo><mi>y</mi><mi>″</mi><mo form="prefix" stretchy="false">(</mo><mi>L</mi><mo form="postfix" stretchy="false">)</mo><mo>=</mo><mn>0</mn></mrow></math>
<p>Let’s work out the solution for a loading condition we haven’t considered before, a distributed load in the form of a sine wave:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>q</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo><mo>=</mo><msub><mi>q</mi><mi>m</mi></msub><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi><mi>x</mi></mrow><mi>L</mi></mfrac></mrow></math>
<p>where <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>m</mi></math> is a positive integer and <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>q</mi><mi>m</mi></msub></math> is some constant amplitude. Given the form of the governing ODE and the boundary conditions, it seems likely that the solution will look like this:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>y</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo><mo>=</mo><msub><mi>y</mi><mi>m</mi></msub><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi><mi>x</mi></mrow><mi>L</mi></mfrac></mrow></math>
<p>It satisfies the boundary conditions, and if we plug it and the expression for <em>q</em> into the governing ODE, we get</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>E</mi><mi>I</mi><mspace width="0.167em"></mspace><msup><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mrow><mi>m</mi><mi>π</mi></mrow><mi>L</mi></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mn>4</mn></msup><mspace width="0.167em"></mspace><msub><mi>y</mi><mi>m</mi></msub><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi></mrow><mi>L</mi></mfrac><mo>=</mo><msub><mi>q</mi><mi>m</mi></msub><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi></mrow><mi>L</mi></mfrac></mrow></math>
<p>which is a solution for all values of <em>x</em> if</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>y</mi><mi>m</mi></msub><mo>=</mo><mfrac><mn>1</mn><mrow><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><msup><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>L</mi><mrow><mi>m</mi><mi>π</mi></mrow></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mn>4</mn></msup><mspace width="0.167em"></mspace><msub><mi>q</mi><mi>m</mi></msub></mrow></math>
<p>This will work for any value of <em>m</em> that’s a positive integer.</p>
<p>Since the governing ODE is linear, if <em>q</em> is the sum of several sine terms, the solution will be the sum of several sine terms. Returning to our favorite problem,</p>
<p><img alt="Simply supported beam with uniform load" class="ss" src="https://leancrew.com/all-this/images2026/20260518-Simply%20supported%20beam%20with%20uniform%20load.png" title="Simply supported beam with uniform load" width="100%"/></p>
<p>we now have a path for expressing the solution as a sum of sines, as long as we can express the constant function, <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>q</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo><mo>=</mo><mi>w</mi></mrow></math>, as a sum of sines.</p>
<p>And of course we can. The Fourier sine series expression that fits a constant is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>q</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo><mo>=</mo><munderover><mo>∑</mo><mrow><mi>m</mi><mo>=</mo><mn>1</mn></mrow><mo accent="false">∞</mo></munderover><msub><mi>q</mi><mi>m</mi></msub><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi><mi>x</mi></mrow><mi>L</mi></mfrac><mo>=</mo><mi>w</mi></mrow></math>
<p>where</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>q</mi><mi>m</mi></msub><mo>=</mo><mfrac><mn>2</mn><mi>L</mi></mfrac><mspace width="0.167em"></mspace><msubsup><mo>∫</mo><mn>0</mn><mi>L</mi></msubsup><mi>w</mi><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi><mi>x</mi></mrow><mi>L</mi></mfrac><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi><mo>=</mo><mrow><mo form="prefix" stretchy="true">{</mo><mtable displaystyle="true"><mtr><mtd columnalign="right" style="text-align: right"><mfrac><mrow><mn>4</mn><mspace width="0.1em"></mspace><mi>w</mi></mrow><mrow><mi>m</mi><mi>π</mi></mrow></mfrac><mspace width="1.0em"></mspace><mrow><mtext mathvariant="normal">for odd </mtext><mspace width="0.333em"></mspace></mrow><mi>m</mi></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right"><mn>0</mn><mspace width="1.0em"></mspace><mrow><mtext mathvariant="normal">for even </mtext><mspace width="0.333em"></mspace></mrow><mi>m</mi></mtd></mtr></mtable></mrow></mrow></math>
<p>This result comes from the orthogonality of the sine function. The Fourier coefficients are the same as those for a <a href="https://mathworld.wolfram.com/FourierSeriesSquareWave.html">square wave</a>.</p>
<p>Plugging this result into the expression for <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>y</mi><mi>m</mi></msub></math>, we get</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>y</mi><mi>m</mi></msub><mo>=</mo><mfrac><mn>1</mn><mrow><mi>E</mi><mi>I</mi></mrow></mfrac><msup><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>L</mi><mrow><mi>m</mi><mi>π</mi></mrow></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mn>4</mn></msup><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mrow><mn>4</mn><mspace width="0.167em"></mspace><mi>w</mi></mrow><mrow><mi>m</mi><mi>π</mi></mrow></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>=</mo><mfrac><mrow><mn>4</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><msup><mi>m</mi><mn>5</mn></msup><msup><mi>π</mi><mn>5</mn></msup><mi>E</mi><mi>I</mi></mrow></mfrac></mrow></math>
<p>for odd <em>m</em>. Therefore,</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>y</mi><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>L</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>=</mo><mfrac><mrow><mn>4</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><msup><mi>π</mi><mn>5</mn></msup><mi>E</mi><mi>I</mi></mrow></mfrac><munderover><mo>∑</mo><mrow><mi>m</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>3</mn><mo>,</mo><mn>5</mn><mo>,</mo><mi>…</mi></mrow><mo accent="false">∞</mo></munderover><mfrac><mn>1</mn><msup><mi>m</mi><mn>5</mn></msup></mfrac><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi></mrow><mn>2</mn></mfrac></mrow></math>
<p>You may recall from <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-energy-minimization-with-fourier-series/">our earlier post</a> that there’s a closed-form solution for this sum:</p>
<p><img alt="Simitses Table A-2" class="ss" src="https://leancrew.com/all-this/images2026/20260527-Simitses%20Table%20A-2.jpg" title="Simitses Table A-2" width="100%"/></p>
<p>The last entry in this table with <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>x</mi><mo>=</mo><mi>π</mi><mi>/</mi><mn>2</mn></mrow></math> gives us</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mtable displaystyle="true"><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"><munderover><mo>∑</mo><mrow><mi>m</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>3</mn><mo>,</mo><mn>5</mn><mo>,</mo><mi>…</mi></mrow><mo accent="false">∞</mo></munderover><mfrac><mn>1</mn><msup><mi>m</mi><mn>5</mn></msup></mfrac><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi></mrow><mn>2</mn></mfrac></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><msup><mi>π</mi><mn>4</mn></msup><mn>96</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>π</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>−</mo><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><msup><mi>π</mi><mn>2</mn></msup><mn>48</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mspace width="0.167em"></mspace><msup><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>π</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mn>3</mn></msup><mo>+</mo><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>π</mi><mn>96</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mspace width="0.167em"></mspace><msup><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>π</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mn>4</mn></msup></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><msup><mi>π</mi><mn>5</mn></msup></mrow><mn>1536</mn></mfrac></mtd></mtr></mtable></math>
<p>Substituting the closed-form solution in for the sum yields our old friend:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>y</mi><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>L</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>=</mo><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mrow><mn>4</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><msup><mi>π</mi><mn>5</mn></msup><mi>E</mi><mi>I</mi></mrow></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><msup><mi>π</mi><mn>5</mn></msup></mrow><mn>1536</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>=</mo><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><mn>384</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mrow></math>
<p></p>
<hr/>
<p>The purpose of <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">this series of posts</a>—apart from a bit of showing off—was to demonstrate why I love structural analysis. It has, even in the simplest of problems, a depth that rewards those who study it. And when you’re confronted with problems that aren’t so simple, you can draw on that depth to understand and solve them.</p>
  ]]>
</content:encoded>
</item>

<item>
<title>Simply supported beam—Newmark’s method</title>
<link>https://leancrew.com/all-this/2026/06/simply-supported-beam-newmarks-method/</link>
<pubDate>Sat, 06 Jun 2026 12:44:17 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/simply-supported-beam-newmarks-method/</guid>
<description>
  <![CDATA[This would have been the last post in <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">the series</a> if I hadn’t realized recently that another method deserved a post. So this is the penultimate. It was described in <a href="https://engineering.purdue.edu/~ce474/Docs/Newmark_calculating%20deflections%20moments%20buckling%20loads_1942.pdf">this 1943 paper</a> by <a href="https://cee.illinois.edu/about/history/history-excellence/nathan-m-newmark">Nathan Newmark</a> and is known—or was known—as <em>Newmark’s method</em>.]]>
</description>
<content:encoded>
  <![CDATA[<p>[Equations in this post may not look right (or appear at all) in your RSS reader. Go to <a href="https://leancrew.com/all-this/2026/06/simply-supported-beam-newmarks-method/">the original article</a> to see them rendered properly.]</p>
  <hr />
  <p>This would have been the last post in <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">the series</a> if I hadn’t realized recently that another method deserved a post. So this is the penultimate. It was described in <a href="https://engineering.purdue.edu/~ce474/Docs/Newmark_calculating%20deflections%20moments%20buckling%20loads_1942.pdf">this 1943 paper</a> by <a href="https://cee.illinois.edu/about/history/history-excellence/nathan-m-newmark">Nathan Newmark</a> and is known—or was known—as <em>Newmark’s method</em>.</p>
<p>I say <em>was</em> because this method is dead. How dead? Forty-five years ago, when I was an undergraduate taking structural analysis courses, Newmark’s method wasn’t being taught in the department that he had been the head of for decades and whose <a href="https://cee.illinois.edu/about/buildings">main building is named after him</a>. That’s dead.</p>
<p>Which isn’t to say it wasn’t a good method. Some of my professors talked about using it when they were young, and it was a practical technique when engineers used slide rules and desk calculators, but it was clear by the 80s that its time had passed. Still, it’s desncribed in the textbook I used as an undergrad, and I did eventually learn it well after I was out of school, so here it is.</p>
<p>Newmark’s method is basically a way of doing double integration, so you can use it to go from loading to bending moments or from bending moments to deflection. As Newmark says in the introduction to his paper,</p>
<blockquote>
<p>The numerical procedure is approximate, but leads to exact moments (or deflections) when the loading diagram (or diagram of “angle changes”) is made up of segments that are bounded by straight lines or by arcs of parabolas.</p>
</blockquote>
<p>For our simply supported, uniformly loaded beam, the “angle change” diagram—which we’ve been calling a curvature diagram—is a parabola, so we can get an exact solution.</p>
<p>Let’s say we have a beam with any kind of support conditions and some general distributed loading:</p>
<p><img alt="Beam with generic loading" class="ss" src="https://leancrew.com/all-this/images2026/20260605-Beam%20with%20generic%20loading.png" title="Beam with generic loading" width="100%"/></p>
<p>The fundamental trick of Newmark’s method is to imagine a set of simply supported beams inserted between the load and the real beam.</p>
<p><img alt="Insertion of simply supported beams" class="ss" src="https://leancrew.com/all-this/images2026/20260605-Insertion%20of%20simply%20supported%20beams.png" title="Insertion of simply supported beams" width="100%"/></p>
<p>The small imaginary beam segments are all of the same length, <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>λ</mi></math>, and the analysis proceeds by calculating the reaction forces at the ends of these beams and then building a table of loads, shears, and moments based on these reactions (reversed in direction) acting on the large original beam.</p>
<p>Here’s a figure from the paper that explains how to calculate the reaction forces for parabolically distributed loading:</p>
<p><img alt="Equivalent concentrated loads for parabolas" class="ss" src="https://leancrew.com/all-this/images2026/20260605-Equivalent%20concentrated%20loads%20for%20parabolas.png" title="Equivalent concentrated loads for parabolas" width="100%"/></p>
<p>There are simpler formulas if the loading is distributed linearly.</p>
<p>You may have noticed the double curvature in the right drawing, which means that the load shown there is not parabolic. Newmark suggests using the formulas in this figure even if the loading curve is of higher order—the parabolic formulas are close enough if you divide the beam into several segments.</p>
<p>I’ve focused here on the process of going from loads to bending moments because I think the mechanics of that is easier to understand. But the same process applies to going from curvature to deflection. We went through that in the <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-conjugate-beam-method/">conjugate beam post</a>.</p>
<p>In fact, Newmark does our problem in the paper. He uses the constant <em>q</em> as the intensity of the load and splits the beam into four segments:</p>
<p><img alt="Newmark four-segment solution" class="ss" src="https://leancrew.com/all-this/images2026/20260605-Newmark%20four-segment%20solution.png" title="Newmark four-segment solution" width="100%"/></p>
<p>This may look impenetrable, but we can simplify it by using only two segments and explaining each step. Here’s the table, starting with the moment diagram:</p>
<p><img alt="Newmark two-segment solution" class="ss" src="https://leancrew.com/all-this/images2026/20260605-Newmark%20two-segment%20solution.png" title="Newmark two-segment solution" width="100%"/></p>
<p>The row labeled <em>Moment</em> is the value of the bending moment at each point. The <em>Curvature</em> row is just the moment at each point divided by <em>EI</em> and with the sign reversed. Those are the easy ones.</p>
<p>The <em>Angle change</em> row is based on the curvature values and the formulas in Figure 5 above. The value at the left end is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mfrac><mrow><mi>L</mi><mi>/</mi><mn>2</mn></mrow><mn>24</mn></mfrac><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">[</mo><mn>7</mn><mo>⋅</mo><mn>0</mn><mo>+</mo><mn>6</mn><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">(</mo><mi>−</mi><mfrac><mrow><mi>w</mi><msup><mi>L</mi><mn>2</mn></msup></mrow><mrow><mn>8</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>−</mo><mn>0</mn><mo form="postfix" stretchy="true">]</mo></mrow><mo>=</mo><mi>−</mi><mfrac><mrow><mi>w</mi><msup><mi>L</mi><mn>3</mn></msup></mrow><mrow><mn>64</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mrow></math>
<p>where we’ve used <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>λ</mi><mo>=</mo><mi>L</mi><mi>/</mi><mn>2</mn></mrow></math>. This is also the value at the right end.</p>
<p>The value at the center is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mfrac><mrow><mi>L</mi><mi>/</mi><mn>2</mn></mrow><mn>12</mn></mfrac><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">[</mo><mn>0</mn><mo>+</mo><mn>10</mn><mrow><mo form="prefix" stretchy="true">(</mo><mi>−</mi><mfrac><mrow><mi>w</mi><msup><mi>L</mi><mn>2</mn></msup></mrow><mrow><mn>8</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>+</mo><mn>0</mn><mo form="postfix" stretchy="true">]</mo></mrow><mo>=</mo><mi>−</mi><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>3</mn></msup></mrow><mrow><mn>96</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mrow></math>
<p>We start the <em>Average slope</em> row with the knowledge that the slope at the center of the beam is zero, so if the angle change across the center is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>−</mi><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>3</mn></msup></mrow><mrow><mn>96</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mrow></math>
<p>then the average slope must go from</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>3</mn></msup></mrow><mrow><mn>192</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="2.0em"></mspace><mtext mathvariant="normal">to</mtext><mspace width="1.75em"></mspace><mo>−</mo><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>3</mn></msup></mrow><mrow><mn>192</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mrow></math>
<p>as we move from the left half of the beam to the right half.</p>
<p>(If you’re having trouble with this, remember that angle change is analogous to shear and think of a beam with an antisymmetric shear diagram. If the change in shear across the centerline is <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>−</mi><mi>F</mi></mrow></math>, then the shear must be <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>F</mi><mi>/</mi><mn>2</mn></mrow></math> in the left half of the beam and <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>−</mi><mi>F</mi><mi>/</mi><mn>2</mn></mrow></math> in the right half.)</p>
<p>For the <em>Deflection</em> row, we know that the deflection is zero at the left and right ends. Since the average slope in the left half of the beam is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>2</mn></msup></mrow><mrow><mn>192</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></math>
<p>the deflection at the center must be</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>3</mn></msup></mrow><mrow><mn>192</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>L</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>=</mo><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><mn>384</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mrow></math>
<p>an answer we’ve now seen twelve times.</p>
  ]]>
</content:encoded>
</item>

<item>
<title>Simply supported beam—dummy unit load method</title>
<link>https://leancrew.com/all-this/2026/06/simply-supported-beam-dummy-unit-load-method/</link>
<pubDate>Fri, 05 Jun 2026 12:51:46 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/simply-supported-beam-dummy-unit-load-method/</guid>
<description>
  <![CDATA[We’re in the home stretch of <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">this series</a>, so ANIAT will soon go back to complaining about Apple’s UI choices.<sup id="fnref:baker"><a href="#fn:baker" rel="footnote">1</a></sup> Next week’s WWDC keynote should provide some inspiration.]]>
</description>
<content:encoded>
  <![CDATA[<p>[Equations in this post may not look right (or appear at all) in your RSS reader. Go to <a href="https://leancrew.com/all-this/2026/06/simply-supported-beam-dummy-unit-load-method/">the original article</a> to see them rendered properly.]</p>
  <hr />
  <p>We’re in the home stretch of <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">this series</a>, so ANIAT will soon go back to complaining about Apple’s UI choices.<sup id="fnref:baker"><a href="#fn:baker" rel="footnote">1</a></sup> Next week’s WWDC keynote should provide some inspiration.</p>
<p>But today’s post covers our eleventh method for deriving the center deflection of a uniformly loaded simply supported beam: the dummy unit load method. When I was an undergraduate, this was the method we used to determine the deflections of truss structures, but it’s more general than that. My favorite explanation of why it works is in <a href="https://lccn.loc.gov/56006503">Nicholas J. Hoff’s <em>The Analysis of Structures</em></a>. I have the original Wiley hardcover of this book, but you can apparently get both <a href="https://www.amazon.com/Analysis-Structures-Principles-Principle-Displacements/dp/1036837793">paperback</a> and <a href="https://www.amazon.com/Analysis-Structures-Principles-Principle-Displacements/dp/0265807344">hardcover</a> reprints.</p>
<p>Hoff uses the <a href="https://en.wikipedia.org/wiki/Virtual_work">principle of virtual work</a> in his explanation, and I’d like to quote him here, but unfortunately his explanation is split between one section on the analysis of trusses and another on the analysis of beams. I couldn’t figure out a nice way to put them together coherently, so you’re just going to have to trust me.</p>
<p>For a beam, you can get the deflection at a particular point by following these steps:</p>
<ol>
<li>Work out an equation for the bending moment, <em>M</em>, in the beam for the given set of applied loads.</li>
<li>Imagine that same beam with those loads removed (this is the dummy structure) and a concentrated unit load placed at the point at which we want the deflection. By definition, the magnitude of a unit load is one. The unit load points in the direction of the deflection we want to calculate.</li>
<li>Work out an equation for the bending moment, <em>m</em>, in the dummy beam with the unit load.</li>
<li><p>The desired deflection is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>δ</mi><mo>=</mo><msubsup><mo>∫</mo><mn>0</mn><mi>L</mi></msubsup><mfrac><mrow><mi>m</mi><mi>M</mi></mrow><mrow><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi></mrow></math></li>
</ol>
<p>Let’s apply this simple principle to our problem:</p>
<p><img alt="Simply supported beam with uniform load" class="ss" src="https://leancrew.com/all-this/images2026/20260518-Simply%20supported%20beam%20with%20uniform%20load.png" title="Simply supported beam with uniform load" width="100%"/></p>
<p>The bending moment is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>M</mi><mo>=</mo><mfrac><mi>w</mi><mn>2</mn></mfrac><mspace width="0.167em"></mspace><mo form="prefix" stretchy="false">(</mo><mi>L</mi><mi>x</mi><mo>−</mo><msup><mi>x</mi><mn>2</mn></msup><mo form="postfix" stretchy="false">)</mo></mrow></math>
<p>where the <em>x</em> coordinate starts at the left end of the beam and increases to the right, as usual.</p>
<p>This same structure with just a unit load at the center is</p>
<p><img alt="Beam with dummy unit load" class="ss" src="https://leancrew.com/all-this/images2026/20260604-Beam%20with%20dummy%20unit%20load.png" title="Beam with dummy unit load" width="100%"/></p>
<p>Its bending moment is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>m</mi><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mspace width="0.1em"></mspace><mi>x</mi><mspace width="2.0em"></mspace><mrow><mtext mathvariant="normal">for </mtext><mspace width="0.333em"></mspace></mrow><mn>0</mn><mo>≤</mo><mi>x</mi><mo>≤</mo><mfrac><mi>L</mi><mn>2</mn></mfrac></mrow></math>
<p>and <em>m</em> is symmetric about the center of the beam.</p>
<p>Therefore,</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>δ</mi><mo>=</mo><mi>y</mi><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>L</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>=</mo><msubsup><mo>∫</mo><mn>0</mn><mi>L</mi></msubsup><mfrac><mrow><mi>m</mi><mi>M</mi></mrow><mrow><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi></mrow></math>
<p>and we can take advantage of symmetry to say</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mtable displaystyle="true"><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"><mi>y</mi><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>L</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mfrac><mrow><mn>2</mn><mspace width="0.167em"></mspace><mi>w</mi></mrow><mrow><mn>4</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><msubsup><mo>∫</mo><mn>0</mn><mrow><mi>L</mi><mi>/</mi><mn>2</mn></mrow></msubsup><mo form="prefix" stretchy="false">(</mo><mi>L</mi><msup><mi>x</mi><mn>2</mn></msup><mo>−</mo><msup><mi>x</mi><mn>3</mn></msup><mo form="postfix" stretchy="false">)</mo><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mfrac><mi>w</mi><mrow><mn>2</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><msubsup><mrow><mo form="prefix" stretchy="true">[</mo><mfrac><mn>1</mn><mn>3</mn></mfrac><mspace width="0.167em"></mspace><mi>L</mi><msup><mi>x</mi><mn>3</mn></msup><mo>−</mo><mfrac><mn>1</mn><mn>4</mn></mfrac><mspace width="0.167em"></mspace><msup><mi>x</mi><mn>4</mn></msup><mo form="postfix" stretchy="true">]</mo></mrow><mn>0</mn><mrow><mi>L</mi><mi>/</mi><mn>2</mn></mrow></msubsup></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mfrac><mi>w</mi><mrow><mn>2</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">[</mo><mfrac><msup><mi>L</mi><mn>4</mn></msup><mn>24</mn></mfrac><mo>−</mo><mfrac><msup><mi>L</mi><mn>4</mn></msup><mn>64</mn></mfrac><mo form="postfix" stretchy="true">]</mo></mrow></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><mn>384</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mtd></mtr></mtable></math>
<p>You can pretty much do this problem in your head if you’re good at figuring out least common multiples. I’m not, but after writing things out, I did realize that the LCM of <math xmlns="http://www.w3.org/1998/Math/MathML"><mn>24</mn></math> and <math xmlns="http://www.w3.org/1998/Math/MathML"><mn>64</mn></math> is <math xmlns="http://www.w3.org/1998/Math/MathML"><mn>192</mn></math>.</p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:baker">
<p>Heads up, though. I recently thought of a thirteenth method that’s different enough from the others to merit another post. Sorry about that. <a href="#fnref:baker" rev="footnote">↩</a></p>
</li>
</ol>
</div>
  ]]>
</content:encoded>
</item>

</channel>
</rss>

