<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Nathan Gilbert</title>
  <subtitle>Posts and trip reports from nathangilbert.com.</subtitle>
  <link href="https://nathangilbert.com/feed.xml" rel="self" type="application/atom+xml"/>
  <link href="https://nathangilbert.com/" rel="alternate" type="text/html"/>
  <updated>2026-08-16T00:00:00Z</updated><id>https://nathangilbert.com/</id>
  <author>
    <name>Nathan Gilbert</name>
  </author>
  <entry>
    <title>The Ruby Mountains of Nevada</title>
    <link href="https://nathangilbert.com/trips/the-ruby-mountains-2026/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/trips/the-ruby-mountains-2026/</id>
    <published>2026-08-16T00:00:00Z</published>
    <updated>2026-08-16T00:00:00Z</updated>
    <category term="camping"/>
    <summary>Despite the name, we found no Rubies.</summary><content type="html">&lt;h2&gt;The Ruby Mountains in June, 2026&lt;/h2&gt;
&lt;p&gt;Just south of Elko, Nevada is a vast island of trees, streams, birds and bugs inside a wide sagebrush sea known as the
Ruby Mountains. Most of Nevada&#39;s forest-lands are collected in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Humboldt%E2%80%93Toiyabe_National_Forest&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Humboldt–Toiyabe&lt;/a&gt; conglomerate. The Humboldt part
of the name comes from a 19th Century German naturalist (what do I need in my LinkedIn profile to get this job title?),
&lt;a href=&quot;https://en.wikipedia.org/wiki/Alexander_von_Humboldt&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Alexander von Humboldt&lt;/a&gt;. He was born important because of the &amp;quot;von&amp;quot; in his name. This guy traveled throughout
Spanish South and Latin America, eventually staying in &amp;quot;Nueva España&amp;quot; (Mexico) for several years, mainly around Mexico
City. On the way back to Europe he basically texts President Tom Jefferson to see if can drop in on him at Washington to
talk &lt;a href=&quot;https://www.strangescience.net/humboldt.htm&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;fossils&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See, TJ was spending a decent amount of time rage-posting (rage-ledgering?) against a theory known at the time as
&amp;quot;American Degeneracy&amp;quot;, which said that the &amp;quot;colder/wetter&amp;quot; temperatures of the Western Hemisphere caused flora and fauna
to become small. Humboldt backed Jefferson in this debate and bolstered their position with fossilized teeth of mammoth
he found while at the equator. TJ didn&#39;t listen to Alex about &lt;a href=&quot;https://bioone.org/journals/northeastern-naturalist/volume-8/issue-sp1/1092-6194_2001_8_43_AVHVTW_2.0.CO_2/ALEXANDER-VON-HUMBOLDTS-VISIT-TO-WASHINGTON-AND-PHILADELPHIA-HIS-FRIENDSHIP/10.1656/1092-6194(2001)8%5B43:AVHVTW%5D2.0.CO;2.short&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;slavery&lt;/a&gt;, though, which makes me think of other
theories of American Degeneracy...&lt;em&gt;that are true&lt;/em&gt;, then and now.&lt;/p&gt;
&lt;p&gt;Clearly, these adherents to the &amp;quot;Cloudy-day shrinkage theory&amp;quot; of biological development had not spent much time in the
&lt;a href=&quot;https://en.wikipedia.org/wiki/Great_Basin&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Great Basin&lt;/a&gt; of the United States, circa 2026, amidst a record-breaking El Niño season. Jack rabbits should be 12
feet tall here. Coming from the East, as you traverse through northern Nevada towards Elko on Highway 80, each basin and
range takes you a little higher, a little bit further from the desolate salt flats and up into something that
approximates a montane landscape with the corresponding drop in mercury. &lt;a href=&quot;https://www.nevadawilderness.org/toiyabe_crest_summary&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;em&gt;Toyiabe&lt;/em&gt;&lt;/a&gt; is the Shoshone (Newe) word for
&amp;quot;mountain&amp;quot;.&lt;/p&gt;
&lt;p&gt;The drive up Lamoille Canyon road is easy. It&#39;s paved and not an an extreme grade. It&#39;s an out-and-back road that has a
terminus at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ruby_Crest_National_Recreation_Trail&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Ruby Crest National Recreational Trail&lt;/a&gt;&#39;s head. This canyon is referred to by some (the Nevada
tourism department) as the &amp;quot;Yosemite of Nevada&amp;quot;. It is a spectacular drive. &lt;em&gt;Lamoille&lt;/em&gt; evidently comes from an early
settlers fondness of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Lamoille_River&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;French typographical error&lt;/a&gt; about the area that came to known as Vermont. History just seems
arbitrary at some point.&lt;/p&gt;
&lt;figure class=&quot;inline-image&quot;&gt;
  &lt;img src=&quot;https://nathangilbert.com/images/thomas-canyon-campground.png&quot; alt=&quot;Topographic map of Thomas Canyon Campground, its loop roads dotted with numbered campsites, with the Thomas
      Canyon trailhead and its parking area marked to the south.&quot; width=&quot;600&quot; height=&quot;428&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
  &lt;figcaption&gt;Thomas Canyon Campground. The trail leaves from the bottom of the loop.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;We camped at Thomas Canyon Campground, at a site somewhere in the 20s or 30s. That just meant it was hugging the canyon,
close to the trail. The lower numbered sites are closer to the road and a little more in the sun. Our campground sits
at around 7550ft in elevation and had good separation between each individual site. The sun was intense in the middle of
the day, but since the canyon was fairly narrow, you start getting decent shade around 4-5pm.&lt;/p&gt;
&lt;p&gt;For June, it seemed like a lot of Northern Nevadans were ready to hit the mountains and have a little early summer
hoe-down. That was fine for us; the plentiful aspen and roaring creek kept their sounds at bay. The Creek, as mentioned,
was flowing strong in this month. That waterway being the Lamoille Creek. The Thomas Canyon creek also had strong flow,
with several waterfalls easily visible from the aforementioned trail that starts right in this campground.&lt;/p&gt;
&lt;p&gt;There are several small trails and stops along the road as you head towards the top. The interpretive trails are fun and
informative. Otherwise, mainly the other trail-heads are for overnight backpacking trips which we were not doing on this
trip.&lt;/p&gt;
&lt;p&gt;The Rubies are known as habitat for &lt;a href=&quot;http://www.backpackingintherubymountains.info/animals/animals.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Big Horn sheep&lt;/a&gt; (which we didn&#39;t find) and many species of bird, including the
&lt;a href=&quot;https://www.ndow.org/species/himalayan-snowcock/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Himalayan Snowcock&lt;/a&gt; which is not native to the mountains, and interestingly, that website linked from the Nevada
DOW differs in the story of how they were introduced from other places I&#39;ve seen. We did glimpse many types of hawk,
eagle and corvid in the canyon, thankfully. Several small ground mammals and fish as well.&lt;/p&gt;
&lt;p&gt;I plan on coming back to the Ruby&#39;s at some point, I enjoyed the several days we spent there during this trip. Whenever
leaving the Rubies from the North, always stop at &lt;a href=&quot;https://www.cowboyjoecoffee.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Cowboy Joes&lt;/a&gt; for the caffeine.&lt;/p&gt;
&lt;div class=&quot;gallery&quot; data-gallery=&quot;&quot;&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/02-img-1556.jpg&quot; data-index=&quot;0&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/02-img-1556-thumb.jpg&quot; alt=&quot;A black Jeep Cherokee loaded with a roof cargo box and a rear cargo carrier, parked alone in an empty asphalt lot with dry brown hills behind it.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;My trusty steed; the 1998 Jeep XJ. I should have fixed my exhaust tip before this trip though...I lost some boots as a result.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/03-img-1557.jpg&quot; data-index=&quot;1&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/03-img-1557-thumb.jpg&quot; alt=&quot;The open rear hatch of the Jeep showing camp gear packed to the roof: stacked tan storage totes, a green military-style trunk, a folding table on edge, bedding and a spare tire.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;It packs a lot.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/04-img-1558.jpg&quot; data-index=&quot;2&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/04-img-1558-thumb.jpg&quot; alt=&quot;A pale rocky summit rising above a dense green slope of aspen and brush, under a deep blue sky with scattered white clouds.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;A Ruby Mountain&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/05-img-1559.jpg&quot; data-index=&quot;3&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/05-img-1559-thumb.jpg&quot; alt=&quot;A narrow paved road ending in a turnaround, hemmed by young aspen, with a gray glacially carved ridgeline beyond.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;The view from our campsite&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/06-img-1560.jpg&quot; data-index=&quot;4&quot; data-width=&quot;1200&quot; data-height=&quot;1600&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/06-img-1560-thumb.jpg&quot; alt=&quot;A shallow creek running over pale cobbles and gravel, edged by grass and willow, with a fallen bare branch overhanging the water.&quot; width=&quot;360&quot; height=&quot;480&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;The Lamoille Creek&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/07-img-1561.jpg&quot; data-index=&quot;5&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/07-img-1561-thumb.jpg&quot; alt=&quot;Whitewater breaking around boulders in a fast, wide creek, with willows on both banks and a dark rock face in the distance.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;The Lamoille Creek up from our campsite.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/08-img-1562.jpg&quot; data-index=&quot;6&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/08-img-1562-thumb.jpg&quot; alt=&quot;A rocky footpath leading up a canyon between stands of aspen toward a jagged gray peak.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Look how green that mountain is. Hard to believe you&amp;#39;re in Nevada.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/09-img-1563.jpg&quot; data-index=&quot;7&quot; data-width=&quot;1200&quot; data-height=&quot;1600&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/09-img-1563-thumb.jpg&quot; alt=&quot;A clear creek over a gravel bed in the foreground, with cottonwoods along the bank and a tall striped canyon wall rising behind.&quot; width=&quot;360&quot; height=&quot;480&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/11-img-1565.jpg&quot; data-index=&quot;8&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/11-img-1565-thumb.jpg&quot; alt=&quot;A set-up campsite: a dome tent under aspens, a camp kitchen table with a red plaid cloth covered in cookware and gear, a portable stove stand, and two hard coolers on the ground.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Our setup for dinner.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/14-img-1569.jpg&quot; data-index=&quot;9&quot; data-width=&quot;1200&quot; data-height=&quot;1600&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/14-img-1569-thumb.jpg&quot; alt=&quot;A shaded creek running clear over a golden gravel bottom, boxed in by a large streamside boulder and overhanging brush.&quot; width=&quot;360&quot; height=&quot;480&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Thomas Canyon Creek&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/15-img-1570.jpg&quot; data-index=&quot;10&quot; data-width=&quot;1200&quot; data-height=&quot;1600&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/15-img-1570-thumb.jpg&quot; alt=&quot;Water rushing white down a rock chute, seen through a screen of leafy branches in the foreground.&quot; width=&quot;360&quot; height=&quot;480&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;A small waterfall in Thomas Canyon, there are several bigger than this near the trail.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/16-img-1571.jpg&quot; data-index=&quot;11&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/16-img-1571-thumb.jpg&quot; alt=&quot;Looking down from a rock ledge at a creek and a house-sized boulder below, surrounded by conifers and aspen in morning light.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Love a shadow shot&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/17-img-1572.jpg&quot; data-index=&quot;12&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/17-img-1572-thumb.jpg&quot; alt=&quot;A small waterfall spilling down a bedrock step beside a bare dead tree, with green mountainside rising behind.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;There&amp;#39;s more waterfalls up the trail, here&amp;#39;s another one.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/18-img-1573.jpg&quot; data-index=&quot;13&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/18-img-1573-thumb.jpg&quot; alt=&quot;A long band of broken tan cliffs along a ridgetop, lit by early sun against a cloudless blue sky, with brush in the foreground.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Thomas Canyon wall&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/19-img-1574.jpg&quot; data-index=&quot;14&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/19-img-1574-thumb.jpg&quot; alt=&quot;A U-shaped glacial canyon opening between two rock walls, its floor covered in green brush and scattered aspen.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/21-img-1576.jpg&quot; data-index=&quot;15&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/21-img-1576-thumb.jpg&quot; alt=&quot;A steep, rubbly mountain face with pinnacles along its crest, framed on the right by a lone dark conifer.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/22-img-1577.jpg&quot; data-index=&quot;16&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/22-img-1577-thumb.jpg&quot; alt=&quot;A waterfall pouring over a low rock lip into a shaded pool, ringed by pines and a stacked-rock bank.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/23-img-1578.jpg&quot; data-index=&quot;17&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/23-img-1578-thumb.jpg&quot; alt=&quot;Looking down at the pool below the falls, with a low stone retaining wall along the far bank and pines leaning over the water.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/24-img-1579.jpg&quot; data-index=&quot;18&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/24-img-1579-thumb.jpg&quot; alt=&quot;A dead, bark-stripped tree standing among fallen limbs on a canyon slope, with sunlit rock walls on either side.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/25-img-1580.jpg&quot; data-index=&quot;19&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/25-img-1580-thumb.jpg&quot; alt=&quot;A weathered snag in the left foreground with a serrated rock ridge behind it, deadfall and mountain mahogany on the ground.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/26-img-1581.jpg&quot; data-index=&quot;20&quot; data-width=&quot;1200&quot; data-height=&quot;1600&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/26-img-1581-thumb.jpg&quot; alt=&quot;A distant spired peak framed at the head of a shaded canyon, seen over green brush and aspen in the foreground.&quot; width=&quot;360&quot; height=&quot;480&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Mount Fitzgerald, 11,220 ft. Only the 39th highest mountain in the state tho.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/27-img-1582.jpg&quot; data-index=&quot;21&quot; data-width=&quot;1200&quot; data-height=&quot;1600&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/27-img-1582-thumb.jpg&quot; alt=&quot;A creek threading down a brushy draw between deadfall and aspen, with a sunlit ridge above and a peak in the distance.&quot; width=&quot;360&quot; height=&quot;480&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/28-img-1583.jpg&quot; data-index=&quot;22&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/28-img-1583-thumb.jpg&quot; alt=&quot;Morning shadow across a canyon: dark brushy slope on the left, sunlit gray cliffs on the right, and whitewater in the lower corner.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/29-img-1584.jpg&quot; data-index=&quot;23&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/29-img-1584-thumb.jpg&quot; alt=&quot;An open hillside meadow of silver sagebrush and low green shrubs with scattered yellow wildflowers, rising to a rocky rim.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Fitz was getting closer, still had decent snow.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/30-img-1585.jpg&quot; data-index=&quot;24&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/30-img-1585-thumb.jpg&quot; alt=&quot;A close view of the same slope, orange paintbrush and other wildflowers mixed through sagebrush and green undergrowth.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Flowers were out in June.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/31-img-1586.jpg&quot; data-index=&quot;25&quot; data-width=&quot;1200&quot; data-height=&quot;1600&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/31-img-1586-thumb.jpg&quot; alt=&quot;A thin stream falling down a grassy, sage-covered slope from a rocky outcrop high above, under clear blue sky.&quot; width=&quot;360&quot; height=&quot;480&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;A shot of Fitzgerald&amp;#39;s long tail. We turned around here on the trail.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/32-img-1587.jpg&quot; data-index=&quot;26&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/32-img-1587-thumb.jpg&quot; alt=&quot;A broad glacial canyon with a green valley floor and a long buttressed wall of gray rock along its far side.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Literally just turned around and snapped this shot.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/33-img-1588.jpg&quot; data-index=&quot;27&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/33-img-1588-thumb.jpg&quot; alt=&quot;A pale granite ridge dotted with scattered conifers above a green meadow, with the white roof of a parked car in the corner.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;This is further up the Lamoille Canyon road from our campground. Not quite at the top yet.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/34-img-1589.jpg&quot; data-index=&quot;28&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/34-img-1589-thumb.jpg&quot; alt=&quot;A wide slab-rock hillside speckled with pines above a grassy basin, photographed over the hoods of two parked cars.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/35-img-1590.jpg&quot; data-index=&quot;29&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/35-img-1590-thumb.jpg&quot; alt=&quot;A trailhead parking lot with the Jeep, a van, and a sedan lined up in marked stalls below the rocky canyon headwall.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;The Ruby Crest Trailhead parking lot.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/36-img-1591.jpg&quot; data-index=&quot;30&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/36-img-1591-thumb.jpg&quot; alt=&quot;A dirt trail crossing a green alpine meadow toward a cirque of snow-streaked peaks, with hikers small on the path.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Backpackers&amp;#39; starting their trip.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/37-img-1592.jpg&quot; data-index=&quot;31&quot; data-width=&quot;1200&quot; data-height=&quot;1600&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/37-img-1592-thumb.jpg&quot; alt=&quot;Tall meadow grass and a bleached log in the foreground, a small pond behind, and a pine-studded rock ridge above.&quot; width=&quot;360&quot; height=&quot;480&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/38-img-1593.jpg&quot; data-index=&quot;32&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/38-img-1593-thumb.jpg&quot; alt=&quot;A whitish granite slope with sparse conifers, a thread of meltwater running down a gully in its center.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/39-img-1594.jpg&quot; data-index=&quot;33&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/39-img-1594-thumb.jpg&quot; alt=&quot;A rounded rocky summit above an open sweep of light granite and scattered pines, deep blue sky overhead.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;The avalanche chute.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/40-img-1595.jpg&quot; data-index=&quot;34&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/40-img-1595-thumb.jpg&quot; alt=&quot;A scratched brown interpretive sign titled &amp;quot;Avalanche Chute&amp;quot; with two illustrated diagrams, standing in a meadow.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/41-img-1596.jpg&quot; data-index=&quot;35&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/41-img-1596-thumb.jpg&quot; alt=&quot;A grassy valley floor below a long timbered ridge, with a patch of snow lingering on a shaded peak at far left.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/42-img-1597.jpg&quot; data-index=&quot;36&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/42-img-1597-thumb.jpg&quot; alt=&quot;A small clear stream winding through a green meadow past flat stepping stones, with snow-patched peaks at the head of the valley.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;This area was really interesting, there was a small pond that was elevated maybe 3 feet above the surrounding ground which was an odd perspective. The photo doesn&amp;#39;t really capture it. The pond isn&amp;#39;t even in it, but it&amp;#39;s directly to the right of this photo.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/43-img-1598.jpg&quot; data-index=&quot;37&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/43-img-1598-thumb.jpg&quot; alt=&quot;A meandering meadow stream cut into thick grass, leading the eye toward a jagged snow-flecked headwall under a few white clouds.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Many trout in these waters.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/44-img-1599.jpg&quot; data-index=&quot;38&quot; data-width=&quot;1200&quot; data-height=&quot;1600&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/44-img-1599-thumb.jpg&quot; alt=&quot;A shallow stream running straight through a green alpine meadow toward the rocky peaks at the canyon head.&quot; width=&quot;360&quot; height=&quot;480&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;(Conan) Trout, man. The Kyuss song, the Rambo character, and what I said here under my breath.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/45-img-1600.jpg&quot; data-index=&quot;39&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/45-img-1600-thumb.jpg&quot; alt=&quot;A small blue lake on the canyon floor, ringed by willow and aspen, with steep rock walls closing in on both sides.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;All the water in Nevada seems to be in the Rubies. This is a different pond than what I mentioned before.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/46-img-1601.jpg&quot; data-index=&quot;40&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/46-img-1601-thumb.jpg&quot; alt=&quot;A green mountainside topped with banded gray cliffs, above a marshy flat and the edge of the lake at right.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/47-img-1602.jpg&quot; data-index=&quot;41&quot; data-width=&quot;1200&quot; data-height=&quot;1600&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/the-ruby-mountains-2026/images/47-img-1602-thumb.jpg&quot; alt=&quot;An orange and black tortoiseshell butterfly resting with wings open on the white bark of an aspen trunk.&quot; width=&quot;360&quot; height=&quot;480&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Butterflies and moths were abundant in the Rubies; thankfully mosquitoes were absent at this time.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;
</content>
  </entry>
  <entry>
    <title>Bears Ears National Monument</title>
    <link href="https://nathangilbert.com/trips/bears-ears-2017/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/trips/bears-ears-2017/</id>
    <published>2026-08-09T00:00:00Z</published>
    <updated>2026-08-16T00:00:00Z</updated>
    <category term="hiking"/>
    <summary>A trip through the monument as it existed in 2017, with thoughts from 2026.</summary><content type="html">&lt;h2&gt;Bears Ears, May 2017&lt;/h2&gt;
&lt;p&gt;This &lt;a href=&quot;https://www.blm.gov/visit/bears-ears-national-monument&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;National Monument&lt;/a&gt; is back in the news; yet again reduced in size. There are &lt;a href=&quot;https://www.landdesk.org&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;lots&lt;/a&gt; of &lt;a href=&quot;https://www.bearsearscoalition.org/bears-ears-monument-reduction-2026/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;people&lt;/a&gt;
&lt;a href=&quot;https://www.hcn.org/articles/bears-ears-cuts-also-end-first-of-its-kind-tribal-land-commission/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;better&lt;/a&gt; able to articulate why this is bad and not good than me. I&#39;ve only been to the monument a single time so
far. It&#39;s a beautiful place with deep meaning for many people.&lt;/p&gt;
&lt;p&gt;The monument was originally proclaimed on December 28, 2016, so our visit was around 5 months after its creation. From
what I remember there wasn&#39;t really a visitor center or even a permanent sign at the entrance, but more of a cardboard
&amp;quot;hey there&#39;s a monument here!&amp;quot; type of thing.&lt;/p&gt;
&lt;p&gt;We spent several days in the region, visiting &lt;a href=&quot;https://www.nps.gov/nabr/index.htm&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Natural Bridges National Monument&lt;/a&gt; as well as driving down the Moki
Dugway switchbacks to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Valley_of_the_Gods&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Valley of the Gods&lt;/a&gt;. The switchbacks offer amazing views over the landscape and are fun to
drive down. Like many of these switchback roads, they look more intimidating in photos than they look when you&#39;re
actually driving down (or up) them. That said, be careful, a little mistake goes a long ways here. We stopped quickly at
&lt;a href=&quot;https://stateparks.utah.gov/parks/goosenecks/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Goosenecks State Park&lt;/a&gt; which has an amazing overlook of the San Juan river winding through desert canyons.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.blm.gov/visit/mule-canyon-interpretive-site&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Mule Canyon Kiva&lt;/a&gt; is another easy stop in this area. You can spend a day or several days in (the once and future)
Bears Ears. There&#39;s lot of exposed hiking in Bears Ears with little cover from the sun, so plan for that, but you get
to see a lot of natural and historical beauty throughout the monument. Driving by the &amp;quot;Ears&amp;quot; is a great memory of this
visit. Natural Bridges has one great hike that takes most of the day, you get to see many different arches. The hike is
an out-and-back style, we luckily got a ride back to the trailhead from an Australian man which saved us a lot of time
(and effort, of which we&#39;d already extended much of that day on the hike.)&lt;/p&gt;
&lt;div class=&quot;gallery&quot; data-gallery=&quot;&quot;&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/01-2017-05-05-06-55-29.jpg&quot; data-index=&quot;0&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/01-2017-05-05-06-55-29-thumb.jpg&quot; alt=&quot;Early sunlight on a red sandstone rim dropping to a green river bottom, with flat-topped buttes along the horizon.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;The morning sun makes the red rocks pop.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/02-2017-05-05-06-55-48.jpg&quot; data-index=&quot;1&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/02-2017-05-05-06-55-48-thumb.jpg&quot; alt=&quot;The sun just clearing a low mesa, its glare spread over a river bend in the canyon bottom, seen from a ledge of stepped red sandstone.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Sunrise on the morning we went to Bears Ears.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/03-2017-05-05-06-55-53.jpg&quot; data-index=&quot;2&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/03-2017-05-05-06-55-53-thumb.jpg&quot; alt=&quot;Flat slabs of red sandstone at the edge of an overlook, with the river and layered mesas beyond them in low morning light.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/04-2017-05-05-06-55-56.jpg&quot; data-index=&quot;3&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/04-2017-05-05-06-55-56-thumb.jpg&quot; alt=&quot;A dark SUV parked on a dirt pullout below a long red butte, its cliffs lit by early sun under a cloudless sky.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/05-2017-05-05-06-56-02.jpg&quot; data-index=&quot;4&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/05-2017-05-05-06-56-02-thumb.jpg&quot; alt=&quot;Long shadows of two people stretching across red desert ground toward a wall of eroded, banded cliffs.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/06-2017-05-05-07-53-41.jpg&quot; data-index=&quot;5&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/06-2017-05-05-07-53-41-thumb.jpg&quot; alt=&quot;A masonry entrance sign reading &amp;quot;Natural Bridges National Monument&amp;quot; with the Park Service arrowhead emblem, junipers behind it beside an empty road.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Always get a picture of the sign. There wasn&amp;#39;t even one for Bears Ears at this time.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/07-2017-05-05-10-06-15.jpg&quot; data-index=&quot;6&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/07-2017-05-05-10-06-15-thumb.jpg&quot; alt=&quot;Stone-and-mortar rooms built under a wide sandstone overhang, the rock arching above them streaked in orange and cream bands like flames.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;House on Fire in good light&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/08-2017-05-05-10-25-26.jpg&quot; data-index=&quot;7&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/08-2017-05-05-10-25-26-thumb.jpg&quot; alt=&quot;A canyon slope thick with juniper and pinyon, pale sandstone outcrops breaking through near the rim under a deep blue sky.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Love a Pinyon/Juniper forest.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/09-2017-05-05-10-25-36.jpg&quot; data-index=&quot;8&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/09-2017-05-05-10-25-36-thumb.jpg&quot; alt=&quot;The far wall of a green canyon, blocky sandstone ledges and shallow alcoves rising above scattered junipers.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;It&amp;#39;s challenging to find Utah Junipers for sale in any nursery here if you can believe it.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/10-2017-05-05-10-54-54.jpg&quot; data-index=&quot;9&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/10-2017-05-05-10-54-54-thumb.jpg&quot; alt=&quot;Looking up at a cliff dwelling tucked beneath a curving sandstone roof, small dark doorways set in a row along its masonry wall.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;House on Fire on the return in the shade.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/11-2017-05-05-11-36-43.jpg&quot; data-index=&quot;10&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/11-2017-05-05-11-36-43-thumb.jpg&quot; alt=&quot;A circular stone kiva dug below ground level, its mortared walls and interior benches sheltered by a modern post-and-beam roof.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Mule Canyon Kiva&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/12-2017-05-05-12-32-46.jpg&quot; data-index=&quot;11&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/12-2017-05-05-12-32-46-thumb.jpg&quot; alt=&quot;A brown road sign reading &amp;quot;Moki Dugway&amp;quot;, plastered edge to edge with stickers, standing in desert scrub.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;The Moki Dugway sign, under its usual coat of stickers.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/13-2017-05-05-12-33-17.jpg&quot; data-index=&quot;12&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/13-2017-05-05-12-33-17-thumb.jpg&quot; alt=&quot;The gravel shoulder at the top of the cliff, sagebrush and broken sandstone in front of a hazy desert plain far below.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Approaching Moki Dugway.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/14-2017-05-05-12-33-21.jpg&quot; data-index=&quot;13&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/14-2017-05-05-12-33-21-thumb.jpg&quot; alt=&quot;A dirt road running along the rim with a yellow arrow sign at its edge, the desert basin opening up beyond.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;The top of Moki Dugway switchbacks.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/15-2017-05-05-12-35-06.jpg&quot; data-index=&quot;14&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/15-2017-05-05-12-35-06-thumb.jpg&quot; alt=&quot;A long banded cliff running across the frame, its red and white layers dropping to a brushy talus slope and the flats beyond.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/16-2017-05-05-12-35-13.jpg&quot; data-index=&quot;15&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/16-2017-05-05-12-35-13-thumb.jpg&quot; alt=&quot;The edge of a high mesa seen from a sandstone ledge, with a pale desert plain stretching to the horizon below the cliffs.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/17-2017-05-05-12-35-53.jpg&quot; data-index=&quot;16&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/17-2017-05-05-12-35-53-thumb.jpg&quot; alt=&quot;A view from the clifftop down to the road switchbacking through red badlands and running off toward distant buttes.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;You don&amp;#39;t like the desert if these types of viewpoints don&amp;#39;t give you goosebumps.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/18-2017-05-05-12-35-56.jpg&quot; data-index=&quot;17&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/18-2017-05-05-12-35-56-thumb.jpg&quot; alt=&quot;A narrow road running straight across the red desert floor toward far-off mesas, seen from high above with brush in the foreground.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;To the Valley of the Gods.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/19-2017-05-05-12-36-03.jpg&quot; data-index=&quot;18&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/19-2017-05-05-12-36-03-thumb.jpg&quot; alt=&quot;Looking almost straight down at the dirt switchbacks of the Moki Dugway, with a vehicle small on one of the bends.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/20-2017-05-05-12-36-09.jpg&quot; data-index=&quot;19&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/20-2017-05-05-12-36-09-thumb.jpg&quot; alt=&quot;A hairpin bend of the gravel road far below, cut into steep red and grey layered rock.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/21-2017-05-05-12-36-17.jpg&quot; data-index=&quot;20&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/21-2017-05-05-12-36-17-thumb.jpg&quot; alt=&quot;The road threading down a red slope and out across a hazy desert plain, sagebrush in the foreground at the clifftop.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/22-2017-05-05-12-36-21.jpg&quot; data-index=&quot;21&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/22-2017-05-05-12-36-21-thumb.jpg&quot; alt=&quot;A blocky sandstone promontory at the left, with the desert plain and distant buttes stretching out past it under a clear sky.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/23-2017-05-05-13-05-25.jpg&quot; data-index=&quot;22&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/23-2017-05-05-13-05-25-thumb.jpg&quot; alt=&quot;A muddy river winding in tight loops through a deep, sharply layered grey canyon cut into an otherwise flat desert.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;The San Juan river.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/24-2017-05-05-13-06-19.jpg&quot; data-index=&quot;23&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/24-2017-05-05-13-06-19-thumb.jpg&quot; alt=&quot;The river doubling back on itself around a long fin of banded rock, hundreds of feet below the canyon rim.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Goosenecks State Park&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/25-2017-05-05-13-06-31.jpg&quot; data-index=&quot;24&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/25-2017-05-05-13-06-31-thumb.jpg&quot; alt=&quot;Two arms of the same river running either side of a narrow rock peninsula, deep in the layered canyon below a flat red overlook.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/26-2017-05-05-14-51-34.jpg&quot; data-index=&quot;25&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/26-2017-05-05-14-51-34-thumb.jpg&quot; alt=&quot;Two flat-topped red buttes standing side by side above a forested ridge under a clear blue sky.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;The Bears Ears&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;gallery-item&quot;&gt;&lt;a class=&quot;gallery-link&quot; href=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/27-2017-05-05-14-51-48.jpg&quot; data-index=&quot;26&quot; data-width=&quot;1600&quot; data-height=&quot;1200&quot;&gt;&lt;img src=&quot;https://nathangilbert.com/trips/bears-ears-2017/images/27-2017-05-05-14-51-48-thumb.jpg&quot; alt=&quot;The pair of Bears Ears buttes on the horizon, seen across a foreground of pinyon, juniper, and flowering brush.&quot; width=&quot;480&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;gallery-caption&quot;&gt;Another shot of the Bears Ears.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;
</content>
  </entry>
  <entry>
    <title>Mock Where It’s Imported, Not Defined</title>
    <link href="https://nathangilbert.com/thoughts/mocking-madness/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/thoughts/mocking-madness/</id>
    <published>2025-10-06T00:00:00Z</published>
    <updated>2026-08-10T00:00:00Z</updated>
    <category term="coding"/>
    <summary>Understanding why you need to mock where a function is imported in Python tests.</summary><content type="html">&lt;h2&gt;Mocking Where It’s Imported (Not Defined)&lt;/h2&gt;
&lt;p&gt;If you’ve ever written tests in Python using &lt;code&gt;pytest&lt;/code&gt; and &lt;code&gt;unittest.mock&lt;/code&gt;, you’ve probably seen this
confusing bit of advice:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“You have to mock where the function is &lt;strong&gt;imported&lt;/strong&gt;, not where it’s &lt;strong&gt;defined&lt;/strong&gt;.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At first glance, this seems counterintuitive — why should you patch the same function name in
multiple places when it’s clearly defined in one module? The answer has everything to do with &lt;strong&gt;how
Python imports work&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;The Import Mechanism&lt;/h3&gt;
&lt;p&gt;When you write this:&lt;/p&gt;
&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# foo.py&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;get_data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;real data&quot;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# And in another module there is this&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# bar.py&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; foo &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; get_data

&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token string-interpolation&quot;&gt;&lt;span class=&quot;token string&quot;&gt;f&quot;processed &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;get_data&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Python copies a reference to &lt;code&gt;foo.get_data&lt;/code&gt; into the namespace of &lt;code&gt;bar&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So &lt;code&gt;bar.get_data&lt;/code&gt; is not dynamically looked up each time — it’s bound once when &lt;code&gt;bar&lt;/code&gt; is imported.&lt;/p&gt;
&lt;p&gt;That means if you want to replace &lt;code&gt;get_data()&lt;/code&gt; in your tests, mocking &lt;code&gt;foo.get_data&lt;/code&gt; won’t help,
because bar already has its own local reference to the original function.&lt;/p&gt;
&lt;h2&gt;The Wrong Way&lt;/h2&gt;
&lt;p&gt;This is a common mistake:&lt;/p&gt;
&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# test_bar.py&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; unittest&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mock &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; patch
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; bar

&lt;span class=&quot;token decorator annotation punctuation&quot;&gt;@patch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;foo.get_data&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; return_value&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;fake data&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;test_process&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;mock_get&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; bar&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;process&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;assert&lt;/span&gt; result &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;processed fake data&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This test fails, because bar still calls the real &lt;code&gt;get_data()&lt;/code&gt; as it imported from foo before you
patched it. Your patch changed &lt;code&gt;foo.get_data&lt;/code&gt;, not &lt;code&gt;bar.get_data&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;The Right Way&lt;/h2&gt;
&lt;p&gt;Instead, you need to &lt;em&gt;patch the reference that &lt;code&gt;bar&lt;/code&gt; uses&lt;/em&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token decorator annotation punctuation&quot;&gt;@patch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;bar.get_data&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; return_value&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;fake data&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;test_process&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;mock_get&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; bar&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;process&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;assert&lt;/span&gt; result &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;processed fake data&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now it works! The &lt;code&gt;unittest.mock.patch&lt;/code&gt; swapped out the object that &lt;code&gt;bar&lt;/code&gt; actually calls.&lt;/p&gt;
&lt;h3&gt;In a pytest fixture&lt;/h3&gt;
&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; pytest
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; unittest&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mock &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; patch

&lt;span class=&quot;token decorator annotation punctuation&quot;&gt;@pytest&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fixture&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;mock_get_data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;with&lt;/span&gt; patch&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;bar.get_data&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; return_value&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;mocked&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; mock&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;yield&lt;/span&gt; mock

&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;test_process&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;mock_get_data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; bar &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; process
    &lt;span class=&quot;token keyword&quot;&gt;assert&lt;/span&gt; process&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;processed mocked&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Why This Happens&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;import&lt;/code&gt; &lt;a href=&quot;https://docs.python.org/3/reference/import.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;statements&lt;/a&gt; in Python work by copying a reference from the source module into the importing
module’s namespace. Once that reference is bound, the importer doesn’t look it up again. This is
different from JavaScript’s live bindings, where imports always reflect the current value of the
export. So when you patch something, you’re not changing a global function everywhere — you’re just
swapping out one module’s reference to it.&lt;/p&gt;
&lt;p&gt;Mocking in Python is about replacing references, not rewriting definitions. Always patch in the
namespace where the code under test looks up the function, not where it was first written. That
mental model will save you from countless hours of “why isn’t my mock working?” frustration — and
make your tests more predictable.&lt;/p&gt;
&lt;h2&gt;Quick Rules of Thumb&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Patch where the function is looked up. Think in terms of “who is calling it,” not “where it
lives.”&lt;/li&gt;
&lt;li&gt;Use fully qualified paths. Always patch using the dotted path as it’s imported in the module
under test (e.g., &lt;code&gt;bar.get_data&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Patch as close to the call site as possible. If &lt;code&gt;bar.process&lt;/code&gt; calls it, patch &lt;code&gt;bar.get_data&lt;/code&gt;.
If &lt;code&gt;baz&lt;/code&gt; imports &lt;code&gt;bar&lt;/code&gt; and calls &lt;code&gt;bar.process()&lt;/code&gt;, patch in &lt;code&gt;baz&lt;/code&gt; if that’s where the call
happens.&lt;/li&gt;
&lt;/ol&gt;
</content>
  </entry>
  <entry>
    <title>Pickleball Struggle Session</title>
    <link href="https://nathangilbert.com/thoughts/pickleball/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/thoughts/pickleball/</id>
    <published>2025-09-06T00:00:00Z</published>
    <updated>2026-08-10T00:00:00Z</updated>
    <category term="humor"/>
    <summary>A recantation of my previous disdain for pickleball.</summary><content type="html">&lt;p&gt;It is with a spirit of humility and discipline that I, the undersigned, issue this public
recantation. For too long I have held erroneous views regarding the practice of pickleball. I
publicly denounced it as a distraction, an opiate for retirees, and ultimately, a diversion from the
true struggle. I scoffed at the plastic ball, the so-called &amp;quot;kitchen,&amp;quot; and the truncated court as
symbols of decadence and decline. In doing so, I not only slandered the activity itself but also
revealed the limitations of my physical and ideological development.&lt;/p&gt;
&lt;p&gt;Through the process of criticism and self-criticism, and guided by the patient intervention of my
comrades, I have come to see that pickleball is not the enemy. Rather, it is a collective,
participatory endeavor that fosters solidarity, inter-generational exchange, and joyful movement. To
dismiss it as frivolous was to lapse into elitism and cultural dogmatism, alienating myself from the
very masses I claim to serve.&lt;/p&gt;
&lt;p&gt;Signed: Nathan Gilbert&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Jeep Misc</title>
    <link href="https://nathangilbert.com/thoughts/jeep-misc/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/thoughts/jeep-misc/</id>
    <published>2025-02-01T00:00:00Z</published>
    <updated>2026-08-10T00:00:00Z</updated>
    <category term="notes"/>
    <summary>Random Jeep stuff, including installation instructions for various parts.</summary><content type="html">&lt;h2&gt;Random Jeep Stuff&lt;/h2&gt;
&lt;h3&gt;XJ Trailer Hitch Installation Instructions&lt;/h3&gt;
&lt;p&gt;I replaced my old rusty original trailer hitch and was surprised you can still purchase a Mopar factory trailer hitch
for a 97-01 XJ. &lt;a href=&quot;https://nathangilbert.com/thoughts/files/Mopar-1997-2001-Jeep-Cherokee-Trailer-Hitch-Installation-Manual.pdf&quot;&gt;Instructions are here&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;XJ Rear Splash Guard Installation Instructions&lt;/h3&gt;
&lt;p&gt;I found a NOS set of mudflaps for my 97-01 XJ. The installation instructions were even in the box, figured I post
them in case anyone else needs them: &lt;a href=&quot;https://nathangilbert.com/thoughts/files/Mopar-82202718-XJ-Rear-Splashguard-Installation-Instructions.pdf&quot;&gt;Here they are.&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;TJ Fog Light Stone Guard Installation Instructions&lt;/h3&gt;
&lt;p&gt;I found a NOS set of fog-light stone guards for my 1998 TJ Wrangler. The &lt;a href=&quot;https://nathangilbert.com/thoughts/files/Mopar-82202586-Stone-Guard-Kit-Installation-Manual.pdf&quot;&gt;installation instructions&lt;/a&gt; were even in
the box, too. These are also valid instructions for &lt;em&gt;Mopar 82202585&lt;/em&gt; and &lt;em&gt;Mopar 82204503&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Mopar Luggage Carrier Kit Installation Instructions&lt;/h3&gt;
&lt;p&gt;I found a NOS Mopar Luggage Carrier Kit for my 1998 XJ Cherokee. The &lt;a href=&quot;https://nathangilbert.com/thoughts/files/Mopar-82207198-Luggage-Carrier-Kit-Installation-Manual.pdf&quot;&gt;installation instructions&lt;/a&gt; were even in the
box, too. These are also valid instructions for &lt;em&gt;Mopar 82207198&lt;/em&gt; and &lt;em&gt;Mopar 82208301&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Mopar Canoe Carrier Kit Installation Instructions&lt;/h3&gt;
&lt;p&gt;These are the &lt;a href=&quot;https://nathangilbert.com/thoughts/files/Mopar-822004700-Canoe-Carrier-Manual.pdf&quot;&gt;instructions&lt;/a&gt; for a &lt;em&gt;Mopar 822004700&lt;/em&gt; Canoe Carrier Kit.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Lint for Complexity</title>
    <link href="https://nathangilbert.com/thoughts/complexity-linting/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/thoughts/complexity-linting/</id>
    <published>2024-12-24T00:00:00Z</published>
    <updated>2026-08-10T00:00:00Z</updated>
    <category term="coding"/>
    <summary>How to lint for complexity in your code.</summary><content type="html">&lt;h2&gt;Understanding &amp;amp; Linting for Cyclomatic Complexity&lt;/h2&gt;
&lt;h3&gt;Background&lt;/h3&gt;
&lt;p&gt;There are many ways to measure the complexity of a piece of software: number of lines, Big O, and so on. &lt;a href=&quot;http://www.literateprogramming.com/mccabe.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Cyclomatic
Complexity&lt;/a&gt; attempts to do this by enumerating all linearly independent paths through a segment of code. Linearly
independent means that each path has at least one edge that is not in another path (if viewing the code as a graph).&lt;/p&gt;
&lt;p&gt;McCabe defined CC using graph theory as:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;M = E - N + 2P&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;E&lt;/code&gt; = edges in the graph&lt;/li&gt;
&lt;li&gt;&lt;code&gt;N&lt;/code&gt; = nodes in the graph&lt;/li&gt;
&lt;li&gt;&lt;code&gt;P&lt;/code&gt; = number of connected components (think modules) of a program&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If a program had no control flow statements (if, switch, goto, etc.), then the CC would be 1. If a program has 1
&lt;em&gt;if&lt;/em&gt; statement, then its CC is 2.&lt;/p&gt;
&lt;p&gt;A program that has 50 lines consisting of 25 consecutive &amp;quot;if/then&amp;quot; constructs will have over 33 million (&lt;code&gt;2^{25}&lt;/code&gt;)
distinct paths through the program. There&#39;s no way all those paths are getting tested!&lt;/p&gt;
&lt;p&gt;Let&#39;s analyze the following snippet of Python code:&lt;/p&gt;
&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;cc_example&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  a &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; b &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    a &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; b
  &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    a &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; c
  &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;What is the cyclomatic complexity of this method?&lt;/p&gt;
&lt;p&gt;We can draw the graph of this method:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://nathangilbert.com/images/cc.png&quot; alt=&quot;Cyclomatic Complexity Graph&quot;&gt;&lt;/p&gt;
&lt;p&gt;The graph has seven nodes and seven edges, so its cyclomatic complexity is:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;7 - 7 + 2 = 2&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Suggested Levels of CC&lt;/h3&gt;
&lt;p&gt;There doesn&#39;t seem to be an agreed-upon threshold for what amount of CC is too much, though generally the higher
your code&#39;s CC, the harder it is to maintain. This naturally grows with the number of lines in your software.&lt;/p&gt;
&lt;p&gt;According to a random &lt;a href=&quot;https://softwareengineering.stackexchange.com/questions/101830/what-does-the-cyclomatic-complexity-of-my-code-mean&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;StackExchange post&lt;/a&gt;, the following is a rubric for CC scores and their meaning:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt; 10&lt;/strong&gt;: Easy to maintain&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;11-20&lt;/strong&gt;: Harder to maintain&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;21+&lt;/strong&gt;: Candidates for refactoring/redesign&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other &lt;a href=&quot;https://www.aivosto.com/project/help/pm-complexity.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;websites&lt;/a&gt; have slightly different tolerances, but I like the StackExchange metric for methods.&lt;/p&gt;
&lt;h3&gt;Pros of Using CC in Your Project&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Helps write code that is easier to read &amp;amp; reason about&lt;/li&gt;
&lt;li&gt;Easier to write unit tests (fewer paths that need to be explored)&lt;/li&gt;
&lt;li&gt;Easy to calculate with plugins to popular linters&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;ESLint Settings for Cyclomatic Complexity&lt;/h3&gt;
&lt;p&gt;If you&#39;re using JavaScript or TypeScript in your project, you&#39;ve already got a Cyclomatic Complexity checker at hand.
You just need to configure it to run when you&#39;re linting.&lt;/p&gt;
&lt;p&gt;The following additions to your &lt;code&gt;.eslintrc&lt;/code&gt; file will activate the complexity rules and several other related checks.
The &lt;code&gt;complexity&lt;/code&gt; rule below measures Cyclomatic Complexity specifically. Here, it is set to raise a linting error if
the complexity of a method is above 5.&lt;/p&gt;
&lt;p&gt;Many of the other rules measure things like clause depth and the number of lines in a method.&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;rules&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;complexity&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;array-callback-return&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;max-statements&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;max-statements-per-line&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;max&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;max-nested-callbacks&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;max-depth&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;max&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;max-lines&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;no-return-assign&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;no-param-reassign&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;error&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Some tricks I use to make devlife easier</title>
    <link href="https://nathangilbert.com/thoughts/dev-life-hacks/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/thoughts/dev-life-hacks/</id>
    <published>2024-12-24T00:00:00Z</published>
    <updated>2026-08-10T00:00:00Z</updated>
    <category term="coding"/>
    <summary>Shell aliases, history search, directory jumping, and IDE plugins I keep set up.</summary><content type="html">&lt;p&gt;&lt;img src=&quot;https://nathangilbert.com/images/desktop-up.jpg&quot; alt=&quot;Desktop setup&quot; style=&quot;width:300px; height:auto;&quot; width=&quot;600&quot; height=&quot;600&quot; decoding=&quot;async&quot;&gt;&lt;/p&gt;
&lt;h2&gt;Subjective Dev Life Hacks&lt;/h2&gt;
&lt;h3&gt;Aliases&lt;/h3&gt;
&lt;p&gt;Aliases are available in most modern shells. They save time by reducing the amount of characters needed to invoke
common commands.&lt;/p&gt;
&lt;pre class=&quot;language-fish&quot;&gt;&lt;code class=&quot;language-fish&quot;&gt;alias ga=&#39;git add . and git add -u .&#39;
alias gb=&#39;git branch&#39;
alias gs=&#39;git status&#39;
alias gt=&#39;cd (git rev-parse --show-cdup)&#39;
alias gbd=&#39;git branch --delete&#39;
alias gca=&#39;git commit --amend&#39;
alias glg=&quot;git log --pretty=format:&#39;%Cred%h%Creset -%Creset %s %Cgreen(%cr) %C(bold blue)&lt;%an&gt;%Creset&#39; --abbrev-commit&quot;
alias gpr=&#39;git pull --rebase&#39;
alias nus=&#39;nvm use stable&#39;
alias gcam=&#39;git commit -a -m&#39;
alias gcan=&#39;git commit --amend --no-edit&#39;
alias gcma=&#39;git checkout main&#39;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Git Decorations in Your Shell&lt;/h3&gt;
&lt;p&gt;You spend a lot of time in your shell, make it nice to look at and work for you.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bash&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/magicmonty/bash-git-prompt&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Bash Git Prompt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zsh&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ohmyzsh/ohmyzsh&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Oh My Zsh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Flower7C3/oh-flowers-zsh-theme&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Oh Flowers Zsh Theme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/unixorn/awesome-zsh-plugins&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Awesome Zsh Plugins&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fish&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jorgebucaran/awsm.fish&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Awesome Fish&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jorgebucaran/fisher&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Fisher&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Command History and Searching&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bash&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.linuxcommands.site/linux-text-processing-commands/6-methods-of-executing-historical-commands-in-linux-bash/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;6 Methods of Executing Historical Commands in Bash&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zsh&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zsh-users/zsh-completions&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Zsh Completions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Zsh-Packages/fzf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;fzf for Zsh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fish&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;History is built-in!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PatrickF1/fzf.fish&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;fzf for Fish&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Directory Jumping&lt;/h3&gt;
&lt;p&gt;Life&#39;s too short to type long directory names.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bash&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rupa/z/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Z for Bash&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zsh&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/agkozak/zsh-z&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Zsh-z&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fish&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jethrokuan/z&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;z for Fish&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;IDE Plugins&lt;/h3&gt;
&lt;p&gt;You probably spend even more time in your IDE, so spruce it up a bit.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Shortcuts&lt;/strong&gt;: &lt;a href=&quot;https://dev.to/lampewebdev/the-guide-to-visual-studio-code-shortcuts-higher-productivity-and-30-of-my-favourite-shortcuts-you-need-to-learn-mb3&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;The Guide to VSCode Shortcuts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ESLint&lt;/strong&gt;: &lt;a href=&quot;https://github.com/Microsoft/vscode-eslint&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;VSCode ESLint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code Spell Checker&lt;/strong&gt;: &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Spell Checker Plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rainbow Brackets&lt;/strong&gt;: &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=2gua.rainbow-brackets&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Rainbow Brackets Plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jest&lt;/strong&gt;: &lt;a href=&quot;https://github.com/jest-community/vscode-jest&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Jest Plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prettier&lt;/strong&gt;: &lt;a href=&quot;https://github.com/prettier/prettier-vscode&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Prettier VSCode Plugin&lt;/a&gt;, run it on save!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vim&lt;/strong&gt;: 😁 😈&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Some handy git commands</title>
    <link href="https://nathangilbert.com/thoughts/git-tricks/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/thoughts/git-tricks/</id>
    <published>2024-12-24T00:00:00Z</published>
    <updated>2026-08-10T00:00:00Z</updated>
    <category term="coding"/>
    <summary>Cherry-pick, interactive rebase, and reflog — commands for slicing and dicing commits.</summary><content type="html">&lt;h2&gt;Helpful Git Commands to Slice &amp;amp; Dice Commits&lt;/h2&gt;
&lt;p&gt;This &lt;a href=&quot;https://github.com/nathan-gilbert/conways-game-of-life&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Conway&#39;s Game of Life&lt;/a&gt; repo is the
basis for the examples here, specifically, the &lt;code&gt;activate-demo&lt;/code&gt; and &lt;code&gt;main&lt;/code&gt; branches.&lt;/p&gt;
&lt;h3&gt;git cherry-pick&lt;/h3&gt;
&lt;p&gt;Say you have a bunch of commits in a branch that you want to break up into multiple commits (for smaller Pull or
Merge Requests). If you have confidence that your commits are atomic, use &lt;code&gt;git cherry-pick&lt;/code&gt; to copy them to a new
branch. Use &lt;code&gt;git log&lt;/code&gt; to find the commit you want to copy in your current working branch, grab its &lt;em&gt;SHA&lt;/em&gt;. Checkout
the main branch and create a new branch off of it. Then change to the new branch and cherry-pick using:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; cherry-pick &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;SHA-of-COMMIT&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is useful when you want to grab a single commit from one branch and place it in another one.&lt;/p&gt;
&lt;h3&gt;git rebase -i&lt;/h3&gt;
&lt;p&gt;But what if you have multiple commits you want to rearrange or move?&lt;/p&gt;
&lt;p&gt;Rebase them. This is a very powerful tool. You can rewrite large chunks of history in one go with this command. You
can reorder commits. You can delete commits.&lt;/p&gt;
&lt;p&gt;When using this command, you specify the number of previous commits you&#39;d like to rebase with:&lt;/p&gt;
&lt;h3&gt;git rebase -i HEAD~5&lt;/h3&gt;
&lt;p&gt;This would target the previous 5 commits. The image below demonstrates the look of the rebase menu with 5 commits.
One thing to note is that the commits are listed oldest first.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://nathangilbert.com/images/rebase.png&quot; alt=&quot;Git Rebase&quot;&gt;&lt;/p&gt;
&lt;p&gt;Rebase commands:&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;p, pick &lt;commit&gt;: Actually use the commit in the result.
r, reword &lt;commit&gt;: Edit the commit message and use it.
e, edit &lt;commit&gt;: Amend this commit and use it.
s, squash &lt;commit&gt;: Use it but meld into the previous commit.
f, fixup &lt;commit&gt;: Like &quot;squash,&quot; but discard this commit&#39;s log message.
x, exec &lt;command&gt;: Run command (the rest of the line) using the shell.
b, break: Stop here (continues rebase with git rebase --continue).
d, drop &lt;commit&gt;: Remove the commit.
l, label &lt;label&gt;: Label the current HEAD with a name.
t, reset &lt;label&gt;: Reset HEAD to a label.
m, merge: Create a merge commit.&lt;/label&gt;&lt;/label&gt;&lt;/commit&gt;&lt;/commit&gt;&lt;/commit&gt;&lt;/commit&gt;&lt;/commit&gt;&lt;/commit&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can see, there is a lot you can do with this command. The most useful features for me are typically squashing
or rewording multiple commit messages in one step.&lt;/p&gt;
&lt;p&gt;Interactive Rebase is useful for editing multiple commits in a branch at the same time.&lt;/p&gt;
&lt;h3&gt;git reflog&lt;/h3&gt;
&lt;p&gt;This command is useful if you make mistakes using the previous commands. The reflog contains all the changes made to
the tips of branches.&lt;/p&gt;
&lt;p&gt;It&#39;s useful to find a safe place to reset your current working branch in case you&#39;ve made a mistake using
cherry-pick or rebase. For instance, you can see the current HEAD (the tips of the branches) on both your remote and
local branches. If you haven&#39;t pushed your incorrect local changes to a remote branch yet, you can recover the old
HEAD from the remote branch locally—thus reverting your mistake.&lt;/p&gt;
&lt;p&gt;Using reflog gives you a map back to safety if you&#39;ve made mistakes in your branch.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Jeep XJ Axle Information</title>
    <link href="https://nathangilbert.com/thoughts/jeep-axle-info/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/thoughts/jeep-axle-info/</id>
    <published>2024-12-24T00:00:00Z</published>
    <updated>2026-08-10T00:00:00Z</updated>
    <category term="notes"/>
    <summary>Information about Jeep XJ and MJ Dana 44 axles, including gear ratios and options.</summary><content type="html">&lt;p&gt;&lt;img src=&quot;https://nathangilbert.com/images/canyonlands-jeep.jpg&quot; alt=&quot;Jeeping in Canyonlands&quot; style=&quot;width:100%; height:auto;&quot; width=&quot;1600&quot; height=&quot;156&quot; decoding=&quot;async&quot;&gt;&lt;/p&gt;
&lt;h2&gt;Jeep XJ Axle Info&lt;/h2&gt;
&lt;h3&gt;Dana 44 Axles for MJs and XJs&lt;/h3&gt;
&lt;p&gt;The Trak-Lok options mean it is a Limited-Slip differential.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Serial #&lt;/th&gt;
&lt;th&gt;Host Model&lt;/th&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Gear Ratio&lt;/th&gt;
&lt;th&gt;Options&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;605287-1&lt;/td&gt;
&lt;td&gt;MJ&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td&gt;3.54:1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605287-2&lt;/td&gt;
&lt;td&gt;MJ&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td&gt;4.09:1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605287-3&lt;/td&gt;
&lt;td&gt;MJ&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td&gt;3.54:1&lt;/td&gt;
&lt;td&gt;Trak-Loc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605287-4&lt;/td&gt;
&lt;td&gt;MJ&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td&gt;4.09:1&lt;/td&gt;
&lt;td&gt;Trak-Loc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605342-1&lt;/td&gt;
&lt;td&gt;XJ&lt;/td&gt;
&lt;td&gt;87.5&lt;/td&gt;
&lt;td&gt;3.07:1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605342-2&lt;/td&gt;
&lt;td&gt;XJ&lt;/td&gt;
&lt;td&gt;87.5&lt;/td&gt;
&lt;td&gt;3.07:1&lt;/td&gt;
&lt;td&gt;Trac-Lok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605342-3&lt;/td&gt;
&lt;td&gt;XJ&lt;/td&gt;
&lt;td&gt;87.5&lt;/td&gt;
&lt;td&gt;3.54:1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605342-4&lt;/td&gt;
&lt;td&gt;XJ&lt;/td&gt;
&lt;td&gt;87.5&lt;/td&gt;
&lt;td&gt;3.54:1&lt;/td&gt;
&lt;td&gt;Trac-Lok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605342-5&lt;/td&gt;
&lt;td&gt;XJ&lt;/td&gt;
&lt;td&gt;87.5&lt;/td&gt;
&lt;td&gt;3.55:1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605342-6&lt;/td&gt;
&lt;td&gt;XJ&lt;/td&gt;
&lt;td&gt;87.5&lt;/td&gt;
&lt;td&gt;3.55:1&lt;/td&gt;
&lt;td&gt;Trac-Lok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605325-1&lt;/td&gt;
&lt;td&gt;MJ/XJ&lt;/td&gt;
&lt;td&gt;87.5-93.5&lt;/td&gt;
&lt;td&gt;3.54:1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605325-2&lt;/td&gt;
&lt;td&gt;MJ/XJ&lt;/td&gt;
&lt;td&gt;87.5-93.5&lt;/td&gt;
&lt;td&gt;4.09:1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605325-3&lt;/td&gt;
&lt;td&gt;MJ/XJ&lt;/td&gt;
&lt;td&gt;87.5-93.5&lt;/td&gt;
&lt;td&gt;3.07:1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605325-4&lt;/td&gt;
&lt;td&gt;MJ/XJ&lt;/td&gt;
&lt;td&gt;87.5-93.5&lt;/td&gt;
&lt;td&gt;3.07:1&lt;/td&gt;
&lt;td&gt;Trac-Lok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605325-5&lt;/td&gt;
&lt;td&gt;MJ/XJ&lt;/td&gt;
&lt;td&gt;87.5-93.5&lt;/td&gt;
&lt;td&gt;3.54:1&lt;/td&gt;
&lt;td&gt;Trac-Lok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605325-6&lt;/td&gt;
&lt;td&gt;MJ/XJ&lt;/td&gt;
&lt;td&gt;87.5-93.5&lt;/td&gt;
&lt;td&gt;3.54:1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605325-7&lt;/td&gt;
&lt;td&gt;MJ/XJ&lt;/td&gt;
&lt;td&gt;87.5-93.5&lt;/td&gt;
&lt;td&gt;3.54:1&lt;/td&gt;
&lt;td&gt;Trac-Lok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605325-8&lt;/td&gt;
&lt;td&gt;MJ/XJ&lt;/td&gt;
&lt;td&gt;87.5-93.5&lt;/td&gt;
&lt;td&gt;3.07:1&lt;/td&gt;
&lt;td&gt;Trac-Lok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605325-9&lt;/td&gt;
&lt;td&gt;MJ/XJ&lt;/td&gt;
&lt;td&gt;87.5-93.5&lt;/td&gt;
&lt;td&gt;3.54:1&lt;/td&gt;
&lt;td&gt;Trac-Lok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605325-10&lt;/td&gt;
&lt;td&gt;MJ/XJ&lt;/td&gt;
&lt;td&gt;87.5-93.5&lt;/td&gt;
&lt;td&gt;3.54:1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605325-11&lt;/td&gt;
&lt;td&gt;MJ/XJ&lt;/td&gt;
&lt;td&gt;87.5-93.5&lt;/td&gt;
&lt;td&gt;4.09:1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605325-12&lt;/td&gt;
&lt;td&gt;MJ/XJ&lt;/td&gt;
&lt;td&gt;87.5-93.5&lt;/td&gt;
&lt;td&gt;3.07:1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605325-13&lt;/td&gt;
&lt;td&gt;MJ/XJ&lt;/td&gt;
&lt;td&gt;87.5-93.5&lt;/td&gt;
&lt;td&gt;3.07:1&lt;/td&gt;
&lt;td&gt;Trac-Lok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605325-14&lt;/td&gt;
&lt;td&gt;MJ/XJ&lt;/td&gt;
&lt;td&gt;87.5-93.5&lt;/td&gt;
&lt;td&gt;3.54:1&lt;/td&gt;
&lt;td&gt;Trac-Lok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;605325-15&lt;/td&gt;
&lt;td&gt;MJ/XJ&lt;/td&gt;
&lt;td&gt;87.5-93.5&lt;/td&gt;
&lt;td&gt;4.09:1&lt;/td&gt;
&lt;td&gt;Trac-Lok&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I own a 605325-9 taken from a 1990 MJ. I had a shop convert it to fit an XJ (leafs over the axle,
relocated shock mounts) and installed it on my 1998 XJ.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>For cases where logic must do.</title>
    <link href="https://nathangilbert.com/thoughts/logical-fallacies/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/thoughts/logical-fallacies/</id>
    <published>2024-12-24T00:00:00Z</published>
    <updated>2026-08-10T00:00:00Z</updated>
    <category term="notes"/>
    <summary>A collection of logical fallacies that I wanted to keep around for posterity.</summary><content type="html">&lt;h2&gt;Logical Fallacies&lt;/h2&gt;
&lt;p&gt;Just some examples I wanted to keep around for posterity. I originally saw this posted on Usenet many years ago.&lt;/p&gt;
&lt;h3&gt;Fallacies that result from errors in induction&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Overstatement&lt;/strong&gt;: An unqualified generalization.&lt;br&gt;
&lt;em&gt;Examples&lt;/em&gt;:&lt;br&gt;
&amp;quot;My English teacher never gives A&#39;s.&amp;quot;&lt;br&gt;
&amp;quot;Almonds are good for the heart; everyone should eat 2 handfuls of almonds every day.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Hasty Generalization&lt;/strong&gt;: Stating a conclusion based on too little evidence or ignoring some evidence.
&lt;em&gt;Examples&lt;/em&gt;:&lt;br&gt;
&amp;quot;Running must be bad for your heart. Look what happened to Florence Joiner.&amp;quot;&lt;br&gt;
&amp;quot;My little Yamaha motorcycle never gave me problems. Yamaha motorcycles are the best.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Stereotyping&lt;/strong&gt;: Giving the same characteristics to everyone in a group.&lt;br&gt;
&lt;em&gt;Examples&lt;/em&gt;:&lt;br&gt;
&amp;quot;Used-car salesmen can&#39;t be trusted.&amp;quot;&lt;br&gt;
&amp;quot;Utah State graduates are all nerdy.&amp;quot;&lt;br&gt;
&amp;quot;Southern Utahns are all right-wing conservative fanatics who refuse to pay taxes and want to destroy the
environment.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Forced hypothesis&lt;/strong&gt;: Reaching a conclusion that is not supported by the evidence or is unnecessarily complicated.
&lt;em&gt;Example&lt;/em&gt;:&lt;br&gt;
&amp;quot;Jerry and Kim live next door to each other, so they must be really good friends.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Non sequitur&lt;/strong&gt;: Conclusions not logically derived from preceding reasoning.&lt;br&gt;
&lt;em&gt;Example&lt;/em&gt;:&lt;br&gt;
&amp;quot;Al Gore is a wonderful father, so he would have made a great president.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Slippery slope&lt;/strong&gt;: Asserting that X should not happen because it will inevitably lead to Y and Z, which are
terrible.
&lt;em&gt;Examples&lt;/em&gt;:&lt;br&gt;
&amp;quot;Utah should not legalize parimutuel betting on horse races because that will only lead to
gambling on other sporting events and finally to casino gambling.&amp;quot;
&amp;quot;We should never allow families to have doctors disconnect the respirators and feeding tubes of brain-dead patients.
If we do, pretty soon we will be asking doctors to kill people with Alzheimer&#39;s disease.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;False dilemma&lt;/strong&gt;: Asserting only two options exist when more are available.&lt;br&gt;
&lt;em&gt;Example&lt;/em&gt;:&lt;br&gt;
&amp;quot;You either support the war in Iraq or you are a traitor to your country and an enemy to freedom.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;False analogy&lt;/strong&gt;: Comparing two things with differences too great to justify the comparison.&lt;br&gt;
&lt;em&gt;Example&lt;/em&gt;:&lt;br&gt;
&amp;quot;There are 10,000 deaths from alcohol poisoning to 1 from mad-dog bites in this country. In spite of this, we license
liquor but shoot the dogs.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Post hoc&lt;/strong&gt;: From the Latin &amp;quot;after this, therefore because of it,&amp;quot; assigning a cause-effect relationship where none
exists.
&lt;em&gt;Example&lt;/em&gt;:&lt;br&gt;
&amp;quot;A black cat ran across my path on the way to work this morning, and sure enough, I got a flat tire on the way home.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Fallacies that result from ignoring the issue&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Begging the question&lt;/strong&gt;: Assuming part or all of your argument is true without support.&lt;br&gt;
&lt;em&gt;Examples&lt;/em&gt;:&lt;br&gt;
&amp;quot;The federal government should not subsidize development of alternative-fuel automobiles because gasoline is the
cheapest and cleanest fuel.&amp;quot;
&amp;quot;We should give every American the right to have assault weapons in their home because we know that a nation where
citizens have assault weapons will be safer.&amp;quot;
&amp;quot;We know that our police are never involved in bribery, dishonesty, or abuse of the law because the police report
said so.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red herring&lt;/strong&gt;: Introducing an irrelevant side issue to divert attention.&lt;br&gt;
&lt;em&gt;Example&lt;/em&gt;:&lt;br&gt;
&amp;quot;Mary Gordon shouldn&#39;t be elected to the school board because she doesn&#39;t have any children in public schools.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Straw man&lt;/strong&gt;: Misrepresenting an opponent&#39;s view and attacking the misrepresentation instead.&lt;br&gt;
&lt;em&gt;Example&lt;/em&gt;:&lt;br&gt;
&amp;quot;Environmentalists are trying to save the spotted owl because they want to run American loggers out of business.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ad hominem&lt;/strong&gt;: Attacking the person making the argument rather than the argument itself.&lt;br&gt;
&lt;em&gt;Example&lt;/em&gt;:&lt;br&gt;
&amp;quot;You&#39;re too young to understand the importance of this issue.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Argument ad Misericordiam&lt;/strong&gt; (&amp;quot;Argument to Pity&amp;quot;): Using emotional appeal instead of logic.&lt;br&gt;
&lt;em&gt;Examples&lt;/em&gt;:&lt;br&gt;
&amp;quot;I know my paper is late, but I had the worst pimple on my nose for a week. Please don&#39;t mark it late.&amp;quot;
&amp;quot;Janice, you have to marry me! If you don&#39;t, I will be the most miserable person alive.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Common practice&lt;/strong&gt;: Arguing that something is acceptable because &amp;quot;everyone is doing it.&amp;quot;&lt;br&gt;
&lt;em&gt;Examples&lt;/em&gt;:&lt;br&gt;
&amp;quot;Don&#39;t worry about using your older brother&#39;s research paper; half the kids in the class are doing it.&amp;quot;
&amp;quot;Dad, I can&#39;t live without a cell phone and a laptop. All the kids have them now.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Argument ad populum&lt;/strong&gt;: Appealing to the beliefs of the masses.&lt;br&gt;
&lt;em&gt;Example&lt;/em&gt;:&lt;br&gt;
&amp;quot;Republican candidates are the choice of red-blooded Americans who believe in traditional American values.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Argumentum ad Baculum&lt;/strong&gt; (&amp;quot;Appeal to Force&amp;quot;): Using threats or force to persuade.&lt;br&gt;
&lt;em&gt;Example&lt;/em&gt;:&lt;br&gt;
&amp;quot;If you don&#39;t support this policy, you&#39;re unpatriotic and will face backlash.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Machine Learning Labs</title>
    <link href="https://nathangilbert.com/thoughts/mll/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/thoughts/mll/</id>
    <published>2024-12-24T00:00:00Z</published>
    <updated>2026-08-10T00:00:00Z</updated>
    <category term="coding"/>
    <summary>A collection of machine learning labs I&#39;ve been working on for the AI/ML Guild at Workfront.</summary><content type="html">&lt;h2&gt;Machine Learning Labs&lt;/h2&gt;
&lt;p&gt;I&#39;ve been working on some labs for the AI/ML Guild at Workfront. Here they are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nathan-gilbert/ai-ml-guild-lab1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Lab 1&lt;/a&gt; - General beginner steps getting
started with an ML project.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nathan-gilbert/ai-ml-guild-lab2&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Lab 2&lt;/a&gt; - Perceptrons and linear binary&lt;br&gt;
classification. Multi-Layer Perceptrons and Neural Nets.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nathan-gilbert/ai-ml-guild-lab3&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Lab 3&lt;/a&gt; - Decision Trees are fun.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Naming Things is Hard</title>
    <link href="https://nathangilbert.com/thoughts/names-are-hard/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/thoughts/names-are-hard/</id>
    <published>2024-12-24T00:00:00Z</published>
    <updated>2026-08-10T00:00:00Z</updated>
    <category term="coding"/>
    <summary>A collection of tips and tricks for naming things in code.</summary><content type="html">&lt;h2&gt;Naming things is hard&lt;/h2&gt;
&lt;p&gt;It&#39;s hard to be descriptive about the code you&#39;re writing. Maybe it&#39;s because you&#39;re still
figuring out &lt;em&gt;what&lt;/em&gt; the purpose of the code you&#39;re writing is or you are not a domain-expert on
the problem at hand.&lt;/p&gt;
&lt;p&gt;Most of these examples are taken from &lt;em&gt;Clean Code&lt;/em&gt; by Robert Martin.&lt;/p&gt;
&lt;h3&gt;Be Practical&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Use names that convey intention&lt;/em&gt;, e.g., &lt;code&gt;int elapsedTimeInDays;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Use words that you can say&lt;/em&gt;, programming is communicating!&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Use searchable terms&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Hard to find a variable named &lt;code&gt;a&lt;/code&gt; in a codebase.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Names can be vectors for feature-creep&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Too general of a class name, and suddenly you have a catch-all, deeply coupled class instead
of targeted functionality&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Be Clear&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Avoid misnomers (duh)&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Don&#39;t name something &lt;code&gt;diamondList&lt;/code&gt; when the collection is a map.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Make things different enough to understand&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Don&#39;t name things just to satisfy a compiler&lt;/li&gt;
&lt;li&gt;&lt;code&gt;zork&lt;/code&gt; vs &lt;code&gt;theZork&lt;/code&gt; isn&#39;t that meaningful&lt;/li&gt;
&lt;li&gt;Codebase dependent&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Don&#39;t create a code to write your code&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Use language from the domain of the program&lt;/li&gt;
&lt;li&gt;In typed languages, it&#39;s not great to include the data type in the name. e.g., &lt;code&gt;phoneString&lt;/code&gt;;
what if the datatype changes?&lt;/li&gt;
&lt;li&gt;It&#39;s still good practice to use naming conventions for interfaces or implementations.&lt;/li&gt;
&lt;li&gt;Bob doesn&#39;t like member declarations; I don&#39;t mind them. Using underscores for private
variables or unused variables is fine too.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;One word per concept&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Generally, classes are nouns, functions are verbs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Add Context, at the right level, but not too much&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Very dependent on the codebase.&lt;/li&gt;
&lt;li&gt;Examples from the book: &lt;code&gt;firstName&lt;/code&gt;, &lt;code&gt;lastName&lt;/code&gt;, but for what purpose?&lt;/li&gt;
&lt;li&gt;Too much context: prefixing every class in the codebase.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Jokes aside&lt;/h3&gt;
&lt;p&gt;This is the hardest for me at times.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;In (or Out) Jokes&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Not professional, confusing&lt;/li&gt;
&lt;li&gt;Say what you mean, mean what you say&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;No Puns (same word for different purposes)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>OpenBSD Setup</title>
    <link href="https://nathangilbert.com/thoughts/openbsd-setup-tips/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/thoughts/openbsd-setup-tips/</id>
    <published>2024-12-24T00:00:00Z</published>
    <updated>2026-08-10T00:00:00Z</updated>
    <category term="notes"/>
    <summary>Some good setup links for OpenBSD.</summary><content type="html">&lt;h2&gt;OpenBSD&lt;/h2&gt;
&lt;p&gt;I recently bought an old Acer laptop and revived it using &lt;a href=&quot;https://www.openbsd.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;OpenBSD&lt;/a&gt;.
It&#39;s a fun operating system to use on any hardware. OpenBSD is touted as the most secure OS in
the world.&lt;/p&gt;
&lt;p&gt;Some good setup links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sohcahtoa.org.uk/openbsd.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;SohCahToa OpenBSD Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zakaria.org/posts/2021-01-04-xenodm.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Xenodm Setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dataswamp.org/~solene/2021-08-05-openbsd-wifi-list.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;OpenBSD WiFi List&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dataswamp.org/~solene/index-full.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Solene&#39;s OpenBSD Index&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;XDM Setup&lt;/h3&gt;
&lt;p&gt;The login screen is managed by XDM. This is the config I used to get a nice blue background with
the puffer fish logo.&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;/etc/X11/Xenodm/Xsetup_0&lt;/code&gt;&lt;/h4&gt;
&lt;pre class=&quot;language-sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;span class=&quot;token shebang important&quot;&gt;#!/bin/sh&lt;/span&gt;
xrandr &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; default &lt;span class=&quot;token parameter variable&quot;&gt;--dpi&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;96&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# requires pkg_add terminus-font&lt;/span&gt;
xset fp+ /usr/local/share/fonts/terminus

&lt;span class=&quot;token assign-left variable&quot;&gt;prefix&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/usr/X11R6&quot;&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;exec_prefix&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${prefix}&lt;/span&gt;&quot;&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;BG_COLOR&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;#203051&quot;&lt;/span&gt;
&lt;span class=&quot;token variable&quot;&gt;${exec_prefix}&lt;/span&gt;/bin/xsetroot &lt;span class=&quot;token parameter variable&quot;&gt;-solid&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$BG_COLOR&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# Disable xconsole&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# ${exec_prefix}/bin/xconsole -geometry 480x130-0-0 -daemon -notify -verbose -fn fixed -exitOnFail&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# Show the Sleep / Restart / Shutdown bar&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# In case of sleep, pop xmessage again after waking up&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  xmessage &lt;span class=&quot;token parameter variable&quot;&gt;-geometry&lt;/span&gt; +825-32 &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;-buttons&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;[ Sleep ]&quot;&lt;/span&gt;:20,&lt;span class=&quot;token string&quot;&gt;&quot;[ Restart ]&quot;&lt;/span&gt;:21,&lt;span class=&quot;token string&quot;&gt;&quot;[ Shutdown ]&quot;&lt;/span&gt;:22 &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
  &lt;span class=&quot;token assign-left variable&quot;&gt;ACTION&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$?&lt;/span&gt;
  &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Xmessage said: &lt;span class=&quot;token variable&quot;&gt;$ACTION&lt;/span&gt;&quot;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;   &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$ACTION&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt; /usr/sbin/zzz&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;elif&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$ACTION&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;21&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt;
    xsetroot &lt;span class=&quot;token parameter variable&quot;&gt;-cursor_name&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;watch&lt;/span&gt;
    /sbin/shutdown &lt;span class=&quot;token parameter variable&quot;&gt;-r&lt;/span&gt; now
  &lt;span class=&quot;token keyword&quot;&gt;elif&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$ACTION&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;22&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt;
    xsetroot &lt;span class=&quot;token parameter variable&quot;&gt;-cursor_name&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;watch&lt;/span&gt;
    /sbin/shutdown &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; now
  &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Something bad happened to Xmessage.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;fi&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;# Stop looping if xclock died (hopefully killed by GiveConsole)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-z&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;pgrep &lt;span class=&quot;token parameter variable&quot;&gt;-U&lt;/span&gt; root xclock&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;fi&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;OS_NAME&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;uname&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;OS_INFO&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;uname&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-smr&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
xclock &lt;span class=&quot;token parameter variable&quot;&gt;-digital&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-geometry&lt;/span&gt; -0+0 &lt;span class=&quot;token parameter variable&quot;&gt;-strftime&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$OS_NAME&lt;/span&gt; (&lt;span class=&quot;token variable&quot;&gt;$OS_INFO&lt;/span&gt;) | %a. %d %b. %Y  %H:%M &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Setting up a Raspberry Pi as a server</title>
    <link href="https://nathangilbert.com/thoughts/raspberry-pi-setup/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/thoughts/raspberry-pi-setup/</id>
    <published>2024-12-24T00:00:00Z</published>
    <updated>2026-08-10T00:00:00Z</updated>
    <category term="notes"/>
    <summary>Raspbian setup notes, including running a BOINC client.</summary><content type="html">&lt;h2&gt;Raspian Raspberry Pi Setup&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.raspberrypi.org/documentation/installation/installing-images/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Load the SDHC card&lt;/a&gt; into your machine and install the Raspbian image.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a file called &lt;code&gt;ssh&lt;/code&gt; in &lt;code&gt;/Volumes/boot&lt;/code&gt; of that installation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Disable WiFi and Bluetooth by adding the following two lines to &lt;code&gt;/boot/config.txt&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dtoverlay=disable-wifi&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dtoverlay=disable-bt&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Insert the SDHC card and power on the Pi.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Log in using the default user/password via SSH.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change the Pi user password:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;passwd&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change the Pi user&#39;s locale and time zone -&amp;gt; use raspi-config.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update packages: &lt;code&gt;sudo apt update&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the latest Fish shell and fzf.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To change the user shell, edit /etc/passwd or use: &lt;code&gt;chsh -s /usr/bin/fish nathan&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Setting up BOINC Client&lt;/h3&gt;
&lt;p&gt;Ensure there is a /var/lib/cc_configs.xml file.
Make sure it contains the following:&lt;/p&gt;
&lt;pre class=&quot;language-xml&quot;&gt;&lt;code class=&quot;language-xml&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;options&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
   &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;allow_remote_gui_rpc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;1&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;allow_remote_gui_rpc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;options&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verify that the remote_hosts.cfg file has the hosts you want inside it.
Networking Troubleshooting&lt;/p&gt;
&lt;p&gt;If you are running a headless Pi but want to use XRDP, you may encounter both dhcpcd and wicd
running. You may need to disable wicd: &lt;code&gt;systemctl disable wicd&lt;/code&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Vim config</title>
    <link href="https://nathangilbert.com/thoughts/useful-vim-settings/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/thoughts/useful-vim-settings/</id>
    <published>2024-12-24T00:00:00Z</published>
    <updated>2026-08-10T00:00:00Z</updated>
    <category term="coding"/>
    <summary>Vim settings I use.</summary><content type="html">&lt;h2&gt;Vim Settings I Use&lt;/h2&gt;
&lt;pre class=&quot;language-vim&quot;&gt;&lt;code class=&quot;language-vim&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;tabstop&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;softtabstop&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;               &lt;span class=&quot;token comment&quot;&gt;&quot; makes space feel like tabs&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;shiftwidth&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;expandtab&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;textwidth&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;80&lt;/span&gt;                &lt;span class=&quot;token comment&quot;&gt;&quot; each line can only be 79 chars (+newline) long&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;formatoptions&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;cqt           &lt;span class=&quot;token comment&quot;&gt;&quot; automatically wrap long lines&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;number&lt;/span&gt;                      &lt;span class=&quot;token comment&quot;&gt;&quot; line numbers&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;cursorline&lt;/span&gt;                  &lt;span class=&quot;token comment&quot;&gt;&quot; highlight the current line&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;t_Co&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;256&lt;/span&gt;                    &lt;span class=&quot;token comment&quot;&gt;&quot; set terminal to 256 colors&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;history&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;                 &lt;span class=&quot;token comment&quot;&gt;&quot; keep 100 lines of command line history&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;ruler&lt;/span&gt;                       &lt;span class=&quot;token comment&quot;&gt;&quot; show the cursor position all the time&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;showcmd&lt;/span&gt;                     &lt;span class=&quot;token comment&quot;&gt;&quot; display incomplete commands&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;incsearch&lt;/span&gt;                   &lt;span class=&quot;token comment&quot;&gt;&quot; do incremental searching&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;autoread&lt;/span&gt;                    &lt;span class=&quot;token comment&quot;&gt;&quot; automatically read a file changed externally&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;hlsearch&lt;/span&gt;                    &lt;span class=&quot;token comment&quot;&gt;&quot; highlights all search matches&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;backspace&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;indent&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;start  &lt;span class=&quot;token comment&quot;&gt;&quot; allow backspacing in insert mode&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;noerrorbells&lt;/span&gt;                &lt;span class=&quot;token comment&quot;&gt;&quot; Attempts to turn off errorbells.&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;vb&lt;/span&gt;                          &lt;span class=&quot;token comment&quot;&gt;&quot; turn on visual bell&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;showmatch&lt;/span&gt;                   &lt;span class=&quot;token comment&quot;&gt;&quot; match parenthesis&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;UTF&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;              &lt;span class=&quot;token comment&quot;&gt;&quot; helps devicons&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;backup&lt;/span&gt;                      &lt;span class=&quot;token comment&quot;&gt;&quot; save backup files&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;backupdir&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=~&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;vim&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;backup&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;   &lt;span class=&quot;token comment&quot;&gt;&quot; where to put backup files&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;directory&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=~&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;vim&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;swap&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;     &lt;span class=&quot;token comment&quot;&gt;&quot; where to save swap files&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt; undodir&lt;span class=&quot;token operator&quot;&gt;=~&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;vim&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;undo&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;       &lt;span class=&quot;token comment&quot;&gt;&quot; where to undo files&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Wiio&#39;s Laws</title>
    <link href="https://nathangilbert.com/thoughts/wiios-laws/" rel="alternate" type="text/html"/><id>https://nathangilbert.com/thoughts/wiios-laws/</id>
    <published>2024-12-24T00:00:00Z</published>
    <updated>2026-08-10T00:00:00Z</updated>
    <category term="humor"/>
    <summary>A collection of Wiio&#39;s Laws about communication and information sharing.</summary><content type="html">&lt;h2&gt;Wiio&#39;s Laws&lt;/h2&gt;
&lt;p&gt;So many problems seem to come down to poor communication. I often think about these laws when
information is being shared.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Communication usually fails, except by accident.
&lt;ul&gt;
&lt;li&gt;If communication can fail, it will.&lt;/li&gt;
&lt;li&gt;If communication cannot fail, it still most usually fails.&lt;/li&gt;
&lt;li&gt;If communication seems to succeed in the intended way, there&#39;s a misunderstanding.&lt;/li&gt;
&lt;li&gt;If you are content with your message, communication certainly fails.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;If a message can be interpreted in several ways, it will be interpreted in a manner that
maximizes the damage.&lt;/li&gt;
&lt;li&gt;There is always someone who knows better than you what you meant with your message.&lt;/li&gt;
&lt;li&gt;The more we communicate, the worse communication succeeds.
&lt;ul&gt;
&lt;li&gt;The more we communicate, the faster misunderstandings propagate.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;In mass communication, the important thing is not how things are but how they seem to be.&lt;/li&gt;
&lt;li&gt;The importance of a news item is inversely proportional to the square of the distance.&lt;/li&gt;
&lt;li&gt;The more important the situation is, the more probable you had forgotten an essential thing
that you remembered a moment ago.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Wiio%27s_laws&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
</feed>
