Another Rodeo Assorted projects and experiments and things. Nobody told me there would be so many rodeos. 2025-05-30T19:40:27Z https://another.rodeo Carter Baxter 1971 Eco fiberglass camper restoration 2020-01-07T00:00:00Z https://another.rodeo/71-eco-restoration/ <figure class="image "> <img src="https://another.rodeo/img/camper/almost-done.jpeg" alt="The more or least restored trailer, ready for camping." /> <figcaption>The more or least restored trailer, ready for camping.</figcaption> </figure> <h2 id="1971-eco-camper-restoration" tabindex="-1">1971 Eco camper restoration<a class="tdbc-anchor" href="https://another.rodeo/71-eco-restoration/#1971-eco-camper-restoration" aria-hidden="true">#</a></h2> <p>In 2019 I became convinced that we should have a camper. And not just any camper, we should have a fiberglass &quot;egg&quot; camper. Through a highly improbable coincidence, it turned out a friend had one and he was willing to sell it to me for &quot;friend price.&quot; And so I lugged this little thing home. The pictures and story here are incomplete and fractured because I'm recreating the restoration story from whatever files I can find, but I'll recreate it as best as I can.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/as_found.jpg" alt="As I found it, it had seen better days. It looked a bit like a baked bean, and smelled a lot like old, rotten beans." /> <figcaption>As I found it, it had seen better days. It looked a bit like a baked bean, and smelled a lot like old, rotten beans.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/garage.jpg" alt="It just *barely* fit in my garage bay. That made the restoration a lot easier. Just go out to the garage and get to work." /> <figcaption>It just *barely* fit in my garage bay. That made the restoration a lot easier. Just go out to the garage and get to work.</figcaption> </figure> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> <h3 id="so-what-is-this-thing-anyway" tabindex="-1">So what is this thing, anyway?<a class="tdbc-anchor" href="https://another.rodeo/71-eco-restoration/#so-what-is-this-thing-anyway" aria-hidden="true">#</a></h3> <p>In the '60s a company called Boler pioneered these little fiberglass &quot;egg&quot; campers. Where most campers at the time nailed aluminum into a wooden structure to make the camper (or in the case of Airstream, an aluminum frame) these were different: there was no framework for the body, because the fiberglass is self-supporting. So they're extraordinarily lightweight, easy to tow, and much less likely to break, leak or just fall apart.</p> <p>Through a complicated series of events I won't get into here, Boler's original fiberglass molds ended up in the hands of a bunch of different manufacturers, including this Eco, which was built in Nebraska in 1971. I'm told the factory later specialized in fiberglass prosthesis when they got out of trailer-building.</p> <p>Anyways, the original Boler design continues on today under the Scamp name. Pretty amazing longevity, but great design endures. If you're interested, there's <a href="http://www.boler.ca/2017/03/05/history-of-the-boler/">a lot of history about them out there</a>.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/floorplan.jpeg" alt="Here's the original Boler floorplan, still in use in Scamps today (and in my Eco). Photo courtesy of Scamp Trailers." /> <figcaption>Here's the original Boler floorplan, still in use in Scamps today (and in my Eco). Photo courtesy of Scamp Trailers.</figcaption> </figure> <h3 id="the-teardown" tabindex="-1">The teardown<a class="tdbc-anchor" href="https://another.rodeo/71-eco-restoration/#the-teardown" aria-hidden="true">#</a></h3> <p>I was lucky it was such a great design and couldn't rot. At least I didn't have to worry much about the body. But everything inside sure could rot. And had.</p> <p>When I brought it home, my wife would not step foot in it. To her credit, it really was pretty disgusting. There was carpet in it that had seem some terrible things and a smell that could stop traffic.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/70s-floor.jpg" alt="Underneath the disgusting carpet the original super-70s linoleum was still in place, albeit covered in 50 years of funk. This is the dinette side of the grailer. A few hours after this picture was taken, the cushions and linoleum joined the carpet on the curb-side trash pile." /> <figcaption>Underneath the disgusting carpet the original super-70s linoleum was still in place, albeit covered in 50 years of funk. This is the dinette side of the grailer. A few hours after this picture was taken, the cushions and linoleum joined the carpet on the curb-side trash pile.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/upper-cabinets.jpg" alt="There are cabinets above the sink/kitchenette area. The doors, light fixtures and backsplash were all in terrible condition." /> <figcaption>There are cabinets above the sink/kitchenette area. The doors, light fixtures and backsplash were all in terrible condition.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/sink.jpg" alt="The sink itself was no better. But it did have lots of extra holes for whatever reason." /> <figcaption>The sink itself was no better. But it did have lots of extra holes for whatever reason.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/overhead.jpg" alt="The overhead storage and the front and rear was notable mostly for the sheer number of hooks that you were absolutely certain to hit your head on." /> <figcaption>The overhead storage and the front and rear was notable mostly for the sheer number of hooks that you were absolutely certain to hit your head on.</figcaption> </figure> <p>The very first thing I did was remove every fibrous surface from inside and put it all in the trash. All the cushions, the drapes, everything. If it was porous, it got yanked out and thrown out. I also found some other things I'd rather forget about, like the ancient camping toilet. Ugh.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/trash.jpg" alt="Won't be wanting any of that anymore." /> <figcaption>Won't be wanting any of that anymore.</figcaption> </figure> <p>Everything that was left was bleached, then gone over with a trisodium phosphate (TSP) cleaning solution, and then painted over with a couple of coats of Killz. There was a lot of mold, a pretty good ant infestation, and a couple of dead rodents.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/funky.jpg" alt="Too much of it looked like this. No, I don't know what all that was, either. But it smelled as bad as it looked." /> <figcaption>Too much of it looked like this. No, I don't know what all that was, either. But it smelled as bad as it looked.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/killz.jpeg" alt="By the time this photo was taken I was deep into bleaching the whole interior and hitting it with TSP and then Killz primer ." /> <figcaption>By the time this photo was taken I was deep into bleaching the whole interior and hitting it with TSP and then Killz primer .</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/primered.jpg" alt="Eventually, it started to became a nice clean bare white canvas." /> <figcaption>Eventually, it started to became a nice clean bare white canvas.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/fiberglass-holes.jpg" alt="The fixtures and shelving, like the body, are all fiberglass. I filled a lot of holes in them. Then I filled a lot more." /> <figcaption>The fixtures and shelving, like the body, are all fiberglass. I filled a lot of holes in them. Then I filled a lot more.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/stove.jpg" alt="I didn't have a lot of faith in this 50-year-old propane stove, nor did I really want to be cooking eight inches away from where I'd be sleeping." /> <figcaption>I didn't have a lot of faith in this 50-year-old propane stove, nor did I really want to be cooking eight inches away from where I'd be sleeping.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/dinette-stripped.jpg" alt="Here the kitchen unit is nearly completely stripped down, with the original sink and stove gone. You can also see where I filled in some more holes on the front. I didn't need to fill the ones on top because I was building a new countertop. " /> <figcaption>Here the kitchen unit is nearly completely stripped down, with the original sink and stove gone. You can also see where I filled in some more holes on the front. I didn't need to fill the ones on top because I was building a new countertop. </figcaption> </figure> <h3 id="troubleshooting-power-issues" tabindex="-1">Troubleshooting power issues<a class="tdbc-anchor" href="https://another.rodeo/71-eco-restoration/#troubleshooting-power-issues" aria-hidden="true">#</a></h3> <p>Having a usable electrical system in the trailer was quite a journey. When I first bought the trailer, I plugged it into 110V household power and got... nothing. As I investigated more, I learned two things:</p> <ol> <li>The original power center for it had long ago been gutted, with the original transformer removed and a nonsensical bit of splicing put in its place. Electricity was going places, but not the places you'd want it to go, and definitely not in the right wires.</li> <li>That length of household wiring laying out on the trailer tongue, going nowhere? It was hooked up directly to the 110V shore power. So it's probably good that I didn't touch it.</li> </ol> <p>Seriously, the more I dug in, the more it was clear the existing wiring was just flat dangerous. Major work was going to be needed.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/power-center.png" alt="The dangerous remnants of the original power center." /> <figcaption>The dangerous remnants of the original power center.</figcaption> </figure> <p>So after some research I placed an order for a <a href="https://amzn.to/2wZfLRR">Progressive Dynamics 4145 Power Center</a>. It's compact, full-featured and packs more than enough potential power for my little trailer.</p> <p>Before I could do anything to install the new power center I had to drill out the rivets holding the old power center in place, then significantly enlarge the height of the hole for the new power center. A few minutes with a drill to mark the corners and a jigsaw to cut through the fiberglass and that was done. <em>Note: Be sure your eyes, skin and mouth are well-covered. Fiberglass is nasty stuff.</em></p> <figure class="image "> <img src="https://another.rodeo/img/camper/power-center.jpg" alt="You can see my marker lines where I had to enlarge the hole for it to fit." /> <figcaption>You can see my marker lines where I had to enlarge the hole for it to fit.</figcaption> </figure> <p>But my newly cut hole was about 1/8&quot; too wide because of the width of the old power center. So I had to turn right around and put some trim around the new hole to keep my new height while narrowing the opening a smidge.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/power-center-trimmed.png" alt="Trimmed and caulked. You can see the red fiberglass putty filling some more holes too." /> <figcaption>Trimmed and caulked. You can see the red fiberglass putty filling some more holes too.</figcaption> </figure> <p>With the hole trimmed out and painted, I still had to figure out how to wire it up, which was pretty tricky and figuring out a good ground on a fiberglass trailer takes some head scratching. The Progressive Dynamics instructions were a little inscrutable, too, but with a little thought and a lot of googling, it went in.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/power-center-in.jpg" alt="The new power center installed (shown without its cover in this pic)." /> <figcaption>The new power center installed (shown without its cover in this pic).</figcaption> </figure> <p>On the 110 (household) voltage side, I've got one breaker dedicated to feeding the 12v converter, one dedicated solely to the air conditioner, one dedicated to the refrigerator, and one dedicated to a 110v outlet on the front of the kitchenette cabinet. I could have put more on the circuits, but why? I don't need to, and this way there's less chance of a tripped breaker.</p> <p>On the 12v side, the 4135 offers more circuits than I've yet found a use for, but the first thing I wanted to do was get some light. I found these <a href="https://amzn.to/2IIZqmW">super-low profile remote control LED puck lights</a> on Amazon and went ahead and ordered them. It'd be nice not doing everything by shop light. I the wall-wart off the puck lights, mounted two in the front, two in the rear, and two over the kitchenette, then wired them up to the 12v supply. Success!</p> <p>I was pretty proud when I wired it all up and it worked with no extra smoke the first time I flipped the switch.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/lighting.jpg" alt="And now that there's power, let there by light. I got a great deal on a set of low-profile, dimmable remote control LED puck lights dirt cheap on Amazon Prime day and hard-wired them in. There are two at each end and two over the kitchenette, all controlled from a single remote. Six lights is plenty in a 60 sq ft trailer." /> <figcaption>And now that there's power, let there by light. I got a great deal on a set of low-profile, dimmable remote control LED puck lights dirt cheap on Amazon Prime day and hard-wired them in. There are two at each end and two over the kitchenette, all controlled from a single remote. Six lights is plenty in a 60 sq ft trailer.</figcaption> </figure> <p>Once it was the inside was more-or-less safe for humans to be in there, I hitched it up to take to a local trailer shop for inspection. I needed them to tell me that the frame was solid and straight, and remove this weird rack thing that had been added in the rear.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/weird_rear_rack.jpg" alt="The strange rear rack in question. Inside you can see the freshly-Killzed interior." /> <figcaption>The strange rear rack in question. Inside you can see the freshly-Killzed interior.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/no-rack.jpg" alt="With the rack gone, the bumper painted and the body halfway clean, it started to turn a bit of a corner." /> <figcaption>With the rack gone, the bumper painted and the body halfway clean, it started to turn a bit of a corner.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/painting.jpg" alt="The existing paint was so bad, a Rustoleum Roller job in the driveway was actually a step forward. You can get surprisingly good results with a rustoluem roller job. Seriously." /> <figcaption>The existing paint was so bad, a Rustoleum Roller job in the driveway was actually a step forward. You can get surprisingly good results with a rustoluem roller job. Seriously.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/paint2.jpeg" alt="About half-way through painting it was looking pretty good. I needed more coverage, but not bad. You can also see the vent holes on the front for the AC. Those would be important later." /> <figcaption>About half-way through painting it was looking pretty good. I needed more coverage, but not bad. You can also see the vent holes on the front for the AC. Those would be important later.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/wheel.jpeg" alt="I painted the original wheels with Rustoleum white, too, and fitted some new baby moon hubcaps. You can also see some fiberglass damage from a long-ago blowout. Someday, when I get a pro paint job, I'll have that repaired. I did put new tires and bearings in, though." /> <figcaption>I painted the original wheels with Rustoleum white, too, and fitted some new baby moon hubcaps. You can also see some fiberglass damage from a long-ago blowout. Someday, when I get a pro paint job, I'll have that repaired. I did put new tires and bearings in, though.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/ext-lights.jpeg" alt="All the exterior lights were upgraded to modern LED versions. Yes, that's another tiny bit of fiberglass damage by the bumper. It's 50 years old, it's picked up some scrapes." /> <figcaption>All the exterior lights were upgraded to modern LED versions. Yes, that's another tiny bit of fiberglass damage by the bumper. It's 50 years old, it's picked up some scrapes.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/countertop.jpg" alt="I also started test-fitting a new countertop I'd make from birch plywood." /> <figcaption>I also started test-fitting a new countertop I'd make from birch plywood.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/flooring.jpg" alt="And the new flooring went it. Vinyl planks were easy to work with, worked well with the campers irregular edges and lines, and are waterproof and wear well. Pretty much perfect for this usage." /> <figcaption>And the new flooring went it. Vinyl planks were easy to work with, worked well with the campers irregular edges and lines, and are waterproof and wear well. Pretty much perfect for this usage.</figcaption> </figure> <p></p><figure class="image "> <img src="https://another.rodeo/img/camper/ac.jpeg" alt="A prior owner had cut this hole for the AC, which is pretty far from ideal as far as cooling efficiency goes, but since the hole was already there I put a fresh AC in it. I spent a lot of time insulating the hot side of the AC from the cold side and figuring out how to vent the hot side. Eventually I put in three temperature-activated 4-inch fans venting to the outside. When the AC is on, they sense the heat and turn on, pushing the hot air out of the trailer." /> <figcaption>A prior owner had cut this hole for the AC, which is pretty far from ideal as far as cooling efficiency goes, but since the hole was already there I put a fresh AC in it. I spent a lot of time insulating the hot side of the AC from the cold side and figuring out how to vent the hot side. Eventually I put in three temperature-activated 4-inch fans venting to the outside. When the AC is on, they sense the heat and turn on, pushing the hot air out of the trailer.</figcaption> </figure><p></p> <figure class="image "> <img src="https://another.rodeo/img/camper/test-fit.jpeg" alt="A lot of things were being test-fit here, particularly the new countertop, a new bar-sized faucet and the backsplash. You can also see the new electrical outlet (complete with ground fault protection and two USB ports) and over to the right, the new sink waiting to go in. Both the sink and faucet were bar-sized because the scale worked better for the little camper. We decided to skip the propane stove and either cook outside or with a hotplate." /> <figcaption>A lot of things were being test-fit here, particularly the new countertop, a new bar-sized faucet and the backsplash. You can also see the new electrical outlet (complete with ground fault protection and two USB ports) and over to the right, the new sink waiting to go in. Both the sink and faucet were bar-sized because the scale worked better for the little camper. We decided to skip the propane stove and either cook outside or with a hotplate.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/kitchen.jpeg" alt="The kitchenette with it all actually in place." /> <figcaption>The kitchenette with it all actually in place.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/drawer.jpeg" alt="I was really proud of this drawer I built from scratch, including all the mounting points. The original drawer slid out from the bottom of the stove, and both it and the stove were unsalvageable. So I had to get creative." /> <figcaption>I was really proud of this drawer I built from scratch, including all the mounting points. The original drawer slid out from the bottom of the stove, and both it and the stove were unsalvageable. So I had to get creative.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/floorjack.jpeg" alt="These fiberglass campers need supports from the floor up to the ceiling or else the ceiling can sag and they get oval-shaped. In mine, someone had taken the supports out so I had to use a floor jack to lift the ceiling and install new supports." /> <figcaption>These fiberglass campers need supports from the floor up to the ceiling or else the ceiling can sag and they get oval-shaped. In mine, someone had taken the supports out so I had to use a floor jack to lift the ceiling and install new supports.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/supports.jpeg" alt="The supports themselves are just bits of poplar. Some Ikea pegboard helps keep things square while providing some extra utility. This is the sort of usable-yet-attractive detail I just love." /> <figcaption>The supports themselves are just bits of poplar. Some Ikea pegboard helps keep things square while providing some extra utility. This is the sort of usable-yet-attractive detail I just love.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/cushions.jpeg" alt="Before I tossed the old cushions I had the good sense to make patterns from them on heavy brown paper. Those were really handy later, when I needed to cut new cushions. The new cushions were cut from a 5-inch memory foam mattress from Amazon, and the houselhold electric carving knife, which is a pretty good solution for cutting foam." /> <figcaption>Before I tossed the old cushions I had the good sense to make patterns from them on heavy brown paper. Those were really handy later, when I needed to cut new cushions. The new cushions were cut from a 5-inch memory foam mattress from Amazon, and the houselhold electric carving knife, which is a pretty good solution for cutting foam.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/upholstery.jpeg" alt="I don't have an industrial sewing machine or any real upholstery skills, so I figured it was smart to farm out the actual upholstery work. We had the cushions covered in a nice high-quality marine vinyl in a sort of two-tone gray/beige color. We deliberately kept the colors very neutral and cold. The camper is so small that even a single pillow introduces a lot of color. I made the dinette table, too. Then later I made another one, 'cause I didn't like this one." /> <figcaption>I don't have an industrial sewing machine or any real upholstery skills, so I figured it was smart to farm out the actual upholstery work. We had the cushions covered in a nice high-quality marine vinyl in a sort of two-tone gray/beige color. We deliberately kept the colors very neutral and cold. The camper is so small that even a single pillow introduces a lot of color. I made the dinette table, too. Then later I made another one, 'cause I didn't like this one.</figcaption> </figure> <p>I had the upholstery done in the late in 2019. By early 2020, the basic renovation of the camper was done and it was a pretty nice place to be.</p> <p>Of course just a few months later, as the weather just started to warm up, Covid hit, so there wasn't a whole lot of camping going on.</p> <p>I turned my attention to modernizing the electronics and entertainment, and making a &quot;smart camper&quot; out of it. That had mixed results but was a lot of fun.</p> <h3 id="why-did-i-do-it" tabindex="-1">Why did I do it?<a class="tdbc-anchor" href="https://another.rodeo/71-eco-restoration/#why-did-i-do-it" aria-hidden="true">#</a></h3> <p>Well, I thought I wanted a camper, and I liked the scale of the renovation project</p> <h3 id="what-did-i-learn" tabindex="-1">What did I learn?<a class="tdbc-anchor" href="https://another.rodeo/71-eco-restoration/#what-did-i-learn" aria-hidden="true">#</a></h3> <ul> <li>I don't like camping all that much.</li> </ul> <h3 id="where-is-it" tabindex="-1">Where is it?<a class="tdbc-anchor" href="https://another.rodeo/71-eco-restoration/#where-is-it" aria-hidden="true">#</a></h3> <ul> <li>Currently, in my garage.</li> </ul> The bedraggled Raleigh 2020-08-23T00:00:00Z https://another.rodeo/raleigh-sports/ <p>I've had an urge to take experience a classic British three-speed for awhile now. The laid-back geometry, relaxed, upright ride and smooth internally-geared hubs just speak to me.</p> <p>In the time of COVID, even ragged projects seem to be fetching an awful lot of money, and since I already had too many projects going anyway, I figured that would have to just remain a daydream for awhile.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/bedraggled-raleigh.jpg" alt="The Raleigh Sports, as found." /> <figcaption>The Raleigh Sports, as found.</figcaption> </figure> <p>And then this Raleigh turned up, literally asking to be picked up from the curb. Who could resist a <em>free</em> Raleigh Sports? So, after taking just enough time to be sure it was mostly all there, I drug it home.</p> <p>And I quickly discovered there were reasons it was free. It was really in pretty rough shape. I expected the tires to be flat, and for it to be grimy. Honestly for free, I didn't expect much, but figured even if it was a total bust I could just tuck the Sturmey-Archer three-speed hub away for some future project.</p> <p>Even so, I really didn't know what I was getting myself into.</p> <p></p><p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p><p></p> <div class="photogrid"> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/chainguard.jpg" alt="The battered chainguard appeared to be held on mostly with grime, and that three-speed cable may be past its prime. The decal style places it somewhere in the mid-70s, probably." /> <figcaption>The battered chainguard appeared to be held on mostly with grime, and that three-speed cable may be past its prime. The decal style places it somewhere in the mid-70s, probably.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/rear.jpg" alt="The rear fender is similarly battered and rusty." /> <figcaption>The rear fender is similarly battered and rusty.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/bars.jpg" alt="Lots of surface rust and grime." /> <figcaption>Lots of surface rust and grime.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/dirt.jpg" alt="So filthy. So very, very filthy." /> <figcaption>So filthy. So very, very filthy.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/raleigh/spoke.jpg" alt="I think I should be seeing a spoke here. Amazingly, the Raleigh steel rim was still surprisingly true." /> <figcaption>I think I should be seeing a spoke here. Amazingly, the Raleigh steel rim was still surprisingly true.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/raleigh/pedal.jpg" alt="The original Raleigh pedals should clean up well. They were really built to last." /> <figcaption>The original Raleigh pedals should clean up well. They were really built to last.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/raleigh/small-parts.jpg" alt="All the smart parts are put in bins and tagged as needed to keep track of them. Yes, there are a lot of loose bearings in a Raleigh headset." /> <figcaption>All the smart parts are put in bins and tagged as needed to keep track of them. Yes, there are a lot of loose bearings in a Raleigh headset.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/raleigh/bb-clamp.jpg" alt="Two days with a heavy-duty clamp and penetrating oil, and still, one of the cotter pins would not budge." /> <figcaption>Two days with a heavy-duty clamp and penetrating oil, and still, one of the cotter pins would not budge.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/raleigh/cotter.jpg" alt="Eventually I had to resort to drilling it out. Which was as terrible as you might imagine." /> <figcaption>Eventually I had to resort to drilling it out. Which was as terrible as you might imagine.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/raleigh/bugs.jpg" alt="When I finally got the bottom bracket apart, I found the remains of a whole colony of approximately ball-bearing-sized insects in there." /> <figcaption>When I finally got the bottom bracket apart, I found the remains of a whole colony of approximately ball-bearing-sized insects in there.</figcaption> </figure> </div> <p>Once it was in the shop getting disassembled, I got to learn a few quirks of old Raleighs:</p> <ul> <li>They're ridiculously overbuilt. Even though the '70s versions (like this one) cut a lot more corners than the legendarily well-made '50s versions, it was still clearly a bicycle that was built to last. Which means even parts that seem way too far gone to save tend to clean up well, most times.</li> <li>None of your wrenches will fit. Raleigh used their own standards and if either a metric or standard wrench fits, it's down to luck and coincidence, so you best have a collection of good adjustable wrenches. <a href="https://amzn.to/2FbQxE7">I like this Channel-Lock, which doubles as a cone nut wrench</a>.</li> <li>There are a ridiculous number of ball bearings in old Raleighs, and they're all loose. Be sure you're ready to catch them all when you open up the headset, bottom bracket, or basically anything else.</li> </ul> <h3 id="reassembly" tabindex="-1">Reassembly<a class="tdbc-anchor" href="https://another.rodeo/raleigh-sports/#reassembly" aria-hidden="true">#</a></h3> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/frame.jpg" alt="The Raleigh Sports frame, polished up." /> <figcaption>The Raleigh Sports frame, polished up.</figcaption> </figure> <p>The Raleigh had clearly been left outside, unloved, for a long time. There was a thick layer of grime and tree sap that had sun-baked deep into the paint. Cleaning it was a multistep process:</p> <ol> <li>Household multi-purpose cleaner and a <a href="https://amzn.to/2PIvM55">blue non-scratch scrubbing pad</a> to get the surface grime off.</li> <li><a href="https://amzn.to/33BFbmV">Turtle Wax Heavy Duty Rubbing Compound</a> to try to cut the paint back to the original Lemon Yellow as much as possible. This was only somewhat successful.</li> <li><a href="https://amzn.to/33BkKql">Turtle Wax polishing compound</a> to bring some shine back to the paint.</li> </ol> <p>In the end, the paint is still pretty chipped and scraped, but it's yellow again, and shiny, and the patina does have appeal.</p> <p>The fenders went through the same process, although they had an extra step of bending and hammering the metal back into some semblance of shape. I am not a metalworker by any means, but anyone with a little care can do some basic things to make the metal at least a bit more presentable. One of these days I'll get myself a proper <a href="https://amzn.to/2DOTMk9">set of metalworking hammers and dollies</a>.</p> <p>For the chrome parts, I sprayed a penetrating oil and scrubbed with fine steel wool. That's always worked well for me. Once the grime and surface rust was gone, <a href="https://amzn.to/2XEvGQl">Mother's metal polish</a> brought back the shine.</p> <div class="photogrid"> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/heron-before.jpg" alt="The 'heron' chainring was in pretty rough shape." /> <figcaption>The 'heron' chainring was in pretty rough shape.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/heron-after.jpg" alt="But it cleaned up surprisingly well." /> <figcaption>But it cleaned up surprisingly well.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/brakes-before.jpg" alt="The brakes, as found." /> <figcaption>The brakes, as found.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/brakes-after.jpg" alt="And after cleaning, ready for reassembly." /> <figcaption>And after cleaning, ready for reassembly.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/brakes-on.jpg" alt="The brakes back on the bike, along with the revived front fender." /> <figcaption>The brakes back on the bike, along with the revived front fender.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/fenders.jpg" alt="Here you can see the in-process front fender alongside the as-found rear fender and chainguard. The chainguard may be a lost cause." /> <figcaption>Here you can see the in-process front fender alongside the as-found rear fender and chainguard. The chainguard may be a lost cause.</figcaption> </figure> </div> <h3 id="the-rear-wheel-spoke-replacement-tensioning-and-trueing" tabindex="-1">The rear wheel - spoke replacement, tensioning and trueing.<a class="tdbc-anchor" href="https://another.rodeo/raleigh-sports/#the-rear-wheel-spoke-replacement-tensioning-and-trueing" aria-hidden="true">#</a></h3> <p>The rear wheel was a special challenge, since it was missing a spoke. After measuring carefully I ordered <a href="https://amzn.to/2PGgxJI">heavy-duty spokes</a> and a <a href="https://amzn.to/3aildPw">spoke wrench</a>. Neither is anything fancy, but they were more than adequate for the task at hand.</p> <p>I knew most of the spokes were under-tensioned, but had to do some research on how to easily check the tension. I was pretty happy when I learned <a href="https://www.sheldonbrown.com/spoke-pitch.html">you can &quot;tune&quot; spokes to notes on the scale</a>. With that knowledge in hand, I grabbed a <a href="https://amzn.to/3aiPDAZ">Snark tuner</a> and an <a href="https://amzn.to/3ivQAcb">Irwin Quick Grip</a>,and went to town. The Snark was clipped it to the seatstay to easily see the note the spoke was ringing out, while the Quick Grip accurately held the newly polished brake calipers in position.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/trueing.jpg" alt="Trueing the wheel, home-style." /> <figcaption>Trueing the wheel, home-style.</figcaption> </figure> <p>I can't claim the end results are pro-level, but I can't complain, either. The rim stays off the calipers and is pretty darn close to straight. Not bad for a first timer. It doesn't hurt that those heavy steel Raleigh wheels are pretty forgiving.</p> <h3 id="final-steps" tabindex="-1">Final steps<a class="tdbc-anchor" href="https://another.rodeo/raleigh-sports/#final-steps" aria-hidden="true">#</a></h3> <p>With the wheel straightened out, the rest of the rebuild was largely replacing the wear-item parts on it, including a new <a href="https://amzn.to/2PMnyJ7">KMC single-speed chain</a>, some <a href="https://amzn.to/2CiEGmy">faux-leather grips</a>, new <a href="https://amzn.to/31J0U9Z">yellow brake and shifter cables</a> and <a href="https://amzn.to/2DM7ogr">inexpensive brake pads</a>.</p> <p>I also had to buy <a href="https://amzn.to/2DSbrHF">new cotter pins</a> to replace the ones I destroyed in the removal process.</p> <p>And with that, it was done.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/raleigh-done.jpg" alt="The finished product." /> <figcaption>The finished product.</figcaption> </figure> <p>Truth be told, the frame is way too big for me and I'll probably end up selling it, letting it go to a new home and fund the next project. But for now, I'm enjoying it as it is. I call it &quot;Lemon&quot;.</p> <h3 id="august-2020-goodbye-raleigh" tabindex="-1">August 2020: Goodbye, Raleigh<a class="tdbc-anchor" href="https://another.rodeo/raleigh-sports/#august-2020-goodbye-raleigh" aria-hidden="true">#</a></h3> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/raleigh.jpg" alt="The completed Raleigh ." /> <figcaption>The completed Raleigh .</figcaption> </figure> <p>I really enjoyed rebuilding the Raleigh Sports and learning so much more of the lore of these fascinating bikes and their indestructible three-speed hubs (<a href="https://sheldonbrown.com/retroraleighs/">thank you Sheldon Brown!</a>) I really liked riding it around, too. The upright position, the smoothness of the internal gearing, the <em>character</em> of it, all that appealed. I found it thoroughly charming and enjoyed almost every minute of the restoration (except those cotter pins), especially since this particular example was so close to the brink before I brought it back.</p> <p>But really, it's quite a bit too big for me, and I can't keep them all. So on the market it went. And as it turned out it went to a very nice young lady who's already an avid rider, but wanted something fun and funky for around town. The lemon yellow Raleigh seems to fill the bill perfectly, so I think it went to a good home. I hope it's good to her for a long time. Raleigh sure built them to last.</p> Making a smart vintage camper 2021-05-07T00:00:00Z https://another.rodeo/smart-camper/ <p>In early 2020, with my <a href="https://another.rodeo/71-eco-restoration/">restoration of a 1971 fiberglass &quot;egg&quot; camper well underway</a> I started thinking about how it could be fun to bring some modern technology to it. I mean, if you could bring modern automation, monitoring and entertainment to a 50-year-old travel trailer, how cool is that?</p> <p>All of the code for this project is in the <a href="https://github.com/tBaxter/pi-smart-camper">pi-smarter-camper repo</a>.</p> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> <p>To get started, I looked at a Raspberry Pi I had recently picked up (back when you could still do that), it seemed like it would make the perfect base. It's small, affordable, works well on low voltage and is basically built for the sort of experimenting I'd be doing.</p> <p>So I took a good guess at what I'd want and started putting some parts together in a a decent-sized <a href="https://amzn.to/31TiPL3">water-resistant enclosure</a>. It was bigger than I needed, but would still tuck neatly into the bottom of the closet in the trailer, by the wheel well.</p> <p>Inside the box I mounted a Pi 4 using lightweight (and corrosion resistant) <a href="https://amzn.to/2SfGh1w">nylon stand-offs</a>. I could probably have used a cheaper Pi but I thought the 4 would provide the best media server capabilities, and best handle multi-tasking other things I want to do.</p> <p>I put in a 250GB <a href="https://amzn.to/37fqeFi">SSD drive</a>, chosen because it was reasonably cheap, appeared to be rugged and supported fast USB 3.1. I needed a drive to hold all the media files. I drilled out the faux bolts in the corners and then mounted the actual drive to the enclosure lid using stainless steel machine screws and acorn nuts.</p> <p>A simple <a href="https://amzn.to/2OKVRAb">12V-5V stepdown converter</a> took the camper's 12V system power down to something Pi-Friendly. I also added a <a href="https://amzn.to/3bqPrQs">Power button with LED</a> to safely power the Pi up and down. The button is recessed so it won't get toggled accidentally as the trailer jostles around, and it incorporates an LED so I can see if the PI is on or not. Pretty spiffy.</p> <p>I also ordered a <a href="https://amzn.to/2QcVRJR">15.6&quot; touchscreen monitor</a>. It checked all the boxes for my purposes:</p> <ul> <li>Touchscreen, so it can act as a control center</li> <li>Large enough and high enough resolution (1920x1080) to comfortably watch movies while in bed.</li> <li>Will fit on the closet door</li> <li>Single USB-C cord for power and data</li> </ul> <h3 id="wiring-a-pi-power-switch" tabindex="-1">Wiring a Pi power switch<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#wiring-a-pi-power-switch" aria-hidden="true">#</a></h3> <p>Wiring up a Pi power switch seems like it should be the simplest thing imaginable. It is not. That said, it's not <em>that</em> hard once you sort through a gazillion how-to guides to find the one that makes sense. There are nice, helpful scripts in the the <a href="https://github.com/Howchoo/pi-power-button">Pi Power Button repo</a> and <a href="https://howchoo.com/g/mwnlytk3zmm/how-to-add-a-power-button-to-your-raspberry-pi">related instructions</a>, which make the scripting part pretty straightforward.</p> <p>The key is to use a momentary switch with a resistor built in, so you're protecting the Pi. I used <a href="https://amzn.to/3bqPrQs">this power button with LED</a> and have been happy with it.</p> <p>Note when you're following the instructions, the files don't have to be written -- they're in the repo. Just use <code>cp</code> to move them where you need them and be sure to <code>chmod</code> them to set the permissions. <a href="https://howchoo.com/g/ytzjyzy4m2e/build-a-simple-raspberry-pi-led-power-status-indicator">A simple tutorial</a> took care of the LED portion of the switch.</p> <p>One catch: because there's a power switch and an LED, you have to think through the GPIO pins a little more. I used 5 and 6 for the Power button, as outlined in the instructions, then used 8 and 14 for the LED.</p> <h3 id="installing-a-motion-sensing-camera" tabindex="-1">Installing a motion sensing camera<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#installing-a-motion-sensing-camera" aria-hidden="true">#</a></h3> <p>I wanted to have a motion sensing camera by the front door of the camper to provide a layer of security when we're not there. I'd already prototyped one with a Pi Zero -- that was my first Pi project -- so it seemed like a good place to start here, too.</p> <p>I needed to drill two holes in the cabinet side wall, one each for the PIR sensor and one for the camera. This hurt a bit, since I had filled dozens of holes in the fiberglass since I got the trailer, but I figured I'd filled so many holes, what's a couple more if I needed to fill them later. A <a href="https://amzn.to/2Ucun8J">step drill bit</a> really helps for these sorts of things, and it made short order of making a couple of accurately sized holes.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/holes.png" alt="My accurately placed and sized holes." /> <figcaption>My accurately placed and sized holes.</figcaption> </figure> <p>Inside the closet, I continued to ignore the long-unpainted fiberglass (you can't see it anyway) and used a bit of <a href="https://amzn.to/2WgVp1m">butyl tape</a> to hold the PIR sensor in place. Butyl tape is amazing stuff. If you have a travel trailer, you really should have some on hand.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/putty.png" alt="Butyl tape to hold the PIR sensor in place." /> <figcaption>Butyl tape to hold the PIR sensor in place.</figcaption> </figure> <p>To get from the camera and sensor at the top of closet to the Pi, which lives in a box at the bottom, I had to pick up a <a href="https://amzn.to/2Wi8lnl">two-meter Pi camera ribbon cable</a> and splice in a lot of extra wire to run from the PIR sensor to the GPIO pins. I used some white duct tape to keep it held safely in an existing channel at the side of the door.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/splice.png" alt="I color-matched the wires and put heat-shrink on the splices. The exrtra-long ribbon cable for the camera is also visible." /> <figcaption>I color-matched the wires and put heat-shrink on the splices. The exrtra-long ribbon cable for the camera is also visible.</figcaption> </figure> <p>Then I used a Dremel cut-off wheel to cut a groove in my project box and fed the wires in, with more butyl tape to keep dust and moisture out.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/box-wiring.png" alt="Almost all wired up." /> <figcaption>Almost all wired up.</figcaption> </figure> <p>From there, it was just a matter of hooking up the ribbon cable and the PIR. The ribbon cable is easy and for the PIR there are only three pins: One of them goes to a 5v pin on the GPIO, one goes to ground, and the center output pin. In my case, the code expects it to be Pin 7.</p> <h4>Testing the motion sensor hardware</h4> <p>With both the camera and the PIR motion sensor wired in, I wanted to test it before going further.</p> <p>When I SSH into the Pi, I <em>should</em> have been able to run <code>raspistill -o testshot.jpg</code> from the command line. But since this was a fresh Pi, I got a <code>Camera is not enabled in this build</code> error. I needed to <code>sudo raspi-config</code> and turn it on.</p> <p>But after that, I still saw <code>Camera is not detected.</code> Time to go double-check the wiring. Sure enough, I inserted the ribbon cable backwards, like I <em>always</em> do. <a href="https://projects.raspberrypi.org/en/projects/getting-started-with-picamera/2">Rasperry Pi tries to make it idiot-proof</a> but apparently I am a special kind of idiot.</p> <p>After double-checking all connections <code>raspistill -o testshot.jpg</code> was running correctly. Now it's time to write some software.</p> <h4>The motion sensor code</h4> <p>All of the code is in the <a href="https://github.com/tBaxter/pi-smart-camper">pi-smarter-camper repo</a>. Inside the <a href="https://github.com/tBaxter/pi-smart-camper/blob/master/webapp/app.py">Flask app.py file</a> there's a fair bit of setup going on.</p> <p>In <code>index</code> we're creating a lot of variables that are, by default, nothing. But if they get set later we'll be able to show the status.</p> <p>The real meat of it is happening down in <code>camera_action</code>, which lets us toggle the camera off and on.</p> <p>In particular, if we're turning the camera and motion detection on, we're starting it in a thread in the background, so the webapp can go ahead and continue to do its thing.</p> <p>When we start the camera, we're calling <code>start_motion_detection</code> from <code>monitoring/motion_sensing.py</code>. This is made much simpler thanks to the <code>gpiozero</code> library.</p> <p>Basically, the <code>start_motion_detection</code> function initializes things, starting up the motion detection and configuring the camera. Then, when some movement is detected it uses a lambda to call <code>take_photo</code> and actually store a photo locally.</p> <p>Back in the <code>app.py</code> actions function, the second half just handles clean shutdown. If we turn the camera off, we want to be sure we cleanup on the Pi and leave everything as tidy as possible.</p> <p>Either way, we redirect back to <code>index</code>, now with those variables populated so we can show what we just did. Now I needed a way to show the camera status. A control center, if you will.</p> <h3 id="setting-up-a-local-web-server" tabindex="-1">Setting up a local web server<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#setting-up-a-local-web-server" aria-hidden="true">#</a></h3> <p>The goal here is to be able to monitor the status of things from anywhere, anytime. The easiest way I know to make that happen is with a web server and app.</p> <p>Normally, Django is my go-to framework for web app work, but in this case I decided to use Flask for a few reasons:</p> <ol> <li>It's really lightweight, which makes sense with the modest demands of the app and the modest resources of the Pi.</li> <li>I hadn't used it before, so there was a nice learning opportunity.</li> </ol> <p>Keep #2 in mind, though, when you look at my terrible Flask code.</p> <p>There are quite a few tutorials on how to <a href="https://randomnerdtutorials.com/raspberry-pi-web-server-using-flask-to-control-gpios/">set up Flask on a Pi</a>, but it's pretty straightforward.</p> <p>First, make sure everything is updated and upgraded, and install Flask:</p> <pre><code>sudo apt-get update sudo apt-get upgrade sudo apt-get install python-pip python-flask sudo pip install flask </code></pre> <p>Now, if you were starting from scratch, at this point you'd want to follow a Flask tutorial. But since I have an existing Github repository I can use that will save me a ton of time.</p> <p>First I navigate to where I want the code: <code>cd /var</code></p> <p>I want the code to be in <code>/var/www</code> but the <code>www</code> folder doesn't exist by default. That works well, though, as it gives me a clean place to clone my repository and create the <code>www</code> directory all at once with <code>sudo git clone https://github.com/tBaxter/pi-smart-camper.git www</code></p> <p>You have to run that as <code>sudo</code> to be able to create the <code>www</code> folder you're cloning into, but once you've done that, you can transfer ownership to the regular <code>pi</code> user with <code>sudo chown -R -f pi /var/www/</code></p> <p>If you <code>cd www</code> to go into your new <code>www</code> directory, and then use <code>ls</code> you should see <code>cellular_modem</code>, <code>LICENSE</code>, <code>monitoring</code>, <code>README.md</code> and <code>webapp</code> just like you would if you visited <a href="https://github.com/tBaxter/pi-smart-camper">the repo</a>.</p> <p>From there, you can move into the <code>webapp</code> directory (<code>cd webapp</code>) and start up your Flask app with <code>python3 app.py</code>. If everything is working correctly, you should see something like:</p> <pre><code> * Serving Flask app &quot;app&quot; (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: on * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) </code></pre> <p>From there, go to your browser and substitute the IP address for your Pi (the one you SSH'ed into) for 0.0.0.0 and you should see your new site, running on your Pi web server.</p> <p>If this was a real server on the open web you'd want to use Gunicorn or something, but since traffic is limited to just me on a local machine it's fine.</p> <h3 id="adding-the-touchscreen" tabindex="-1">Adding the touchscreen<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#adding-the-touchscreen" aria-hidden="true">#</a></h3> <p>For this project, my first thought for a screen was to use an old first-generation iPad I had laying around. Cost was zero, since I already had the iPad (and a first-generation iPad has nearly no value anymore). And I did manage to connect it up to the Pi and show the screen, which felt like a win, but still, it wasn't a great solution.</p> <ul> <li>It had to connect to the Pi over the network via VNC. With it being a very old iPad, that made it painfully slow.</li> <li>It was also too small to comfortably watch anything on from any distance.</li> <li>Since it was connecting over a network it required a network I might not have when I was camping.</li> <li>It wasn't <em>really</em> interfacing with the Pi. It was still running IOS, so my touchscreen abilities were kind of limited.</li> <li>On top of all that, mounting it in the door was going to tax my meager woodworking skills.</li> </ul> <p>So with that experiment set aside, I got thinking about the touchscreen I really wanted.</p> <ul> <li>Bigger, but not too big. I need it to be small enough to mount on the closet door, but easily viewable from the bed.</li> <li>Standard VESA mounts for simple installation.</li> <li>Powered by 12v or less. I'm not running 110v line just for the monitor.</li> <li>Very thin and lightweight. Since it's mounted on the closet door, the closer to a flush mount the better.</li> <li>Simple, direct interface with the Pi.</li> </ul> <p>After digging around a bit I landed on this <a href="https://amzn.to/2JaG7n5">15.6&quot; USB-powered touchscreen</a>. Connecting it to the Pi was pretty straightforward and the monitor was mostly plug-and-play.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/monitor.png" alt="Testing the touchscreen monitor." /> <figcaption>Testing the touchscreen monitor.</figcaption> </figure> <p>There was one wrinkle: while the monitor is USB-powered and promised to support both touch and video over a single cable, I learned the Raspberry Pi 4 does <em>not</em> support video over USB. Which means I'd need to use a separate HDMI cable. My closet door mounting got a bit more complicated. And ugly.</p> <p>Worse yet, in the interests of making a very thin monitor, all the plugs come out the side. Having two cords poking out of the side of this thing is not the look I'm going for. To mitigate this I bought a <a href="https://amzn.to/3dqFhAw">right-angle HDMI cord</a> and a <a href="https://amzn.to/2UiYOLL">low-profile USB-C cord</a>.</p> <p>As for actually mounting the monitor, that part was pretty simple. I found a <a href="http://geldner.com/wp-content/uploads/2016/11/VESA-100mm-75mm-Template.pdf">VESA mount template</a> online and taped it to the door to figure out where to drill.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/vesa-template.png" alt="VESA mount template." /> <figcaption>VESA mount template.</figcaption> </figure> <p>It's hard finding anything level or square in one of these old trailers and it was tricky accounting for where the hole for the cords needed to be. If I was doing it again I'd figure out how to put the template on a monitor-sized piece of paper, so I could get a better sense of the overall positioning of things, rather than just the mount points.</p> <p>For the actual mounting I used <a href="https://amzn.to/2QIm43i">stainless steel M4 screws with integrated washers</a>. I make a point of using stainless as much as possible in the trailer.</p> <h3 id="creating-a-dashboard" tabindex="-1">Creating a dashboard<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#creating-a-dashboard" aria-hidden="true">#</a></h3> <p>With the monitor now in place a lot of things are starting to come together, and it was time to put them all in a dashboard control center for the trailer. I'm going to skip most of the gory details of the code -- <a href="https://github.com/tBaxter/pi-smart-camper">it's all available on Github</a> -- and instead just talk about what it does.</p> <p>The first trick to the dashboard is to <a href="https://pimylifeup.com/raspberry-pi-kiosk/">turn the Pi's Chromium Browser into a full-screen kiosk</a>, which lets us build a web page that looks and acts like a full-screen experience.</p> <p>From there, we'll use the Flask web app we set up earlier to talk to the Pi's hardware and to serve the &quot;web page&quot; that forms the basis of our dashboard.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/dashboard.png" alt="The dashboard" /> <figcaption>The dashboard</figcaption> </figure> <h4>Weather</h4> <p>The weather module first geolocates the trailer, so it automatically knows where to get the weather for. Then it uses OpenWeather to get the local weather for that area. I need to add in weather alerts still, but this works pretty well.</p> <h4>Plex</h4> <p>The Plex module, so far, is the trickiest. It's easy enough to get Plex basic info from the Plex API, but harder to get images, and I'm still working through how to best play a video from there. Even so, it alreaady can show what you were last watching and unwatched movies. I'm still working on this one.</p> <h4>Camera</h4> <p>A nice interface to turn the motion-sensing camera on and off, and to report on its status.</p> <h4>Wifi Status</h4> <p>Shows the current Wifi network and it's strength. I've written the code to show nearby networks, too, but I'm not displaying that part yet. This was planned to be the stub for building out more robust Wifi &amp; virtual private network functionality in order to provide safer, stronger wifi for the trailer.</p> <h4>Time/date/messages</h4> <p>Doesn't do a whole lot yet other than show the local date and time. But it's a useful start.</p> <p>I've got a lot of work to do on all these modules still, but it's not a bad start for a weekend's worth of work! If you have questions, comments, suggestions or whatever, <a href="https://github.com/tBaxter/pi-smart-camper/issues">file an issue on Github</a>.</p> <h3 id="trimming-the-touchscreen" tabindex="-1">Trimming the touchscreen<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#trimming-the-touchscreen" aria-hidden="true">#</a></h3> <p>With the monitor VESA-mounted to the door, it was fucntional, but I needed to do something about the ugly cords coming out of the side. Looking at the scrap wood pile, I had a revelation. I saw some left-over L-shaped wood outer corner trim that could be cut down to the screen depth and work.</p> <p>After carefully measuring and cutting, I glued it together with spare wood providing some extra spacing and strength.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/clamped-frame.png" alt="Clamping and gluing the frame." /> <figcaption>Clamping and gluing the frame.</figcaption> </figure> <p>I drilled a hole in the lower corner for a piece of dowel that allowed me to still press the on/off button. Then I painted it white and screwed it in place from the back.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/screen-frame.png" alt="The completed touchscreen frame." /> <figcaption>The completed touchscreen frame.</figcaption> </figure> <h3 id="setting-up-audio" tabindex="-1">Setting up audio<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#setting-up-audio" aria-hidden="true">#</a></h3> <p>This whole project had more than it's share of trials, setbacks, false starts and dead ends. If this sort of thing was easy, more people would have done it already. Getting usable audio in the trailer was definitely one of the big hurdles.</p> <p>I mean, I had a wonderful touchscreen and a Pi running Plex to show movies, and a new problem: I couldn't hear it. The meager speakers in the monitor were mostly covered by the frame around it, and it didn't matter because the Pi couldn't really push enough volume anyway.</p> <p>Figuring I didn't need audiophile quality just to watch a movie at bedtime or if it's raining, but I <em>did</em> want to put a premium on low-weight, low-cost, low-power solutions, I ordered a Kinter MA170 amp from eBay and some <a href="https://amzn.to/3gteWmD">nice little marine speakders</a>.</p> <p>I committed to doing it and cut holes for the speaker in the new closet door I had just made a couple of months earlier. Wired it all up and... it sounded horrible. Just horrible. A whiney, popping mess. All noise, no audio to speak of.</p> <p>So I spent money on <a href="https://amzn.to/2XuYYzX">noise suppressor clips</a> that helped, but not much.</p> <p>And I bought a <a href="https://amzn.to/3ekQRfT">HifiBerry</a> which, honestly, seems to solve a different problem. If I'd bought the version with a built-in amp it might have been just the ticket, but I'm unlikely to find out now. This was also a particularly painful dead-end because I spent a long time unwinding the audio settings it needed changed, and I'm still not sure I've got that completely sorted out.</p> <p>Then I bought a <a href="https://amzn.to/2ZQVWZJ">noise isolator</a> which also helped, but not enough.</p> <p>I mucked around with the power feed, with all sorts of settings (both in hardware and with software) and generally tried everything until finally I figured that everything was playing nicely, albeit with low volume, except the amp. So I broke down and bought another amp.</p> <p>And this turned out to be a <a href="https://amzn.to/2TIMYcV">nice little amp for the purpose</a>. The noise problem was gone immediately, it's plenty loud for the trailer and the sound quality is pretty good, even through the diminutive speakers. It turns out the original Kintner amp was just trash, which is why I won't link to it. The new amp works great, though. I'm happy.</p> <h2 id="addendum-setting-up-the-pi-from-scratch-as-of-may-2021" tabindex="-1">Addendum: Setting up the Pi from scratch (as of May 2021)<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#addendum-setting-up-the-pi-from-scratch-as-of-may-2021" aria-hidden="true">#</a></h2> <p>After using the camper through 2020 -- and utterly failing to document any of it -- I had some ideas on how I could do it better this year. In particular, I found that the thing I used the Pi for most (movies) wasn't working well. I was getting a lot of buffering and audio issues that were unpredictable and frustrating. Sometimes it worked fine. Others, not so much.</p> <p>So I figured I'd start from the ground up with an OS optimized for media playback. LibreElec, here we come! Why LibreElec? Because it's lightweight, built for media, and as I'm writing this OSMC still doesn't want to play nice with the Pi 4.</p> <p>So with that said, on with the setup (and a lot of this will look very much like last year's guide).</p> <hr /> <p>There are a million and two ways to set up a Pi, but here are the steps I think need to be done every time to set up a Pi from scratch to work well as a Smart Camper media and information hub (recorded here for my own future reference as much as anything).</p> <p>These steps may also be useful for other Pis acting as similar hubs, such as Magic Mirrors or car-puters.</p> <h3 id="first-get-an-os-on-the-pi" tabindex="-1">First, get an OS on the Pi<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#first-get-an-os-on-the-pi" aria-hidden="true">#</a></h3> <ol> <li>Use <a href="https://www.raspberrypi.org/blog/raspberry-pi-imager-imaging-utility/">Raspberry Pi Imager</a> to install LibreElec on a good-quality, 32GB SD card. LibreElec is lightweight and optimized for media playback, and we think it will better suit how we use the Pi when we're camping.</li> <li>Put the new card in the Pi and boot up. Assuming it starts OK, go through the first-run setup steps.</li> <li>Set a good password.</li> <li><a href="https://pimylifeup.com/raspberry-pi-ssh/#enablesshdesktop">Be sure to enable SSH</a></li> <li>And <a href="https://pimylifeup.com/raspberry-pi-static-ip-address/">set a static IP</a>. You'll be glad you did and aren't chasing ever-changing IP addresses set by your router. Note that your ISP and router may require additional work to make this happen.</li> </ol> <h3 id="install-plex" tabindex="-1">Install Plex<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#install-plex" aria-hidden="true">#</a></h3> <ol> <li>Ensure the external drive containing the media library <a href="https://pimylifeup.com/raspberry-pi-mount-usb-drive/">is mounted and will mount automatically</a>.</li> <li><a href="https://pimylifeup.com/raspberry-pi-plex-server/">Follow the steps to prep for Plex server installation</a>:<code>sudo apt-get install apt-transport-https curl https://downloads.plex.tv/plex-keys/PlexSign.key | sudo apt-key add - echo deb https://downloads.plex.tv/repo/deb public main | sudo tee /etc/apt/sources.list.d/plexmediaserver.list deb https://downloads.plex.tv/repo/deb public main</code></li> <li>Update packages: <code>sudo apt-get update</code>.</li> <li>Now get the Plex server: <code>sudo apt-get install plexmediaserver</code></li> <li>And upgrade: <code>sudo apt-get upgrade</code>. In the past I've cleaned up some unneeded packages, but honestly, it's probably not worth it. They're not hurting anything, really.</li> </ol> <h3 id="pi-configuration-and-further-installations" tabindex="-1">Pi Configuration and further installations<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#pi-configuration-and-further-installations" aria-hidden="true">#</a></h3> <ol> <li>Reset the resolution to 1440x900 (at 1920 it's too fine for fat fingers)</li> <li>Enable 1-wire interfacing, either through the <code>raspi-config</code> &quot;interfacing&quot; option or by manually editing the config.</li> <li><a href="https://www.raspberrypi.org/documentation/configuration/screensaver.md">Install xscreensaver</a>. It's by far the easiest way to control when the Pi and display go to sleep.</li> </ol> <h3 id="code-setup" tabindex="-1">Code setup<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#code-setup" aria-hidden="true">#</a></h3> <ol> <li>Pull my smarter camper code from the repo.</li> <li>Make sure it's on pythonpath: <code>export PYTHONPATH=&quot;${PYTHONPATH}:$HOME/var/www&quot;</code></li> <li>And just to be sure, put it in <code>~/.bashrc</code> too.</li> <li>Pip install dependencies from the repo's requirements file: <code>pip3 install -r REQUIREMENTS.txt</code></li> <li>Set environment variables for services we're using. See settings.py for details.</li> <li>Follow the instructions above to re-install the web server and monitoring page</li> </ol> Peugeot mixte restoration 2021-07-23T00:00:00Z https://another.rodeo/peugeot-ph19-mixte/ <p>For awhile now I've been on the hunt for a nice step-through framed bike. My criteria weren't that tough: be pretty, and not terrible. Apparently in the world of step-through frames that seems to be a tall order.</p> <p>The fact is step-through frames -- even mixtes -- still have way too much of a &quot;girl bike&quot; stigma, and cycling in general has a tendency to treat women (and &quot;girl bikes&quot;) as second-class members of the community. You see it all the time: some guy is out front with the latest carbon-fiber Terminator 6000 SEX 40-speed wonder while his girlfriend/spouse lags behind on a 500-pound cruiser, struggling to keep pace, 'cause he's <em>much more serious a cyclist</em>.</p> <p>Hang on, it's hard to type with my eyes rolling so far into the back of my head.</p> <p>Anyways, back to the subject at hand: the difficulty in finding a decent step-through frame. I had been looking awhile, but nothing quite worked.</p> <p>I narrowly missed a pair of nice Bianchis, much to my chagrin. I had an eye on two different Raleighs, but neither quite spoke to me. And I suspect both may have been real heavyweights -- not what I was after. I spotted a nice Miyata and a Univega, but both weren't really priced like project bikes (although the Univega should have been).</p> <p>Finally, on a whim I inquired about this forlorn Peugeot that had been listed on the local marketplace a full year ago. Astoundingly, it was still available, and could be mine for couch-cushion money. So I grabbed it.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/peugeot.jpg" alt="The Peugeot, as found on the local marketplace site., immediately after transport to my basement. The blue tape and plastic bag on the rear wheel is holding parts of the rear derailleur." /> <figcaption>The Peugeot, as found on the local marketplace site., immediately after transport to my basement. The blue tape and plastic bag on the rear wheel is holding parts of the rear derailleur.</figcaption> </figure> <p>To be honest, it's not a great Peugeot. It's an OK Peugeot. I thought it was pretty and nice enough. After some research (and discovering the paper tag still intact on the bottom bracket) I learned this particular Peugeot is something of a rare bird (or lion, as the case may be): it's a circa 1982 PH19, as seen on <a href="http://www.bikeboompeugeot.com/Brochures%20USA/Peugeot%201982%20USA%20Brochure/Peugeot_1982_USA_Brochure_PH10s_PH19.jpg">this catalog page</a> and <a href="http://www.bikeboompeugeot.com/Brochures%20USA/Peugeot%201982%20USA%20Brochure/Peugeot%201982%20USA%20Special%20Flyer%20Page%204.jpg">this ad</a>.</p> <p>From those artifacts I gathered the PH19 was the mixte variant of the PH10. While the PH10 lasted a few years, I can't find any reference to the PH19 mixte variant after 1982. My guess is that Peugeot had too many mixtes in the mix and the PH19 was squeezed out.</p> <p>The PH10 and PH19 are a bit unusual for the era, too. Where their contemporaries would have had lugged frames, these Peugeots were lugless and internally brazed. Peugeot made a bit of a fuss about it at the time, claiming a step forward, but I could also see where it was simply a cost-cutting measure. Hard to say nearly 40 years later.</p> <div class="photogrid"> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/peugeot/carbolite.jpg" alt="The carbolite sticker tells you a lot about this ex-California bike: This was a high-tensile steel bike, sitting at the upper part of the lower end of the Peugeot line-up. The frame weighs in at 7 pounds even. so it's no lightweight, but the French could work magic with stovepipe frames." /> <figcaption>The carbolite sticker tells you a lot about this ex-California bike: This was a high-tensile steel bike, sitting at the upper part of the lower end of the Peugeot line-up. The frame weighs in at 7 pounds even. so it's no lightweight, but the French could work magic with stovepipe frames.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/peugeot/cluster.jpg" alt="One reason it was so cheap: the chain was so rusty the Simplex derailleur had a broken jockey pulley after someone had attempted to force it to move. Luckily the prior owner had kept the jockey pulley remnants in a ziploc bag helpfully taped to the rear wheel." /> <figcaption>One reason it was so cheap: the chain was so rusty the Simplex derailleur had a broken jockey pulley after someone had attempted to force it to move. Luckily the prior owner had kept the jockey pulley remnants in a ziploc bag helpfully taped to the rear wheel.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/peugeot/hub.jpg" alt="The hubs are Maillard, laced to pretty Rigida alloy 27" rims.="" Not="" terrible="" stuff,="" if="" I="" can="" get="" it="" to="" clean="" up.="" If="" not,="" will="" end="" up="" with="" a="" 700c="" conversion,="" but="" would="" rather="" keep="" the="" original="" French="" parts."="" /> <figcaption>The hubs are Maillard, laced to pretty Rigida alloy 27" rims. Not terrible stuff, if I can get it to clean up. If not, it will end up with a 700c conversion, but I would rather keep the original French parts.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/cranks.jpg" alt="There's a pretty nice Stronglight crankset, with a functional plastic chainguard. A Peugeot-branded Simplex derailleur handles shifting. It should clean up OK. The very rusty chain, however, is a goner." /> <figcaption>There's a pretty nice Stronglight crankset, with a functional plastic chainguard. A Peugeot-branded Simplex derailleur handles shifting. It should clean up OK. The very rusty chain, however, is a goner.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/bb.jpg" alt="This corrosion around the BB isn't nearly as bad as it looks here. It's really just surface rust and should be easily dealt with." /> <figcaption>This corrosion around the BB isn't nearly as bad as it looks here. It's really just surface rust and should be easily dealt with.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/headtube.jpg" alt="A good look at the lugless construction and clever Peugeot cable routing." /> <figcaption>A good look at the lugless construction and clever Peugeot cable routing.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/celo.jpg" alt="The original celophane bar tape. Almost everything in this photo will be dustbinned." /> <figcaption>The original celophane bar tape. Almost everything in this photo will be dustbinned.</figcaption> </figure> </div> <h3 id="november-2020-paint" tabindex="-1">November 2020: Paint<a class="tdbc-anchor" href="https://another.rodeo/peugeot-ph19-mixte/#november-2020-paint" aria-hidden="true">#</a></h3> <p>I knew when I bought the Peugeot it had some rust. I underestimated the extent of it. I should know better. I've made this mistake before. I'll probably make it again.</p> <p>Nevertheless, as I cleaned and scrubbed the bike I was clearly losing more and more of the original metallic blue paint until eventually I was clearly going to have to spray some paint.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/rust.jpg" alt="Rust on the Peugeot. Bad rust." /> <figcaption>Rust on the Peugeot. Bad rust.</figcaption> </figure> <p>I hoped to do a partial respray, but matching the light blue metallic proved difficult. Hobby stores couldn't help, and eventually I turned to pricey automotive paint. A local auto paint supply store custom mixed it for me, taking a color analysis of the fork I took in. Auto paint is high quality stuff, but the paint cost me three times what I paid for the bike. And they warned me it still might not be an exact match. It's tough color matching metallics. Any number of factors will throw it off, including temperature, humidity, and my own paint technique.</p> <p>But I had to try, and I dutifully taped off all the stickers and pinstriping and otherwise prepped the frame for spot painting.</p> <div class="photogrid"> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/peugeot/prepped.jpg" alt="I taped off everything I wanted to keep. If I was doing it again I'd have taped more." /> <figcaption>I taped off everything I wanted to keep. If I was doing it again I'd have taped more.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/peugeot/primer.jpg" alt="I used a high-build auto primer." /> <figcaption>I used a high-build auto primer.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/peugeot/sprayed.jpg" alt="And put the paint on carefully, with very light coats as recommended." /> <figcaption>And put the paint on carefully, with very light coats as recommended.</figcaption> </figure> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/nope.jpg" alt="and... nope. Color match fail." /> <figcaption>and... nope. Color match fail.</figcaption> </figure><p></p> </div> <p>It didn't work. No matter how I buffed and color sanded, there was a clear difference between the new and old paint and it was not going to feather in smoothly.</p> <p>Sigh.</p> <p>I was going to have to do a full respray. Which meant replacing all the graphics. I was convinced I'd never find the correct stickers and would have to bodge something together to make the Peugeot together.</p> <p>Luckily I found <a href="https://www.bicyclestickers.co.uk/collections/peugeot/products/00551-peugeot">the absolutely correct set of decals for this obscure Peugeot</a>. While I had to wait for them to come all the way from the UK, they were beautifully done, and I can happily recommend <a href="https://bicyclestickers.co.uk/">bicyclestickers.co.uk</a> for any sticker needs.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/measuring.jpg" alt="Measuring and prepping for paint. Again." /> <figcaption>Measuring and prepping for paint. Again.</figcaption> </figure><p></p> <p>Before I sprayed (again) I sanded everything back even more than I did the first time, and carefully measured the position of the existing decals, with lots of pictures.</p> <p>I really wanted to put it back together looking as close to original as possible, and once I had sanded and painted I wouldn't be able to see where they went. So I figured I'd better get it right before I went any further.</p> <p>Once prepped, it went out again for priming and painting. After letting the paint dry and harden a few days, I polished it up with <a href="https://amzn.to/33BkKql">Turtle Wax polishing compound</a> to bring out the shine.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/painted.jpg" alt="Painted and polished, and it looked beautiful." /> <figcaption>Painted and polished, and it looked beautiful.</figcaption> </figure><p></p> <p>And that worked. The original rust damage was invisible, and you could never tell the paint is a slightly different shade than the original. While I'm no professional painter, I'm very happy with how it came out.</p> <h3 id="december-2021-rebuilding-and-enjoying-the-peugeot" tabindex="-1">December 2021: Rebuilding and enjoying the Peugeot<a class="tdbc-anchor" href="https://another.rodeo/peugeot-ph19-mixte/#december-2021-rebuilding-and-enjoying-the-peugeot" aria-hidden="true">#</a></h3> <p>As I waited on the new decals to make their way across the pond from bicyclestickers.co.uk, I started work on all the components.</p> <p>I could tell the bike had been truly loved once. That had been awhile ago, though, and things were looking rough. It took a lot of time, effort and polishing compound.</p> <p>It's not perfect by any stretch, but it has a nice blend of shiny new and vintage patina, and it positively oozes Gallic charm. It's the kind of bike that makes you want to buy more just like it, even though you clearly already have one and don't need more.</p> <p>But that's the finished product. It took a lot to get there, as you can see in the before-and-after photos.</p> <p>Let's start with the rust. As noted previously, the rust on the frame wasn't deep, but it was extensive. Worse yet, the more I stripped back, the more rust I uncovered.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/rust.jpeg" alt="The rust that launched the respray." /> <figcaption>The rust that launched the respray.</figcaption> </figure><p></p> <p>If the bike had rusted from the inside-out then the frame would be junk. I think the California salt air attacked the paint, but not deeply.</p> <p>In the end, the automotive paint was expensive and worth it. The frame finished up very well, and the reproduction decals completed the look beautifully -- so much so that I picked white accents, including brake lines, to complement the white Peugeot logos.</p> <p>The PH19 and the closely related (and more common) PH10 were built from Peugeot's proprietary Carbolite 103 high-tensile steel. That should be a recipe for real pig of a bike, but the PH19 rides much lighter and feels lighter than it actually is. Normally I would be a hard pass on most high-tensile steel bikes. I'm glad I gave it a chance.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/103.jpeg" alt="Carbolite 103 tubing" /> <figcaption>Carbolite 103 tubing</figcaption> </figure><p></p> <p>The permit stickers tell us that at some point, long ago, this was a California bike before it found its way to the midwest and began a long period of neglect.</p> <p>The bottom bracket also showed a good bit of corrosion, but it was all surface rust, with no pits in the steel, and inside the bottom bracket wasn't rusty. It cleaned up well, as did the original Stronglight cranks. I added a new <a href="https://amzn.to/38whtt4">Greenfield kick stand</a> since it's just a kickstand sort of bike.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/bb.jpeg" alt="BB corrosion, before and after" /> <figcaption>BB corrosion, before and after</figcaption> </figure><p></p> <p>Speaking of the Stronglight cranks, they were one of the few bits that really just had some surface grime on them, so they cleaned up with very little effort. I did, however, have to pick up <a href="https://amzn.to/34zlaNq">new chainring bolts</a> since the originals were pretty far gone.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/cranks.jpeg" alt="Stronglight cranks, before and after" /> <figcaption>Stronglight cranks, before and after</figcaption> </figure><p></p> <p>The cranks and chainrings were just quickly dismantled and hit with a bit of <a href="https://amzn.to/2XEvGQl">Mother's polish</a> and they came out wonderfully. The alloy rings look like they've seen very few miles. Even the black plastic chainguard cleaned up well and was reused.</p> <p>The front derailleur is Peugeot branded but probably made by Simplex. The Peugeot sticker is a little yellowed, but that's just seems like a bit of patina.</p> <p>The derailleur itself polished right up and works well. The old chain was a goner, though, so a new <a href="https://amzn.to/3pg983v">KMC silver-finished chain</a> is in place now.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/front-der.jpeg" alt="Front derailleur, before and after" /> <figcaption>Front derailleur, before and after</figcaption> </figure><p></p> <p>The pedals looked absolutely terrible but they spun freely, had no end-play, and were fairly lightweight. They clearly must have been decent quality when new, and comparable new pedals would be out of the budget for this bike, if I could even find them. So I tried cleaning them up, with OK results.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/pedal.jpeg" alt="Pedals, before and after" /> <figcaption>Pedals, before and after</figcaption> </figure><p></p> <p>They're far from perfect, but they don't look bad and they still work very well. Of course I went ahead and repacked them with grease. Since pedals tend to get pretty abused, I chose some higher-quality <a href="https://amzn.to/3nV1kUR">Finish Line grease</a>.</p> <p>For polishing the pedals and other tight areas where my stubby fingers don't really fit, I picked up a new <a href="https://amzn.to/37GSrs3">rotary tool with a flexible shaft extension</a> and it's been one of my smarter recent tool purchases. It's so much easier than trying to polish everything by hand, and this particular rotary tool has impressed me more than several more expensive ones I've had in the past.</p> <p>It made a huge difference on the hubs and rims. Trying to polish around spokes isn't fun, but the flexible shaft made it go much better.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/rear-hub.jpeg" alt="Rear hub, before and after" /> <figcaption>Rear hub, before and after</figcaption> </figure><p></p> <p>The Peugeot had Malliard hubs mated to Rigida rims, with Speidel quick-releases. All decent enough, but they were in terrible shape, with a cruddy gray haze everywhere that wasn't covered in oily grime.</p> <p>The quick releases in particular were pretty rusty. A hard scrubbing with light oil and blue Scotch-brite pads took the rust off, and then they cleaned up well.</p> <p>Of course I had to buy <a href="https://amzn.to/2JiAGGk">yet another freewheel tool</a> to remove the Atom cluster for cleaning, and to remove the ugly yellowed plastic pie plate.</p> <p>The rims were a complete surprise. As I got the grime off I could see that they had a chrome-ish finish. At first I thought -- and fretted -- that they were steel rims.</p> <p>I was completely surprised to discover that they're definitely aluminum but had apparently originally been highly polished. I was just bringing the shine back to them. Regardless, they look great now.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/rim.jpeg" alt="Rigida rims, before and after" /> <figcaption>Rigida rims, before and after</figcaption> </figure><p></p> <p>Tires are <a href="https://amzn.to/3ay7FkX">Schwalbe HS159</a> with gum walls, because I had them in the parts bin already and they're 27&quot;. If I had to buy tires I would have picked <a href="https://amzn.to/2KJyUhI">Panaracer Paselas</a> in 27&quot;, but the Schwalbes are fine and durable.</p> <p>The original chrome sticker chain stay was looking ragged, so I picked up a Peugeot-branded one from eBay. </p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/rear-stays.jpeg" alt="Rear chain stays, before and after" /> <figcaption>Rear chain stays, before and after</figcaption> </figure><p></p> <p>I mistakenly thought the new chainstay protector would be hard chromed plastic, not a thin vinyl sticker, but it works. I also really like the white cables against the metallic French blue paint.</p> <p>The rear derailleur was an adventure. These old Simplex derailleurs have a reputation for brittle pulley wheels, and my pulley wheel came to me in pieces inside a plastic bag helfully taped to the spokes.</p> <p>Of course Simplex pulleys are complete unobtainium and the Shimano pulleys I already had laying around don't fit.</p> <p>After doing some research I learned Suntour pulleys <em>can</em> fit, with some work. I thought it would be simple enough to find a ragged Suntour derailleur to scavenge a pulley from, but then I couldn't find one for a reasonable price.</p> <p>In the end, it was faster/cheaper/easier to just get a different derailleur, and I found a nice Shimano 105 on eBay for a good price. Then I still had to buy a new <a href="https://amzn.to/3nJsxcX">hanger</a> because the original was made for the Simplex, which of course uses a different size bolt.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/rear-der.jpeg" alt="Rear derailleur, now Shimano 105." /> <figcaption>Rear derailleur, now Shimano 105.</figcaption> </figure><p></p> <p>I'm happy with the results. The 105 doesn't look too out of place to my eyes and it shifts fantastically.</p> <p>Taking a look from the rear, the finished Peugeot shows little touches that weren't readily visible, like a nicely fluted seatpost that polished up well.</p> <p>Even the seat post bolt was pretty nasty, but it came back surprisingly well with crubby pads, light oil and elbow grease make magic.</p> <p>A brand-new <a href="https://amzn.to/3rkJwV8">vintage-style Selle Italia saddle</a> in white (of course) makes a lovely and comfortable topper for all of it. Over the seat you can catch a glimpse of the new cockpit, too.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/seat-rear.jpeg" alt="Rear view of seat and post." /> <figcaption>Rear view of seat and post.</figcaption> </figure><p></p> <p>Taking a closer look at the cockpit, about all the stayed was the original stem and the headset.</p> <p>The headset needed some light rust removal but the races looked good, so no problems there. The headset spacers had darkened with age, but <a href="https://amzn.to/3h9pcRX">polished aluminum replacements</a> fixed that.</p> <p>The original stem took a fine shine, but the stem-mounted shifters went into the parts bin, along with the bars and brake levers, all to make way for converting the original drop-bar configuration to upright bars.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/stem.jpeg" alt="A view of the stem and headset" /> <figcaption>A view of the stem and headset</figcaption> </figure><p></p> <p>The original-looking celo bar tape went into the trash -- what was left of it, anyway. In their place I fitted <a href="https://amzn.to/3rmZX3i">Origin8 bars</a> and <a href="https://amzn.to/2M0oKKh">Tektro FL750 brake levers</a>, same as on <a href="https://another.rodeo/peugeot-ph19-mixte/tags/principessa/">the Principessa</a>.</p> <p>Shifting duties are handled by some <a href="https://amzn.to/2WD5zrX">Shimano Tourney units</a>, which work shockingly well for the price: $20 for both sides! They work perfectly with the original 2x12 gearing setup, and even have a little blue upshift button that complements the blue paint. I was really surprised at how nice these admittedly bargain-basement shifters turned out.</p> <p>Grips are simply <a href="https://amzn.to/2JfPQvW">SRAM cork bar tape</a> in white. I was going to lacquer them but in the end didn't bother. Even clear lacquer would have yellowed them some, and honestly, if they get that dirty, I can just re-wrap them. One box of bar tape would wrap them 2-4 times.</p> <p>Bar plugs are courtesy of Kendall-Jackson. More on that in an upcoming post.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/cockpit.jpeg" alt="Cockpit before and after." /> <figcaption>Cockpit before and after.</figcaption> </figure><p></p> <p>So how does it ride? Wonderfully. It's a beautiful little ride. It's very comfortable, with quick but not flighty handling. The mixte frame looks fantastic, it's easy to get on and off and it's very flingable -- but again, not squirrelly.</p> <p>It feels like you could ride it all day but you'd have to stop frequently to just enjoy the day with it.</p> <p>It may have been a surprisingly great bike back in the day, or maybe it's way more than the sum of its parts. Either way, I love this thing. It is, in every sense, a lovely bike. I'm glad it didn't go to the dumpster. </p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/made-in-france.jpeg" alt="Made in France." /> <figcaption>Made in France.</figcaption> </figure><p></p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/before-after.jpeg" alt="Before and after." /> <figcaption>Before and after.</figcaption> </figure><p></p> <p></p><p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p><p></p> <h3 id="july-2021-goodbye-peugeot" tabindex="-1">July 2021 - Goodbye Peugeot<a class="tdbc-anchor" href="https://another.rodeo/peugeot-ph19-mixte/#july-2021-goodbye-peugeot" aria-hidden="true">#</a></h3> <p>I kept the Peugeot until late July of 2021 before letting it go to make room for another project. To be honest, almost immediately I regretted letting it go, and that feeling has only intensified since. It remains possibly the prettiest, friendliest commuter/city bike I've built up yet, and I would gladly build up another Peugeot someday. Preferable a mixte.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/on-the-rocks.jpg" alt="Beautiful bike." /> <figcaption>Beautiful bike.</figcaption> </figure><p></p> Trek 520 2022-07-18T00:00:00Z https://another.rodeo/trek-520/ <p>For a good chunk of the 80s, touring bikes were a big deal, and most every manufacturer was tripping over themselves trying to one up eveyrone else in the segment. Bike stores were glutted with high quality, supremely comfortable touring bikes with wildly wide-range gearing, high quality steel and mounts galore. It was a lot like today's gravel and endurance bike craze. At least until the bottom fell out.</p> <p>In the summer of 2021 I decided I wanted one of these classic tourers, and few are more classic than the Trek 520, which had a remarkable 40-year production run from 1983 to 2023.</p> <p>And so I found this one -- an '88 or '89 model -- and it came home with me.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/as-found.jpeg" alt="It looks better in photos than it actually was, but you gotta love the old-school foam grips and toeclips." /> <figcaption>It looks better in photos than it actually was, but you gotta love the old-school foam grips and toeclips.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/nasty-brakes.jpeg" alt="A closer look shows how it really was. The brakes were destroying the gumwall tires, everything was dirty and crusty, and all the cables were rusty." /> <figcaption>A closer look shows how it really was. The brakes were destroying the gumwall tires, everything was dirty and crusty, and all the cables were rusty.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/filthy-front.jpeg" alt="Up front, things weren't looking much better." /> <figcaption>Up front, things weren't looking much better.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/hose-clamp.jpeg" alt="I never did figure out what the hose clamp on the stem was all about." /> <figcaption>I never did figure out what the hose clamp on the stem was all about.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/dropouts.jpeg" alt="Once it was on the rack and I started taking it apart I couldn't help but notice all the neat details and craftsmanship the Wisconsin Treks were known for, like these lovely proprietary cast dropouts, and the shifter-cable running through the chainstay." /> <figcaption>Once it was on the rack and I started taking it apart I couldn't help but notice all the neat details and craftsmanship the Wisconsin Treks were known for, like these lovely proprietary cast dropouts, and the shifter-cable running through the chainstay.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/polish.jpeg" alt="I did spend a fair bit of time giving it a deep clean and polish." /> <figcaption>I did spend a fair bit of time giving it a deep clean and polish.</figcaption> </figure> <p>I didn't do a lot of parts swapping and modernization on this one. Underneath the grime, they were pretty decent parts, and actually turned out to be in good shape after they were cleaned up and lubed. I swapped out the seat to a Serfas I had, fitted some Panaracer Pasela tires, and just didn't make a lot of other changes. I even kept the original 27&quot; wheels and downtube shifters.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/cleaned.jpeg" alt="Thoroughly cleaned and lubed, pretty close to when it was new." /> <figcaption>Thoroughly cleaned and lubed, pretty close to when it was new.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/deore.jpeg" alt="Trek specced an interesting mix of 105 and Deore components for the 520. Back then, Deore was known mostly as a touring bike groupset." /> <figcaption>Trek specced an interesting mix of 105 and Deore components for the 520. Back then, Deore was known mostly as a touring bike groupset.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/deore_rear.jpeg" alt="These scuffs by the rear derailleur were about the only blemishes in the paint, and I came to see them more as beauty marks, so I didn't attempt to touch them up and instead just put some clear-coat over them to keep the rust at bay. Also, the early Deore derailleurs Trek used are incredibly capable, even today, for anything up to 10 speed and 36 teeth. Amazing, given how old they are." /> <figcaption>These scuffs by the rear derailleur were about the only blemishes in the paint, and I came to see them more as beauty marks, so I didn't attempt to touch them up and instead just put some clear-coat over them to keep the rust at bay. Also, the early Deore derailleurs Trek used are incredibly capable, even today, for anything up to 10 speed and 36 teeth. Amazing, given how old they are.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/seat_lug.jpeg" alt="The cast seat lug and arched brake bridge were other lovely details typical of Trek back then." /> <figcaption>The cast seat lug and arched brake bridge were other lovely details typical of Trek back then.</figcaption> </figure> <p>I just rode it and rode it, enjoying it as Trek had intended all those years ago, while my wrenching attention shifted to another Trek (the 640 photo-bombing above) and a Schwinn LeTour. The 520 just did what it was built to do: gobble up miles with comfort. I <em>loved</em> the way this bike rode.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/tree.jpeg" alt="No matter where I took it, or what I asked of it, the 520 was happy to oblige." /> <figcaption>No matter where I took it, or what I asked of it, the 520 was happy to oblige.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/pond.jpeg" alt="Dirt, water, it didn't care." /> <figcaption>Dirt, water, it didn't care.</figcaption> </figure> <p>There was just one problem: the Trek was much bigger than it looked. At first I couldn't figure it out... I mean, look at that frame, it's tiny.</p> <p>And then the math started to make sense: 27&quot; wheels, plus lots of clearance for big tires and fenders, and you start pushing things up. So the 520s tiny 50cm-ish frame had a standover more like a 54 cm frame. I was comfortable riding it, but not so much when I had to stop. It just felt too big for me, so I decided to let it go.</p> <p>I still miss it, though. It was a great bike that I just couldn't get 100% comfortable on. Someday I may get another one with 700c wheels and see if it fits a bit better.</p> <p>I understand the buyer was intending to ride it across Missouri on the Katy Trail. It was built for that, so I'm happy it found a good home.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/rocks.jpeg" alt="Magnificent." /> <figcaption>Magnificent.</figcaption> </figure> <hr /> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> Making wine cork handlebar plugs 2023-02-22T00:00:00Z https://another.rodeo/cork-bar-ends/ <p>Making your own custom handlebar plugs from wine corks is a nice and easy way of recycling an old cork or two while showing some individuality.</p> <p>It's also an easy fix for handlebars that have a very small internal handlebar diameter, which can be hard to match with off-the-shelf plugs -- something that happens fairly often with cheaper aluminum bars.</p> <p>I've made handlebar plugs from wine corks for quite a few bikes now, and feel like I have the technique down enough to share.</p> <p>First, you'll need a wine cork, of course. Any cork will work with more or less the same steps, so I'll leave the wine cork acquistion to you.</p> <p>For bars with larger internal diamters a champagne cork may work better, albeit with a bit more effort. The basic steps are pretty much the same.</p> <p>Once you have a wine cork in hand and are sober enough to wield a razor knife, then proceed:</p> <div class="photogrid"> <figure class="image "> <img src="https://another.rodeo/img/bikes/cork-bar-ends/cork.jpg" alt="Take your standard wine cork and cut it in half with a sharp razor knife. This will let you easily make plugs for both sides from a single cork. Of course, if you want to have different corks on each side, you can do that. It doesn't really matter." /> <figcaption>Take your standard wine cork and cut it in half with a sharp razor knife. This will let you easily make plugs for both sides from a single cork. Of course, if you want to have different corks on each side, you can do that. It doesn't really matter.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/cork-bar-ends/cork-groove.jpg" alt="Put the razor knife flat to your table surface and hold it there firmly. Then put your cork's uncut side down to the table surface, with the cork up to the knife blade. Once in position, carefully cut a groove in the cork by rotating it around the blade. You shouldn't need to move the blade -- just keep it steady and carefully rotate the cork to put a groove in it. If you're using a champagne cork you may want to skip this step and just cut down to the mushroom-y end of the cork in the next step." /> <figcaption>Put the razor knife flat to your table surface and hold it there firmly. Then put your cork's uncut side down to the table surface, with the cork up to the knife blade. Once in position, carefully cut a groove in the cork by rotating it around the blade. You shouldn't need to move the blade -- just keep it steady and carefully rotate the cork to put a groove in it. If you're using a champagne cork you may want to skip this step and just cut down to the mushroom-y end of the cork in the next step.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/cork-bar-ends/cork-slice.jpg" alt="You'll want to cut the groove down to approximately the inside diameter of the bar. If you don't get it quite right, it's OK. Once your groove is cut, carefully slice downward from the cut end of the cork toward your groove, making your way around the cork. Don't overshoot the groove or the visible part of the cork will be damaged. Continue until you've shaved off enough for the cork to fit in the bars. Again, be careful, take your time, and don't cut yourself." /> <figcaption>You'll want to cut the groove down to approximately the inside diameter of the bar. If you don't get it quite right, it's OK. Once your groove is cut, carefully slice downward from the cut end of the cork toward your groove, making your way around the cork. Don't overshoot the groove or the visible part of the cork will be damaged. Continue until you've shaved off enough for the cork to fit in the bars. Again, be careful, take your time, and don't cut yourself.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/cork-bar-ends/cork-done.jpg" alt="When you're finished, you'll have a sort of mushroom-shaped cork with a nice edge and outer face. Pop it in the bars as you would any other bar end plug. If you want, you can shellac the cork with the grips, or without, to better protect and color the cork. Or just leave it natural. Either way is fine, and it's your call." /> <figcaption>When you're finished, you'll have a sort of mushroom-shaped cork with a nice edge and outer face. Pop it in the bars as you would any other bar end plug. If you want, you can shellac the cork with the grips, or without, to better protect and color the cork. Or just leave it natural. Either way is fine, and it's your call.</figcaption> </figure> </div> The electric Schwinn 2023-03-02T00:00:00Z https://another.rodeo/electric-schwinn/ <p>I found myself interested in trying out an e-bike. That's how it often starts: idly wondering if something is as fun or interesting as people say it is. It's this idle wondering that will eventually get me to try pickleball.</p> <p>But on this day, it was e-bikes. And as my mind idly wandered -- and as I looked at the cost of factory e-bikes, I started thinking more and more about a conversion kit. It didn't hurt that I'd just renovated a '76 Schwinn Speedster, which heavy and overbuilt in a way that only the Chicago-built Schwinns can be. In other words, plenty strong enough for an e-bike conversion kit. I also thought the Scwhinn's three-speed, internal-gear hub might be a nice pairing with the extra power.</p> <p>Because I'm cheap, because it was an experiment, and also because I wasn't much interested in maximum range or top speed, I went with a pretty basic, inexpensive kit. I believe I used this <a href="https://amzn.to/3Smr0Kp">Voilamart front-wheel kit</a> or something very similar. The kits seem to change often, but that's pretty comparable. I also bought a compatible 36V battery. I can't recall which one, but it was similar to <a href="https://amzn.to/3SoMhTI">this one</a>. In 2022, the kit and battery were a smidge over $500. The prices have dropped quite a bit though, and now I think you could do it for much less.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/starting-point.jpeg" alt="The starting point for this project." /> <figcaption>The starting point for this project.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/battery-test.jpeg" alt="Initially, I thought I'd mount the battery on the downtube, but this proved to be both ugly and impractical on this size frame. I eventually decided to put both the controller and battery in a classic Wald wire basket out front." /> <figcaption>Initially, I thought I'd mount the battery on the downtube, but this proved to be both ugly and impractical on this size frame. I eventually decided to put both the controller and battery in a classic Wald wire basket out front.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/wheel-fork.jpeg" alt="The fork drop-outs had to be filed slightly to fit the oversize axle on the ebike motor. I had also hoped to run the wiring up through the tubular fork, but couldn't manage to fish it through at the fork crown. So zip ties came to the rescue. You can also see the e-bike kit throttle and wiring, right by the original 3-speed shifter." /> <figcaption>The fork drop-outs had to be filed slightly to fit the oversize axle on the ebike motor. I had also hoped to run the wiring up through the tubular fork, but couldn't manage to fish it through at the fork crown. So zip ties came to the rescue. You can also see the e-bike kit throttle and wiring, right by the original 3-speed shifter.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/wald.jpeg" alt="I also had to drill out the mounting holes for the Wald rack a lot to fit the oversize axle. Here you can see one size enlarged and the other still in the original size." /> <figcaption>I also had to drill out the mounting holes for the Wald rack a lot to fit the oversize axle. Here you can see one size enlarged and the other still in the original size.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/rack-wheel.jpeg" alt="With the rack and wheel in place, it was ready for wiring." /> <figcaption>With the rack and wheel in place, it was ready for wiring.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/test-fit-electric.jpeg" alt="I did a test fit to be sure the electric bits were going to fit." /> <figcaption>I did a test fit to be sure the electric bits were going to fit.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/ikea.jpeg" alt="I had a cheap IKEA backpack that coincidentally fit the Wald basket perfectly and hid all the electric parts. You can also see the brake levers have changed. That's because the e-bike kit cuts power when you use the brakes, so you have to use their levers." /> <figcaption>I had a cheap IKEA backpack that coincidentally fit the Wald basket perfectly and hid all the electric parts. You can also see the brake levers have changed. That's because the e-bike kit cuts power when you use the brakes, so you have to use their levers.</figcaption> </figure> <p>And that was pretty much it. I don't appear to have any pictures of the wiring, mostly because it was nearly plug and play. I do recall having to change one connector to make the battery and controller compatible, but other than that it was really just plugging things in. I did put some cable wrap on the wires to keep them tidy. But it was all pretty simple, and the instructions were decent enough.</p> <h2 id="how-does-it-ride" tabindex="-1">How does it ride?<a class="tdbc-anchor" href="https://another.rodeo/electric-schwinn/#how-does-it-ride" aria-hidden="true">#</a></h2> <p>Pretty great, mostly. There's a LOT of weight up front on this thing, so at very slow speeds the steering is heavy and floppy. But once you get going a little, it rides great. It's very smooth and very comfortable.</p> <p>As I hoped, the motor and the three-speed work great together, and hills are no longer a concern. It is definitely a heavyweight -- probably north of 50 pounds -- but if the motor is moving it, you just don't care. I've taken it on 25-mile+ rides and would go farther, but at some point I get worried about the battery dying. I would <em>not</em> want to be batteryless on this bike and trying to ride it 20 miles home.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/done.jpeg" alt="All done and ready to go." /> <figcaption>All done and ready to go.</figcaption> </figure> <h2 id="what-did-i-learn-and-what-would-i-do-differently" tabindex="-1">What did I learn, and what would I do differently?<a class="tdbc-anchor" href="https://another.rodeo/electric-schwinn/#what-did-i-learn-and-what-would-i-do-differently" aria-hidden="true">#</a></h2> <p>I learned these kits are pretty straighforward and well within the ability of anyone reasonably handy with a wrench and able to figure things out. Probably the biggest thing I think makes a difference in the conversion is thinking really hard about where the battery and controller will be stored, and what implications that has for wiring, weight, and handling. I've enjoyed mine and would make another. That said, if I were to do another here's what I'd change:</p> <ul> <li>I'd consider a hybrid frame, or an old hardtail mountain bike. Either would be much lighter than the Schwinn, but more importantly they'd have a JIS-standard bottom bracket rather than the larger &quot;american&quot; bottom bracket on the Schwinn. This would make it easier to put in a mid-mount engine, which I think would be preferable.</li> <li>I'd keep an internal-gear hub, but look at maybe a 7 or 8-speed hub. But that's me. I have no reason to believe a derailleur wouldn't work fine.</li> <li>I'd add the pedal assist feature. This kit came with pedal-assist, but it was another casualty of the Schwinn's oversize bottom bracket.</li> <li>I'd focus harder on the brakes. They're adequate on the Schwinn -- I upgraded them in the rebuild process -- but even a 36V motor can get you up to speeds where you really want good brakes.</li> </ul> <p>Fun bike. I should ride it more.</p> <h3 id="april-11-update" tabindex="-1">April 11 update<a class="tdbc-anchor" href="https://another.rodeo/electric-schwinn/#april-11-update" aria-hidden="true">#</a></h3> <p>I've decided I need to clear the herd a bit, so this one is hitting the market. To that end I stripped off the e-bike conversion kit and took it back to more of a BMX Cruiser/Klunker vibe. And when I rode it, it was suddenly my favorite cruiser ever. Such a fun, fun bike. I'm still going to sell it because I really do need to clear a few out, but I can tell I'm going to regret letting this one go, and sooner or later I'll end up building another one much like it.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/april-1.jpeg" alt="It just looks cool, in all of its late 70s/early 80s cruiser glory." /> <figcaption>It just looks cool, in all of its late 70s/early 80s cruiser glory.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/april-bars.jpeg" alt="Modern klunker-style bars and a pretty good reproduction of an 80s BMX stem." /> <figcaption>Modern klunker-style bars and a pretty good reproduction of an 80s BMX stem.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/april-fork.jpeg" alt="80's style tubular fork and reproduction Dia-Compe MX brakes" /> <figcaption>80's style tubular fork and reproduction Dia-Compe MX brakes</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/april-cranks.jpeg" alt="Original cranks and Schwinn chainring, with new gold chain." /> <figcaption>Original cranks and Schwinn chainring, with new gold chain.</figcaption> </figure> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> Maturity Model Generator 2023-08-08T00:00:00Z https://another.rodeo/mm/ <h2 id="maturity-model-generator" tabindex="-1">Maturity Model Generator<a class="tdbc-anchor" href="https://another.rodeo/mm/#maturity-model-generator" aria-hidden="true">#</a></h2> <p>In 2022 or so, it seemed like everywhere I turned there was either a maturity model popping up for something, or someone was calling for a maturity model. Something was in the air, and it seemed like we needed a maturity model for everything. Cheeseburgers were getting a maturity model.</p> <p>Naturally, half these maturity models were pretty much nonsense, full of big words to let the author of the maturity model feel like they had Thought Deeply About Things and nearly completely ignored by everyone.</p> <p>I realized long ago that if you're going to write volumes of nonsense that no one will ever read or act on, it's best to have a computer do it for you. Armed with that knowledge, I <em>could</em> have been on the forefront of AI, but instead I dithered about and hacked this thing together as my own little in-joke.</p> <p>And also because I wanted to play with Alpine.js and HTMX, but mostly because I just thought it was funny. So I ended up with this....</p> <figure class="image "> <img src="https://another.rodeo/img/web-things/mm.png" alt="A sample generated maturity model, featuring levels such as 'sophistimicated', 'sentimonies', and 'unfaceuptoable'." /> <figcaption>A sample generated maturity model, featuring levels such as 'sophistimicated', 'sentimonies', and 'unfaceuptoable'.</figcaption> </figure> <p>The maturity model names and text are mostly a mixture of business jargon and made-up words from the Simpsons, with a few of my own additions. The colors sort of map along the lines of &quot;green is good&quot; and &quot;red is bad&quot; to make it more in line with stereotypical maturity models. Of course that also makes it pretty inaccessible, among other problems, and I should call that out.</p> <p>At any rate, it's dumb, but no dumber than a lot of &quot;real&quot; maturity models I've seen.</p> <p>An interesting footnote, though, is that since building it, I've actually developed an appreciation for a well-crafted maturity model. You can usually tell the good ones because they illuminate rather than obfuscate.</p> <h3 id="why-did-i-do-it" tabindex="-1">Why did I do it?<a class="tdbc-anchor" href="https://another.rodeo/mm/#why-did-i-do-it" aria-hidden="true">#</a></h3> <p>To learn some mini JS frameworks, and because I thought I was being funny.</p> <h3 id="what-did-i-learn" tabindex="-1">What did I learn?<a class="tdbc-anchor" href="https://another.rodeo/mm/#what-did-i-learn" aria-hidden="true">#</a></h3> <ul> <li>Alpine.js and HTMX</li> <li>Some tricks to have semi-random CSS colors that still fell within predictable guidelines.</li> <li>Maturity models aren't all bad. Just the bad ones.</li> </ul> <h3 id="where-is-it" tabindex="-1">Where is it?<a class="tdbc-anchor" href="https://another.rodeo/mm/#where-is-it" aria-hidden="true">#</a></h3> <ul> <li><a href="https://maturity-model.online/">The site</a></li> <li><a href="https://github.com/tBaxter/mm_gen">The repo</a></li> </ul> The Luxus folding bike restoration 2023-09-16T00:00:00Z https://another.rodeo/luxus-sport-bike/ <p>I've never been overly cursed with good sense, especially when it comes to projects. If there is a lost cause, I'll find it. If there is a hopeless case, I'll take it on.</p> <p>I should have learned my lesson from the <a href="https://another.rodeo/bikes/1982-peugeot-ph19-mixte/">Peugeot rebuild</a> and found a nice easy project.</p> <p>I should know to watch my local market and pay attention to what sells and what doesn't.</p> <p>Did I do either of those things? Nope.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/as-found.jpg" alt="The Luxus, as found on the local marketplace site." /> <figcaption>The Luxus, as found on the local marketplace site.</figcaption> </figure> <p>I got it into my head that I wanted a vintage folding bike, and then I had to have one.</p> <p>Why? Beats me. I think I began to see old Italian Chiordas and Bianchi Nealeco's as a different sort of fun. I appreciate the cleverness of the rear stays forming a useful rack. Maybe I just wanted something to take camping.</p> <p>Regardless, I read <a href="https://sheldonbrown.com/raleigh-twenty.html">Sheldon Brown's love letter to the Raleigh Twenty</a>, noticed it said the other european folding bikes of the era were generally much lower quality, and then I promptly went out and bought one of the lower quality examples: a Luxus Sportbike.</p> <p>So what is a Luxus Sportbike? Who knows. It's labelled as being from West Germany, and per <a href="https://www.foldingcyclist.com/Klapprad-folding-bikes.html">this page</a> it may have been manufactured by any number of companies at the time. It may not even have been made in West Germany at all.</p> <p>Here's what we do know:</p> <ul> <li>It bears some resemblance to some better-known vintage folding bikes with the way the stays loop around to form a rack, but it also appears to differ from each of them in the details.</li> <li>Luxus did make other bikes, although details (at least in English) are sparse. I have managed to find examples of road bikes, utility bikes and an interesting motocross-inspired kid's bike.</li> <li>This particular one isn't technically a folding bike. There is no hinge at the middle, so it technically collapses into two parts.</li> <li>This thing is unbelievably heavy. Somehow, this little thing weighs in at 34 pounds, about the same as the <a href="https://another.rodeo/bikes/raleigh-sports/">Raleigh Sports</a> I rehabbed last year.</li> <li>The particular example I bought is in miserable shape.</li> </ul> <p>Since the market for used folding bikes is nearly non-existent, of course my plan is to throw parts and money at this one. I want to pick up a kids' bike with some 20&quot; alloy wheels, try to lighten up the weight, and just generally see if I can make this thing decent to ride. No matter what, it'll be interesting.</p> <p>So, with that in mind, I started tearing it down.</p> <div class="photogrid"> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/home.jpeg" alt="Once I got it home I could take stock. It's filthy and the paint is in bad shape, but it's mostly complete. I was surprised neither the stem nor seatpost had seized." /> <figcaption>Once I got it home I could take stock. It's filthy and the paint is in bad shape, but it's mostly complete. I was surprised neither the stem nor seatpost had seized.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/wired.jpeg" alt="Originally it was wired through the frame to run front and rear lights. The generator and front light are long gone, and I'm not sure how the wiring worked given that the frame separates." /> <figcaption>Originally it was wired through the frame to run front and rear lights. The generator and front light are long gone, and I'm not sure how the wiring worked given that the frame separates.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/sport-72.jpeg" alt="The headbadge decal IDs it as a Luxus Sport 72, made in West Germany, for whatever that's worth." /> <figcaption>The headbadge decal IDs it as a Luxus Sport 72, made in West Germany, for whatever that's worth.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/sportbike.jpeg" alt="The 'sportbike' decal on the main tube is pretty ragged. It hardly matters, since this thing needs a full respray. I am wondering if I can get Luxus decals. I haven't looked yet." /> <figcaption>The 'sportbike' decal on the main tube is pretty ragged. It hardly matters, since this thing needs a full respray. I am wondering if I can get Luxus decals. I haven't looked yet.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/rear-fender.jpeg" alt="The rear fender had a hard life but I think it can be straightened out and useful again. The rear light, however, appears to be a goner. I need to decide if I'm keeping the wiring." /> <figcaption>The rear fender had a hard life but I think it can be straightened out and useful again. The rear light, however, appears to be a goner. I need to decide if I'm keeping the wiring.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/guard.jpeg" alt="The chainguard has surface corrosion but it's straight and can also be re-used. Honestly, all of it looks like it could be re-used, but there's no way I'm keeping those cottered cranks." /> <figcaption>The chainguard has surface corrosion but it's straight and can also be re-used. Honestly, all of it looks like it could be re-used, but there's no way I'm keeping those cottered cranks.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/rack.jpeg" alt="The rack really is a clever bit of design and appears very useable." /> <figcaption>The rack really is a clever bit of design and appears very useable.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/forks.jpeg" alt="It's the same story at the forks: cosmetically a mess but all more or less solid. Even the fender looks salvageable." /> <figcaption>It's the same story at the forks: cosmetically a mess but all more or less solid. Even the fender looks salvageable.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/clamp.jpeg" alt="This star knob makes unclampling the two sections pretty straightforward. I think I can clean it up." /> <figcaption>This star knob makes unclampling the two sections pretty straightforward. I think I can clean it up.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/seatclamp.jpeg" alt="The seatpost clamp uses a plastic wingnut as an early take on making a quick-release. Again, a clever detail." /> <figcaption>The seatpost clamp uses a plastic wingnut as an early take on making a quick-release. Again, a clever detail.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/stemclamp.jpeg" alt="Up front another star knob is used to quickly adjust and tighten the long quill stem." /> <figcaption>Up front another star knob is used to quickly adjust and tighten the long quill stem.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/unclamped.jpeg" alt="Unclamped, you can see the two parts are completely separate. When the wiring was in place I'm not sure how this worked: Did that tiny wire just tie the two halves together?" /> <figcaption>Unclamped, you can see the two parts are completely separate. When the wiring was in place I'm not sure how this worked: Did that tiny wire just tie the two halves together?</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/pump-peg.jpeg" alt="The pump peg is another delightful detail. I wonder what the very short pump looked like when new, and how the other end clamped onto the oversized and curved main tube." /> <figcaption>The pump peg is another delightful detail. I wonder what the very short pump looked like when new, and how the other end clamped onto the oversized and curved main tube.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/headset.jpeg" alt="The headset had no discernible grease, and didn't appear to have had any grease in a long, long time. That probably explains why it made graunchy, gravelly sounds. The whole headset will have to be replaced." /> <figcaption>The headset had no discernible grease, and didn't appear to have had any grease in a long, long time. That probably explains why it made graunchy, gravelly sounds. The whole headset will have to be replaced.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/bb.jpeg" alt="The bottom bracket looked no better. I was surprised the crankarm cotter came off pretty easily, but the bottom bracket looked like it was stuffed full of bog muck." /> <figcaption>The bottom bracket looked no better. I was surprised the crankarm cotter came off pretty easily, but the bottom bracket looked like it was stuffed full of bog muck.</figcaption> </figure> <h3 id="february-2021-cleaning-and-sanding-the-luxus" tabindex="-1">February 2021: Cleaning and sanding the Luxus<a class="tdbc-anchor" href="https://another.rodeo/luxus-sport-bike/#february-2021-cleaning-and-sanding-the-luxus" aria-hidden="true">#</a></h3> <p>The Luxus folding bike frame was in rough shape, and I could tell when I was tearing it down it was going to take a full respray. What I wasn't really prepared for was how much work simply cleaning it would be.</p> <p>I'm not sure if it had been inside a smoker's home, or if it was just age and neglect, or whatever else the cause may be, but the frame was covered in a smelly, irritating funk. And of course I had to use some of the most noxious chemicals in the house to cut through the gunk, making it a doubly unpleasant job.</p> <p>And it's way, <em>way</em> too cold and snowy to take it outside. So I've just been gutting it out, wearing a mask and nitrile gloves, and taking it in small doses.</p> <p>The grime is gone. The first round of sanding is complete. I've treated the frame with a <a href="https://amzn.to/3baSZHm">phosphoric acid based rust converter</a>, which takes ferric oxide and chemically converts it to something paintable. The rust just turns black, and it's gone. This is great stuff for stopping rust in its tracks and prepping for paint. Just wear gloves, and a mask.</p> <p>It's slow going and there's probably a fair bit of sanding left, but I'm starting to get it under control.</p> <div class="photogrid"> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/rear-before.jpeg" alt="The rear half, right after the teardown, showing a lot of scrapes, rust and grime." /> <figcaption>The rear half, right after the teardown, showing a lot of scrapes, rust and grime.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/rear-cleaner.jpeg" alt="The rear half, after the first round of cleaning and light sanding. I still have to remove stickers and it needs a lot more sanding." /> <figcaption>The rear half, after the first round of cleaning and light sanding. I still have to remove stickers and it needs a lot more sanding.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/fork.jpeg" alt="The fork was similar: a mix of broken-down decals, scraped paint and dirt." /> <figcaption>The fork was similar: a mix of broken-down decals, scraped paint and dirt.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/phospho.jpeg" alt="With the decals removed, plus a lot of scrubbing and the initial sanding done, I brushed the entire frame with phosphoric-acid-based rust converter." /> <figcaption>With the decals removed, plus a lot of scrubbing and the initial sanding done, I brushed the entire frame with phosphoric-acid-based rust converter.</figcaption> </figure> <h2 id="march-2021-bad-conditions-and-worse-paint" tabindex="-1">March 2021: Bad conditions and worse paint<a class="tdbc-anchor" href="https://another.rodeo/luxus-sport-bike/#march-2021-bad-conditions-and-worse-paint" aria-hidden="true">#</a></h2> <p>Successful spray painting really requires a pretty narrow temperature band. So of course I decided to spray paint the Luxus folding bike in the dead of winter. It went about as well as you'd expect.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/first-paint.jpeg" alt="Sportbike bits on the sawhorses getting the first round of paint." /> <figcaption>Sportbike bits on the sawhorses getting the first round of paint.</figcaption> </figure> <p>Everything started well enough. A few unseasonably warm days in February gave me a good opportunity to get it sprayed, and I took it. I was cooking along and the frame was looking good when disaster struck: on the last coat the paint crinkled. I had violated a second rule of painting and mixed paints. They did not get along well.</p> <p>So after spraying and wet-sanding multiple coats, I now had to strip it all back. Honestly, taking after it with a stripping wheel may have been overkill. It's possible I could have just sanded it back. But at this point I didn't trust my base paint anymore.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/stripping.jpeg" alt="Taking all that new paint back off" /> <figcaption>Taking all that new paint back off</figcaption> </figure> <p>Of course, by the time I'd stripped it all back the weather had turned. Painting outside was no longer an option.</p> <p>Luckily the individual parts of the Luxus aren't very large, so I took a large plastic tub and improvised a small spray booth. I don't really recommend this. It's hard to get adequate ventilation, and there <em>will</em> be overspray. It worked okay for me, but really, you probably shouldn't try this at home.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/secondspray.jpeg" alt="The plastic tub" /> <figcaption>The plastic tub</figcaption> </figure> <p>It was slow going, too, since I could only paint small portions at a time. Add in wet-sanding between coats and painting this little frame took a long, long time.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/sanding.jpeg" alt="Wet sanding kept finding more defects, so I'd sand and spray, sand and spray, spray and sand." /> <figcaption>Wet sanding kept finding more defects, so I'd sand and spray, sand and spray, spray and sand.</figcaption> </figure> <p>Because I had sanded back the first respray attempt, and I had more defects than usual from working in the cramped corners, I wet-sanded pretty aggressively between coats to get the best possible surface. For paint I was using a <a href="https://amzn.to/3tQs9fj">Rustoleum performance enamel</a> which worked well, especially coupled with a good (and compatible) <a href="https://amzn.to/3f9J34p">primer</a>. But still, if you want a really good coat, you've got to wet-sand and polish.</p> <p>With enough elbow grease it started coming together, finally. At this point the painting and sanding are done, and I've gone over it with <a href="https://amzn.to/33BFbmV">Turtle Wax Rubbing Compound</a> and then <a href="https://amzn.to/33BkKql">polishing compound</a>. I may give a few areas a bit more polishing, but it's looking good.</p> <p>While my paint was drying I polished up the original chrome chainguard, and had a go at straightening a few wobbles in it. I'm no metalworker and it remains not-quite-straight. But also not bad. With it sitting in place you can finally start seeing it all come together.</p> <p>The one upside to the long and painful painting process was that I had time to find a new bottom bracket, which was an adventure. You see, the bottom bracket on this thing was strange: smaller than an American BB as found on, say, a Schwinn cruiser, but larger than a normal square taper BB. And it was push fit. After a lot of digging I came to learn it's called a Thompson bottom bracket, and they're relatively common on Dutch city bikes. Who knew! So I made my best guesstimate on what the best spindle size would be to replace the cottered cranks and ordered one from Holland. And then I waited while it came all the way from Holland.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/almost.jpeg" alt="Almost there" /> <figcaption>Almost there</figcaption> </figure> <p>While the bottom bracket was tricky, I got completely lucky stumbling across some reproduction Luxus stickers being offered by a European seller on eBay. While they weren't an exact match I was happy to even get anything in the ballpark and I thought they looked great on the bike, especially with the new red paint.</p> <p>As I started putting it back together, the first thing to do was install a new Tange headset to connect the frame and fork together. The second thing was to renovate the frame clamp knob with some white Plasti-Dip.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/decals-front.jpeg" alt="At this point buffing and polishing was complete and a new Tange headset was in place, along with the headstock decal. " /> <figcaption>At this point buffing and polishing was complete and a new Tange headset was in place, along with the headstock decal. </figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/fenders.jpeg" alt="Polishing up the fenders took a mix of a rubber eraser wheel on the drill, fine steel wool, polishing compound, pliers and a hammer. And elbow grease. Still, they came up pretty nice. " /> <figcaption>Polishing up the fenders took a mix of a rubber eraser wheel on the drill, fine steel wool, polishing compound, pliers and a hammer. And elbow grease. Still, they came up pretty nice. </figcaption> </figure> <h3 id="may-2021-the-wheels-go-round-and-round" tabindex="-1">May 2021: The wheels go round and round.<a class="tdbc-anchor" href="https://another.rodeo/luxus-sport-bike/#may-2021-the-wheels-go-round-and-round" aria-hidden="true">#</a></h3> <p>By spring I had most of the rebuild under control. I was still trying to trim the Luxus' formidable weight by upgrading the original steel parts to aluminum where I could. The wheels in particular were a problem area. The originals weighed a ton and were completely shot anyway, so they had to be replaced. But as I learned most 20&quot; wheels with coaster brakes have steel rims -- not an upgrade. I kept my eye on the market, though, and eventually found a cheap Schwinn with decent wheels.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/test-fitting.jpeg" alt="Test-fitting the progress so far. The decals are on, and the frame clamp wheel has been plasti-dipped, so the frame looks complete-ish. I've got the rear fender polished and on, but not the front. And I've got a new alloy stem replacing the original steel unit, but some bullhorn handlebars did not stick around past the test fitting." /> <figcaption>Test-fitting the progress so far. The decals are on, and the frame clamp wheel has been plasti-dipped, so the frame looks complete-ish. I've got the rear fender polished and on, but not the front. And I've got a new alloy stem replacing the original steel unit, but some bullhorn handlebars did not stick around past the test fitting.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/schwinn.jpeg" alt="The original steel wheels were in terrible shape and incredibly heavy for 20-inch rims. This discarded kids' Schwinn was a cheap way to some half-decent aluminum rims. Because the Luxus had no mounts for rim brakes -- and cabling would have been a nightmare with the brakeaway frome -- I had to keep find aluminum wheels with a coaster brake. That was harder than you'd think." /> <figcaption>The original steel wheels were in terrible shape and incredibly heavy for 20-inch rims. This discarded kids' Schwinn was a cheap way to some half-decent aluminum rims. Because the Luxus had no mounts for rim brakes -- and cabling would have been a nightmare with the brakeaway frome -- I had to keep find aluminum wheels with a coaster brake. That was harder than you'd think.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/wheel-test.jpeg" alt="With the wheels cleaned up and rebuilt, and a new pair of white tires, it was time for the second test fit. By this time I had the retro-style LED headlight on and had settled on some Velo Orange North Road bars." /> <figcaption>With the wheels cleaned up and rebuilt, and a new pair of white tires, it was time for the second test fit. By this time I had the retro-style LED headlight on and had settled on some Velo Orange North Road bars.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/done-ish.jpeg" alt="And with a little more fiddling, that pretty much wrapped it up, just in time for camping season. It fits easily in our tiny camper!" /> <figcaption>And with a little more fiddling, that pretty much wrapped it up, just in time for camping season. It fits easily in our tiny camper!</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/fireball.jpeg" alt="However, when we took it camping, we learned it was missing a key accessory: a Fireball basket. So we remedied that." /> <figcaption>However, when we took it camping, we learned it was missing a key accessory: a Fireball basket. So we remedied that.</figcaption> </figure> <h3 id="september-2023" tabindex="-1">September 2023<a class="tdbc-anchor" href="https://another.rodeo/luxus-sport-bike/#september-2023" aria-hidden="true">#</a></h3> <p>After a few years of enjoying the Luxus, I found that I had too many bikes cluttering the garage and my interest in camping was waning. It was time for it to go. Luckily, JC, the nice fella that runs Kansas City's <a href="https://www.brightlightsforkids.org/">Bright Lights for Kids Charity Ride</a> spotted it and had to have it. So the deal was done. And somewhere out there in the world there is a (staged) picture of me riding it across the finish line at the ride!</p> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> </div></div> The giant list of questions to ask employers 2024-01-07T00:00:00Z https://another.rodeo/employer-questions/ <p>In May of 2021 I was working at <a href="https://18f.gsa.gov/">18F</a> in a term-limited role, so I was actively interviewing. As I interviewed I realized that companies always asked me if I had any questions for them, and more often than not I completely froze and couldn't think of any questions at all in that moment. Not a great look.</p> <p>So I started compiling good questions. But the recovering journalist inside me knows: with any interview, a good question alone isn't enough. You need to understand why you're asking the question and what you hope to learn from it. So as I compiled the questions, I added notes on scenarios in which it might be a useful question and signals -- both good and bad -- to watch for.</p> <p>Over time it's grown to be a pretty large collection I've <a href="https://github.com/tBaxter/questions-for-employers">kept on Github</a>. It will remain there, but I'm also embedding it here as a convenience.</p> <hr /> <h1 id="questions-for-potential-employers" tabindex="-1">Questions for potential employers<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#questions-for-potential-employers" aria-hidden="true">#</a></h1> <p>This is a big collection of questions I've gathered over the years that have proven to be useful when interviewing, including why you might want to ask the question. Remember, in any interview you're trying to get to know the company and the people you might be working with as much as they're trying to get to know you. Maybe more.</p> <p>There are a lot of questions here. Some are just simple nuts-and-bolts questions. Some are only appropriate for certain types of companies. Some might help after you've already got a whiff of an org smell. You'll never ask all of these -- there's no time! But usually, after you've read the role description and had a phone screen, you should have a pretty good idea of which questions you want to highlight and ask.</p> <p>I've broken them out by subject matter, with some notes on things to look for.</p> <p>If you'd like more questions for director-and-above positions, <a href="https://jacobian.org/2019/apr/23/questions-for-employers-director-vp/">Jacob Kaplan-Moss has a great list</a>.</p> <hr /> <h2 id="table-of-contents" tabindex="-1">Table of contents<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#table-of-contents" aria-hidden="true">#</a></h2> <ul> <li><a href="https://another.rodeo/employer-questions/#getting-started">Getting started</a></li> <li><a href="https://another.rodeo/employer-questions/#culture">Culture</a></li> <li><a href="https://another.rodeo/employer-questions/#worklife-balance">Work/life balance</a></li> <li><a href="https://another.rodeo/employer-questions/#bureaucracy">Bureaucracy</a></li> <li><a href="https://another.rodeo/employer-questions/#diversity-equity-inclusion-and-ethics">Diversity, equity, inclusion and ethics</a></li> <li><a href="https://another.rodeo/employer-questions/#understanding-the-company-and-team">Understanding the company and team</a></li> <li><a href="https://another.rodeo/employer-questions/#leadership">Leadership</a></li> <li><a href="https://another.rodeo/employer-questions/#doing-the-work">Doing the work</a></li> <li><a href="https://another.rodeo/employer-questions/#career-development">Career development</a></li> <li><a href="https://another.rodeo/employer-questions/#performance-evaluation">Performance evaluation</a></li> <li><a href="https://another.rodeo/employer-questions/#compensation">Compensation</a></li> <li><a href="https://another.rodeo/employer-questions/#for-engineering-orgs">For engineering organizations</a></li> <li><a href="https://another.rodeo/employer-questions/#things-to-look-for-in-real-life">Things to look for in real life</a></li> </ul> <hr /> <h2 id="getting-started" tabindex="-1">Getting started<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#getting-started" aria-hidden="true">#</a></h2> <p><strong>What is the onboarding process like?</strong><br /> Do they have one? How well-defined is it? Do they have a &quot;buddy system&quot; or some other mechanisms to help you get ramped up, or do they just let you sink or swim?</p> <p><strong>In the first 60 to 90 days of employment, what would be my most urgent priorities?</strong><br /> This is helpful for getting past the position description to the real expectations of the work. Plus <a href="https://randsinrepose.com/archives/ninety-days/">the first 90 days are critical</a>.</p> <p><strong>What are the key accomplishments you’d like to see in this role over the next year?<br /> What is the one thing I absolutely must get right the first year?</strong><br /> This one extends on the previous question, looking longer term. This helps you get a sense of what your success criteria would be as well as how well the employer has defined the role. This one can also help get a better sense of the real priorities, which may differ from what the role description indicated. If they don't have clear answers to either of these questions, the role is probably poorly defined and not set up for success.</p> <p><strong>What does success look like <em>for your customers</em> for someone in this role?</strong><br /> A good question to help get a sense of how user-focused the organization is.</p> <h2 id="culture" tabindex="-1">Culture<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#culture" aria-hidden="true">#</a></h2> <p><strong>What type of people are successful here? What type of people are not?</strong><br /> <strong>Alternate: What characteristics do the people who are most celebrated have in common with each other? Conversely, what are the characteristics that are common to the promising people you hired, but who then flamed out and failed or left?</strong> Pay close attention to this one. You can potentially pick up a lot of red flags about what type of culture they <em>really</em> have versus what kind of culture they want you to think they have. The phrase &quot;culture fit&quot; itself can be a warning sign of homogenous, non-inclusive, bro-grammer culture.</p> <p><strong>How do you determine if someone is a poor fit for the company?</strong><br /> Same as above, they may tell you more than they mean to about what they value (and what they don't).</p> <p><strong>If an employee does something harmful that isn't a fireable offense, how do you handle that?<br /> What steps do you take to create a culture of accountability?</strong><br /> They should have a plan for this. If they don't, any number of toxic-but-not-fireable behaviors are probably not being addressed.</p> <p><strong>Is there any sort of institutionalized way of dealing with plateauing or preventing burnout?</strong><br /> You should hear something about rotation of duties or location, sabbaticals, etc. In other words, a real plan for avoiding burnout, not empty platitudes. <strong>Follow-up:</strong> Is it possible to take sabbaticals or unpaid vacation?</p> <p><strong>How does internal communication work? How does the company communicate with itself, and is that effective?</strong><br /> This can be a <em>really</em> telling question. Are company communications scattered? Leaked out? Top down? How does it work? Does it work?</p> <p><strong>Are there catered suppers?</strong><br /> This may sound like a nice perk, but you may want to learn more about why it's necessary. In a properly functioning organization with normal 8-5 or 9-5 hours, you should be home for supper. In crunch times it's nice when the organization brings in some decent food, but does the org find itself in crunch times all the time? If so, why?</p> <p><strong>What is your turnover rate?</strong><br /> How many people were hired last year and how many left? Over the past 2-3 years? What is the average time that people stay at the company? Attrition is one of the strongest tells that a culture is bad. If more than 30% of the company left in the past year, that's a real problem. What is the company doing about it?</p> <p><strong>How are disagreements solved? What happens when personalities clash?</strong><br /> You're looking for a real, equitable and fair plan here, not a handwave-y answer.</p> <p><strong>Given everything you like about the company culture, what's the flip side? What failure modes do you think your culture creates? Are those potential failure modes or have you seen them happen? How do you try to guard against them?</strong><br /> Even great cultural choices have downsides. If the person who's answering you has been in the company for a while and can't give you a good answer, either they're unwilling to give you bad news about the company, or they're not very thoughtful about the culture and its failure modes.</p> <h2 id="worklife-balance" tabindex="-1">Work/life balance<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#worklife-balance" aria-hidden="true">#</a></h2> <p><strong>How many hours a week does senior management work?</strong><br /> Do they put in 80-hour weeks? If so, run away.</p> <p><strong>How much vacation do people get?</strong><br /> If there's &quot;unlimited&quot; vacation, how much vacation do people normally take? What is the expectation for &quot;excessive&quot; vacation? There is always a number.</p> <p><strong>What holidays are observed?</strong><br /> Some companies do not observe federal and state holidays. For parents, this can be a real problem since schools usually do. If so, you may have to use a vacation day for your child's holiday.</p> <p><strong>Does this position require travel? How often?</strong><br /> This should have been in the job post, but if it wasn't, ask about it and think about how it fits with your lifestlye and commitments. Some folks are fine being road warriors, but if you've got kids or other commitments at home, it can be difficult.</p> <p><strong>Would I need to be on call? How often?</strong><br /> Another nuts-and-bolts question, but on-call rotations can be tough. While you're asking, consider asking of being on-call comes with extra compensation.</p> <p><strong>How many hours do people work in an average week? What time do people normally leave work? What time do they normally start? Do people work on the weekend?</strong> Seriously, if the job can't be done in 40 hours, more or less, something is probably wrong.</p> <p><strong>Do people check in when they're on vacation?</strong><br /> They shouldn't, and they shouldn't be expected to. Take the vacation.</p> <p><strong>What kinds of tasks are routinely demanded of by management beyond the original job description?</strong><br /> This can be a bit confrontational, or can sound like you want to do nothing more than what's explicitly in the job description. Be careful with it. Still, it can be useful if you're concerned you may be asked to walk your manager's dog or something weird.</p> <p><strong>What is the rhythm to the work?</strong><br /> Is there a time that's “all hands on deck” and everyone pulls all-nighters, or is it pretty consistent throughout the year?</p> <p><strong>How often are there emergencies or times when people have to work extra hours?</strong><br /> For most orgs, the number of emergencies and unplanned extra hours should be near zero. Generally speaking, emergencies indicate either faulty DevOps or faulty management. There are times and places where extra hours should be expected -- if you're involved in taxes in the U.S. in any way, you know April is busy, for example -- so it's worthwhile to differentiate planned extra hours from unplanned.</p> <p><strong>Are the company’s managers inclined to call employees at home with questions or comments?</strong><br /> If so, that could be an indicator of poor boundaries or a poor work-life balance. Or it could just be a busy boss trying to catch up with you. Use your judgement and ask follow-up questions if you're concerned.</p> <h2 id="bureaucracy" tabindex="-1">Bureaucracy<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#bureaucracy" aria-hidden="true">#</a></h2> <p><strong>Walk me through the process of expensing a $[price] [item]</strong><br /> Choose an item and price -- that could be a $50 book or something larger, it doesn't matter. What you're looking for here is a process that sounds reasonable and navigable for the price and item you chose.</p> <p><strong>How many layers of company managers or executives does one have to go through to get approval for a new idea?</strong><br /> The more layers, the more difficult and time consuming it will be. Well-defined process can mitigate the difficulty, but it is still a good indicator of overall bureaucracy and speed.</p> <p><strong>What is the policy on alternate work schedules?</strong><br /> Is variability okay, or is everyone expected to be on the same schedule? In modern orgs, especially distributed orgs, asking everyone to punch the clock at the same time is backwards, at best.</p> <p><strong>What is your remote work policy?</strong><br /> <em>Why</em> is that your remote work policy?</p> <p><strong>What is the company’s policy on work/life balance?</strong><br /> How does that work out in practice?</p> <p><strong>Is it easy to move to other divisions or offices?</strong><br /> Warning: the interviewer could infer that you are a difficult teammate and like to jump around.</p> <p><strong>What information is shared with the employees in terms of revenue, costs, operating metrics, etc?</strong><br /> Is this an “open book” shop, or do they play it closer to the vest? How is information shared? How do you get access to the information you need to be successful?</p> <p><strong>Does the company require a prospective employee to sign a non-compete contract? If so, could you explain in a few words how restrictive it is.</strong><br /> Is it negotiable?</p> <h2 id="diversity-equity-inclusion-belonging-and-ethics" tabindex="-1">Diversity, equity, inclusion, belonging, and ethics<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#diversity-equity-inclusion-belonging-and-ethics" aria-hidden="true">#</a></h2> <p><strong>Tell me about a situation where someone raised a concern about DE&amp;I or ethics?</strong><br /> How was it handled? If not, have there really not been any? Is management listening?</p> <p><strong>Tell me about the organization leadership demographics. What specifically are you doing to drive greater diversity in management?</strong><br /> Bad orgs don’t know or get defensive; good orgs are open and transparent; the best orgs share what they’re doing to improve. <strong>Follow-up:</strong> What benefits do you expect from increasing diversity among leadership?</p> <p><strong>Tell me about your effort to attract a diverse pool of candidates.</strong><br /> What metrics are they currently using to track DE&amp;I in hiring?</p> <p><strong>Tell me about your efforts to <em>retain</em> a diverse group of employees.</strong><br /> This is a particularly useful question. Lots of companies try to recruit diverse candidates and then don't do much at all after that to keep them. Again, what are the metrics they're using to track this?</p> <p><strong>Tell me about a time when a challenge or suggestion from an under-represented group was acted on in their favor?</strong><br /> How long ago was that?</p> <p><strong>How transparent is your salary and compensation data?</strong><br /> Not long ago, most orgs did not share salary and compensation info at all. State salary transparency laws have been changing that, but the information can still be vague or misleading. The best orgs will understand why salary transparency is valuable.</p> <p><strong>Am I the only one [in the demographic or under-represented group I identify as a member of]?<br /> If so, how do you plan to do to ensure that I am welcome, included and equal?</strong><br /> Incorrect answers include blinking in confusion, saying &quot;everything's fine and we don't see why we'd have to do anything in particular&quot;, and &quot;you're not the only one; we have a [person] in a $other_role!&quot; <strong>Follow-up:</strong> Where do you anticipate challenges?</p> <p><strong>Do you have a standard insurance package that covers trans health care?</strong><br /> Even if you yourself might not use the insurance package, this still gives you good insight into their commitment to inclusion.</p> <p><strong>Do you offer paternity leave, or just maternity leave?</strong><br /> If they only offer maternity leave it can say a lot about the roles they expect women to play.</p> <p><strong>Most/all of my interviewers were men. Can I speak to someone else on the team to hear more about their own experience?</strong><br /> Does the team lacks diverse perspectives?</p> <h2 id="understanding-the-company-and-team" tabindex="-1">Understanding the company and team<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#understanding-the-company-and-team" aria-hidden="true">#</a></h2> <p><strong>How are your teams structured? What is the management structure like?</strong><br /> Pay particular attention if you have any questions about reporting or power structures. Get clarity.</p> <p><strong>What’s the biggest challenge the team has gone through in the last year? Does the team currently feel optimistic about what's next?</strong><br /> Useful for getting a sense of team morale and working conditions.</p> <p><strong>Is this a new role?</strong><br /> If so, follow up with more questions about how the company plans to get buy-in for this new role and support the people in it. This can be useful to understand how well-defined the position is and if it's a position set up for success. If it is not a new role, see if you can learn more about why the person left. Best case is they were promoted up, meaning this role can lead to similar opportunities for you. <strong>Follow-ups:</strong></p> <ul> <li>If this is a replacement position, what happened to the former employee? How long were they in the role?</li> <li>If it's a new position, how is the company supporting it? What does success look like?</li> </ul> <p><strong>How does the organization reward employees?</strong><br /> Is it a star system / team-oriented / equity-based / bonus-based / golf-clap-based? Does it reward individual performance? Team performance? Is the reward tangible and real? How does the company demonstrate to an employee that they are an asset to the company? <strong>Follow-ups:</strong></p> <ul> <li>Why is that your reward system?</li> <li>If you could change any one thing about it, what would it be?</li> </ul> <p><strong>What has you most worried?</strong><br /> What keeps you up at night? A competitor? Something else?</p> <p><strong>What’s one thing that’s key to this company’s success that somebody from outside the company wouldn’t know about?</strong><br /> Can help you set priorities as you onboard.</p> <p><strong>What do you wish you had known when you joined this company?</strong><br /> Can tell you a lot about the culture or challenges.</p> <p><strong>What would you say are the company’s strengths?</strong><br /> Alternately, what would you say are the company’s weaknesses? It can be illuminating to flip these traditional interview questions back on the company.</p> <p><strong>What is the company’s current strategy for generating new business? What is the company’s strategy for maintaining existing business?</strong><br /> This speaks to the viability of the business model and is particularly useful for start-ups/scale-ups.</p> <p><strong>Are you profitable? if not, how does this affect what you can do? What's your planned timeline for becoming profitable?</strong><br /> Again, particularly useful for startups. Don't ask a publicly traded company this. It will just show you didn't do any research on readily available information.</p> <p><strong>How do you make money?</strong><br /> Again, mostly for startups, but can they explain the business model in a way that makes sense?</p> <p><strong>Are company financials transparent throughout the company?</strong><br /> What about salaries? (see the DE&amp;I section). This is another question that you probably don't want to ask a publicly traded company, because the financials should be public record. If you're curious, you should probably have already checked.</p> <p><strong>How much are you planning to hire in the next year?</strong><br /> If it's a large number, ask the follow-up: How do you plan to hire and onboard that many people?</p> <p><strong>How does the company usually solve problems: through committee, group meetings, individual meetings or management only?</strong><br /> Are they consensus-driven? Top-down? How well is that working for them?</p> <p><strong>How are important decisions made and communicated?</strong><br /> <strong>How many people are directly or indirectly involved in creative decisions?</strong> Are they dictated top down? Are ideas from anyone welcomed? If so, in what scope/context?</p> <p><strong>How does sales / operations / technology / marketing / finance work around here?</strong><br /> Groups other than the one you’re interviewing for -- the interviewer should have familiarity with those groups, and should (hopefully) speak well of them.</p> <h2 id="leadership" tabindex="-1">Leadership<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#leadership" aria-hidden="true">#</a></h2> <p><strong>Do managers regularly hold 1:1s?</strong><br /> What about skip levels? What sort of topics are discussed?</p> <p><strong>Who would I directly report to?</strong><br /> In some cases, this question can help you get a better sense of the org chart and where you'd be on it. It can also be a clue on whether the org is hiring you for a specific team, or just putting you in a pool of new hires to be farmed out as needed.</p> <p><strong>What’s your (or my future boss’) leadership style?</strong><br /> Is that style aligned with what you're looking for in a manager?</p> <p><strong>How do you know if people are comfortable giving you candid feedback? How do you fix it if they’re not?</strong><br /> Does your future manager value feedback and want to know what's not working? Hopefully, this is something they've thought about.</p> <p><strong>How do you nurture psychological safety in your team?</strong> The best organizations have probably spent considerable time thinking meaningfully about how they foster psychological safety on their teams and can readily articulate actions they've taken. Plenty of good organizations may not have thought about it in those terms -- they may lack the vocabulary -- but when prompted can still articulate what they've done. However, if get a blank stare or dismissiveness, even after prompting, that can indicate a toxic or hostile environment.</p> <h2 id="doing-the-work" tabindex="-1">Doing the work<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#doing-the-work" aria-hidden="true">#</a></h2> <p><strong>How does work get assigned?</strong></p> <p><strong>How often do inexperienced people get to work directly with more experienced people?</strong><br /> And how so? Pairing, or something else? How does it work?</p> <p><strong>How do you balance support and feature development?</strong></p> <p><strong>Tell me about your cross-functional teams</strong><br /> Do they have dedicated designers? Product owners? QA? Technical writer? Dev manager? How cross-functional teams are built tells you a lot about what the company values enough to put on the team.</p> <p><strong>How often do you have meetings? Are there scheduled/standing meetings? How much time should I expect to be in meetings</strong><br /> Remember, though, that for some positions (especially senior positions) meetings are a core component of the job.</p> <p><strong>When something goes wrong, how do you handle it?</strong></p> <p><strong>What kind of tools are provided by management to help an me do my job?</strong> (machinery, computers, office supplies, etc.)?<br /> How often is this equipment updated?</p> <h2 id="career-development" tabindex="-1">Career development<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#career-development" aria-hidden="true">#</a></h2> <p><strong>Are employees encouraged to go speak at conferences?</strong><br /> Do you cover travel to conferences?</p> <p><strong>Does your company support continuing education?</strong><br /> If so, how (and how much?)</p> <p><strong>In what other ways do you support career development?</strong></p> <p><strong>Does the company routinely provide training, either internal or external, for new technologies such as software updates or best practices?</strong></p> <p><strong>Does the company allow employees to pursue their own training path</strong><br /> To what extent?</p> <p><strong>When was the last time you promoted someone on your team? How did it happen?</strong><br /> How are they likely to handle it when you want a promotion?</p> <p><strong>Tell me about a time you supported a direct report leaving your team or company for the benefit of their own growth?</strong><br /> A supportive manager cares about your goals, not gluing you to your seat. The very best managers realize when it's time to move you up, even if that means moving you out.</p> <h2 id="performance-evaluation" tabindex="-1">Performance evaluation<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#performance-evaluation" aria-hidden="true">#</a></h2> <p><strong>How is performance evaluated?</strong><br /> What criteria does the company use for performance reviews? On what cycle? Are these criteria documented? If not, how do you ensure fair and equitable performance reviews?</p> <p><strong>How often can I expect job performance to be reviewed by management?</strong></p> <p><strong>Are raises based solely on job performance reviews? If not, what else is a factor?</strong></p> <p><strong>Do you stack-rank employees? Can you tell me how your stack ranking process works?</strong><br /> Most times, this should be a big red flag. &quot;Stack ranking&quot; usually means the company smooshes everyone into a bell curve, and the people who find themselves at the wrong end of the bell curve are now &quot;underperformers&quot; no matter how great they may be. In other words, stack ranking companies may say &quot;we only hire the best&quot; but then they'll treat at least half of their employees as under-performers, by design. Note that there are companies that employ some other sorting methods they may call &quot;stack ranking&quot;, so it's important to be sure you're working from the same definition.</p> <p><strong>Can you tell me about a time when you've had to let someone go?</strong></p> <h2 id="compensation" tabindex="-1">Compensation<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#compensation" aria-hidden="true">#</a></h2> <p><strong>If this is an exempt (salaried) position how much overtime do you assume I would put in without compensation?</strong></p> <p><strong>If this is an exempt (salaried) position, am I required to track all my time?</strong><br /> If so, how? And if it's not hourly, why?</p> <p><strong>What is the salary you expect to pay for this position?</strong></p> <p><strong>Is there a company/employee bonus structure and if so, how does it work?</strong></p> <p><strong>How often do you offer above asking?</strong><br /> Can you speak with someone who got such an offer?</p> <h2 id="for-engineering-orgs" tabindex="-1">For engineering orgs<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#for-engineering-orgs" aria-hidden="true">#</a></h2> <p><strong>What's the process for code review?</strong> <strong>How do you think about code correctness?</strong><br /> Bonus points if they can point to documented guidelines for behavior in code reviews.</p> <p><strong>How do you make sure that all code is understood by more than one person?</strong></p> <p><strong>How do you find bugs in your team's code?</strong><br /> Testing? Something else?</p> <p><strong>What happens when you find a serious bug in production code?</strong><br /> If they say this doesn't happen, that's a warning sign.</p> <p><strong>Who is responsible for doing deployment? How often do you deploy?</strong></p> <p><strong>Is there a written roadmap all developers can see?</strong><br /> How far into the future does it extend? How closely is it followed?</p> <p><strong>How/when do developers talk to non-developers?</strong><br /> How cross-functional are the teams? Is it easy to talk to the people who will be using your product?</p> <p><strong>What's your approach to technical debt?</strong></p> <p><strong>Do you contribute to open source projects?</strong><br /> Which projects? Which teams work on open source? Do you work mostly in the community or do you have a private fork?</p> <p><strong>Can I see some code the team I'm interviewing for has written?</strong><br /> From an open-source project, for example.</p> <h2 id="things-to-look-for-in-real-life" tabindex="-1">Things to look for in real life<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#things-to-look-for-in-real-life" aria-hidden="true">#</a></h2> <ul> <li> <p>How is the office space physically organized?</p> </li> <li> <p>Is it clean? Well kept?</p> </li> <li> <p>Are employees expected to pay for basics (like coffee)?</p> </li> </ul> <hr /> <p>With many thanks to all who have contributed to this list</p> Pear 2024-01-10T00:00:00Z https://another.rodeo/pear/ <p>In late 2020 or early 2021, for a number of different reasons I decided I wanted to get a better understanding of Natural Language Processing (NLP) and Python's Natural Language Toolkit (NLTK). Maybe it's vestiges of my career in journalism, but the idea of converting a mess of text into something the machine can understand and do something useful with appeals to me.</p> <p>I was also pretty interested at the time in how government resumes are evaluated, and the need to match language. So given those converging interests it just made sense for me to try NLP to compare the language in a couple of documents -- like a resumé and a job post.</p> <p>And that was the beginnings of Pear. Over time I've re-written it a couple of times, built a nicer front-end for it and added functionality. I may keep doing that.</p> <p>I've also found I keep reaching for it, because similar commercial systems seem highly intrusive. I'm always wary about providing data or text to most any app, especially when they seem pushy about wanting me to do so. Are they harvesting and selling information? Are they doing something else with it? What happens to my doc when I hit submit? I like having something that's non-commercial and is clearly not in it for any worrisome reason.</p> <h3 id="why-did-i-do-it" tabindex="-1">Why did I do it?<a class="tdbc-anchor" href="https://another.rodeo/pear/#why-did-i-do-it" aria-hidden="true">#</a></h3> <p>To learn, and to solve a simple need I had to compare docs.</p> <h3 id="what-did-i-learn" tabindex="-1">What did I learn?<a class="tdbc-anchor" href="https://another.rodeo/pear/#what-did-i-learn" aria-hidden="true">#</a></h3> <ul> <li>A whole lot about Natural Language Processing. Even at my self-taught level this stuff is fascinating.</li> <li>Alpine.js and HTMX -- I'd been wanting to play with these mini-JS libraries and came away quite impressed. Would use again, and recommend.</li> <li>More Flask. As a died-in-the-wool Django person, it was really interesting learning more about Flask's approach to things.</li> </ul> <h3 id="where-is-it" tabindex="-1">Where is it?<a class="tdbc-anchor" href="https://another.rodeo/pear/#where-is-it" aria-hidden="true">#</a></h3> <ul> <li><a href="https://pear.fly.dev/">The site</a></li> <li><a href="https://github.com/tBaxter/pear">The repo</a></li> </ul> Not funny, Dad 2024-01-27T00:00:00Z https://another.rodeo/dad-joke/ <p>About every other year or so I'm reminded that the U.S. Federal government has a site called Fatherhood.gov, and tucked away inside that tiny little backwater in the vast sea of government web sites there is a collection of dad jokes. Yes, the United States government keeps and hosts a collection of dad jokes, and because they are the work the US government, they are owned by and open to the public.</p> <p>How this came to be is a fascinating story. Fatherhood.gov was established as part of the National Responsible Fatherhood Clearinghouse (NRFC), which came to be through the Deficit Reduction Act of 2005.</p> <p>For those who don't recall, in the mid-2000s there was a highly partisan (and arguably racially coded) panic over &quot;responsible fatherhood&quot; during the Bush/Cheney administration. When the DRA was rammed through Congress on a party-line vote, it authorized funds for &quot;the development, promotion, and distribution of a media campaign to encourage the appropriate involvement of parents in the life of any child and specifically the issue of responsible fatherhood.&quot;</p> <p>At some point, someone involved was smart enough to realize that all responsible fathers need a sizeable stable of dad jokes at the ready, and they were ready with a supply. And once they went into the site's CMS, providing a feed of them was trivial.</p> <p>What's extraordinary is that some buzzkill bureaucrat hasn't come along and squashed it all. It's a beautiful thing when you think about it.</p> <p>At any rate, inspired by this delightful bit of government arcana, I threw together a quick mashup putting the jokes together with a selection of dad-like images from Unsplash. You can see it at <a href="https://dadjoke.fly.dev/">dadjoke.fly.dev</a> -- at least until I move it to a more proper domain.</p> <p>Originally, I had planned to pair the jokes with photos from other government resources such as the National Archives, Library of Congress or Smithsonian, but despite of my best efforts and their robust APIs I was not able to locate a suitable feed of dad photos. If anyone knows where to find them, let me know, OK?</p> <p>The site itself is painfully simple. It's just a simple Flask site that tries to get a joke from fatherhood.gov (or icanhazdadjoke.com as a backup) pairs it with an image from unsplash, applies a short cache to it, and... well that's about it. There's just not much to it. Enjoy it as intended: as a silly little diversion.</p> <h3 id="why-did-i-do-it" tabindex="-1">Why did I do it?<a class="tdbc-anchor" href="https://another.rodeo/dad-joke/#why-did-i-do-it" aria-hidden="true">#</a></h3> <p>Because I could and I wanted to. That's about it. There are better places to get Dad jokes, if that's your thing.</p> <h3 id="what-did-i-learn" tabindex="-1">What did I learn?<a class="tdbc-anchor" href="https://another.rodeo/dad-joke/#what-did-i-learn" aria-hidden="true">#</a></h3> <p>Not a whole lot on such a simple site, but...</p> <ul> <li>I learned about Flask's built-in caching, which I hadn't used before.</li> <li>Learned a lot more about Library of Congress, Smithsonian and National Archives APIs, in spite of ultimately not using them.</li> </ul> <h3 id="where-is-it" tabindex="-1">Where is it?<a class="tdbc-anchor" href="https://another.rodeo/dad-joke/#where-is-it" aria-hidden="true">#</a></h3> <ul> <li><a href="https://dadjoke.fly.dev/">The site</a></li> <li><a href="https://github.com/tBaxter/dad-joke">The repo</a></li> </ul> Markitup (v2) 2024-02-08T00:00:00Z https://another.rodeo/markitup/ <p>I've used a library called <a href="https://markitup.jaysalvat.com/home/">MarkitUp</a> on different projects of mine for more than 15 years. Compared to most Rich Text Editors, I found it to be much lighter weight and gave users Just Enough help to format using markdown. On the server side, this also offered nice flexibilty: I could store markdown, HTML, or both. In short, for a lot of nerdy reasons I really liked MarkitUP.</p> <p>But time marches on in a way that software rarely does, and as I've spun up a new project lately -- more on that to come -- I found that not only had Markitup not really kept up with times, I couldn't find anything comparable to replace it with, either.</p> <p>In a nutshell, the world had left Markitup behind. It was built for jQuery, and in 2024 browsesrs have gotten a lot better and it's hard to see a reason to use jQuery anymore. It also was bloated with a lot of code to support browsers that just aren't really used anymore.</p> <p>I decided I wanted to update it. This was a foolhardy spur of the moment decision, since I don't entirely trust my modern javascript skills, either. Markitup isn't the only thing that's been left behind, I have, too.</p> <p>And then I thought, hey, what if I see if ChatGPT can convert it for me? And so I did.</p> <p>And it wasn't a perfect conversion, but it was pretty close. I still put in hours checking and testing, but even counting that time, it saved me hours. It was impressive.</p> <hr /> <p>I've recognized for awhile now that I have been lucky -- the entire cohort of engineers who came up over the last 25 years have been lucky. Software engineering has been, for all of my career and all of recent memory, a highly paid, very expensive specialist field.</p> <p>This has been a historical fluke, and one the market will eventually correct. It always does. There's too much incentive to turn expensive specialities into commodities.</p> <p>We are seeing the beginnings of the commoditization of software development. It had to happen. It is happening.</p> <p>I don't think that's the end of the world for software developers, though. All of the best ones I've known have understood that the code is -- relatively speaking -- the easy part. The people you're building it for -- both the end users and the stakeholders -- that's the hard part.</p> <p>So while I may be impressed with ChatGPTs ability to convert jQuery code, I remain less impressed with it's problem solving ability, and that's the the real value of a good developer.</p> <p>But anyways, about Markitup....</p> <h3 id="why-did-i-do-it" tabindex="-1">Why did I do it?<a class="tdbc-anchor" href="https://another.rodeo/markitup/#why-did-i-do-it" aria-hidden="true">#</a></h3> <p>Because I had a need, and because I thought it would be interesting to see how close generated code could get.</p> <h3 id="what-did-i-learn" tabindex="-1">What did I learn?<a class="tdbc-anchor" href="https://another.rodeo/markitup/#what-did-i-learn" aria-hidden="true">#</a></h3> <p>Generated code gets you about 80% there and you still need a human for the remainder. But that 80% may be the difference between a problem that gets solved and one that doesn't.</p> <h3 id="where-is-it" tabindex="-1">Where is it?<a class="tdbc-anchor" href="https://another.rodeo/markitup/#where-is-it" aria-hidden="true">#</a></h3> <ul> <li><a href="https://github.com/tBaxter/markitup2">The repo</a></li> </ul> Deploying 2024-02-13T00:00:00Z https://another.rodeo/deploying/ <p>At one time, deployments were simply uploading files via FTP. When we weren't editing live files in production. We were but simple cavedwellers, and those were interesting times.</p> <p>Since then we've developed a lot more rigor in our deployments and have greatly improved their reliability, repeatability and security.</p> <p>We've also introduced a lot of extra steps, and where there are extra steps, there's a sure likelihood I've missed one. Or 12.</p> <p>So, for my future self, I am starting a running list of questions to ask myself as I first deploy a new application into a new environment.</p> <p><em>Note: I recognize that many of these questions are painfully basic and some readers may feel compelled to tell me a better way of doing things. It's OK if you don't.</em></p> <hr /> <ul> <li>Did you set the environment variables in all the environments?</li> <li><em>How</em> did you set all the environment variables in all the environments?</li> <li>How are you <em>getting</em> all the environment variables in all the environments?</li> <li>If you put them in a flat file, did you remember to put that in <code>.gitignore</code>?</li> <li>Did you remember to <code>pip freeze</code> the requirements?</li> <li>Do you remember the correct command to launch the app? Hint: for fly.io, it's <code>fly launch</code></li> <li>Did you remember that there's a different command to deploy that app? Hint: <code>fly deploy</code></li> <li>Did you remember to pre-install the dependencies in your dockerfile that your app will need to put itself together?</li> <li>Do you remember that you probably need to copy requirements.txt to do that for it to work?</li> </ul> <pre><code>COPY ./requirements.txt /app/requirements.txt RUN pip install --no-cache-dir -r requirements.txt </code></pre> <ul> <li>Do you need to rebuild the app because you changed the dockerfile?</li> <li>Did you forget about your database settings?</li> <li>Did you figure out how you're going to send email? You know you're gonna need to send emails, right?</li> <li>Did you figure out how to receive emails?</li> <li>Did you remember to put the email service API keys in your secrets, too?</li> </ul> <h3 id="why-did-i-do-it" tabindex="-1">Why did I do it?<a class="tdbc-anchor" href="https://another.rodeo/deploying/#why-did-i-do-it" aria-hidden="true">#</a></h3> <p>Because I had a need, and because I thought it would be interesting to see how close generated code could get.</p> <h3 id="what-did-i-learn" tabindex="-1">What did I learn?<a class="tdbc-anchor" href="https://another.rodeo/deploying/#what-did-i-learn" aria-hidden="true">#</a></h3> <p>Generated code gets you about 80% there and you still need a human for the remainder. But that 80% may be the difference between a problem that gets solved and one that doesn't.</p> <h3 id="where-is-it" tabindex="-1">Where is it?<a class="tdbc-anchor" href="https://another.rodeo/deploying/#where-is-it" aria-hidden="true">#</a></h3> <ul> <li><a href="https://github.com/tBaxter/markitup2">The repo</a></li> </ul> The Five Conditions for (Organizational) Improvement 2024-02-19T00:00:00Z https://another.rodeo/five-conditions/ <p>Back in 2017 Roy Rapoport wrote “<a href="https://medium.com/@royrapoport/the-five-conditions-for-improvement-20909f856dab">The Five Conditions for Improvement</a>”, talking about the conditions necessary for an employee to fix a performance problem. I think he came up with a great framework for helping people improve, but what really keeps me coming back, over and over again, is how applicable it is in larger contexts. I think what Roy really described were the five conditions necessary for <em>any</em> entity to improve. And that includes organizational entities.</p> <p>Let’s say, the “Bob” in Roy’s essay isn’t an individual, but is instead Bob’s Organic Bagels, a scrappy start-up that has grown to become a solid little company bringing in a few million a year. They’ve reached the stage where they need to develop a little more maturity in their processes in order to scale, yet they can’t quite seem to get there. Why?</p> <ol> <li><strong>Does BOB agree there is a problem?</strong> Is there consensus across BOB senior leadership that there is a problem? What about outside the senior leadership team? If only one or two senior leaders agree there is a problem to be solved, it’s not likely to be solved.</li> <li><strong>Does BOB actually want to see this problem resolved?</strong> Ok, so a useful plurality of BOB management sees the problem, but there is no consensus that it’s a problem — maybe they don’t want extra process or scale, maybe they think it will happen organically, or they’re just busy and don’t want a new initiative. Whatever they reason, they don’t care. Even if they want to care, they can’t manage to really care. So it doesn’t happen.</li> <li><strong>Does BOB management see their role in the creation or ongoing care and feeding of the problem?</strong> If thinking around the BOB general managers meeting is that there is a problem that just arose mysteriously out of the ether and is an unsolvable mystery, then the outcome is certain: nothing will happen. Problems are created – and solved – by people, and this is what management exists to do. To solve the thorniest problems, management must be willing to recognize their own part in the creation of the problem and course correct. If they’re unwilling to change how they manage the business, then how the business is managed will not change.</li> <li><strong>Can BOB figure out a plan to solve the problem?</strong> Imagine BOB management agrees the problem exists, needs to be solved, and recognizes their part in the creation of the problem. They know they need to change course, but can’t figure out how to chart a new one. If Bob can’t figure out what to do about things, they’re not to get better.</li> <li><strong>Can BOB successfully execute the plan to solve the problem?</strong> The final step: Can they stop managing how they’ve been managing, successfully change course, and go in a new direction without stumbling or turning back around? This may take some time to prove out, and they may find they need to change course again. That’s normal and expected. Or should be.</li> </ol> <p>Knowing where you and your company are at in the five steps is key to successfully navigating organizational change, and that’s what keeps me coming back to Roy’s piece, time and again.</p> <h3 id="ok-great-now-what-am-i-supposed-to-do-with-this" tabindex="-1">OK, great, now what am I supposed to do with this?<a class="tdbc-anchor" href="https://another.rodeo/five-conditions/#ok-great-now-what-am-i-supposed-to-do-with-this" aria-hidden="true">#</a></h3> <p>If you’re a leader at BOB, understanding where you’re at on that scale – and being honest with yourself about it – is going to be pretty key to the success of any initiative you’re undertaking. The more important the change, the more important it is to understand where you’re at.</p> <p>And if you’re a leader thinking of joining BOB, you need to understand where they’re at, too. Worse, you need to try to separate where they <em>think</em> they are at from where they are really at, because the problem may not be seen the same way across the management team. See Levels 1 and 2, for example. Plenty of great leaders have joined companies both large and small and then found out the difference between an organization that truly wants to change versus an organization that wants to feel like it is changing.</p> <p>But here’s the thing: recognizing the levels is a great tool for overcoming them. And just as Bob successfully made it through in Roy’s original essay, BOB can, too.</p> <figure class="image "> <img src="https://another.rodeo/img/writing/five-conditions.jpeg" alt="A nonsensical AI-generated image I somehow liked for this, courtesy of hotpot.ai" /> <figcaption>A nonsensical AI-generated image I somehow liked for this, courtesy of hotpot.ai</figcaption> </figure> Quicksand meetings 2024-02-19T00:00:00Z https://another.rodeo/quicksand-meetings/ <p>Lots of people dislike meetings, with good reason: Meetings interrupt. They take time. They steal focus.†</p> <p>For managers, though, meetings are a key part of the job. It’s how they brainstorm, balance efforts, build alignment, and broadcast knowledge. It’s how things get done when you’re a manager.</p> <p>Which makes it especially infuriating when managers schedule meetings that do just the opposite. Meetings that make it harder to get things done. Meetings that bring the work to a painful crawl. Meetings that cause more confusion and angst than they solve. In other words… <strong>Quicksand Meetings</strong>.</p> <p>As a manager, you're trying to build momentum, clarity, and team morale. If you’re scheduling these meetings, you aren’t just creating problems for your team, you’re failing at those fundamentals of management, and you’re blunting your own impact and delivery. Become a better manager: schedule better meetings.</p> <p>Take a look at the meetings you’re scheduling. Are they quicksand meetings? What would the folks attending them say? If you feel like you might have a meeting that matches one of these types, you probably do.</p> <figure class="image "> <img src="https://another.rodeo/img/writing/quicksand.jpeg" alt="You try to fight back, but the harder you fight, the deeper you sink. Until you can't move... you can't breathe... because you're in over your head. Like quicksand. -- Keanu Reeves" /> <figcaption>You try to fight back, but the harder you fight, the deeper you sink. Until you can't move... you can't breathe... because you're in over your head. Like quicksand. -- Keanu Reeves</figcaption> </figure> <h2 id="five-types-of-quicksand-meetings-you-dont-want-to-be-scheduling" tabindex="-1">Five types of Quicksand Meetings you don't want to be scheduling<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#five-types-of-quicksand-meetings-you-dont-want-to-be-scheduling" aria-hidden="true">#</a></h2> <h3 id="the-eternal-standing-meeting" tabindex="-1">The Eternal Standing Meeting<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#the-eternal-standing-meeting" aria-hidden="true">#</a></h3> <p>These are the meetings that turn up on calendars with regularity whether they are needed or not, forever. This isn’t a daily standup, it’s the ordeal created by the manager who says “I want us to get together so we can coordinate our efforts” completely ignoring that the folks on the team are already effectively coordinating efforts on Slack or Jira or any of the many other tools they have at their fingertips to asynchronously coordinate efforts.</p> <p>And of course The Eternal Standing Meeting is usually scheduled at some terrible time “that was the only time everyone was available” like 7:30 a.m. every day and has no agenda or action items.</p> <p>So everyone dutifully schleps themselves to the meeting, as requested, and pretends to pay attention while their mind wanders to a more productive use of their time.</p> <p>At best the Eternal Standing Meeting duplicates coordination and communication that’s already happening. At worst, it’s a purely ego-driven exercise scheduled by managers who feel the need to center everything around themselves. Even if it impacts the work.</p> <p>Possibly the most egregious example of the Eternal Standing Meeting is <strong>the hour-long daily standup</strong>. Nothing says “agile” like stretching what’s supposed to be a quick 5-10 minute meeting into a daily slog through minutiae. People only have about eight hours a day to get work done and you want to take 1/8 of that to talk about what’s happened since yesterday? It’s downright disrespectful of your own team.</p> <h3 id="the-fire-drill" tabindex="-1">The Fire Drill<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#the-fire-drill" aria-hidden="true">#</a></h3> <p>The Fire Drill looks a lot like an emergency meeting, but then you find out that either the emergency isn’t really an emergency at all, it was just normal operations. You can often spot The Fire Drill because there is no context or information about the “emergency” in the meeting invite, only an urgent “we have to talk about this.”</p> <p>Usually, everyone even remotely involved with the emergency is invited, but because there is no shared plan or context, people tend to wander aimlessly, hoping someone attending knows what's going on.</p> <p>If you find yourself regularly scheduling Fire Drill meetings, you should first step back and ask why your team has so many fires, and why you don’t have effective fire suppression systems in place? Well run teams rarely have fires. They have plans. They have processes. They have it under control.</p> <p>In the atypical cases where there truly is a fire, the lack of context fuels the fire. When everything is burning, effective communication is crucial. A contextless meeting isn’t that.</p> <h3 id="the-big-room" tabindex="-1">The Big Room<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#the-big-room" aria-hidden="true">#</a></h3> <p>The Big Room meeting happens when a manager invites everyone even tangentially related to a topic and then invites more folks, just in case, whether they have anything to contribute or not.</p> <p>A core handful of people who are invested in the topic will be at the center of the meeting, while everyone else is checked out, multi-tasking, or occasionally wandering into the conversation with non sequiturs.</p> <p>In the old office days, everyone huddled into a standing-room-only conference room. In the modern remote era it’s more comfortable, but also much easier for the attendees to surreptitiously check their phone for the duration.</p> <p>As a manager, it’s easy to think that inviting everyone is a good way to share context and communicate, but that’s wrong. But what you’re really doing is stealing focus and exacerbating Zoom Fatigue.</p> <p>The most productive meetings have <a href="https://hbr.org/2018/06/the-most-productive-meetings-have-fewer-than-8-people">fewer than eight people</a> (<a href="https://www.inc.com/sean-wise/want-to-have-more-productive-meetings-stanford-researcher-says-invite-fewer-people.html">really</a>) and you can communicate the results of the meeting to the larger group more effectively after the meeting, when you’ve had time to hone the communication.</p> <h3 id="the-chain-meeting" tabindex="-1">The Chain Meeting<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#the-chain-meeting" aria-hidden="true">#</a></h3> <p>The Chain meeting is when you schedule an endless series of meetings that just circle back around to the same predictable places. There’s no decision-making, no consensus, just going ‘round and ‘round, ‘round and ‘round. If you find yourself scheduling your third meeting on a given topic and there’s been no real movement since the first meeting, you may be scheduling a Chain Meeting.</p> <p>The good news is you can break the chain, starting now. Define the actions to be taken and a timeline for them. Know who the <a href="https://tettra.com/article/directly-responsible-individuals-guide/">Directly Responsible Individual</a> is for each item. Move things forward, not in circles.</p> <h3 id="the-marathon-meeting" tabindex="-1">The Marathon Meeting<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#the-marathon-meeting" aria-hidden="true">#</a></h3> <p>The marathon should never happen, but it does, usually at the worst possible time: when the team is already behind and stressed. That’s when someone will have the bright idea to schedule 20 hours of calls straight through two days “so we can all go over all the requirements together.”</p> <p>Of course it doesn’t work and people check out. That’s not how people’s brains work, it’s not how agile works, and it’s not how remote teams work. But people still try it.</p> <p>If you find yourself even considering a Marathon Meeting, ask yourself this: How has it come to this? How has the work and the communication about the work broken down so completely that the only apparent solution is to stuff everyone in a room until they give up and cry “uncle”?</p> <p>And then consider the cost of the Marathon, with all those highly paid people, not doing their regular jobs.</p> <p>If neither of those things give you pause, you may not actually be a manager.</p> <h2 id="five-steps-to-avoid-quicksand-meetings" tabindex="-1">Five steps to avoid Quicksand Meetings:<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#five-steps-to-avoid-quicksand-meetings" aria-hidden="true">#</a></h2> <p>All of these Quicksand Meetings share a few common traits: A lack of input, a lack of output, and a lack of ownership among the participants.</p> <p>Does this meeting have a clear and actionable agenda? Has everyone seen it, along with any supporting materials they need to digest before the meeting? Give everyone a chance to do their homework and develop informed opinions before the meeting instead of shooting from the hip. You can still give <a href="https://www.inc.com/justin-bariso/jeff-bezos-knows-how-to-run-a-meeting-here-are-his-three-simple-rules.html">a Bezos-style moment of silence at the start of the meeting</a> to review the materials, but at least give folks a chance to get up to speed before the meeting. Before we leave the meeting, what actions are we taking on those agenda items? What are our next steps? Who’s doing it, and when? You should know. If you can’t name the action items and a person handling each of them, that’s a problem. You’re not done yet. Am I inviting the right people? And the right number of people? Curate your guest list like it’s a wedding dinner and each guest costs you 100 bucks a plate. Find the people who want to contribute and are prepared to do so. Leave everyone else alone. They’ll be glad you did, because they have other things to do. Communicate the outcome of the meeting. Do this for the benefit of those who weren’t in the meeting, but also to reinforce the understanding of the folks who were in the meeting. You may feel like you don’t have enough time. You do. Especially if it helps you avoid another meeting on the topic. Track your meeting load. Do it for yourself. Do it for your team. On a personal level this is built into Google Calendar. At the team level, you may want to consider something like <a href="https://support.getclockwise.com/hc/en-us/articles/360050295911-Manager-s-guide-to-Clockwise#h_01HA7MAV1Z2S4FZEENW4CX2JH0">Clockwise</a> to track your teams’ bandwidth, and think about what a healthy bandwidth number really looks like, both for delivery, and for a healthy team.</p> <p>As managers, we sometimes hear “the meeting is the work” but that’s not quite right. <em>Meetings are in the middle of the work</em>. To make them useful, you as a manager have to put in the work to prepare for them (and to prepare others for them) and then you have to follow up on both the actions and communications afterwards. <em>That’s</em> the work.</p> <p>Good meetings are a quick and effective way for a group to collectively get from Point A to Point B. To do so, you should go in with a clear and shared understanding of Point A. During the meeting, you should identify Point B, what it will take to get there, and who is doing each of those things.</p> <h3 id="that-seems-like-a-lot-for-my-little-meeting" tabindex="-1">That seems like a lot for my little meeting<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#that-seems-like-a-lot-for-my-little-meeting" aria-hidden="true">#</a></h3> <p>Does every meeting need all of that structure? No. For some meetings, particularly 1:1s or team-building/conversational type meetings, that much structure can get in the way or even be counterproductive. Maybe you need a partial agenda. Maybe you don’t need an agenda at all. Feel it out, and see what the other folks in the meeting think.</p> <p>But if you find yourself invited to a Getting Things Done meeting, be sure things are getting done.</p> <p>Time is the one resource that does not and cannot scale. Don’t waste it.</p> <hr /> <h3 id="hat-tips" tabindex="-1">Hat tips<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#hat-tips" aria-hidden="true">#</a></h3> <ul> <li><a href="https://amzn.to/3OLcLO8">Kevin Hoffman’s “Meeting Design”</a> is highly recommended. Kevin’s a righteous dude.</li> <li>The <a href="https://www.cia.gov/static/5c875f3ec660e092cf893f60b4a288df/SimpleSabotage.pdf">1944 CIA Simple Sabotage Field Manual</a> is a good primer on how plan bad meetings, too. Thanks to <a href="https://billhunt.dev/">Bill Hunt</a> for a timely reminder of it.</li> <li>And many thanks to Mark Headd and Elizabeth Ayers for challenging me to think harder about all of this.</li> </ul> <p>†<em>”There is no shortage of think-pieces about bad meetings”, he says, as he adds another to the pile.</em></p> Know your (documentation) audience 2024-03-01T00:00:00Z https://another.rodeo/know-your-audience/ <p>Many years ago, armed with little more than a crude word processor and a take-on-the-world attitude, I embarked on a quest to become A Great Journalist. Day after day I fell bleary-eyed into early-morning classes, seeking knowledge. My words were going to make a difference.</p> <p>In the end, I only became a Middling Journalist, but I did manage to pick up a few insights and aphorisms that have proven useful since. Few are as useful and true (if clichéd) as this:</p> <p><strong>Know your audience</strong></p> <p>My journalism days are long past, but I continue to find applications for that shopworn slogan. It's hugely applicable in design, of course, but also product management and engineering. And nowhere in engineering is it more applicable than when it comes to writing technical documentation.</p> <p>Every day, engineering teams everywhere bicker endlessly about where to put their docs: Do we need a developer portal? Should they all be in Confluence? Do we need a Wiki?</p> <p>They endlessly seek the Single Source of Truth, writing and re-writing docs hoping to create the one true version of their technical docs. But here’s the real truth: <strong>for most engineering teams and technical projects there will never be a Single Source of Truth because there is no single group seeking truth</strong>.</p> <p>You have to know your audience, so start with the simple questions: Who will read these docs? Why? What do they hope to learn?</p> <p>Just thinking about the audience for your documentation will put you ahead of most engineering teams, because most engineering teams don’t really understand – or completely misunderstand – the audience for their technical docs. Even fewer understand that they almost definitely have more than one audience for their documentation.</p> <p>Nearly every engineering project will have at least two different audiences for their documentation.</p> <p>At least two audiences. Probably three or four. Maybe more.</p> <p><strong>Know your audience(s)</strong></p> <p>Each of the audiences for your docs have divergent needs and desires. Without understanding that, your documentation will always be bloated, messy, and hard to understand. You don't know your audiences, so you’re not giving them what they need. If you’re like most teams, you’ll either give up and leave everything under-documented, or you’ll shotgun out ever-larger heaping piles of docs, few of which will ever be read, let alone usable to their audience.</p> <p>Each of your audience needs documentation at a different fidelity, in a different location, to meet different needs. Your Single Source of Truth is wasting all their time. And yours.</p> <p>You need to write the right documentation, for the right audience, in the right place. And that’s not a one-time thing. So who are the audiences? Allow me to pull back the curtain and shine a spotlight...</p> <h3 id="1-engineers-in-the-codebase" tabindex="-1">1. Engineers <em>in</em> the codebase<a class="tdbc-anchor" href="https://another.rodeo/know-your-audience/#1-engineers-in-the-codebase" aria-hidden="true">#</a></h3> <p>This is probably you. And your team. And your future teammates. You are the folks reading and writing the code, actively developing it.</p> <p>What you want (what you really, really, want) is documentation adjacency. You want the docs to be close to what you're reading or writing spatially, not in some far-off wiki, but also focused cognitively to the work at hand. In other words, you don't want or need a birds-eye view of the system, you need to understand this function, right here. And that's enough.</p> <p>So it makes sense that these docs should live <strong>in</strong> the code, or as close as possible to the code it is talking about. I mean, you can't generally put comments in JSON, but you can, and should, put any docs you need explaining the JSON as near to it as possible, probably in the functions creating or consuming the JSON.</p> <p>Also remember that you and your team will likely read the code far more than you will write new code, so document accordingly.</p> <ul> <li><strong>Adjacency to code</strong>: high</li> <li><strong>Granularity</strong>: high</li> <li><strong>System-level understanding</strong>: low</li> <li><strong>Explanation of benefits</strong>: low</li> </ul> <h3 id="2-engineers-leveraging-the-codebase" tabindex="-1">2. Engineers <em>leveraging</em> the codebase<a class="tdbc-anchor" href="https://another.rodeo/know-your-audience/#2-engineers-leveraging-the-codebase" aria-hidden="true">#</a></h3> <p>This could be teams building on your platform, or consuming your API, or leveraging your open source project, or a million other things. Whatever they're doing, they have their own code to worry about, but for some miraculous, wondrous reason they want to use yours too. You should be flattered, and you should take good care of them by understanding and meeting their needs.</p> <p>But if it's all engineers, what do they want that's different than what you and your team wants? A higher-level system view. They probably don't care about the individual functions and they almost definitely have no interest in reading your code to understand it. They want things like:</p> <ul> <li>how-to instructions to implement and get it running</li> <li>Understanding of how to interface with it</li> <li>Gotchas they should watch out for</li> <li>Code examples and snippets to show how things work</li> <li>Clear and honest documentation of limitations. If it's not going to do [thing] but they really need [thing] let's just get that out of the way up-front.</li> </ul> <p>These folks don't want their docs in your code, because they don't want to read the code, but they probably want it pretty adjacent to wherever they go to <em>get</em> your code. Most times, that's probably the github repo, or someplace close to it. This is where you want to document the higher-level technical functions and APIs, and how engineers are expected to consume and use your codebase. It’s where documentation generators – SwaggerUI, Doxygen, Swimm, etc – may be most helpful.</p> <ul> <li><strong>Adjacency to code:</strong> medium</li> <li><strong>Granularity</strong>: medium-low</li> <li><strong>System-level understanding</strong>: medium-high</li> <li><strong>Explanation of benefits:</strong> medium</li> </ul> <h3 id="3-people-understanding-the-codebase-at-a-high-level" tabindex="-1">3. People <em>understanding</em> the codebase at a high level<a class="tdbc-anchor" href="https://another.rodeo/know-your-audience/#3-people-understanding-the-codebase-at-a-high-level" aria-hidden="true">#</a></h3> <p>This is most likely to be stakeholders, prospective partners or customers, your product manager, a technical writer or even your marketing department. Whoever it is, they have a healthy interest in your codebase, but they’re more interested in <em>what</em> it does, rather than <em>how</em> it does it. Many times, they’re seeking enough understanding that they can then explain it to their own audience.</p> <p>This group may be looking at the docs pretty far removed from the actual codebase, and that's OK. In fact, for this group, Confluence or some other system closer to where they work can make a lot of sense.</p> <ul> <li><strong>Adjacency to code:</strong> low</li> <li><strong>Granularity</strong>: low</li> <li><strong>System-level understanding:</strong> high</li> <li><strong>Explanation of benefits:</strong> medium-high</li> </ul> <h3 id="4-people-using-the-product-built-on-the-codebase" tabindex="-1">4. People <em>using the product</em> built on the codebase<a class="tdbc-anchor" href="https://another.rodeo/know-your-audience/#4-people-using-the-product-built-on-the-codebase" aria-hidden="true">#</a></h3> <p>These could be your most valuable audience, but too often they're ignored by engineering completely and simply handed off to the marketing department.</p> <p>This group has very little interest in the codebase. If they’re looking at it at all, it’s probably because they accidentally wandered into the Github repo from a link added by someone who didn’t understand the audience he was speaking to.</p> <p>What this group wants to know is simple: can it solve their problem? As an engineer, you offload these conversations to another department at your peril: You know better than they do what your code can and can't do, so you are better equipped to take at least the first pass at documenting it.</p> <p>Talk about the benefits with honesty and without hype. Someone will inevitably add additional hype downstream of your efforts. Before it gets there, though, you can have a real conversation about <em>why</em> you created the thing you created, <em>who</em> you created it for, and <em>what it can do to make their lives better</em>. The <em>how</em> is for another audience.</p> <ul> <li><strong>Adjacency to code:</strong> very low</li> <li><strong>Granularity</strong>: very low</li> <li><strong>System-level understanding:</strong> medium</li> <li><strong>Explanation of benefits:</strong> high</li> </ul> <h3 id="putting-it-all-together" tabindex="-1">Putting it all together<a class="tdbc-anchor" href="https://another.rodeo/know-your-audience/#putting-it-all-together" aria-hidden="true">#</a></h3> <p>Writing docs for all these audiences sounds like a lot of work, but in practice it could lead to writing fewer docs that are more effective. If the docs aren't meeting the needs of the intended audience, and meeting them where they are, then throw those docs out and never update them again.</p> <p>And the docs you <em>are</em> investing time in will have more clear value. Your team is happier. Your stakeholders and users are happier. Your product is more successful because the folks using it are happier and more able to solve their problems. For each audience, you’re focusing on their needs, and not weighing them down with extraneous baggage. They appreciate that.</p> <p>In many cases you'll be moving the docs someplace more adjacent to the codebase, if not within it, which means keeping them up to date gets a lot easier: you update them when you change the code that's right there, rather than updating some far-flung wiki no one remembers to read.</p> <p><strong>Know your audience.</strong></p> <p>To help visualize all this, here’s a carefully crafted high-fidelity rendering I created:</p> <figure class="image "> <img src="https://another.rodeo/img/writing/docs.png" alt="Here's a finely hand-crafted scatterplot with some squiggly dots intended to represent some of your audiences and their needs. " /> <figcaption>Here's a finely hand-crafted scatterplot with some squiggly dots intended to represent some of your audiences and their needs. </figcaption> </figure> <hr /> <p><small>With my thanks to Stacy Holmstedt, Jeff Triplett, Jennifer Wadella, Josh Chessman and others who helped me bounce these ideas around. If you’re interested, Daniele Procida built a framework on some similar ideas awhile back. Check it out at https://diataxis.fr/</small></p> So you don't want to be a manager 2024-03-07T00:00:00Z https://another.rodeo/straight-talk-ic-path/ <p>I’ve heard it a thousand times from a thousand engineers: “I don’t want to be a manager.” A lot of senior engineers think this, but I’m not sure many of them understand what it will mean to them and their career. Here it is:</p> <p><strong>This will be a long, hard and lonely journey.</strong></p> <p>Your career progression will slow to a crawl. You'll watch your peers move up in the company before you. You'll wonder why. There are a few good reasons, and they're all hard to hear.</p> <h3 id="1-your-organization-does-not-need-very-many-senior-staff-level-ics" tabindex="-1">1. Your organization does not need very many senior (Staff+ level) ICs<a class="tdbc-anchor" href="https://another.rodeo/straight-talk-ic-path/#1-your-organization-does-not-need-very-many-senior-staff-level-ics" aria-hidden="true">#</a></h3> <p>Most teams are fairly autonomous. They have reasonably good to very good engineers on them who understand the systems they use. They have managers who are talking to one another, filling in the blanks. There's only so much need for a Super Engineer who knows how everything across teams works. Most of that work is already getting done.</p> <p>When you have one, it can be hard to find Super Engineer-level work for them to do, and it's really easy for management to start wondering what Super Engineer is doing to justify their very expensive salary.</p> <p>So there's not a lot of need for really senior pure ICs, not a lot of demand for them, and not a lot of seats for them. Take a look around: most likely your org has somewhere around five engineering managers for every IC-track Principal Engineer. That's not to say you can't do IC work. It's to say that if you <em>only</em> want to do IC work, the demand can be thin. There's almost always demand for another team lead.</p> <p>If you want one of those Principal seats, you're going to have to show a lot of value, and you're still likely to be stuck because there just isn't a seat open. Meanwhile, the folks on the management track have a much easier time finding openings. People are messy and everyone mostly agrees they need managing.</p> <h3 id="2-its-really-hard-to-show-impact-as-a-very-senior-ic" tabindex="-1">2. It's really hard to show impact as a very senior IC<a class="tdbc-anchor" href="https://another.rodeo/straight-talk-ic-path/#2-its-really-hard-to-show-impact-as-a-very-senior-ic" aria-hidden="true">#</a></h3> <p>From here on out, your career progression is mostly about creating larger and larger impact zones. As an IC it can be be hard to even create opportunities for impact, let alone have people recognize it. Let me break it down:</p> <p>As a Senior Software Engineer, you've mastered at least one and probably more than one of the systems your teams use. That's awesome. Your impact zone is that system.</p> <p>If you become a Team Lead, in addition to caring for your team, you'll also be building relationships beyond the borders of your team. Similarly, as a Staff Software Engineer (on an IC track) you'll be looking at the systems beyond the borders of your team. That's the impact zone at this level: one team, looking to create impact beyond the borders of that team.</p> <p>And so it goes: as a Principal Engineer you'll be expected to have mastered most systems and have an impact zone beyond the walls of the department. Or even outside of the organization. At some point, you'll be expected to uncover whole new lines of work or create mass efficiencies across the organization. That's hard.</p> <h3 id="3-youll-be-mostly-alone" tabindex="-1">3. You'll be mostly alone<a class="tdbc-anchor" href="https://another.rodeo/straight-talk-ic-path/#3-youll-be-mostly-alone" aria-hidden="true">#</a></h3> <p>This ties back to the first point, but it's worth calling out separately. If you take this path, you'll be largely on your own. Especially as you go higher there are fewer and fewer people on the path with you. You'll have fewer people to bounce technical ideas off of and you'll have to figure more out by yourself.</p> <h3 id="but-i-dont-want-to-be-a-manager-you-say" tabindex="-1">But I don't want to be a manager, you say.<a class="tdbc-anchor" href="https://another.rodeo/straight-talk-ic-path/#but-i-dont-want-to-be-a-manager-you-say" aria-hidden="true">#</a></h3> <p>Hey I get it. You've got to do what feels right for you, and going into management can just feel <em>wrong</em> for a lot of engineers. You're not alone. You're not even uncommon. People are messy and complicated and they make funny noises and they want things. Ick.</p> <p>And it feels like you're leaving behind everything you're good at. You are. You're taking on an all-new thing and the odds are that you'll probably be terrible at it at first. Most new managers are, until you figure it out. The world is full of lousy managers and new managers tend to swell those numbers. Especially if they don't have a great manager themselves to guide them.</p> <p>That's a bitter pill when you've fought to reach a stage in your career where you're respected and are just beginning to feel like an expert. It’s even harder if you’re prone to feelings of Imposter Syndrome.</p> <p>This is one reason why a lot of engineers <a href="https://charity.wtf/2017/05/11/the-engineer-manager-pendulum/">swing back and forth on the pendulum</a>.</p> <h3 id="i-get-it-i-do" tabindex="-1">I get it. I do.<a class="tdbc-anchor" href="https://another.rodeo/straight-talk-ic-path/#i-get-it-i-do" aria-hidden="true">#</a></h3> <p>I completely understand why you feel the way you do. People who follow and succeed on an IC path can be transformative. They can make highly technical (and potentially highly profitable) things happen that no one else can even see as possibilities.</p> <p>Senior-level ICs can wander from team to team making the hardest problems just disappear. They have real, visceral, quantifiable impact. There’s no denying the appeal in that.</p> <p>And they're building on their strengths rather than riding the &quot;I'm not sure I'm good at any of this&quot; rollercoaster that leaves pits in the stomach of new managers.</p> <p>But at the same time, some folks find that squishy people-problems are intricate and fascinating in a way that technical problems rarely are, and they find great satisfaction in that.</p> <p>There are also a lot of people who find that becoming a manager unleashes their super-powers. These are the folks who may have been under-recognized and under-valued throughout their career because they excel at <a href="https://noidea.dog/glue">glue work</a> and were seen as &quot;not technical enough&quot;. Now, as a manager, those skills they've honed are suddenly incredibly valuable. Critical, even. They have, finally, met their moment.</p> <h3 id="after-all-of-that-you-still-dont-want-to-manage" tabindex="-1">After all of that, you still don't want to manage?<a class="tdbc-anchor" href="https://another.rodeo/straight-talk-ic-path/#after-all-of-that-you-still-dont-want-to-manage" aria-hidden="true">#</a></h3> <p>Good. You do what feels right for you, just do it with open eyes. For some folks, even knowing all of this, the IC track still feels right. If that’s you, awesome. Go forth and do great things. I just want you to know what you're getting into. And that you can change paths if you change your mind. Good luck!</p> <p><em>Edited later 3/7 to clarify a few points people had raised. Thank you, people!</em></p> AI is boring and stupid and maybe that's OK 2024-03-11T00:00:00Z https://another.rodeo/ai-boring-stupid-ok/ <p>We’re now just a bit over two years into the AI revolution. The chorus of hype and promises — both empty and real — remains deafening. The capabilities of AI increase every day. Yet right now, the most impressive thing about AI may be how quickly we’ve trained our primitive monkey brains to recognize how incredibly boring it is.</p> <p>In months, really, we’ve retrained our brains. We've gone from being utterly dazzled by the magic of AI to seeing the machine behind the curtain, moving the levers. Not long ago we watched incredulously as AI conjured credible art out of thin air, held lengthy conversations with us on the fly, and generated new lyrics for Taylor Swift songs anytime we liked. Then, after a moment of magic, we started to shrug.</p> <p>We learned in an astonishingly short time to recognize AI-generated content for what it is: Boring. Trite. Been there, done that, got the AI-generated T-shirt.</p> <figure class="image "> <img src="https://another.rodeo/img/writing/ai/ai-t-shirt.jpeg" alt="Inspiring, isn't it?" /> <figcaption>Inspiring, isn't it?</figcaption> </figure> <p>AI as a capability may be fascinating, but the output of it is nearly always dull and plodding. Recognizable as the work of a machine and marked by predictability and sameness. The AI-generated art proliferating across blog posts and the pages of LinkedIn Thought Leaders has already become a cliché. When we see someone pass off AI-generated text as their own, we know.</p> <p>We <em>know</em>.</p> <p>We’ve learned to see it, and just as we can’t help but see the green screen effect in an old sci-fi movie, we’ll only get better at spotting it, until eventually it's all we can see.</p> <h3 id="boring-by-design" tabindex="-1">Boring by design<a class="tdbc-anchor" href="https://another.rodeo/ai-boring-stupid-ok/#boring-by-design" aria-hidden="true">#</a></h3> <p>AI is built to be boring. That’s literally how it works: it predicts the most likely next word or pixel, based on the gazillion words and pixels fed to it. The problem is you, you’ve likely seen some version of the words and pixels fed to it before. Not every permutation, but enough to recognize the lack of originality.</p> <p>And so it goes with the most visible use cases for AI today: We see AI-generated art and reject both the processed sameness of it as quickly as we recoil from the six-fingered uncanny valley.</p> <p>We gloss over AI-generated text the same as we’ve learned to gloss over text that’s clearly overly optimized for SEO. Whether written by machines or for machines, our human brains want text written for humans, quirks and non-sequiturs and all. We want humor and humanity and something that makes us think in a way we haven’t thought before.</p> <p>Creativity doesn’t exist without unpredictability. Good doesn’t exist with humanity. Not yet at least.</p> <p>So, in a remarkably short time we’ve trained ourselves to see the machines working, and we recognize their work is largely... boring.</p> <p>And yet, this is not a problem for AI. Or for people. Because a lot of what we do every day really is boring. Repetitive. Predictable. The sort of thing the machines literally trained on.</p> <div style="position: relative; width: 100%; padding-bottom: 56.25%;"> <iframe style="position:absolute; width:100%; height:100%;" src="https://getyarn.io/yarn-clip/474d7a6b-f993-4713-8a7b-60a778ec1454/embed?autoplay=false&responsive=true" frameborder="0"></iframe> </div> <h3 id="boring-can-be-useful" tabindex="-1">Boring can be useful<a class="tdbc-anchor" href="https://another.rodeo/ai-boring-stupid-ok/#boring-can-be-useful" aria-hidden="true">#</a></h3> <p>The world is full of things that exist because of a need to fulfill some requirement, not because they need to bring us joy. Sometimes we just need to get something done in order to get to something more important to us.</p> <p>We write an awful lot of boilerplate and scaffolding on our way to something else, and then we write a lot of other things just to check a box. Boilerplate code. Boilerplate legal documents. Boilerplate grants and guidance and RFPs and SOWs and a whole alphabet soup of other documents and filings and records and reports.</p> <p>We don’t always need these things to be good, we just need them to be done. This is where AI can really shine. It’s great at creating all that boilerplate and scaffolding, and then it can just as easily turn around and consume it all and spit out a nice, concise summary.</p> <p>If we really over-achieve we can build a future where mountains of content aren't written or read by humans much at all. And maybe that’s not a bad thing. I mean, a lot of this stuff was never all that human-centered or human-readable to begin with.</p> <p>The worrisome part is that nobody reads this stuff now, so who's going to read it and catch errors in the future? Any editor (or coder) will tell you: it’s easy to gloss over errors when something is already written.</p> <h3 id="so-what-if-errors-sneak-in-ai-can-catch-those-too" tabindex="-1">So what if errors sneak in? AI can catch those, too.<a class="tdbc-anchor" href="https://another.rodeo/ai-boring-stupid-ok/#so-what-if-errors-sneak-in-ai-can-catch-those-too" aria-hidden="true">#</a></h3> <p>Sure. Maybe. But will they catch them <em>before</em> real people are impacted? I don't think so. We know real people are impacted already, starting with the people who created the works AI is regurgitating. But as more and more AI-generated text creeps into more places – especially highly regulated places – what will it bring along for the ride?</p> <p>This is especially worrisome in my field – government technology – where what's written determines which people receive needed benefits. Which Veterans get services. Which mothers are able to feed their children today. Which small businesses will survive thanks to a government loan. Literally, an entire world hinges on fine text and how it's read and interpreted. This is the kind of text AI excels at generating and we are terrible at reading.</p> <p>My very smart friend Mark Headd recently wrote up <a href="https://adhoc.team/2024/02/27/LLMs-gov-future/">some pretty smart use cases for AI and LLMs in government</a>. Bill Hunt, another very smart friend also working in government, has <a href="https://billhunt.dev/blog/2023/10/09/llms-are-not-government-ready/">a pretty strong opinion that today’s AI models aren’t ready</a>. I think it’s possible that they’re both right.</p> <p>There's an air of inevitability to generative AI – a vibrating sense of a genie in the air, refusing to go back into the bottle, sending a siren call to both those eager to summon and those fearful of what comes next.</p> <p>What comes next is happening now, and a lot of it is happening in highly regulated and highly senstive spaces. Government systems are using AI to detect fraud and waste, to help agencies with regulatory compliance and, undoubtedly, a lot of other things. With a lot of questions about what happens when there are false positives, or false negatives.</p> <p>AI generated content may be boring and trite, but that doesn't mean people aren't finding it incredibly useful, today, right now. And many of the most touted, most exciting use cases remain largely on the horizon.</p> <p>We can't wait to reach that horizon before we start figuring out how to handle editorial control, quality checking, rules compliance and a host of other factors for anything AI-generated.</p> <p>We’re going to have to find a way to ensure that AI is producing something like what human intelligence would have produced and that it is not introducing a bunch of errors. Getting AI to generate boilerplate is the easy part. Figuring out how we ensure that it’s correct will be the bear we have to wrestle.</p> <p>This is not the first time we've had this problem.</p> <h3 id="the-assembly-line" tabindex="-1">The assembly line<a class="tdbc-anchor" href="https://another.rodeo/ai-boring-stupid-ok/#the-assembly-line" aria-hidden="true">#</a></h3> <p>True fact: The precursor to modern assembly lines – arguably the first assembly lines – could be found in 19th century meatpacking plants. There you'd find overhead trolleys moving heavy carcasses from worker to worker for processing. At the time &quot;processing&quot; generally meant large knives and bone saws, so conditions were dire. Defects and accidents were largely ignored – even though they could be deadly.</p> <p>When automotive assembly lines in the early 20th century spurred a manufacturing revolution across industries, defects and errors still abounded, especially when plant owners made the the machines run faster to drive greater productivity. They got the idea from English textile companies, who had done for years with their looms – much to the horror of Luddites, who really just wanted a living wage and respect for workers. But we were talking about errors....</p> <p>It wasn't until well into the 20th century that manufacturers really began to master rigorous multi-stage, multi-faceted quality control. Even with huge advancements in the field, quality in many industries has remained spotty and sporadic.</p> <p>And that was when inspectors and testers only had to move at the speed of the line, which was limited at each step by what one person could do. Today, with AI we've automated the creation of nonsense at mass scale. Our traditional quality control checks don't match and won't scale.</p> <p>We already know that <a href="https://visualstudiomagazine.com/Articles/2024/01/25/copilot-research.aspx">AI-generated code lowers quality</a>. We've <a href="https://www.bloomberg.com/graphics/2024-openai-gpt-hiring-racial-discrimination/?accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb3VyY2UiOiJTdWJzY3JpYmVyR2lmdGVkQXJ0aWNsZSIsImlhdCI6MTcwOTg1NjE4NCwiZXhwIjoxNzEwNDYwOTg0LCJhcnRpY2xlSWQiOiJTQTA1Q1FUMEFGQjQwMCIsImJjb25uZWN0SWQiOiI4QkY3REVFODZERTk0QjdEOEVDRDA1OEQ4RUJDQzAzMyJ9.q4dHdWWVcJO9PMKhwQ-IF5BfvVNVmPAX8hWNyrtwSYY">discovered that it increases racial bias in hiring</a>. Microsoft's AI reportedly <a href="https://www.cnbc.com/2024/03/06/microsoft-ai-engineer-says-copilot-designer-creates-disturbing-images.html">generates violent sexual images</a> while Google had to <a href="https://www.axios.com/2024/02/23/google-gemini-images-stereotypes-controversy">stop humans from generating images of other humans</a> after tripping over themselves trying to correct AI stereotypes and bias. Across the industry, people are calling out failures to limit bias, misinformation and controversial content. The hazard of mimicking human content is that humans say some pretty messed up stuff.</p> <p>So given both the mediocrity of generated text and the high likelihood of damaging errors in generated content, how do we ensure safety and validity in highly regulated services where when compliance, correctness and contractual obligations are on the line? Who's going to check this stuff?</p> <p>I don’t think we can trust humans to be the answer. Even if they want to ensure accuracy and have a strong vested interest, I don't think they'll be able to keep up with fact-checking and error-checking all the content AI can generate.</p> <p>So of course the answer is to have the AI check itself. Just like grizzled veteran editors taught newcomers to read stories from bottom to top to break the brain's flow and catch errors, we'll think up creative ways to make AI better at catching it's own mistakes. But of course each layer of AI cleverness creates another layer of AI to check. It a hall of mirrors. A matryoshka. A hall of mirrors endlessly reflecting matryoshkas.</p> <p>For now, we find ourselves hacking through an ever-deepening forest of generated content, hoping we can spot the bear lurking in the forest before it mauls us. We're not good at this, and we're not going to be good at this. That forest of AI-generated content is boring as hell. And yet, somehow, we will find a path through it. It will be OK.</p> <p>Unless we use up all the electricity in the world first. In the meantime, here's a picture of Joe Biden and Donald Trump enjoying some quality time together.</p> <figure class="image "> <img src="https://another.rodeo/img/writing/ai/biden-trump.jpg" alt="Reality is the only word in the English language that should always be used in quotes." /> <figcaption>Reality is the only word in the English language that should always be used in quotes.</figcaption> </figure> 11ty Linkrolls 2024-03-13T00:00:00Z https://another.rodeo/linkroll/ <p>One of the things I've always loved about blogs were the linkrolls... that candy trail to more and more interesting things scattered around the web. I love to see folks sharing the interesting things they find. Social media is built on that sort of sharing, but they've also commoditized it and gamified it beyond recognition, and there's no persistence to it, either. I wanted an old-fashioned linkroll for myself.</p> <p>Surely, I thought, this must be a paved cowpath in the Eleventy world, so I asked on Mastodon:</p> <iframe src="https://mastodon.social/@tbaxter/112083281191909486/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://mastodon.social/embed.js" async="async"></script> <p>And I learned that yes, it has been done (and done well), but <em>how</em> to do it is less clear. in particular <a href="https://nicolas-hoizey.com/">Nicolas Hoizey</a> had a very nice version, and had <a href="https://nicolas-hoizey.com/articles/2023/02/08/a-bookmarklet-to-create-a-new-link-content-markdown-on-github/">written up part of it</a>. In the interest of completeness (and so I can remember how I did it), here are all the steps. I should also note that Nicolas' implementation is way, way more sophisticated and complex than mine, and that his 11ty codebase is chock full of interesting things I'll probably emulate later. For now, for this linkroll, this is the cavedweller version. We're <a href="https://www.youtube.com/watch?v=xekfBhiqfig">digging for fire</a> here.</p> <h3 id="prepare-the-bookmarklet" tabindex="-1">Prepare the bookmarklet<a class="tdbc-anchor" href="https://another.rodeo/linkroll/#prepare-the-bookmarklet" aria-hidden="true">#</a></h3> <ol> <li>Install the <a href="https://www.npmjs.com/package/bookmarklet">bookmarklet NPM package</a> with <code>npm install bookmarklet</code> or, if you're like me and you have some sort of NPM path issue you don't want to track down, shake your head and make it a global install: <code>npm install -g bookmarklet</code></li> <li>Following the link from Nicolas' site, I grabbed his <a href="https://github.com/nhoizey/nicolas-hoizey.com/blob/main/assets/js/bookmarklets/new-link.js">bookmarklet code</a> and put it in the same location on my site: <code>/assets/js/bookmarklets/</code></li> <li>In the bookmarklet script, look for <code>newFileUrl</code> and change the Github address to your own. I also modified it to automatically prompt for tags after getting <em>really</em> confused about why my pages didn't show up in any collections. You can see <a href="https://github.com/tBaxter/another-rodeo/blob/main/assets/js/bookmarklets/new-link.js">my version in Github</a>.</li> <li>Build the bookmarklet with <code>bookmarklet --demo assets/js/bookmarklets/new-link.js src/tools/bookmarklets/new-link.html</code>. Note that the last half of that command is the destination. In my case, I had to create a directory or two before I could get the output file there.</li> <li>Fire up your local site with <code>npm start</code> and navigate to <code>http://localhost:8080/tools/bookmarklets/new-link/</code>. You should see your bookmarklet and be able to drag it to your bookmarks bar.</li> <li>This is a good time to test it. Navigate to any page and click the bookmarklet. You should see prompts for the page title and a slugified (URL-safe) version of the title. If you're using my version, you should also get a prompt for tags. Click &quot;OK&quot; through the prmpts and you <em>should</em> get redirected to github, where you should see a draft of a new page.</li> </ol> <h3 id="creating-new-entries-for-the-linkroll" tabindex="-1">Creating new entries for the linkroll<a class="tdbc-anchor" href="https://another.rodeo/linkroll/#creating-new-entries-for-the-linkroll" aria-hidden="true">#</a></h3> <p>Whenever you click the bookmarklet it will create a new page in Github. At that point, you still need to save and commit the changes to create the new entry. I don't know if this part could be automated, and I didn't look into it because I thought it was a useful final step to ensure that the entry looked correct and an additional point to add any last-minute edits.</p> <p>Anything in the page you create here should be available to your site downstream, so you very well may want to add additional information. By default it attempts to grab and excerpt from the page, but you can also add your own thoughts.</p> <h3 id="showing-the-entries" tabindex="-1">Showing the entries<a class="tdbc-anchor" href="https://another.rodeo/linkroll/#showing-the-entries" aria-hidden="true">#</a></h3> <p>This is where things went sideways for me and the simple things got hard. I got pretty confused about why my new content didn't show up, and why I didn't have a &quot;links&quot; collection.</p> <p>It turned out that the original bookmarklet didn't add any tags -- I'm guessing Nicolas adds them himself -- and without them, the pages didn't appear in any collection and the collection wasn't created. Once I figured that out, things got simpler.</p> <p>To create a links page, I pretty much copied what Nicolas had done for his archives, although in a pretty dumbed-down version.</p> <ol> <li>I grabbed Nicolas' link index page and <a href="https://github.com/tBaxter/another-rodeo/blob/main/src/links/index.njk">made my own version</a>.</li> <li>That index page relies on the <a href="https://github.com/tBaxter/another-rodeo/blob/main/src/_includes/macros/linkCard.njk">linkcard macro</a>, which in turn relies on the <a href="https://github.com/tBaxter/another-rodeo/blob/main/src/_includes/macros/card.njk">card</a> and <a href="https://github.com/tBaxter/another-rodeo/blob/main/src/_includes/macros/meta.njk">meta</a> macros, all of which I grabbed from Nicolas and then stripped down. I admit macros are a part of 11ty I'm not familiar with, so it's very possible this part could be simpler and/or more elegant.</li> <li>Fire up the local version again, if it's not already running. You should see a page with the link you created earlier (although you may need to <code>git pull</code> to bring it down to your local build). If not, start debugging.</li> </ol> <p>I also created a simple sidebar for my index page, which was considerably less involved:</p> <pre><code> &lt;ul class=&quot;linkroll&quot;&gt; {% for link in collections.links %}&lt;li&gt; &lt;a href=&quot;{{ link.url }}&quot;&gt;{{ link.data.title }}&lt;/a&gt; {{ link.content | safe }} &lt;/li&gt;{% endfor %} &lt;/ul&gt; </code></pre> <p>So, that's how I did it.</p> <h3 id="my-to-do-list-from-here" tabindex="-1">My to-do list from here<a class="tdbc-anchor" href="https://another.rodeo/linkroll/#my-to-do-list-from-here" aria-hidden="true">#</a></h3> <ol> <li>Make saving a new entry trigger a Netlify build. Right now it doesn't appear to. I imagine there's a Github action or something to do it, I just haven't figured it out yet.</li> <li>Possibly related to the above, or causing the entry to not show up on deployment, but I introduced a defect when adding multiple links. They're becoming a single string, so they don't get added to collection properly. I'll have to sort that out.</li> <li>Think about how I might introduce images. Nicolas appears to use thumb.io to get screenshots. I'm wondering about leveraging <code>og:image</code> tags where they're found</li> <li>Nicolas really does have a lot of interesting ideas in his repo, and I think I'm likely to incorporate more of them.</li> </ol> The handcycle 2024-03-28T00:00:00Z https://another.rodeo/handcycle/ <p>This is one of those projects where I wish I'd kept better notes and photos, because it was pretty fascinating to me....</p> <p>In spring 2001 a friend learned I'd been renovating old bikes and asked if I'd look at his daughter's bike. His daughter has some issues with mobility, so the bike in question was a handcycle. I'd never heard of a handcycle, let alone put a wrench to one, but was I going to let that stop me? No, I was not.</p> <p>When it came to me, it had been sitting in the back corner of a warehouse for some time, and that time had not been good it it. Aside from a thick coating of dust, it appeared someone may have backed a forklift into the front wheel. In addition, chemicals in the air at the factory had attacked the metal parts.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/handcycle/starting.jpg" alt="The starting point for this project. Dirty and neglected, but sound." /> <figcaption>The starting point for this project. Dirty and neglected, but sound.</figcaption> </figure> <p>On the other hand, the paint was still good and it was sound and not overly rusty. It would clean up.</p> <p>Before I tore into it, I took a minute to familiarize myself with handcycles. Essentially they're sort of a trike, using wheelchair back wheels, coupled with a combination steerer/crankset operated by the rider's hands to provide forward propulsion. So there are lots of off-the-shelf bike parts coupled with off-the-shelf wheelchair parts, all used in interesting new ways and mixed in with some bespoke custom stuff to make it all work.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/handcycle/crank.jpg" alt="The crank is a pretty standard 110BCD square-taper triple crank. Looked a bit like a Sugino to me, but it wasn't marked. A very tiny chainring is bolted to the inner mounting point. You can also make out the vertically-mounted brake lever, which is set up to act as a parking brake." /> <figcaption>The crank is a pretty standard 110BCD square-taper triple crank. Looked a bit like a Sugino to me, but it wasn't marked. A very tiny chainring is bolted to the inner mounting point. You can also make out the vertically-mounted brake lever, which is set up to act as a parking brake.</figcaption> </figure> <p>For the most part, this was a straightforward refurbishment, with a few twists. All the normal stuff you'd buy for a bike refurb was just a bit different. For example, the tires were wheelchair tires, which I had to track down a good source to find. Eventually I discoverd <a href="https://www.sportaid.com/">sportaid.com</a>, who have everything one could want for a high-performance wheelchair, including some nice tires.</p> <p>One thing I learned: wheelchair tires run at <em>very</em> high pressure and they are <em>very</em> hard to seat on the rim. I think I broke a half-dozen tire irons.</p> <p>The chain was also a bit quirky. Because of the length of travel from the hand cranks to the front wheel, I had to buy two chains and merge them together.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/handcycle/flat-spot.jpg" alt="The front wheel had a big flat problem." /> <figcaption>The front wheel had a big flat problem.</figcaption> </figure> <p>The front wheel had taken a pretty bad hit, and I didn't trust the rim to be solid anymore. I lucked out and found a New Old Stock Sun CR18 rim that matched the stock rims nearly perfectly. Score! This was before I learned to lace rims myself, though, so I had a local shop lace swap over the stock Shimano internal-geared hub to the new rim. They did a great job.</p> <p>Speaking of that Shimano hub, they're not for the faint of heart, even for someone like myself who's experienced with Sturmey-Archer 3-speed hugs. Luckily I just need to re-lube it and it and give a good cleaning. It worked beautifully.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/handcycle/reassembly.jpeg" alt="Reassembly. That big bracket on the fork is for two chain idler pulleys. The chain is that long." /> <figcaption>Reassembly. That big bracket on the fork is for two chain idler pulleys. The chain is that long.</figcaption> </figure> <p>A lot of the work was pretty normal, though: disassemble, clean, lube, re-assemble. In spite of the surface corrosion the bike cleaned up well and as it came back together it looked nearly like new.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/handcycle/finished.jpeg" alt="Finished!" /> <figcaption>Finished!</figcaption> </figure> <p>So what's it like to ride? It's work. The 8-speed hub and small chainring help, but even if you enjoy cycling, this is a whole different set of muscles. But it's also a lot of fun.</p> <p>Most important, the owner <em>loved</em> having her bike back so she could go for a ride whenever she wanted, on her own terms.</p> <p>And isn't that what it's all about?</p> About this site 2024-04-07T00:00:00Z https://another.rodeo/about/ <h3 id="april-8" tabindex="-1">April 8<a class="tdbc-anchor" href="https://another.rodeo/about/#april-8" aria-hidden="true">#</a></h3> <p>I skipped some small updates over the past few weeks, but today sees the launch of some fairly major typography and hero image changes.</p> <h3 id="mar-15" tabindex="-1">Mar 15<a class="tdbc-anchor" href="https://another.rodeo/about/#mar-15" aria-hidden="true">#</a></h3> <p>I've recently added a linkroll and <a href="https://another.rodeo/links">links page</a>, along with a page <a href="https://another.rodeo/about-carter">about me</a>. I'm thinking a bit about the <a href="https://aboutideasnow.com/about">about | ideas |now model</a> but don't honestly know if I want to keep up with updating all those pages. Seems like a lot.</p> <p>I've also been making CSS tweaks here and there. I need to take a harder look at the CSS. It is currently broken on small screens, I'm not sure my color choices are accessbible, and I don't love the way it's organized and builds.</p> <h3 id="feb-22" tabindex="-1">Feb 22<a class="tdbc-anchor" href="https://another.rodeo/about/#feb-22" aria-hidden="true">#</a></h3> <p>I've needed to fix the site navigation for awhile now, and finally did. I used the simple <a href="https://www.11ty.dev/docs/plugins/navigation/">11ty Navigation Plugin</a> and it was so easy it made me a bit embarrassed that I hadn't fixed it already.</p> <h3 id="feb-7" tabindex="-1">Feb 7<a class="tdbc-anchor" href="https://another.rodeo/about/#feb-7" aria-hidden="true">#</a></h3> <p>I've added a lot more content this week as I consolidate various things I've had on other websites and bring it all here. That means my Smart Camper content is here now and I'll be retiring smartercamper.com, and I've started bringing over a bunch of the bike content from re-cycled.net. I'll be retiring that one, too.</p> <p>I've also pulled in the Giant List of Questions for Prospective Employers. I'm experimenting with embedding that here as a Github submodule. We'll see how well it works.</p> <p>And I added a bunch of photos and thumbnails.</p> <h3 id="jan-30-2024" tabindex="-1">Jan 30, 2024<a class="tdbc-anchor" href="https://another.rodeo/about/#jan-30-2024" aria-hidden="true">#</a></h3> <p>As I begin to diverge from the perfectly nice <a href="https://github.com/5t3ph/11ty-netlify-jumpstart/generate">11ty Netlify jumpstart template</a>, I've changed the main logo image and theme colors. Those who have known me for awhile will recognize the horseshoe isn't just a nod to this site's name, it's also the same horseshoe found on Gretsch guitars, in particular the Gretsch 6120 Chet Atkins. I created the Gretsch Pages in 1995 and over time it became the leading resource and community for Gretsch guitar owners. After 25 years I retired, but not without some regrets. It was a huge part of my life for a very long time. Just seemed right to have a little homage here.</p> <h2 id="were-doing-it-live" tabindex="-1">We're doing it live<a class="tdbc-anchor" href="https://another.rodeo/about/#were-doing-it-live" aria-hidden="true">#</a></h2> <p>I'm Carter Baxter. I like to tinker with things. You can read more about me on <a href="https://www.linkedin.com/in/carter-baxter/">Linkedin</a>, on <a href="https://github.com/tBaxter">Github</a>, or on <a href="https://mastodon.social/@tbaxter">Mastodon</a>.</p> <p>This site is a little clearinghouse for various experiments and projects I've taken on and tinkered with. Because it's all about the projects, we'll treat the site as a project, too, and build it out live.</p> <p>We're starting from the <a href="https://github.com/5t3ph/11ty-netlify-jumpstart/generate">11ty Netlify jumpstart template</a> and going from there. If I don't abandon the project, it should be constantly changing. We'll see where it goes.</p> <figure class="image "> <img src="https://another.rodeo/img/web-things/building-it.jpeg" alt="We're building it out in the open. Photo generated by hotpot.ai" /> <figcaption>We're building it out in the open. Photo generated by hotpot.ai</figcaption> </figure> <!-- ### Jump to: - [Global Site Data and .env](#global-site-data-and-env) - [Template Languages Used](#template-languages-used) - [Layout Hierarchy and Features](#layout-hierarchy-and-features) - [Expected Frontmatter](#expected-frontmatter) - [Permalink Style](#permalink-style) - [Asset Handling](#asset-handling) - [Linting](#linting) - [Sass Framework](#sass-framework) - [Anchor links](#anchor-links) - [Sitemap](#sitemap) - [RSS Feed](#rss-feed) - [Prism Syntax Highlighting](#prism-syntax-highlighting) - [.eleventy.js Config Features](#eleventyjs-config-features) - [VSCode Tips](#vscode-tips) ## Template Languages Used Page templates are created as Nunjucks (`.njk`), and feature are added that expect Markdown for most page content. ## Layout Hierarchy and Features There are two layouts and one partial included. **New in v1.1.0** - layouts are customized to be located in `src/_layouts`. - `_layouts/base.njk` includes the standard HTML boilerplate including meta and "og" tags in `<head>`. - `_layouts/page.njk` includes the `sitenav.njk` partial and chains up to `base` The `src/index.njk` template chains to the `base` layout and includes a loop that will create "cards" for everything in `collections.pages`. ## Expected Frontmatter There are only two fields expected: - `title` - essentially required, by default is used in the page `<title>`, and in the layout "hero". - `description` - optional, by default appears below the title for the `page` template and is used as for the "description" meta tag. > If you want typed front matter, consider my plugin for [collection schemas](https://www.npmjs.com/package/@11tyrocks/eleventy-plugin-collection-schemas) ## Permalink Style The default setup expects content - using any template language - within `pages/`. The `pages.json` in that directory includes a `permalink` setting so that the file name is used directly to prevent 'pages' being the base of the URL. You can [override permalinks per file](https://www.11ty.dev/docs/permalinks/). ## Asset Handling In the `.eleventy.js` config, there are included "pass-throughs" for an `img/` directory as well as `favicon.png`. You can replace the included favicon, and create an `img` directory or remove the `addPassthroughCopy` if you do not have need of images. Creating an `img` directory and keeping the pass-through directive will make images available at `/img/[image-file-path]` relative to the site root. ## Linting A `prettier` config is included, with the only update being `printWidth: 100`. ## Sass Framework Review the [styling documentation](https://5t3ph.github.io/html-sass-jumpstart/) for the included minimal Sass framework, particularly the theme variables, to quickly customize the starter. The only notable differences are: 1. `sitenav` - adjust the styles for the navigation header that appears on pages 1. `tdbc-anchor` - styles for the `#` anchor that appears next to page headings ([or turn that feature off](#anchor-links)) can be adjusted in `sass/_utilities` 1. Additional `article`-scoped styling for typography as it appears on `pages` 1. A theme for the [`prism` syntax highlighting](#prism-syntax-highlighting) for code blocks. You can adjust or replace the theme in `sass/_prism`. Additionally, the Sass in this starter is processed using LightningCSS by way of my plugin: [@11tyrocks/eleventy-plugin-sass-lightningcss](https://www.npmjs.com/package/@11tyrocks/eleventy-plugin-sass-lightningcss). This affords you access to some super modern CSS features, if you choose to use them. ## Anchor Links Anchor links next to headings throughout Markdown content are generated by an add-on plugin for `markdownIt`. This feature can be adjusted or removed in the `.eleventy.js` config file. ## Generated Features ### Sitemap A `sitemap.xml` is generated from all available content. To exclude non-page or non-public content from the sitemap, include `eleventyExcludeFromCollections: true` in frontmatter, or [create a custom filter](https://www.11ty.dev/docs/collections/#advanced-custom-filtering-and-sorting). ### RSS Feed An RSS feed is included, and output at `[siteurl]/feed/feed.xml`. If publishing from Netlify, the included `netlify.toml` file will create a redirect so that the feed becomes available at `[siteurl]/feed`. ## Prism Syntax Highlighting Syntax highlighting of inline or code blocks found within Markdown content is provided by Prism via `@11ty/eleventy-plugin-syntaxhighlight`. You can change the theme used in `sass/_prism.scss`. Or, remove the plugin if you are not in need of code highlighting. ## .eleventy.js Config Features ### Overrides - **Input directory**: `src` - **Output directory**: `public` - **Layout directory**: `_layouts` Also, `markdownLibrary` is extended to add the `markdownItAnchor` plugin for [anchor links](#anchor-links). ### Shortcode: `year` Returns the current `YYYY` year, used by the footer copyright. ### Filter: `slug` Makes the default `slug` function more strict to ensure things like excluding emojis and enforcing lowercase. ## VSCode Tips ### Nunjucks If you haven't previously worked with Nunjucks, you will want a syntax highlighting extension: [Nunjucks](https://marketplace.visualstudio.com/items?itemName=ronnidc.nunjucks) In addition, you may want to ensure Emmet works on `.njk` files by updating/adding the following in the `settings.json`: ```json "emmet.includeLanguages": { "nunjucks": "html", }, ``` ### Formatting As noted previously, a `prettier` config is included, and you may want to get the Prettier extension and update your VSCode settings to "Format on Save". However, to format template files Prettier doesn't recognize like `.njk`, you can update the "Language Mode" on the currently open file from "Nunjucks" (or other current templating language) to "HTML" to allow formatting to be applied. Then, flip it back to re-allow the syntax highlighting if needed. This is located in the VSCode bottom toolbar near the right-hand side and will display the value of the current file's detected language. Click the name to open the selector. --> On values 2024-04-08T00:00:00Z https://another.rodeo/values/ <p>One crisp spring morning in May 1969, a soft-spoken, mild-mannered 41-year-old sat down in front of the United States Senate Subcommittee on Communications and quietly took on the Nixon administration.</p> <p>Nixon wanted to gut funding for public television and the Corporation for Public Broadcasting. In his eyes, and in the eyes of many conservatives at the time, public TV was an expensive government overreach, a waste of taxpayer dollars, and a hotbed of liberal and progressive indoctrination.</p> <p>Against that backdrop, this subdued man spoke to the US Senate, delivering an impassioned and heartfelt case for the importance of television programming that nurtured, that led with empathy, and created smarter, more well-rounded people.</p> <p>This was not a winning pitch for the Senate Subcommittee on Communications. The  heartfelt plea was met with skepticism, the passion with derision. Arguments were skewered. Entreaties ignored.</p> <p>This quiet man did not waver, though, and eventually enough of the committee — and enough of the public — saw things as he saw them. The votes were there, and no matter what Nixon wanted, public television funding would stay.</p> <p>That is, of course, the story of how Fred Rogers took on the President of the United States, stood by his convictions, and saved public television — and “Mr Rogers Neighborhood” — for the next three decades.</p> <p>Later the same year Rogers again stood up with quiet conviction against powerful forces when he invited Officer Clemmons — a black man — to <a href="https://www.youtube.com/watch?v=v4recJ6qXyk">soak his feet in a wading pool on a hot day</a>. TV itself was almost completely segregated in 1969 —  outside of comedy/variety shows, about the only diverse cast you’d find was on Rogers’ PBS neighbors on Sesame Street — and swimming pools across the country were still segregated. Racial tensions in general were running high. Yet here was Fred Rogers, dipping his toes in a pool with a Black man. His critics said it was inappropriate and divisive. Rogers did not care, and he did not falter.</p> <h3 id="choices" tabindex="-1">Choices<a class="tdbc-anchor" href="https://another.rodeo/values/#choices" aria-hidden="true">#</a></h3> <p>The point here is not to extol the virtues of Fred Rogers. There were many, and plenty of folks have done a great job of talking about them. They’re right. No, the point here is to talk about what Rogers knowingly gave up in his unflinching commitment to his values.</p> <p>He gave up a fortune in lucrative merchandising and merchandising deals in order to preserve the integrity and authenticity of his program over making a fortune in licensing and merchandising deals.</p> <p>He weathered a lifetime of whisper campaigns full of baseless accusations and character assassinations, turning the other cheek to his detractors and leaving their foul rumors unaddressed. He acted as he believed, guided by the power of kindness, forgiveness and grace.</p> <p>He struggled through his life with his own mental health, depression, and anxiety. He grappled with the weight of his work and buckled under the load of constant emotional labor, caring for so many others.</p> <p>Fred Rogers understood this well: for everything we value — for anything we value — there is something else we are choosing not to value, whether we’re aware of it or not. There are trade-offs and compromises. So it is for all of us.</p> <p>What we care about costs us.</p> <p>If we value a quiet, simple life, we’re not optimizing for material possessions, or a rich and busy social schedule. We may be de-prioritizing connection and community, or wealth we could have pursued.</p> <p>And if we optimize for connections and relationships or success and achievement, we may have a life full of cocktail mixers and lively conversation, but our personal lives are likely to be anything but quiet and simple.</p> <p>These things aren’t binary. Most of us fumble along somewhere in the middle, without truly optimizing for any one particular thing, or we flip-flop between valuing one thing and then another.</p> <p>Still, as we consider what we truly believe in and truly care about, there is also value in considering what we don’t, and why.</p> <h3 id="which-brings-us-to-corporate-values" tabindex="-1">Which brings us to corporate values<a class="tdbc-anchor" href="https://another.rodeo/values/#which-brings-us-to-corporate-values" aria-hidden="true">#</a></h3> <p>Corporate values. Oh boy. Every company has them, and most of them are terrible.  Superficial. Hypocritical. Hollow. You know it, I know it, most likely the corporation knows it, too.</p> <p>Most corporations, just like most people, don’t really think through the choices they’re deprioritizing when they choose their values, which is how we get hollow and meaningless values.</p> <p>There are <a href="https://blog.hubspot.com/marketing/company-values">endless</a> <a href="https://www.indeed.com/hire/c/info/company-values">empty</a> <a href="https://www.wordstream.com/blog/ws/2021/06/09/company-core-values">lists</a> of <a href="https://builtin.com/company-culture/company-core-values-examples">corporate</a> <a href="https://www.hotjar.com/blog/company-values/">values</a> you can pick and choose from and have ready-made corporate values, without all the messy reflection, introspection, or thinking about the tradeoffs inherent in optimizing for any given value.</p> <p>“Integrity,” for example, consistently tops the list of most common corporate core values. Companies tout their honesty, transparency, and desire to do the right thing, even when it's difficult or inconvenient. But integrity is inherently at odds with the true number one goal of nearly every corporation over the past 40 years or more: <a href="https://www.forbes.com/sites/stevedenning/2014/06/17/why-the-worlds-dumbest-idea-is-finally-dying/?sh=5ed3f61f104e">maximizing shareholder value</a>.</p> <p>It’s not even a matter of illegality or unethical behavior. True integrity means telling customers honestly that maybe your product isn’t the right product for them. It means standing behind a product even when doing so might be very, very costly. It means being transparent about those things that drive down shareholder value.</p> <p>Fred Rogers made a choice to value integrity over a fortune he could have made. Few corporations would do the same, and many would argue that they <em>shouldn’t,</em> that corporations should optimize for profit over all else.</p> <p>Google’s “Don’t be Evil” mantra remains one of the most famous corporate core values ever. In their 2004 IPO letter, Google founders Larry Page and Sergey Brin recognized the tradeoff inherent in the value, saying “We believe strongly that in the long term, we will be better served—as shareholders and in all other ways—by a company that does good things for the world <em>even if we forgo some short term gains</em>” (Emphasis mine).</p> <p>Over time, however, it became clear that pursuing and following “Don’t be Evil” would mean giving up <a href="https://longreads.com/2019/09/05/how-google-discovered-the-value-of-surveillance/">wildly profitable surveillance capitalism</a>, <a href="https://www.bbc.com/news/business-55357340">anti-competitive behaviors</a>, and <a href="https://www.nytimes.com/2022/03/18/technology/google-discrimination-suit-black-employees.html">discriminatory</a> and <a href="https://fortune.com/2023/08/03/union-accuses-google-of-retaliating-against-workers-for-organizing/">retaliatory</a> labor practices, among other problems. Google initially set a high bar, but in 2018 they dropped “Don’t be Evil” from their core values in favor of the more ambiguous and anodyne “Do the right thing”.</p> <p>Corporate values tend to ring hollow because we can see the company clearly optimizing for something other than their stated value.  Starbucks, for example, says it strives to “[Create]  a Culture of Warmth and Belonging, where Everyone is Welcome” yet it installs <a href="https://www.reddit.com/r/HostileArchitecture/comments/or9zlt/new_chairs_in_starbucks_specifically_designed_so/">hostile architecture</a>, <a href="https://www.cnn.com/2022/06/10/business-food/howard-schultz-starbucks-bathrooms/index.html">closes restrooms</a>, and even <a href="https://www.nbcbayarea.com/news/local/why-are-electrical-outlets-covered-at-starbucks/3350970/">removes or covers electrical outlets</a>, all in an effort  to deter people from staying too long in that warm space where everyone is welcome. And <a href="https://www.nytimes.com/2023/07/21/opinion/starbucks-union-strikes-labor-movement.html">ask any union organizer how welcome they were in Starbucks’ culture of warmth and belonging</a>.</p> <p>Similarly, Amazon’s stated value of “Customer Obsession” appears increasingly at odds with an ever more <a href="https://www.theatlantic.com/technology/archive/2023/09/amazon-shopping-experience-decline/675472/">frustrating slog</a> through page after page full of <a href="https://nymag.com/intelligencer/2023/01/why-does-it-feel-like-amazon-is-making-itself-worse.html">junk products</a>, many of which may be actually <a href="https://www.cnn.com/2021/07/15/tech/cpsc-sues-amazon/index.html">dangerous and harmful</a> to those same customers Amazon claims to be obsessing over.</p> <p>Can a profit-driven corporation manage to create values that ring true, understand the trade-offs, and follow them anyway? Sure. Patagonia is one great example. They’ve consistently sacrificed profit in favor of sustainability and fair labor practices. They’ve foregone traditional marketing in favor of authenticity and transparency. They’ve encouraged customers to consider waste and environmental impact, even if it meant fewer sales. Sounds a bit like Fred Rogers.</p> <p>But most companies fail to live up to their stated values. In many cases, their values never meant much in the first place – they were probably put together by a small team from marketing or HR and never reflect the true organizational culture or interests of leadership.</p> <p>Other times the company has the best intentions when they post their values, but they fall down when facing financial pressures and managers trying to make their numbers. In other words, the company wasn’t really willing to accept what they would give up for their values.</p> <h3 id="this-i-believe" tabindex="-1">This I Believe<a class="tdbc-anchor" href="https://another.rodeo/values/#this-i-believe" aria-hidden="true">#</a></h3> <p>In 1951, right around the time Rogers was getting his degree in child psychology, legendary journalist Edward R. Murrow and the CBS radio network began airing a short, five-minute program called “This I Believe,” in which both famous people and people who weren’t famous at all would write essays about their values and what they believed in. The show became a cultural phenomenon in the 50s and has been revived multiple times since.</p> <p>One could listen to famed science fiction writer Robert Heinlein talk about his belief in <a href="https://thisibelieve.org/essay/16630/">in the virtues of communities and “Our Noble, Essential Decency</a>, Margaret Sanger’s belief that <a href="https://thisibelieve.org/essay/16953/">all children should be wanted before they are conceived</a>, or Oscar and Esther Hirschmann, a New York City couple whose biggest claim to fame was being married to one another for 30 years, as they explained how they believed <a href="https://thisibelieve.org/essay/16602/">their love for one another was their key to loving and understanding their fellow citizens</a>.</p> <p>The appeal is clear and perennial: At its best “This I Believe” segments are not stories of people crowing about their beliefs or patting themselves on the back for their own empty platitudes. They are stories of people doing the work of examining what they believe with a sharp and analytical eye, successfully distilling down to the essence of their core beliefs, then showing the world their work.</p> <p>We could use a bit more of that.</p> <p>We can’t all be Fred Rogers, as individuals or as companies, unfailingly, forever following our convictions. We have foibles and missteps. Things go wrong.</p> <p>Even if we recognize we may fall short, we can do better, as individuals and as companies, as we contemplate our values. We can do is think harder about what we truly believe in and what we’re willing to forgo to believe in those things. We can be transparent and honest with both ourselves and others about what those trade-offs look like to us, so that our values do not sound hollow and hypocritical.</p> <p>Do the work. Show the work. Stand by the work.</p> <p>This I believe.</p> We’ve got to make the damn websites work 2024-04-16T00:00:00Z https://another.rodeo/make-the-damn-web-sites-work/ <p>When leaded gasoline was introduced in the early 1920s, it was a real innovation. Every engine suddenly ran better, performed better and lasted longer. Consumers rushed to it, and for decades leaded gas was the gold standard. Then we learned more about the harmful effects of lead and lead pollution. By the mid-1960s we knew it was terrible stuff, dangerous to the public health, and still it wasn’t entirely phased out in the US until 1996.</p> <p>Similarly, asbestos was seen as a breakthrough innovation when it was introduced. This stuff was <em>amazing</em> -- fire-resistant, an excellent insulator, durable and cheap. We used it everywhere in construction through most of the 20th century. It took 35 years from the first Surgeon General warning about the stuff until the EPA finally banned the stuff in 1989.</p> <p>On the web today, we’re living in the age of leaded gasoline and asbestos. We’ve introduced innovation after innovation, disruption after disruption, but the thing we’ve disrupted most may be the web itself. Usability is at an all-time low. Sites are painfully slow. Basic functionality baked into the HTML spec for decades is broken. We optimize for marketing or developer experience while the people using the sites are left baffled by simple content that won’t load, back buttons that won’t work, and other erratic, janky behavior.</p> <p>And that’s before we even talk about dark patterns, surveillance, disinformation, out-of-control AI energy usage and the other big, big problems caused by the web and technology in 2024.</p> <p>We have reached a point where the most disruptive, digital transformation possible — the biggest innovation around — would be to simply make the damn web sites work.</p> <p>Right now, they don’t work, at least not for the people using them.</p> <ul> <li>Loading times have slowed.</li> <li>Ads are more intrusive, often covering the content or reducing it to a postage stamp.</li> <li>Forms are clearly optimized to extract data and without any sort of testing or user research to ensure they’re usable.</li> <li>Auto-playing media annoys everyone but the companies trying to “drive engagement”</li> <li>Important content is hidden or locked away behind registration walls.</li> <li>Sites use misleading or deceptive practices to make it difficult for users to opt out, cancel or unsubscribe.</li> <li>Privacy and account settings are baffling and hidden, leaving users sharing more information than intended.</li> <li>Contact information is just gone from most web sites, so good luck if you have a problem.</li> </ul> <p>And that’s at a personal level, before we even talk about the global lack of privacy and security, broken or non-existent accessibility, misinformation and hate speech and the growing environmental impact of crypto and AI tech.</p> <p>Taken as whole it’s clear: Our never-ending focus on disruption has become destructive. We’ve coined and popularized the already overused term “enshittification” to describe our technological hostility to our own users, and yet we ply layer upon layer of AI and crypto solutions so we can monitor and manipulate those users.</p> <p>What if we didn’t?</p> <p>What if “human-centered” meant something beyond being a buzzword in the UX department? What if we put the same effort into making things work for users that we put into tracking them? What if we fixed the damn websites?</p> <p>That would be transformative.</p> <hr /> <p><em>Hat tip to GSA Commissioner Robin Carnahan, for first saying “<a href="https://develop.fedscoop.com/radio/robin-carnahan-on-gsas-role-making-the-damn-websites-work/">we’ve got to make the damn websites work</a>.”</em></p> <p><em>Photo is of a 1919 Red Cross-organized &quot;Cleanup and Health Parade&quot;, from the <a href="https://www.loc.gov/resource/anrc.03904/">Library of Congress</a>.</em></p> DSCovery 2024-07-01T00:00:00Z https://another.rodeo/dscovery/ <p>Over the past 10 years or so there's been something of a revolution in Civic Technology, as a whole bunch of firms have popped up promising to do better than traditional government contractors, who have an appalling record when it comes to building anything that works at all, let alone delivering it on time.</p> <p>The <a href="https://digitalservicescoalition.org/">Digital Services Coalition</a> followed closely behind, working to build a sense of community for this new breed of civic tech firms promise to bring modern engineering principles, agile methodology and human-centered practices to government. From an initial handful of companies involved, the DSC has grown to include nearly 50 companies.</p> <p>For someone like myself, who likes working in the civic tech space and would like to continue to do so, this presents a problem: I'd like to keep track of job openings in the field, but I can't go check 50 jobs pages all the time. I'm privileged with a lot more time on my hands than a lot of folks, but ain't nobody got time for all that.</p> <p>So I thought I should build the thing I wish to see in this world, and created <a href="https://dscovery.fly.dev/">DSCovery</a> to bring those job posts to me, and to anyone else who may be interested in them.</p> <p>DSCovery is a not-particularly-complex Django/Python application that goes out to careers pages, retrieves new job posts from across the DSC organizationss and puts them all conveniently in one place.</p> <p>As of today (July 1) it collects jobs from the following companies:</p> <ol> <li>540</li> <li>Ad Hoc</li> <li>Agile Six</li> <li>Analytica</li> <li>Acquia</li> <li>Archesys</li> <li>AWL (All Women Leadership)</li> <li>Bixal</li> <li>Bloom Works</li> <li>BlueLabs</li> <li>Bracari</li> <li>Capital Technology Group</li> <li>Civic Actions</li> <li>Clarity Innovations</li> <li>Coforma</li> <li>Corbalt</li> <li>Exygy</li> <li>Fearless</li> <li>Metrostrar</li> <li>MO Studio</li> <li>Nava</li> <li>Oddball</li> <li>Pluribus Digital</li> <li>Raft</li> <li>Simple</li> <li>Softrams</li> <li>Skylight</li> <li>Skyward</li> <li>Truss</li> <li>Verdance</li> </ol> <p>I should note that any company's presence does not necessarily constitute an endorsement. I want to believe all the DSC firms are highly mission-driven and human-centered, but I also know there is a lot of variance in how different DSC firms approach the work. When interviewing, <a href="https://another.rodeo/employer-questions/">you should still ask smart questions</a> to determine if any of these companies are the right fit for you.</p> <p>There are also a lot of companies I'm not currently importing jobs from, and some of them are very good companies with fantastic people. In most cases, that's simply because they didn't have any openings and so I wasn't sure how to retrieve their posts. I'll be adding more of these to the mix over time, but for now, you won't find them:</p> <ul> <li>Blue Tiger</li> <li>Coa</li> <li>Cognitive</li> <li>Element</li> <li>Flexion</li> <li>Focus</li> <li>For People</li> <li>Friends from the City</li> <li>Kind</li> <li>Mediabarn</li> <li>Mobomo</li> <li>Simon</li> <li>Snowbird</li> <li>Valiant Solutions</li> <li>Wheelhouse</li> </ul> <h3 id="whats-next" tabindex="-1">What's next?<a class="tdbc-anchor" href="https://another.rodeo/dscovery/#whats-next" aria-hidden="true">#</a></h3> <p>One of the things I learned as I put this together is that there are some really great civic tech firms that have decided, for whatever reason, to not join the DSC. I'll be adding some of them, too, starting with more firms in the <a href="https://www.digitalwosballiance.org/">Digital Women-Owned Small Business Alliance</a>, which has considerable overlap with the DSC.</p> <p>I'm also planning on introducing some methods to filter results by practice, and perhaps some custom user-centered views.</p> <p>I'm also thinking about how I might pull in some job details, particularly salary info.</p> <p>If you have thoughts on what you'd like to see, drop me a note in <a href="https://github.com/tBaxter/dscovery/issues/">the repo issues</a>.</p> <h3 id="why-did-i-do-it" tabindex="-1">Why did I do it?<a class="tdbc-anchor" href="https://another.rodeo/dscovery/#why-did-i-do-it" aria-hidden="true">#</a></h3> <p>Because I wanted it to exist, thought it might help other people, and nobody else was doing it. Story of my life.</p> <h3 id="what-if-something-is-broken" tabindex="-1">What if something is broken?<a class="tdbc-anchor" href="https://another.rodeo/dscovery/#what-if-something-is-broken" aria-hidden="true">#</a></h3> <p>Don't be surprised. This was a three-day project by a single person, and there will certainly be things that could be better. If you see something drop a note in <a href="https://github.com/tBaxter/dscovery/issues/">the repo issues</a>.</p> <h3 id="where-is-it" tabindex="-1">Where is it?<a class="tdbc-anchor" href="https://another.rodeo/dscovery/#where-is-it" aria-hidden="true">#</a></h3> <ul> <li><a href="https://dscovery.fly.dev/">The site</a></li> <li><a href="https://github.com/tBaxter/dscovery">The repo</a></li> </ul> Trek 2100 2024-07-18T00:00:00Z https://another.rodeo/trek-2100/ <p>It's been awhile since I've written about one of my bike projects, yet somehow the house keeps filling up with them. This one's been with me since last October and I'm just now getting around to writing it up. The backlog is real, y'all.</p> <p>Anyways, sometime last summer I got to thinking: I love these old steel bikes, but why not try something a bit newer? It might be nice to have a featherweight around.</p> <p>I'd barely had the thought when this Trek 2100 turned up on my local marketplace, with an asking price of 80 bucks. How could I not nibble?</p> <p>For those who don't know, the 2100/2300/2500 series was among Trek's earliest forays into carbon fiber in the early 90s, with CF main tubes bonded to aluminum lugs and an aluminum rear triangle via industrial adhesive. Based on the colors and graphics <a href="http://www.vintage-trek.com/images/trek/91/1991TrekCatalog.pdf">this one appears to be a 1991 model</a>.</p> <p>Over time similarly bonded bikes from that era have developed a pretty mixed reputation, with complaints about the bonding failing at the lugs. It may just be my imagination, but from my research it appeared that the bonded Treks were more highly regarded when new and appear to hold up well. Or maybe I'm just not smart enough to listen to the ominous warnings.</p> <p>Either way, I went to look at it, haggled a bit and brought it home for $60. A steal. And I figured that for that price even if the frame was trash I'd come out OK on the components.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/as-purchased.jpeg" alt="It looked a bit worn and unloved, but not bad at all." /> <figcaption>It looked a bit worn and unloved, but not bad at all.</figcaption> </figure> <p>As it turns out, the frame was pretty much flawless -- absolutely amazing condition, with no signs of oxidation, damage or bonding failure. There was barely a scratch or scuff to be found.</p> <p>Overall, most of the bike wasn't in bad shape, although some failing grip tape and a sad sack Walmart saddle let it down, and there was no getting around the reality that a lot of the parts were well-worn early 90s tech.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/front.jpeg" alt="From the front, a bit of grime, Sakae stem, Modolo 'ergo' bars and decent RX100 brakes. The ancient ride computer had to go." /> <figcaption>From the front, a bit of grime, Sakae stem, Modolo 'ergo' bars and decent RX100 brakes. The ancient ride computer had to go.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/hub.jpeg" alt="A closer look at the hub shows more of the same: decent components, a lot of grime, and interesting splatter paint." /> <figcaption>A closer look at the hub shows more of the same: decent components, a lot of grime, and interesting splatter paint.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/cf.jpeg" alt="That's how you know it's carbon fiber. And a genuine US-made Trek." /> <figcaption>That's how you know it's carbon fiber. And a genuine US-made Trek.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/bottle-bosses.jpeg" alt="The water bottle bosses are interesting, too." /> <figcaption>The water bottle bosses are interesting, too.</figcaption> </figure> <p>So, what did I do with it?</p> <p>Well, I'll tell you what I didn't do... take enough pictures of the rebuild. But that said:</p> <ul> <li>I built up a new wheelset with DT Swiss hubs and rims and butted spokes, so I could move to a wide-range 11-speed drivetrain, rather than the original narrow range 7-speed.</li> <li>That necessitated changing to a long-cage 11-speed derailleur, too I found a nice Ultegra derailleur for it.</li> <li>Up front I needed new, compatible chainrings. I went with 50/34, married to a Shimano 600/Ultegra crankset I had laying around. I think I'll go to something with outboard bearings soon, though.</li> <li>Shifting was moved from the downtube to Microshift bar-end, indexed for 11 speeds. I like bar-ends, but on this bike I think I might actually switch to brifters soon, just for a change.</li> <li>Seat is a Selle Italia.</li> <li>Bars are Soma Highway Ones (a fave) mated to a Nitto stem, but I think I may go back to the original Sakae/Modelo combo just of the period-correct vibe.</li> </ul> <p>Final weight comes in just shy of 19 pounds. Not bad! I'm definitely not sure where I could skim too much more off without going deep into carbon parts. Which I may do someday. Or not.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/2100.jpeg" alt="Done. For now." /> <figcaption>Done. For now.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/rear-der.jpeg" alt="It goes to 11." /> <figcaption>It goes to 11.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/brakes.jpeg" alt="The original RX100 dual-pivot rim brakes are more than capable. The 'carbon fiber' brake pads just made me smile." /> <figcaption>The original RX100 dual-pivot rim brakes are more than capable. The 'carbon fiber' brake pads just made me smile.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/clean.jpeg" alt="Very clean and tidy." /> <figcaption>Very clean and tidy.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/stairs.jpeg" alt="One more, just 'cause I like the pic." /> <figcaption>One more, just 'cause I like the pic.</figcaption> </figure> <p>So how is it to ride? Lovely. I was worried it would be a jittery beast, but it's not. Not at all.</p> <p>It actually rides really, really well, especially given the stiffness of the frame and the narrow 25mm tires. It's by far the fastest bike I have, regularly coming in at a couple of MPH faster than anything else I'm riding. I mean, I'm still old and slow, but the bike is old and fast. It's also a monster when climbing. It just goes and goes.</p> <p>I like it quite a bit.</p> <hr /> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> Tasks 2024-09-04T00:00:00Z https://another.rodeo/tasks/ <p>The whole thing started on the <a href="https://midwestdevchat.slack.com/">Midwest Dev Chat Slack</a>, when someone posted a screenshot from their work Slack that read:</p> <blockquote> <p>The fact that we only have &quot;Herculean task&quot; and &quot;Sisyphean task&quot; feels so limiting. So here's a few more tasks for your repertoire:</p> </blockquote> <ul> <li><strong>Icarian Task:</strong> When you have a task you know is going to fail anyways, so why not have some fun with it before it all comes crashing down.</li> <li><strong>Cassandrean Task:</strong> When you have to deal with people you <em>know</em> won't listen to you, despite having accurate information, and having to watch them fumble about when you told them the solution from the start.</li> <li><strong>Odyssean Task:</strong> You'll complete but it will take 20 times longer than it should and involve multiple side quests and mini-adventures.</li> </ul> <p>From those first screenshots it took off, with the wits on Midwest Dev Chat adding more:</p> <ul> <li><strong>Achillean Task:</strong> A task shipped with known issue.</li> <li><strong>Escherian Task:</strong> Looks achievable until you examine the details. (Not from mythology, but still pretty great.)</li> <li><strong>Hydraeous Task:</strong> The task you complete spawns two new tasks.</li> <li><strong>Theseusian Task:</strong> Scope creeps so many times, and so far, that philosophers spend centuries arguing if any of the original scope remains.</li> </ul> <p>I liked these an awful lot, and I thought the smart folks on the <a href="https://randsinrepose.com/welcome-to-rands-leadership-slack/">Rands Leadership Slack</a> would, too, so I posted them there, referencing the original MWDC posts. While I was already wishing I could take credit for the first batch, the Rands folks just went bananapants with the idea. This is the brilliance of those folks, not me, and all accolades are due them. Only one of these is my own original thought. The rest come from the minds of smarter, more creative (and apparently better read) people...</p> <ul> <li><strong>Atlassian Task:</strong> you’re writing all the Jira tickets.</li> <li><strong>Chronean Task:</strong> Didn't I already do this task?</li> <li><strong>Damoclean Task:</strong> A task you enjoy doing, but there is always this underlying sense of foreboding and anxiety while doing so.</li> <li><strong>Diogenian Task:</strong> absolute dog's work, but better than talking to people</li> <li><strong>Dionysian Task:</strong> Who cares, it's Friday.</li> <li><strong>Epicurian Task:</strong> I just like doing it this way.</li> <li><strong>Gordian Task:</strong> Instead of doing the task, you delete the ticket or maybe the whole epic.</li> <li><strong>Gorgon Task:</strong> Whenever you approach someone about your task, they stonewall you.</li> <li><strong>Kronusian Task:</strong> Driving away people that threaten your power and position.</li> <li><strong>Minotian Task:</strong> Just a lot of bull.</li> <li><strong>Midasean Task:</strong> a very lucrative endeavour, but might leave you feeling hungry for more substantive work.</li> <li><strong>Narcissian Task:</strong> Just make it pretty.</li> <li><strong>Orphean Task:</strong> you have to write this entire service in isolation, but the moment you run one integration test the other services will block you.</li> <li><strong>Pandorean Task:</strong> When you have a task to do that you know will unleash chaos on the world when complete.</li> <li><strong>Poseidan Task:</strong> When you are drowning in the work.</li> <li><strong>Penelopean Task:</strong> same as an odyssean task but nobody talks about it because it is a woman doing it.</li> <li><strong>Promethean Task:</strong> Do some hero work for your team and then get picked apart by upper management for all eternity.</li> <li><strong>Siren Task:</strong> Your sole task is to distract others from doing their tasks.</li> <li><strong>Trojan Task:</strong> I'm only doing this task so I can sneak this other thing into the next release.</li> </ul> <p>So there you go, there they are in all their glory, with a few small minor edits. I hope you enjoy them as much as I did.</p> <p>I did leave a few off the list here if they duplicated others, if I am not smart enough to understand the reference, or if I just flat missed one. Forgive me.</p> <hr /> <p>Artwork: &quot;Sisyphus&quot; by Jeffrey Hummel</p> <p>Contributors (who wished to be identified) include Blaise Vignon, Caleb Huitt, Steven Harrison and Michael Van Nieuwenhoven. Thank you all, smart and funny people!</p> <p>If you submitted any of these and would like to be credited, please <a href="https://github.com/tBaxter/another-rodeo/issues">let me know via a Github Issue</a>. Or if you know my email address, just shoot me an email. That's fine, too. Be sure to tell me <em>how</em> you would like to be credited.</p> Another one? 2024-10-16T00:00:00Z https://another.rodeo/monark-2/ <p>Within days of finishing up the <a href="https://another.rodeo/monark-road-king">Monark/Road King resto-mod</a> another rough and down-on-its-luck old cruiser popped up and I couldn't resist. I mean, for $25 it was this or a light lunch at Chipotle. So I bought the bike.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/rocket/as-found.jpeg" alt="As I found it." /> <figcaption>As I found it.</figcaption> </figure><p></p> <p>This one is also a Monark-made frame (a twin to the last one) but without any badges I don't know if it was originally another Road King, or maybe a Monark Rocket, or some other badge-engineered Monark. I just know it's the same frame, and from the same era: mid-to-late 40s.</p> <p>And it is definitely in rough shape, maybe worse than the last one, with a bad home paint job and plenty of rust.</p> <p>I believe I'll either build this one up as more of a rat rod, or just a nice classic cruiser. Should be fun.</p> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> Road King 2024-10-16T00:00:00Z https://another.rodeo/monark-road-king/ <p>Let's start this story in the middle of the 20th century, when consumer confidence was high, unions were strong, and American factories were working overtime to satisfy consumer demand and new-found discretionary spending.</p> <p>Against that backdrop a strange sort of amalgamation of hardware/auto parts/durable goods store was common in even the smallest towns in America. Western Auto and Firestone may have been best known, for these types of stores, but they were far from the only ones.</p> <figure> <img src="https://kubrick.htvapps.com/htv-prod-media.s3.amazonaws.com/images/westernautosign-1529943950.png" /> <figcaption>Obligatory photo of the historic Western Auto building in Kansas City.</figcaption> </figure> <p>At the time, the <a href="https://en.wikipedia.org/wiki/Seiberling_Rubber_Company">Sieberling Rubber Company</a> was one of the biggest tire companies in the US, and just like Firestone and other tire makers, they ran a chain of these odd retail stores, selling their tires, car batteries and other various things... including bicycles, which they sold under their &quot;Road King&quot; brand.</p> <p>And since Sieberling wasn't in the business of making bicycles, they contracted that work out to several different companies that once dominated US bicycle manufacturing.</p> <p>So that's how the now largely forgotten <a href="https://www.madeinchicagomuseum.com/single-post/monark-silver-king/">Monark Silver King</a> bicycle company of Chicago found itself contracted to build this bike:</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/as-purchased.jpeg" alt="1948 Monark-made Road King bicycle." /> <figcaption>1948 Monark-made Road King bicycle.</figcaption> </figure> <p>Which found its way to me recently.</p> <p>Monark ceased to exist after 1957, following a buy-out by Huffman/Huffy. Sieberling Rubber made it to the mid-60s before being gobbled up by Firestone, and then later becoming part of the multinational Bridgestone corporation.</p> <p>I started out buying a classic cruiser, I got a lesson in America's 20th century manufacturing boom and bust. The bicycle is going to get a lesson in how bicycle technology has progressed over the past 75 years.</p> <p>But, about that bike: I had been wanting to build a classic &quot;<a href="https://www.turbochaos.com/cars/what-is-a-klunker-bike/">Klunker</a>&quot; for awhile. When this one turned up on the local marketplace, I liked the details of the frame, so I threw out a low offer and was surprised when it was accepted. Next thing I knew I was driving a half-hour out of town to pick it up. Once I got it home I took some pics to document the &quot;before&quot; state...</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/orig-cockpit.jpeg" alt="At some point long ago it had been repainted. Possibly with house paint. Also, I've never seen a stem quite like that one before." /> <figcaption>At some point long ago it had been repainted. Possibly with house paint. Also, I've never seen a stem quite like that one before.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/drivetrain.jpeg" alt="I believe the drivetrain was all original, possibly even down to the pedals. I do know this: our grandparents mashed some big gears back then." /> <figcaption>I believe the drivetrain was all original, possibly even down to the pedals. I do know this: our grandparents mashed some big gears back then.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/seatpost.jpeg" alt="I really like the filet-brazed frame and the unusual seatstay and chainstay arrangement. I was less thrilled to discover a possible crack by the seat clamp." /> <figcaption>I really like the filet-brazed frame and the unusual seatstay and chainstay arrangement. I was less thrilled to discover a possible crack by the seat clamp.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/mesinger.jpeg" alt="I don't think I'll be keeping this old Mesinger seat. You can get a better view of the neat seatstay arrangement, though." /> <figcaption>I don't think I'll be keeping this old Mesinger seat. You can get a better view of the neat seatstay arrangement, though.</figcaption> </figure> <p>I pretty much immediately began stripping it down, and was really pleased with how easy that went. I was prepared for every bolt to be stripped, a rusted-in-place seat post and stem, and all sorts of other horrors. But really it came apart with no problems, just a little penetrating oil and patience.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/stripped.jpeg" alt="Stripped down, it weighed in at 8 pounds. No featherweight, to be sure, but only a few ounces more than a modern aluminum mountain bike frame I won't shame by name." /> <figcaption>Stripped down, it weighed in at 8 pounds. No featherweight, to be sure, but only a few ounces more than a modern aluminum mountain bike frame I won't shame by name.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/water.jpeg" alt="When I took out the rear fender about a half-cup of trapped water came dribbling out of the frame." /> <figcaption>When I took out the rear fender about a half-cup of trapped water came dribbling out of the frame.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/coldset.jpeg" alt="Since the frame was originally built with 110mm spacing for a coaster brake hub, it was going to take a BIG cold-set to fit a modern cassette hub in there. It took a lot of patience and careful checking of alignment, but the old steel took the set well. It now sits at 135mm, ready for modern hubs." /> <figcaption>Since the frame was originally built with 110mm spacing for a coaster brake hub, it was going to take a BIG cold-set to fit a modern cassette hub in there. It took a lot of patience and careful checking of alignment, but the old steel took the set well. It now sits at 135mm, ready for modern hubs.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/testfit.jpeg" alt="Test-fitting with a spare wheel I had laying around. The string is there for double-checking alignment." /> <figcaption>Test-fitting with a spare wheel I had laying around. The string is there for double-checking alignment.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/painted.jpeg" alt="I really debated what color to paint it, but the bike kept telling me it wanted to be white. So I listened. Here it's been sprayed but still needs final wet-sanding and polishing." /> <figcaption>I really debated what color to paint it, but the bike kept telling me it wanted to be white. So I listened. Here it's been sprayed but still needs final wet-sanding and polishing.</figcaption> </figure> <p>That's as far as I made it in the first week, but parts were on the way.</p> <h3 id="august-18-polishing-modernizing-and-test-fitting" tabindex="-1">August 18: Polishing, modernizing &amp; test-fitting<a class="tdbc-anchor" href="https://another.rodeo/monark-road-king/#august-18-polishing-modernizing-and-test-fitting" aria-hidden="true">#</a></h3> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/polished.jpeg" alt="After wet-sanding and polishing, I was pretty happy with the finish." /> <figcaption>After wet-sanding and polishing, I was pretty happy with the finish.</figcaption> </figure> <p>You really can get good results from a rattle-can paint job, but it takes a <em>lot</em> of patience and work. I'm willing to work, but not always patient enough. Nevertheless, I was pretty happy overall with the paint after wet-sanding and polishing, especially considering the number of nicks and divots in the nearly 80-year-old steel. I may still give it a bit more love, but it's really looking pretty good to my eyes.</p> <p>The original headbadge also cleaned up nicely. I wish some prior owner hadn't &quot;touched up&quot; the paint, but I'm not going to try to correct it -- it can wear it's history. I just wanted to polish the grime off and bring back some shine.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/bb.jpeg" alt="Conversion kit." /> <figcaption>Conversion kit.</figcaption> </figure> <p>I put in a nice <a href="https://amzn.to/3McpS9k">bottom bracket conversion kit</a> so I can use modern three-piece cranks. I also had a <a href="https://amzn.to/3X8qWBl">strong and light Sunlite bottom bracket with chrome-moly spindle</a> in the toolkit, so that will save a few grams, too. I considered external bearings and a hollowtech crank, but I'm not sure how well they'd play with the conversion kit, and good quality square taper stuff isn't much heavier at all. Plus I have a lot of good square taper stuff laying around already.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/threadless.jpeg" alt="And another conversion kit." /> <figcaption>And another conversion kit.</figcaption> </figure> <p>This bike pulled another rabbit out of its hat up front, where I've fitted a <a href="https://www.etsy.com/listing/1526775966/old-school-bmxschwinn-conversion-headset">threadless headset</a>. Basically, these old American frames used a head tube that's within a gnat's whisker of the modern 1 1/8 standard, so some enterprising souls have taken machined about 0.01 inched off a modern alumninum headset and <em>voila</em> it all fits.</p> <p>I had a fork I had purchased for the build, but when I put it altogether it looked goofy. So for now I've put a parts-bin GT fork on there, and I actually kinda like it, even in the partially sanded unfinished current state.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/test.jpeg" alt="Testing bars and stem." /> <figcaption>Testing bars and stem.</figcaption> </figure> <p>Since I was throwing some parts-bin bits at it, I added a stem and some bars. Not exactly what I'd envisioned, but I like them for now and the price was right.</p> <h3 id="sept-22-wheels" tabindex="-1">Sept 22: Wheels!<a class="tdbc-anchor" href="https://another.rodeo/monark-road-king/#sept-22-wheels" aria-hidden="true">#</a></h3> <p>I knew when I decided to paint the frame white that I was going to have to introduce some visual interest elsewhere, so I decided to make some pretty flashy wheels, starting with some <a href="https://amzn.to/3ZApOIC">red anodized SE Racing Wheels</a>.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/se_rims.jpeg" alt="Very red rims." /> <figcaption>Very red rims.</figcaption> </figure> <p>Because BMX and cruiser rims are nearly universally 36 holes, I was a little limited in my choices for 36H disc hubs, but Shimano came through with suitable <a href="https://amzn.to/4edWOdY">Deore hubs</a> for a great price. The whole thing was laced up with double-butted black spokes and chrome brass nipples. They are definitely eye-catching.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/front_rim.jpeg" alt="Lacing the front was straightforward." /> <figcaption>Lacing the front was straightforward.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/rear_rim.jpeg" alt="But lacing up a disc rear was far from straightforward. It just about broke my brain, and I had to lace it up 3 times before I finally got it right. The tape was there to help me keep track of things." /> <figcaption>But lacing up a disc rear was far from straightforward. It just about broke my brain, and I had to lace it up 3 times before I finally got it right. The tape was there to help me keep track of things.</figcaption> </figure> <p>Once they were finally tensioned and trued, I slapped some Schwalbe Billy Bonkers tires on -- probably my favorite 26&quot; tires -- and they were ready for the bike.</p> <p>Connecting a derailleur to this thing was going to require an <a href="https://amzn.to/4deXApU">old school claw hanger</a>, and it's surprisingly tough to get a decent one nowadays. A lot of them are very thin and flimsy, or even unthreaded. Next time I take apart an old bike with one, I plan to keep it, as the old ones were clearly made better. But it'll do.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/drive_side.jpeg" alt="There's a lot more happening on the drive side than Monark ever intended." /> <figcaption>There's a lot more happening on the drive side than Monark ever intended.</figcaption> </figure><p></p> <p>I dug around in the parts bins and found a little dropout spacer for the other side that I'd saved from some prior project. I wish I knew where I got it, 'cause it's pretty handy.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/dropout.jpeg" alt="Non-drive-side dropout spacer." /> <figcaption>Non-drive-side dropout spacer.</figcaption> </figure><p></p> <p>I was really surprised by how easy the disc brake conversion went. <a href="https://amzn.to/3Bbfnkt">Disc brakes</a> are surprisingly cheap, and <a href="https://amzn.to/3THrcoT">the little disc brake converstion/adapter bracket</a> worked way, way better than I expected it to, at least in this case. They don't work in a lot of cases, but on this bike they worked without much trouble. I was shocked. Everything just worked.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/brake_side.jpeg" alt="The brake side also has a lot more going on than Monark ever intended." /> <figcaption>The brake side also has a lot more going on than Monark ever intended.</figcaption> </figure><p></p> <p>Cables were managed by some little <a href="https://amzn.to/3zw5DAN">clip on guides</a> that were pretty slick.</p> <p>The seat was a bit of a hiccup, as the original post measured 21.78 mm, and nothing is that size. Nothing. So after looking fruitlessly I decided not to worry about it and just cleaned up the original as best as I could. I did have a nice <a href="https://amzn.to/4dfUqSH">Charge saddle</a> that completed the white/black/red motif.</p> <p>Most of the other stuff was left over from other projects. Pedals, cables, even the crankset, it was all just laying around, so I went ahead and built it up, at least to establish a baseline.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/first_build.jpeg" alt="Freshly built." /> <figcaption>Freshly built.</figcaption> </figure><p></p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/rear.jpeg" alt="The rear" /> <figcaption>The rear</figcaption> </figure><p></p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/front.jpeg" alt="And the front" /> <figcaption>And the front</figcaption> </figure><p></p> <p>The baseline is good. It's a fun, fun, fun bike. That said, there are some issues I need to address:</p> <ul> <li>I still want those big klunker bars, with a bit more rise.</li> <li>I need to either pick up a disc brake fork or fit some V-brakes on the front (and risk messing up that pretty red rim).</li> <li>It needs a spacer under the stem. Right now there's too much movement.</li> <li>The disc brake isn't adjusted quite right and tends to squeal.</li> <li>I don't like the derailleur I used and need to clean up a better one.</li> <li>My cabling could be a lot tidier.</li> </ul> <p>None of this stuff is particularly surprising with such an involved build, and none of it is all that hard to sort out.</p> <h3 id="october-16-sorting-it-out" tabindex="-1">October 16: Sorting it out<a class="tdbc-anchor" href="https://another.rodeo/monark-road-king/#october-16-sorting-it-out" aria-hidden="true">#</a></h3> <p>I continued tweaking and tuning and sorting it out. With a big custom build like this one, it's not surprising.</p> <p>At this point, I've taken care of most all of my to-do list above and the bike is riding much better. Probably the most visible change is the switch to some massive BMX cruiser bars. This entailed re-cabling, swapping out the shifters and brake levers, and a lot of other small changes. I'm not sure it was worth it, but they do look cool.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/bars.jpeg" alt="The complete bike, hanging out by some rocks." /> <figcaption>The complete bike, hanging out by some rocks.</figcaption> </figure><p></p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/complete-rear.jpeg" alt="A rear view of the 'finished' bike." /> <figcaption>A rear view of the 'finished' bike.</figcaption> </figure><p></p> <p>Honestly, I may revert back to the low-rise bars. I haven't decided. I'm feeling pros and cons each way.</p> <p>But regardless, I think that's about it for this bike, at least for now. Maybe after riding it a bit I'll think of something else I want to do. For now, though, I think I can call this one finished.</p> <p>That's good, because I've already bought the next one.</p> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> Engineering velocity 2024-10-17T00:00:00Z https://another.rodeo/engineering-velocity/ <p>It's a question I've heard a lot over the years, from a lot of frustrated managers and stakeholders. They can't get past it.</p> <h4><em>&quot;Seriously, why are my engineering teams so much slower than they used to be?&quot;</em></h4> <p>I get it. The frustration is palpable. A team that used to cook along now appears to be stuck in molasses. They get slower and slower, and it's confounding to everyone waiting for the next major feature to be delivered, or even just looking at a burndown chart. It can be confounding and frustrating to the team, too.</p> <p>But I'm here to tell you, the frustration is likely misplaced: Teams slowing down as they mature and grow is not only normal, it may be <em>better</em>.</p> <p>After looking at the velocity of dozens -- possibly hundreds -- of teams over the years, and how it changes over time, here are the common threads among the &quot;formerly fast&quot; teams.</p> <h3 id="they-finished-the-fast-part" tabindex="-1">They finished the fast part<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity/#they-finished-the-fast-part" aria-hidden="true">#</a></h3> <p>Everything moves a lot faster when you're a cowboy, riding breathlessly across green fields. You can shift direction on a whim, you can explore, you can strike out in bold new directions. That's fast, and it's easy. But getting from <em>something</em> to <em>something good</em> takes a lot more time and effort.</p> <p>No matter what the project, from software engineering to home renovations, smart people know that the first 80% is the easy part, and the work goes quickly. But the last part -- the sorting out and polishing -- takes much, much longer.</p> <h3 id="theyre-swimming-in-a-bigger-pond-now" tabindex="-1">They're swimming in a bigger pond now<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity/#theyre-swimming-in-a-bigger-pond-now" aria-hidden="true">#</a></h3> <p>In the early days, engineering efforts usually start off as an experiment, or perhaps a small team carefully curating their own little walled garden. But as the team matures and the codebase grows, it inevitably becomes part of a larger ecosystem. There are APIs to integrate and platforms to build on. Which means you are now part of an ecosystem. Ecosystems introduce interdependencies, and interdependencies slow things down.</p> <p>When you were a young team you could do pretty much whatever you wanted, so long as you got your homework done. Now you have to play nice with others. You have to get permissions. You have to stop to read the instructions. These things take time.</p> <h3 id="they-were-good-lets-throw-a-party" tabindex="-1">They were good. Let's throw a party.<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity/#they-were-good-lets-throw-a-party" aria-hidden="true">#</a></h3> <p>And finally, <em>success leads to slowdowns</em>. Only successful programs live to grow and mature, which means as programs grow and are seen by more people, more people have thoughts.</p> <p>Or, to put it another way, early on a team may only have to satisfy <em>an idea</em>, while later they have to satisfy <em>a whole org chart</em>. As more eyes are on the team, more demands are made.</p> <p>The team may be cranking along like the same high-efficiency machine they've always been, but more demands means more backlog. While the throughput may not change, the time to satisfy any one request may get a lot longer, which makes each individual stakeholder think the team is now slower than they used to be. They're not, they just may be slower to get to <em>your</em> request.</p> <h3 id="this-is-still-a-good-team" tabindex="-1">This is still a good team.<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity/#this-is-still-a-good-team" aria-hidden="true">#</a></h3> <p>The irony is that all those factors are positive outcomes of a successful, maturing team. They are also, notably, largely out of control of the people on the team.</p> <p>But still, most discussions around improving velocity start from the perspective of &quot;how do we get these teams to go faster.&quot; And the short answer to that is that you don't. Assuming the team is continuing to work well together, then any perceived slowdown is probably not true -- they're likely working as fast as they ever did -- and also ignoring how the team and program has matured and works in a different context now.</p> <p>So if you're a team getting hit with questions about why you've slowed down, what can you do?</p> <p><a href="https://another.rodeo/engineering-velocity-part-2/">Take a look at part two!</a></p> Engineering velocity: Part 2 2024-10-22T00:00:00Z https://another.rodeo/engineering-velocity-part-2/ <p>Last time we covered <a href="https://another.rodeo/engineering-velocity/">a lot of reasons why that once-fast team has slowed down</a>. If you haven't read that part already, you should, but to give a quick recap, those were:</p> <ul> <li><a href="https://another.rodeo/engineering-velocity/#they-finished-the-fast-part">They finished the fast part</a></li> <li><a href="https://another.rodeo/engineering-velocity/#theyre-swimming-in-a-bigger-pond-now">They're swimming in a bigger pond now</a></li> <li><a href="https://another.rodeo/engineering-velocity/#they-were-good-lets-throw-a-party">They were successful</a></li> <li><a href="https://another.rodeo/engineering-velocity/#this-is-still-a-good-team">They're still good, it's just the perceptions that have changed</a></li> </ul> <p>This time, we'll talk about what you might be able to do about it.</p> <h3 id="they-finished-the-fast-part" tabindex="-1">They finished the fast part<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity-part-2/#they-finished-the-fast-part" aria-hidden="true">#</a></h3> <p>The first 80% is always the fast part, right? It's just the <a href="https://conceptually.org/concepts/pareto-principle">Pareto Principle</a> in action: You get 80% of the benefit for 20% of the overall effort. But the rest takes 80% of the total effort -- and time. Which people notice. So the paradox is that while the team is now putting in <em>more</em> effort, people are seeing <em>less</em> output.</p> <p>Shifting how you approach demonstrating value can help here. Instead of demonstrating <em>things being delivered</em>, try to shift to demonstrating <em>problems being solved</em>.</p> <p>Early on, it's easy to show the tangibles the team is delivering. But that inevitably slows down as the project matures. Teams find themselve spending more time solving more complex problems, with less visible forward momentum.</p> <p>It's not that progress isn't happening, it's that it's not visible. Make it visible. Enlist a designer to help illustrate the problem. Have a product manager help build a timeline showing the invisible capabilities that have been delivered. Talk through the systemic issues that have been worked through. In short, shine a spotlight on the the hidden work and bring it out of the shadows.</p> <h3 id="theyre-swimming-in-a-bigger-pond-now" tabindex="-1">They're swimming in a bigger pond now<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity-part-2/#theyre-swimming-in-a-bigger-pond-now" aria-hidden="true">#</a></h3> <p>As a project matures it always seems to connect more and more to a larger ecosystem. Maybe the work gets so big it gets split across multiple teams. Maybe it becomes a platform other teams are building on. Maybe it comes to rely on a platform itself. Maybe they just have more APIs they're relying on for more features. No matter what the specifics of the story may be, the outline is the same: this work is part of a larger whole.</p> <p>Which means you now have a hand-off problem, which goes something like this:</p> <ul> <li>On November 1, Team A decides they want to do <code>small-thing</code>, so they add it to their next sprint, starting Nov 11.</li> <li>About a week in, around Nov 19, they realize they can't complete <code>small-thing</code> until Team B does <code>other-thing</code>. Team B says &quot;Hey, no problem, we'll add it to the next sprint!&quot;</li> <li>But Team B's sprint just started on the 18th, so their next one won't start until December 2.</li> <li>And then, in sprint planning, a senior engineer pipes up to say &quot;You know we can't complete <code>other-thing</code> until Team C resets the config on the thingModulator.&quot;</li> <li>So now it bounces over to Team C, who thankfully get it into their next sprint, starting December 9. They get the config change done quickly so it can get back to Team B, just in time for their December 16 sprint.</li> <li>Team B also gets the work done quickly, as promised, in time for Team A to finally do <code>small-thing</code> in their next sprint -- which is a holiday sprint starting Dec 23.</li> </ul> <p>And that's how a bunch of teams can work really hard, really quickly, and really concientiously, and yet it takes more than eight weeks to get <code>small-thing</code> done. And there's not a whole lot you can do about it.</p> <p>But you can try:</p> <ul> <li>identifying dependencies as early as possible. Long before the story is about to go into a development sprint. Track them, get them done as part of the work (and again, show and demo that work as it gets done).</li> <li>Aligning sprint start dates across teams can help. Sometimes.</li> <li>Lobby for config changes and small dependencies to be handled as they arise, either kanban-style, or by keeping some capacity within the existing sprint cycles.</li> </ul> <h3 id="they-were-successful" tabindex="-1">They were successful<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity-part-2/#they-were-successful" aria-hidden="true">#</a></h3> <p>If a project is successful, it grows. As it grows more eyes are on it, and more demands are made. This is another case where the team has to show all of the work they're doing, that includes the less-visible work, as discussed above. It also includes making their priorities very clear and public. If Stakeholder A isn't getting what he wants because all of the efforts are on Stakeholder B's initiative, everyone involved should see that trade-off.</p> <p>If a project becomes <em>really</em> successful, it might develop into a platform other applications and teams rely on. Which means they're slow by intent. Platforms optimize for reliability and stability, not speed. For a small project, application, or site, it only has to work for a small group. For a platform, it has to work for every consumer and team in the ecosystem.</p> <p>Just the layer between the platform and the application teams building on it can be a source of slowdowns. For application teams leveraging the platform, enhancements depend on the platform team implementation timeline. For the platform team every deprecation and migration is an exercise in waiting for all the application teams to upgrade -- and that happens at the pace of the slowest team.</p> <h3 id="theyre-still-good-its-just-the-perceptions-that-have-changed" tabindex="-1">They're still good, it's just the perceptions that have changed<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity-part-2/#theyre-still-good-its-just-the-perceptions-that-have-changed" aria-hidden="true">#</a></h3> <p>We've already covered how teams often fail at highlighting all the progress they're making, which in turn feeds the false perception that they're slower than they used to be.</p> <p>The irony is that false perception can actually make the team <em>truly</em> slower. It goes like this:</p> <ul> <li>Over time the team natually picks up tech debt, bugs, and hidden work.</li> <li>Like most teams, they don't do a great job of showing that work.</li> <li>People start pushing them to &quot;increase velocity.&quot;</li> <li>The team responds by prioritizing quick wins, which means they're not focused on bug fixes and work that enables more meaningful forward momentum.</li> </ul> <p>Which means they end up slower than they were before they started. It's like a company so focused on short-term earnings that they don't do the hard work of staying in business (GE is a great recent example).</p> <h3 id="show-the-work" tabindex="-1">Show the work<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity-part-2/#show-the-work" aria-hidden="true">#</a></h3> <p>If there's one takeaway here, it's that good teams usually don't get slower as they mature, they get more complex. In complex systems sometimes you go slow now because it will make you faster later. Sometimes you're not going slow at all, but people aren't seeing all that's happening. In either case, illuminate them.</p> <p>“Velocity” can mean a lot of different things depending on the context and who's throwing it around. It's like a hex, and the best defense against the dark arts is the bright light of day. So never fail to shine a light on the work.</p> <p>The big exception is platform teams, which are slow by intent, but even then, they're <em>enabling</em> application teams to be faster. Show that.</p> <p>Show the work.</p> <hr /> <p><em>Photo is reportedly of a 1930 incident where a bunch of elephants escaped a vaudeville show in New York, but I can't confirm. If anyone has a link to the story, I'd love to hear about it.</em></p> <p><em>If you'd like to read more about why platform teams may be slow, my friend Mark Headd and I once wrote quite a bit about it: The <a href="https://adhoc.team/platform-smells/">Platform Smells Playbook</a>. Mark is wicked smart.</em></p> Skipped teeth and blockchains 2024-10-24T00:00:00Z https://another.rodeo/skipped-teeth-blockchains/ <p>So I recently <a href="https://another.rodeo/monark-2/">bought an old bike</a> -- nothing new for me -- but as I was poking around on it, I realized something <em>was</em> unusual: I'd bought a skiptooth bike. I had questions.</p> <p>So first, what is a &quot;skiptooth&quot; bike? Without getting too much into bike nerdery (I do that plenty elsewhere around here) the basics are this: Modern bike chains have 1/2&quot; between their pins, but that wasn't always the case. Up until around 1950 or thereabouts, most chains used an uneven one-inch spacing, with long links alternating with short links between rollers. This was called &quot;skiptooth&quot; because the sprockets were missing one tooth in between each tooth. They skipped those.</p> <p>What? Yeah. Take a look at the picture above to visualize it, cause it just seems weird. Why not just make them all the same size?</p> <p>Because it was mimicing an earlier 1&quot; spacing standard from the 1890s or so called... wait for it... &quot;blockchain.&quot;</p> <p>The original blockchain literally had big 1&quot; steel blocks, with short linking plates between them. I believe the thinking was to limit the amount of parts that bend so it would be stronger. This didn't work nearly so well for bicycles as it did heavy machinery, but it <em>was</em> the first viable bike chain.</p> <figure class="image "> <img src="https://another.rodeo/img/writing/blockchain.jpeg" alt="An example of a blockchain as used for a bicycle. Photo from thecabe.com." /> <figcaption>An example of a blockchain as used for a bicycle. Photo from thecabe.com.</figcaption> </figure> <p>The difference, of course, between this 125-year-old tech and the modern blockchain is that a bicycle blockchain actually solved an identifiable problem.</p> <p>Blockchains were inefficient and clumsy -- some things never change -- and only lasted about 20 years or so before they were replaced by the much more flexible, quieter skip tooth, which lasted about 50 years before being replaced by the standard chain spacing we've all been using for the past 75 years.</p> <p>SkipToothChain: the next big thing.</p> <figure class="image "> <img src="https://another.rodeo/img/writing/pun-dog.jpeg" alt="" /> <figcaption></figcaption> </figure> <p>I'm not proud. After all, I did make <a href="https://dadjoke.fly.dev/">https://dadjoke.fly.dev</a>.</p> <hr /> <h3 id="further-reading" tabindex="-1">Further reading<a class="tdbc-anchor" href="https://another.rodeo/skipped-teeth-blockchains/#further-reading" aria-hidden="true">#</a></h3> <ul> <li><a href="http://www.american-vintage-bicycles.com/home/vintage-bicycle-parts/skip-tooth/">American Vintage Cycles: Skip Tooth Chains</a></li> <li><a href="https://nostalgic.net/vintage-bicycle-chain">Dave's Vintage Bicycles: Vintage Bicycle Chains</a></li> <li><a href="https://thecabe.com/forum/threads/one-inch-pitch-block-chain-available-mike-cates-ca.62886/">Thecabe.com</a></li> </ul> Backpacks 2024-11-15T00:00:00Z https://another.rodeo/backpacks/ <p>Everyone has a backpack, and everyone has stuff in their backpack.</p> <p>Sometimes your backpack has too much stuff in it, and you've got to get rid of something.</p> <p>Sometimes your backback may not have all that much in it, but that stuff is heavy and it's hard to carry around.</p> <p>Most of us are carrying some stones in our backpacks. These are heavy loads. Sometimes we carry those rocks for years. Some of us have backbacks so full of rocks nothing else fits in there. We can barely lift the pack at all, let alone carry it all.</p> <p>People will often want to give you something that was in their backpack. In some cases, that may be a gift.</p> <p>&quot;Hey, this is so cool, you think, as you tuck your new treasure carefully away in the backpack, hopefully far from the rocks.You'll be happy to carry this wonderful new thing in your backpack, and even though it's in there, the pack somehow feels lighter.</p> <p>Other times it's just another rock for you to carry around.</p> <p>You don't always get to choose what's in your backpack, but when you do... choose wisely.</p> <p>Every day, some people are carrying overloaded packs. If you can take some of their load and help them, that's good. If you can't, well, carry your own load as best you can, and maybe you can help more on down the road.</p> <p>Sometimes you just gotta put your backpack down for a minute. That's ok. Take a breather. But you can't leave it behind. There's important stuff in there.</p> <hr /> <p>Yes, this is a metaphor, one that I've belabored before, and will belabor again. It works for me. I like having it in my backpack.</p> <p>It may not work for you. You may think, this is just a different metaphor for what <a href="https://en.wikipedia.org/wiki/Spoon_theory">Spoon Theory</a> already describes. I disagree, but that's OK, I'm not asking you to carry my metaphor around if you don't want to. And I don't plan to carry your opinion of my metaphor around either.</p> <p>Carry what you need and want. Sometimes carry more, if you can, or if you want to.</p> <p>Don't be afraid to leave some rocks behind.</p> Building DSCovery 2024-11-18T00:00:00Z https://another.rodeo/building-dscovery/ <p>I was asked today how I built <a href="https://dscovery.fly.dev/">DSCovery</a>, the aggregator I put together awhile back to help people find jobs in civic tech.</p> <p>I wish it was a better story.</p> <p>The reality is that on a technical level it's a not-very complex Django app. I just <em>love</em> Django for this sort of thing. You can get from zero to something in no time at all. Rails has the same advantages, but I know Django much better, and the Django admin made my life a lot easier in this case. It was kind of the killer feature for this project.</p> <p>But, to back up a bit, aside from Django I already had experience with two things that would be key to DSCovery:</p> <ul> <li>I had used BeautifulSoup to scrape sites for various reasons, like hitting the Secretary of State site for election night returns back in my journalism days. I wasn't at the Lawrence Journal-World, but <a href="https://www.b-list.org/weblog/2010/nov/02/news-done-broke/">James' Bennett's classic rundown of what that usually looks like seems pretty universal</a>.</li> <li>I had spent enough time with various ATSs that I knew what their output tended to look like. For those who don't know, an ATS is an Applicant Tracking System -- The thing recruiting uses to keep track of open roles and who's applying for them.</li> </ul> <p>Because I'd spent so much time with ATSs as a hiring manager, I knew there weren't <em>that</em> many of them out there, and most folks congregated around just a few. Which meant that if I wrote the importer for one, I'd written it for all of them.</p> <p>So I started going down the list of DSC firms using the most common platforms and started building an importer for each platform, as simple as possible:</p> <ol> <li>For each company known to use this ATS platform....</li> <li>Use the Requests library to get the HTML from the jobs page</li> <li>Use BeautifulSoup to parse the jobs out</li> <li>Tuck them away in a python data structure.</li> </ol> <p>This got easier as I added more companies, because more often than not I could re-use an importer I'd already written. When I was fairly happy with the first importers, I built a view to wrap them and do a few things:</p> <ul> <li>Clean up old and/or unreachable jobs to keep things fresh</li> <li>Set up the data structures for the importers</li> <li>Pull in each of the importers as a module and runs them.</li> <li>Take the data structure, do any last-minute cleaning, and write the new records to the database.</li> </ul> <p>From the Django admin I can then keep an eye on the roles, assign them to different practices, set things as featured etc.</p> <p>And really, that's about it. There are a few basic display views, but not a whole lot more. I've got some more things I'd like to do when I find time, but right now it's still pretty simple.</p> <p>I recall doing some almost-interesting things with includes in the templates to make them more reusable, and to allow me to more easily use Alpine.js and/or HTMX, but if I'm being honest I can't recall now what it was that I was doing with Alpine.js or HTMX, and I'm not sure if I ever implemented it publicly.</p> <h3 id="the-challenges" tabindex="-1">The challenges<a class="tdbc-anchor" href="https://another.rodeo/building-dscovery/#the-challenges" aria-hidden="true">#</a></h3> <p>There were a few challenges along the way, to be sure, and some of them have persisted.</p> <p>For example, some of the ATSs are really difficult to parse, usually because they use client-side rendering (side note to ATS vendors: a jobs page is nearly the last place client-side rendering makes any sense). This borks BeautifulSoup because it sees the page as it was delivered from the server, not as it's hydrated client-side. Or, in other words, it sees an empty page.</p> <p>In some of those cases I've been able to find the raw JSON it's hydrating the page from. In those cases I sidestep BeautifulSoup, grab the JSON and parse that. But in other cases the JSON is also unavailable and I'm stuck. Workable, for example, just seems unparseable, so I can't yet import jobs from Blue Tiger, Friends from the City, or Pixel Creative. That bums me out. They're good folks.</p> <p>And some ATS are just completely stupid and awful to work with. Usually, but not always, these are old-school &quot;enterprise&quot; offerings that feature lousy markup and horrific user interfaces: ADP, ApplicantPro, UKG, that sort of thing. I really feel for the companies saddled with these systems.</p> <p>In some cases (like, Ad Hoc, for example) I think the company is important enough that I really want to include them, but their ATS system is so incredibly bad that it's just impossible. All I can do is pull from LinkedIn. It's not ideal. To all the DSC companies (and anyone else who'll listen) listen to this advice: Don't listen to fools trying to sell you these &quot;enterprise&quot; ATSs. They are garbage, and the person trying to convince you to switch to them should not be listened to.</p> <p>There are also some cases where the ATS is too niche, or the companies are so small, that I'm waiting for some more jobs to import before going through the effort of writing a new importer.</p> <p>At any rate, I continue to iterate, add more firms, and more functionality.</p> <p>The whole thing is hanging together pretty well so far, which makes me happy. It'd been awhile since I'd coded up much of anything, really, so I was glad to see I could still do it.</p> <p>If you'd like to read more about DSCovery and <em>why</em> I built it, <a href="http://localhost:8080/dscovery/">I wrote that up awhile back</a>. If you'd like to take a look under the hood, <a href="https://github.com/tBaxter/DSCovery">all the code is public</a>.</p> <hr /> <p><em>Photograph is of a Side Corridor on a Dirigible, ca. 1933, <a href="https://www.flickr.com/photos/usnationalarchives/7951499644/in/photostream/">from the National Archives</a></em></p> This is where it all breaks 2025-05-30T00:00:00Z https://another.rodeo/ai-service-design-real-work/ <p>Let’s skip past the philosophical debate — there’s been plenty of that already (including some here). Whether or not you <em>should</em>, you did: you bought into AI. You committed your teams to building AI-driven solutions, and you’re starting to ship them.</p> <p>You are in it. Or rather, AI’s in it. And then things get complicated.</p> <p>Because, as usual, the hard part isn’t really the technology, or even integrating it.</p> <p>It’s the world around it.</p> <p>That’s not an AI problem. It’s a <strong>service design</strong> problem.</p> <h3 id="systems-are-like-people-theyre-messy-and-they-often-dont-make-much-sense" tabindex="-1">Systems are like people: they're messy and they often don't make much sense.<a class="tdbc-anchor" href="https://another.rodeo/ai-service-design-real-work/#systems-are-like-people-theyre-messy-and-they-often-dont-make-much-sense" aria-hidden="true">#</a></h3> <p>A lot of software up until now has been built on the dream of reducing human messiness down to a clean loop: <code>human asks → software responds → happy human</code>.</p> <p>But real systems rarely end up like that. They’re often more like:<br /> <code>human asks → website makes API call to CRM → help desk → someone in compliance → another tool → export to spreadsheet → escalated to manager → judgment call → back down from manager for data entry → backend system → another person copy/pasting → software pushes results to other systems → human gets an email days later</code>.</p> <p>Yet somehow, in 2025, we seem to think we can reduce <em>that</em> to:<br /> <code>human asks → AI responds → happy human</code>.</p> <p>The real world is full of handoffs, mismatched expectations, missing context, and partial automation duct-taped together so people just trying to do their jobs may actually succeed most of the time. More importantly, even when they're doing their best, those people are inconsistent and make mistakes — because they’re human. This is the mess that <strong>service design</strong> has always tried to make sense of.</p> <p>Service design isn’t just about the user journey on a screen. It’s about the whole system — who’s doing what, with what tools, at what point, and what happens when that handoff goes sideways.</p> <p>It pays attention to the awkward stuff: the delays, the workarounds, the “I guess I’ll email someone” moments. The parts where two systems almost work together, but not quite. That’s where services tend to break — not just what the user sees, or even what the engineers build, but in the in-between and the edges.</p> <h3 id="what-changes-when-you-add-ai" tabindex="-1">What Changes When You Add AI?<a class="tdbc-anchor" href="https://another.rodeo/ai-service-design-real-work/#what-changes-when-you-add-ai" aria-hidden="true">#</a></h3> <p>Everything. And nothing.</p> <p>AI doesn’t just drop into an existing step like a new library or subsystem behind a feature flag. It reshapes the dynamics of the whole system. That’s because AI is introduced to replace one of two things:</p> <ol> <li>Predictable but limited <strong>deterministic process</strong>, like code, workflow, or rules</li> <li>A <strong>human</strong> with judgment, context, and fallback instincts</li> </ol> <p>In the first case, you lose the predictability and testability. In the second, you keep the all the human weirdness without the innate paths to fixes.</p> <h4>Example 1: AI in Customer Support</h4> <p>Let’s say you’ve got a chatbot handling support. It answers questions, escalates tough ones, runs 24/7.</p> <p>But what happens when:</p> <ul> <li>It confidently gives the wrong refund policy?</li> <li>It tells a customer to do something that voids their account?</li> <li>It doesn’t escalate because the person didn’t phrase their problem the right way?</li> </ul> <p>Now the human on the other end isn’t just annoyed — they’re angry. They’ve been misinformed, misunderstood, and made to feel powerless. The AI made the problem <em>worse</em>.</p> <p>And what happens to the remaining members of your human support team? They’re now <strong>cleaning up</strong>, not just answering questions. They're managing emotional escalations. They're carrying the risk of an AI that doesn't know what it doesn’t know.</p> <p>They are the last line of defense for a system failure.</p> <h4>Example 2: AI in Internal Tools</h4> <p>Let’s say you give a policy analyst a tool that uses AI to summarize regulatory comments from the public. Hundreds of thousands of them. Saves time, right?</p> <p>But then:</p> <ul> <li>The summary misses a key legal objection raised by multiple stakeholders.</li> <li>It flattens nuance into something “neutral” but meaningless.</li> <li>It leaves key details out, but the analyst doesn’t know what got left out.</li> </ul> <p>Now you’ve reduced transparency and increased risk. The AI didn’t just summarize — it reshaped the evidence base for policy.</p> <p>If the rest of the system wasn’t built to catch that, you don’t have a model problem. You’ve got a service design problem.</p> <h3 id="wait-dont-humans-make-these-mistakes-too" tabindex="-1">Wait — Don’t Humans Make These Mistakes Too?<a class="tdbc-anchor" href="https://another.rodeo/ai-service-design-real-work/#wait-dont-humans-make-these-mistakes-too" aria-hidden="true">#</a></h3> <p>Yes. All the time.</p> <p>They misread. They skip steps. They make bad calls under pressure. But at the same time...</p> <p><strong>1. Humans don’t make mistakes at AI scale.</strong> An AI can repeat the same bad output hundreds of times in seconds. A person can’t.</p> <p><strong>2. You can train (or fire) humans.</strong> There’s a feedback loop. With AI, that loop is harder to build and slower to act on.</p> <p>So no, the bar isn’t “perfect accuracy.” If AI performs roughly as well as a human — and you can <strong>catch its mistakes</strong> — you're no worse off than you were before, and you may be much better off. That's good!</p> <h3 id="design-for-the-drop-not-just-the-lift" tabindex="-1">Design for the Drop, Not Just the Lift<a class="tdbc-anchor" href="https://another.rodeo/ai-service-design-real-work/#design-for-the-drop-not-just-the-lift" aria-hidden="true">#</a></h3> <p>This is the part we skip too often. We talk about what AI <em>adds</em> — the “lift.”</p> <p>But every time you add AI, you’re also <strong>removing</strong> something:</p> <ul> <li>Human context</li> <li>Transparent decisions</li> <li>Known error types</li> </ul> <p>That’s the “drop.”</p> <p>If you only design for the lift — and ignore the drop — you’re building something brittle.</p> <p>Designing for the drop means asking:</p> <ul> <li>What context did this rely on before?</li> <li>Can the AI replicate it?</li> <li>What happens when it gets it wrong?</li> <li>Who notices?</li> <li>Who can recover?</li> <li>Are downstream humans ready — and do they have enough info to fix it?</li> </ul> <p>If your service falls apart silently when the AI outputs garbage, then the service isn't well designed, is it?</p> <h3 id="ai-makes-service-design-more-important-not-less" tabindex="-1">AI Makes Service Design More Important — Not Less<a class="tdbc-anchor" href="https://another.rodeo/ai-service-design-real-work/#ai-makes-service-design-more-important-not-less" aria-hidden="true">#</a></h3> <p>If you’re introducing AI, you’re taking on more responsibility:</p> <ul> <li>To define the seams</li> <li>To build guardrails</li> <li>To enable recovery</li> <li>To preserve accountability</li> </ul> <p>That’s not a better prompt. It’s not a fine-tune. It’s not tweaking your retrieval chain.</p> <p>It’s designing a system where people — not just models — can succeed.</p> <h3 id="one-more-thing" tabindex="-1">One More Thing<a class="tdbc-anchor" href="https://another.rodeo/ai-service-design-real-work/#one-more-thing" aria-hidden="true">#</a></h3> <p>The worst failures won’t look like outages. They’ll look like slow erosion:</p> <ul> <li>Trust lost without a clear breach</li> <li>Bad decisions built on subtle misfires</li> <li>Teams overwhelmed cleaning up silent messes</li> </ul> <p>If you’re not designing the <strong>whole service</strong> — inputs, AI, outputs, context, escalation, recovery — you’re not designing a system.</p> <p>You’re just crossing your fingers.</p> <p>Hope isn’t a strategy.</p> <p>Service design is.</p> Vintage bicycle projects 2025-05-30T19:40:27Z https://another.rodeo/bikes/ <div class="tdbc-section"> <ul class="tdbc-column-container"><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/raleigh/raleigh.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/raleigh-sports/" class="tdbc-card__title">The bedraggled Raleigh</a> <p> A bound-for-the-dumpster Raleigh Sports gets a new lease on life. </p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/peugeot/completed.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/peugeot-ph19-mixte/" class="tdbc-card__title">Peugeot mixte restoration</a> <p> Parlez-vous français? </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/trek-520/rocks.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/trek-520/" class="tdbc-card__title">Trek 520</a> <p> A great bike, with a few caveats </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/cork-bar-ends/installed.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/cork-bar-ends/" class="tdbc-card__title">Making wine cork handlebar plugs</a> <p> Want something different for your handlebars? How about a wine cork bar end? They're easy to make. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/schwinn-speedster/done.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/electric-schwinn/" class="tdbc-card__title">The electric Schwinn</a> <p> My e-bike conversion on a 50-year-old Schwinn. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/luxus/fireball.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/luxus-sport-bike/" class="tdbc-card__title">The Luxus folding bike restoration</a> <p> For some inexplicable reason, I wanted a vintage folding bike. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/handcycle/starting.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/handcycle/" class="tdbc-card__title">The handcycle</a> <p> An interesting journey into making bicycling more accessible. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/trek-2100/2100.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/trek-2100/" class="tdbc-card__title">Trek 2100</a> <p> What? A carbon fiber bike? In this house? Well, sort of... </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/rocket/as-found.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/monark-2/" class="tdbc-card__title">Another one?</a> <p> Another bedraggled classic cruiser finds its way to my house. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/road-king/complete.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/monark-road-king/" class="tdbc-card__title">Road King</a> <p> Bringing a 1948 cruiser bicycle into the 21st century. </p><p></p> <p></p></div> </li></ul><p></p> </div> Fiberglass "egg" camper restoration 2025-05-30T19:40:27Z https://another.rodeo/the-camper/ <div class="tdbc-section"> <ul class="tdbc-column-container"><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/camper/almost-done.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/71-eco-restoration/" class="tdbc-card__title">1971 Eco fiberglass camper restoration</a> <p> Trying to put an egg (camper) back together again. </p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/camper/thumb.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/smart-camper/" class="tdbc-card__title">Making a smart vintage camper</a> <p> My attempt to bring modern tech to a very old camper. </p><p></p> <p></p></div> </li></ul><p></p> </div> Web Things 2025-05-30T19:40:27Z https://another.rodeo/web-things/ <div class="tdbc-section"> <ul class="tdbc-column-container"><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/mm.png" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/mm/" class="tdbc-card__title">Maturity Model Generator</a> <p> Need a maturity model? Just enjoy a silly joke? Either way, we've got you covered. </p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/cartoon-interview.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/employer-questions/" class="tdbc-card__title">The giant list of questions to ask employers</a> <p> Do you get sytmied when you're asked if you have any questions in an inteview? Have we got a list for you. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/pear.png" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/pear/" class="tdbc-card__title">Pear</a> <p> Comparing text from two documents easily, with no sign-up or data sharing. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/dadjoke.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/dad-joke/" class="tdbc-card__title">Not funny, Dad</a> <p> The end result of a fascination with obscure government data sources and dad jokes. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/typewriter.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/markitup/" class="tdbc-card__title">Markitup (v2)</a> <p> Bringing an old favorite jQuery library into the modern era. And some musings on ChatGPT. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/facepalm.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/deploying/" class="tdbc-card__title">Deploying</a> <p> A running list of the questions I have to remember to ask myself when deploying a new app to a new environment. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/chain.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/linkroll/" class="tdbc-card__title">11ty Linkrolls</a> <p> How to build an old-fashioned linkroll for the 11ty static site generator. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/building-it.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/about/" class="tdbc-card__title">About this site</a> <p> We're doing it live! Whatever this site becomes, we're gonna build it out in the open so everybody can see all the half-baked ideas and dead ends. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/dscovery.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/dscovery/" class="tdbc-card__title">DSCovery</a> <p> Building an aggregator for jobs in civic tech. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/dirigible.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/building-dscovery/" class="tdbc-card__title">Building DSCovery</a> <p> How I built DSCovery, the civic tech jobs aggregator, and lessons learned. </p><p></p> <p></p></div> </li></ul><p></p> </div> Selected writing 2025-05-30T19:40:27Z https://another.rodeo/writing/ <div class="tdbc-section"> <ul class="tdbc-column-container"><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/five-conditions.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/five-conditions/" class="tdbc-card__title">The Five Conditions for (Organizational) Improvement</a> <p> Understanding why organizations get stuck and won't change </p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/quicksand.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/quicksand-meetings/" class="tdbc-card__title">Quicksand meetings</a> <p> Managers: Avoid these sinking meetings so your teams don't feel stuck. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/audience.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/know-your-audience/" class="tdbc-card__title">Know your (documentation) audience</a> <p> Why nobody likes your docs and your Single Source of Truth isn't working </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/office-pool.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/straight-talk-ic-path/" class="tdbc-card__title">So you don't want to be a manager</a> <p> Straight talk to a senior engineer wanting to stay on an IC track. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/ai/assembly.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/ai-boring-stupid-ok/" class="tdbc-card__title">AI is boring and stupid and maybe that's OK</a> <p> Sometimes boring and stupid is still really useful. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/values/tightrope.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/values/" class="tdbc-card__title">On values</a> <p> What we care about costs us. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/cleanup-parade.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/make-the-damn-web-sites-work/" class="tdbc-card__title">We’ve got to make the damn websites work</a> <p> Is it the most transformative thing we can do on the web in 2024? </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/sisyphus-by-Jeffrey-Hummel.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/tasks/" class="tdbc-card__title">Tasks</a> <p> Herculean tasks, Sisyphean tasks, what else have ya got? </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/circus-elephants.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/engineering-velocity/" class="tdbc-card__title">Engineering velocity</a> <p> Why is my engineering team so much slower than they used to be? </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/elephants-nyc.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/engineering-velocity-part-2/" class="tdbc-card__title">Engineering velocity: Part 2</a> <p> Your team seems slower... Here's what to do about it. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/skiptooth.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/skipped-teeth-blockchains/" class="tdbc-card__title">Skipped teeth and blockchains</a> <p> Down a different blockchain rabbit hole. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/backpack.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/backpacks/" class="tdbc-card__title">Backpacks</a> <p> How are you carrying your load? </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/retro_robot.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/ai-service-design-real-work/" class="tdbc-card__title">This is where it all breaks</a> <p> AI, service design, and the real work ahead </p><p></p> <p></p></div> </li></ul><p></p> </div>
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Another Rodeo</title>
<subtitle>Assorted projects and experiments and things. Nobody told me there would be so many rodeos.</subtitle>
<link href="https://another.rodeo/feed/" rel="self"/>
<link href="https://another.rodeo"/>
<updated>2025-05-30T19:40:27Z</updated>
<id>https://another.rodeo</id>
<author>
<name>Carter Baxter</name>
</author>
<entry>
<title>1971 Eco fiberglass camper restoration</title>
<link href="https://another.rodeo/71-eco-restoration/"/>
<updated>2020-01-07T00:00:00Z</updated>
<id>https://another.rodeo/71-eco-restoration/</id>
<content type="html"> <figure class="image "> <img src="https://another.rodeo/img/camper/almost-done.jpeg" alt="The more or least restored trailer, ready for camping." /> <figcaption>The more or least restored trailer, ready for camping.</figcaption> </figure> <h2 id="1971-eco-camper-restoration" tabindex="-1">1971 Eco camper restoration<a class="tdbc-anchor" href="https://another.rodeo/71-eco-restoration/#1971-eco-camper-restoration" aria-hidden="true">#</a></h2> <p>In 2019 I became convinced that we should have a camper. And not just any camper, we should have a fiberglass &quot;egg&quot; camper. Through a highly improbable coincidence, it turned out a friend had one and he was willing to sell it to me for &quot;friend price.&quot; And so I lugged this little thing home. The pictures and story here are incomplete and fractured because I'm recreating the restoration story from whatever files I can find, but I'll recreate it as best as I can.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/as_found.jpg" alt="As I found it, it had seen better days. It looked a bit like a baked bean, and smelled a lot like old, rotten beans." /> <figcaption>As I found it, it had seen better days. It looked a bit like a baked bean, and smelled a lot like old, rotten beans.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/garage.jpg" alt="It just *barely* fit in my garage bay. That made the restoration a lot easier. Just go out to the garage and get to work." /> <figcaption>It just *barely* fit in my garage bay. That made the restoration a lot easier. Just go out to the garage and get to work.</figcaption> </figure> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> <h3 id="so-what-is-this-thing-anyway" tabindex="-1">So what is this thing, anyway?<a class="tdbc-anchor" href="https://another.rodeo/71-eco-restoration/#so-what-is-this-thing-anyway" aria-hidden="true">#</a></h3> <p>In the '60s a company called Boler pioneered these little fiberglass &quot;egg&quot; campers. Where most campers at the time nailed aluminum into a wooden structure to make the camper (or in the case of Airstream, an aluminum frame) these were different: there was no framework for the body, because the fiberglass is self-supporting. So they're extraordinarily lightweight, easy to tow, and much less likely to break, leak or just fall apart.</p> <p>Through a complicated series of events I won't get into here, Boler's original fiberglass molds ended up in the hands of a bunch of different manufacturers, including this Eco, which was built in Nebraska in 1971. I'm told the factory later specialized in fiberglass prosthesis when they got out of trailer-building.</p> <p>Anyways, the original Boler design continues on today under the Scamp name. Pretty amazing longevity, but great design endures. If you're interested, there's <a href="http://www.boler.ca/2017/03/05/history-of-the-boler/">a lot of history about them out there</a>.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/floorplan.jpeg" alt="Here's the original Boler floorplan, still in use in Scamps today (and in my Eco). Photo courtesy of Scamp Trailers." /> <figcaption>Here's the original Boler floorplan, still in use in Scamps today (and in my Eco). Photo courtesy of Scamp Trailers.</figcaption> </figure> <h3 id="the-teardown" tabindex="-1">The teardown<a class="tdbc-anchor" href="https://another.rodeo/71-eco-restoration/#the-teardown" aria-hidden="true">#</a></h3> <p>I was lucky it was such a great design and couldn't rot. At least I didn't have to worry much about the body. But everything inside sure could rot. And had.</p> <p>When I brought it home, my wife would not step foot in it. To her credit, it really was pretty disgusting. There was carpet in it that had seem some terrible things and a smell that could stop traffic.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/70s-floor.jpg" alt="Underneath the disgusting carpet the original super-70s linoleum was still in place, albeit covered in 50 years of funk. This is the dinette side of the grailer. A few hours after this picture was taken, the cushions and linoleum joined the carpet on the curb-side trash pile." /> <figcaption>Underneath the disgusting carpet the original super-70s linoleum was still in place, albeit covered in 50 years of funk. This is the dinette side of the grailer. A few hours after this picture was taken, the cushions and linoleum joined the carpet on the curb-side trash pile.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/upper-cabinets.jpg" alt="There are cabinets above the sink/kitchenette area. The doors, light fixtures and backsplash were all in terrible condition." /> <figcaption>There are cabinets above the sink/kitchenette area. The doors, light fixtures and backsplash were all in terrible condition.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/sink.jpg" alt="The sink itself was no better. But it did have lots of extra holes for whatever reason." /> <figcaption>The sink itself was no better. But it did have lots of extra holes for whatever reason.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/overhead.jpg" alt="The overhead storage and the front and rear was notable mostly for the sheer number of hooks that you were absolutely certain to hit your head on." /> <figcaption>The overhead storage and the front and rear was notable mostly for the sheer number of hooks that you were absolutely certain to hit your head on.</figcaption> </figure> <p>The very first thing I did was remove every fibrous surface from inside and put it all in the trash. All the cushions, the drapes, everything. If it was porous, it got yanked out and thrown out. I also found some other things I'd rather forget about, like the ancient camping toilet. Ugh.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/trash.jpg" alt="Won't be wanting any of that anymore." /> <figcaption>Won't be wanting any of that anymore.</figcaption> </figure> <p>Everything that was left was bleached, then gone over with a trisodium phosphate (TSP) cleaning solution, and then painted over with a couple of coats of Killz. There was a lot of mold, a pretty good ant infestation, and a couple of dead rodents.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/funky.jpg" alt="Too much of it looked like this. No, I don't know what all that was, either. But it smelled as bad as it looked." /> <figcaption>Too much of it looked like this. No, I don't know what all that was, either. But it smelled as bad as it looked.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/killz.jpeg" alt="By the time this photo was taken I was deep into bleaching the whole interior and hitting it with TSP and then Killz primer ." /> <figcaption>By the time this photo was taken I was deep into bleaching the whole interior and hitting it with TSP and then Killz primer .</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/primered.jpg" alt="Eventually, it started to became a nice clean bare white canvas." /> <figcaption>Eventually, it started to became a nice clean bare white canvas.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/fiberglass-holes.jpg" alt="The fixtures and shelving, like the body, are all fiberglass. I filled a lot of holes in them. Then I filled a lot more." /> <figcaption>The fixtures and shelving, like the body, are all fiberglass. I filled a lot of holes in them. Then I filled a lot more.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/stove.jpg" alt="I didn't have a lot of faith in this 50-year-old propane stove, nor did I really want to be cooking eight inches away from where I'd be sleeping." /> <figcaption>I didn't have a lot of faith in this 50-year-old propane stove, nor did I really want to be cooking eight inches away from where I'd be sleeping.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/dinette-stripped.jpg" alt="Here the kitchen unit is nearly completely stripped down, with the original sink and stove gone. You can also see where I filled in some more holes on the front. I didn't need to fill the ones on top because I was building a new countertop. " /> <figcaption>Here the kitchen unit is nearly completely stripped down, with the original sink and stove gone. You can also see where I filled in some more holes on the front. I didn't need to fill the ones on top because I was building a new countertop. </figcaption> </figure> <h3 id="troubleshooting-power-issues" tabindex="-1">Troubleshooting power issues<a class="tdbc-anchor" href="https://another.rodeo/71-eco-restoration/#troubleshooting-power-issues" aria-hidden="true">#</a></h3> <p>Having a usable electrical system in the trailer was quite a journey. When I first bought the trailer, I plugged it into 110V household power and got... nothing. As I investigated more, I learned two things:</p> <ol> <li>The original power center for it had long ago been gutted, with the original transformer removed and a nonsensical bit of splicing put in its place. Electricity was going places, but not the places you'd want it to go, and definitely not in the right wires.</li> <li>That length of household wiring laying out on the trailer tongue, going nowhere? It was hooked up directly to the 110V shore power. So it's probably good that I didn't touch it.</li> </ol> <p>Seriously, the more I dug in, the more it was clear the existing wiring was just flat dangerous. Major work was going to be needed.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/power-center.png" alt="The dangerous remnants of the original power center." /> <figcaption>The dangerous remnants of the original power center.</figcaption> </figure> <p>So after some research I placed an order for a <a href="https://amzn.to/2wZfLRR">Progressive Dynamics 4145 Power Center</a>. It's compact, full-featured and packs more than enough potential power for my little trailer.</p> <p>Before I could do anything to install the new power center I had to drill out the rivets holding the old power center in place, then significantly enlarge the height of the hole for the new power center. A few minutes with a drill to mark the corners and a jigsaw to cut through the fiberglass and that was done. <em>Note: Be sure your eyes, skin and mouth are well-covered. Fiberglass is nasty stuff.</em></p> <figure class="image "> <img src="https://another.rodeo/img/camper/power-center.jpg" alt="You can see my marker lines where I had to enlarge the hole for it to fit." /> <figcaption>You can see my marker lines where I had to enlarge the hole for it to fit.</figcaption> </figure> <p>But my newly cut hole was about 1/8&quot; too wide because of the width of the old power center. So I had to turn right around and put some trim around the new hole to keep my new height while narrowing the opening a smidge.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/power-center-trimmed.png" alt="Trimmed and caulked. You can see the red fiberglass putty filling some more holes too." /> <figcaption>Trimmed and caulked. You can see the red fiberglass putty filling some more holes too.</figcaption> </figure> <p>With the hole trimmed out and painted, I still had to figure out how to wire it up, which was pretty tricky and figuring out a good ground on a fiberglass trailer takes some head scratching. The Progressive Dynamics instructions were a little inscrutable, too, but with a little thought and a lot of googling, it went in.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/power-center-in.jpg" alt="The new power center installed (shown without its cover in this pic)." /> <figcaption>The new power center installed (shown without its cover in this pic).</figcaption> </figure> <p>On the 110 (household) voltage side, I've got one breaker dedicated to feeding the 12v converter, one dedicated solely to the air conditioner, one dedicated to the refrigerator, and one dedicated to a 110v outlet on the front of the kitchenette cabinet. I could have put more on the circuits, but why? I don't need to, and this way there's less chance of a tripped breaker.</p> <p>On the 12v side, the 4135 offers more circuits than I've yet found a use for, but the first thing I wanted to do was get some light. I found these <a href="https://amzn.to/2IIZqmW">super-low profile remote control LED puck lights</a> on Amazon and went ahead and ordered them. It'd be nice not doing everything by shop light. I the wall-wart off the puck lights, mounted two in the front, two in the rear, and two over the kitchenette, then wired them up to the 12v supply. Success!</p> <p>I was pretty proud when I wired it all up and it worked with no extra smoke the first time I flipped the switch.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/lighting.jpg" alt="And now that there's power, let there by light. I got a great deal on a set of low-profile, dimmable remote control LED puck lights dirt cheap on Amazon Prime day and hard-wired them in. There are two at each end and two over the kitchenette, all controlled from a single remote. Six lights is plenty in a 60 sq ft trailer." /> <figcaption>And now that there's power, let there by light. I got a great deal on a set of low-profile, dimmable remote control LED puck lights dirt cheap on Amazon Prime day and hard-wired them in. There are two at each end and two over the kitchenette, all controlled from a single remote. Six lights is plenty in a 60 sq ft trailer.</figcaption> </figure> <p>Once it was the inside was more-or-less safe for humans to be in there, I hitched it up to take to a local trailer shop for inspection. I needed them to tell me that the frame was solid and straight, and remove this weird rack thing that had been added in the rear.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/weird_rear_rack.jpg" alt="The strange rear rack in question. Inside you can see the freshly-Killzed interior." /> <figcaption>The strange rear rack in question. Inside you can see the freshly-Killzed interior.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/no-rack.jpg" alt="With the rack gone, the bumper painted and the body halfway clean, it started to turn a bit of a corner." /> <figcaption>With the rack gone, the bumper painted and the body halfway clean, it started to turn a bit of a corner.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/painting.jpg" alt="The existing paint was so bad, a Rustoleum Roller job in the driveway was actually a step forward. You can get surprisingly good results with a rustoluem roller job. Seriously." /> <figcaption>The existing paint was so bad, a Rustoleum Roller job in the driveway was actually a step forward. You can get surprisingly good results with a rustoluem roller job. Seriously.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/paint2.jpeg" alt="About half-way through painting it was looking pretty good. I needed more coverage, but not bad. You can also see the vent holes on the front for the AC. Those would be important later." /> <figcaption>About half-way through painting it was looking pretty good. I needed more coverage, but not bad. You can also see the vent holes on the front for the AC. Those would be important later.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/wheel.jpeg" alt="I painted the original wheels with Rustoleum white, too, and fitted some new baby moon hubcaps. You can also see some fiberglass damage from a long-ago blowout. Someday, when I get a pro paint job, I'll have that repaired. I did put new tires and bearings in, though." /> <figcaption>I painted the original wheels with Rustoleum white, too, and fitted some new baby moon hubcaps. You can also see some fiberglass damage from a long-ago blowout. Someday, when I get a pro paint job, I'll have that repaired. I did put new tires and bearings in, though.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/ext-lights.jpeg" alt="All the exterior lights were upgraded to modern LED versions. Yes, that's another tiny bit of fiberglass damage by the bumper. It's 50 years old, it's picked up some scrapes." /> <figcaption>All the exterior lights were upgraded to modern LED versions. Yes, that's another tiny bit of fiberglass damage by the bumper. It's 50 years old, it's picked up some scrapes.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/countertop.jpg" alt="I also started test-fitting a new countertop I'd make from birch plywood." /> <figcaption>I also started test-fitting a new countertop I'd make from birch plywood.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/flooring.jpg" alt="And the new flooring went it. Vinyl planks were easy to work with, worked well with the campers irregular edges and lines, and are waterproof and wear well. Pretty much perfect for this usage." /> <figcaption>And the new flooring went it. Vinyl planks were easy to work with, worked well with the campers irregular edges and lines, and are waterproof and wear well. Pretty much perfect for this usage.</figcaption> </figure> <p></p><figure class="image "> <img src="https://another.rodeo/img/camper/ac.jpeg" alt="A prior owner had cut this hole for the AC, which is pretty far from ideal as far as cooling efficiency goes, but since the hole was already there I put a fresh AC in it. I spent a lot of time insulating the hot side of the AC from the cold side and figuring out how to vent the hot side. Eventually I put in three temperature-activated 4-inch fans venting to the outside. When the AC is on, they sense the heat and turn on, pushing the hot air out of the trailer." /> <figcaption>A prior owner had cut this hole for the AC, which is pretty far from ideal as far as cooling efficiency goes, but since the hole was already there I put a fresh AC in it. I spent a lot of time insulating the hot side of the AC from the cold side and figuring out how to vent the hot side. Eventually I put in three temperature-activated 4-inch fans venting to the outside. When the AC is on, they sense the heat and turn on, pushing the hot air out of the trailer.</figcaption> </figure><p></p> <figure class="image "> <img src="https://another.rodeo/img/camper/test-fit.jpeg" alt="A lot of things were being test-fit here, particularly the new countertop, a new bar-sized faucet and the backsplash. You can also see the new electrical outlet (complete with ground fault protection and two USB ports) and over to the right, the new sink waiting to go in. Both the sink and faucet were bar-sized because the scale worked better for the little camper. We decided to skip the propane stove and either cook outside or with a hotplate." /> <figcaption>A lot of things were being test-fit here, particularly the new countertop, a new bar-sized faucet and the backsplash. You can also see the new electrical outlet (complete with ground fault protection and two USB ports) and over to the right, the new sink waiting to go in. Both the sink and faucet were bar-sized because the scale worked better for the little camper. We decided to skip the propane stove and either cook outside or with a hotplate.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/kitchen.jpeg" alt="The kitchenette with it all actually in place." /> <figcaption>The kitchenette with it all actually in place.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/drawer.jpeg" alt="I was really proud of this drawer I built from scratch, including all the mounting points. The original drawer slid out from the bottom of the stove, and both it and the stove were unsalvageable. So I had to get creative." /> <figcaption>I was really proud of this drawer I built from scratch, including all the mounting points. The original drawer slid out from the bottom of the stove, and both it and the stove were unsalvageable. So I had to get creative.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/floorjack.jpeg" alt="These fiberglass campers need supports from the floor up to the ceiling or else the ceiling can sag and they get oval-shaped. In mine, someone had taken the supports out so I had to use a floor jack to lift the ceiling and install new supports." /> <figcaption>These fiberglass campers need supports from the floor up to the ceiling or else the ceiling can sag and they get oval-shaped. In mine, someone had taken the supports out so I had to use a floor jack to lift the ceiling and install new supports.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/supports.jpeg" alt="The supports themselves are just bits of poplar. Some Ikea pegboard helps keep things square while providing some extra utility. This is the sort of usable-yet-attractive detail I just love." /> <figcaption>The supports themselves are just bits of poplar. Some Ikea pegboard helps keep things square while providing some extra utility. This is the sort of usable-yet-attractive detail I just love.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/cushions.jpeg" alt="Before I tossed the old cushions I had the good sense to make patterns from them on heavy brown paper. Those were really handy later, when I needed to cut new cushions. The new cushions were cut from a 5-inch memory foam mattress from Amazon, and the houselhold electric carving knife, which is a pretty good solution for cutting foam." /> <figcaption>Before I tossed the old cushions I had the good sense to make patterns from them on heavy brown paper. Those were really handy later, when I needed to cut new cushions. The new cushions were cut from a 5-inch memory foam mattress from Amazon, and the houselhold electric carving knife, which is a pretty good solution for cutting foam.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/camper/upholstery.jpeg" alt="I don't have an industrial sewing machine or any real upholstery skills, so I figured it was smart to farm out the actual upholstery work. We had the cushions covered in a nice high-quality marine vinyl in a sort of two-tone gray/beige color. We deliberately kept the colors very neutral and cold. The camper is so small that even a single pillow introduces a lot of color. I made the dinette table, too. Then later I made another one, 'cause I didn't like this one." /> <figcaption>I don't have an industrial sewing machine or any real upholstery skills, so I figured it was smart to farm out the actual upholstery work. We had the cushions covered in a nice high-quality marine vinyl in a sort of two-tone gray/beige color. We deliberately kept the colors very neutral and cold. The camper is so small that even a single pillow introduces a lot of color. I made the dinette table, too. Then later I made another one, 'cause I didn't like this one.</figcaption> </figure> <p>I had the upholstery done in the late in 2019. By early 2020, the basic renovation of the camper was done and it was a pretty nice place to be.</p> <p>Of course just a few months later, as the weather just started to warm up, Covid hit, so there wasn't a whole lot of camping going on.</p> <p>I turned my attention to modernizing the electronics and entertainment, and making a &quot;smart camper&quot; out of it. That had mixed results but was a lot of fun.</p> <h3 id="why-did-i-do-it" tabindex="-1">Why did I do it?<a class="tdbc-anchor" href="https://another.rodeo/71-eco-restoration/#why-did-i-do-it" aria-hidden="true">#</a></h3> <p>Well, I thought I wanted a camper, and I liked the scale of the renovation project</p> <h3 id="what-did-i-learn" tabindex="-1">What did I learn?<a class="tdbc-anchor" href="https://another.rodeo/71-eco-restoration/#what-did-i-learn" aria-hidden="true">#</a></h3> <ul> <li>I don't like camping all that much.</li> </ul> <h3 id="where-is-it" tabindex="-1">Where is it?<a class="tdbc-anchor" href="https://another.rodeo/71-eco-restoration/#where-is-it" aria-hidden="true">#</a></h3> <ul> <li>Currently, in my garage.</li> </ul> </content>
</entry>
<entry>
<title>The bedraggled Raleigh</title>
<link href="https://another.rodeo/raleigh-sports/"/>
<updated>2020-08-23T00:00:00Z</updated>
<id>https://another.rodeo/raleigh-sports/</id>
<content type="html"><p>I've had an urge to take experience a classic British three-speed for awhile now. The laid-back geometry, relaxed, upright ride and smooth internally-geared hubs just speak to me.</p> <p>In the time of COVID, even ragged projects seem to be fetching an awful lot of money, and since I already had too many projects going anyway, I figured that would have to just remain a daydream for awhile.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/bedraggled-raleigh.jpg" alt="The Raleigh Sports, as found." /> <figcaption>The Raleigh Sports, as found.</figcaption> </figure> <p>And then this Raleigh turned up, literally asking to be picked up from the curb. Who could resist a <em>free</em> Raleigh Sports? So, after taking just enough time to be sure it was mostly all there, I drug it home.</p> <p>And I quickly discovered there were reasons it was free. It was really in pretty rough shape. I expected the tires to be flat, and for it to be grimy. Honestly for free, I didn't expect much, but figured even if it was a total bust I could just tuck the Sturmey-Archer three-speed hub away for some future project.</p> <p>Even so, I really didn't know what I was getting myself into.</p> <p></p><p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p><p></p> <div class="photogrid"> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/chainguard.jpg" alt="The battered chainguard appeared to be held on mostly with grime, and that three-speed cable may be past its prime. The decal style places it somewhere in the mid-70s, probably." /> <figcaption>The battered chainguard appeared to be held on mostly with grime, and that three-speed cable may be past its prime. The decal style places it somewhere in the mid-70s, probably.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/rear.jpg" alt="The rear fender is similarly battered and rusty." /> <figcaption>The rear fender is similarly battered and rusty.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/bars.jpg" alt="Lots of surface rust and grime." /> <figcaption>Lots of surface rust and grime.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/dirt.jpg" alt="So filthy. So very, very filthy." /> <figcaption>So filthy. So very, very filthy.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/raleigh/spoke.jpg" alt="I think I should be seeing a spoke here. Amazingly, the Raleigh steel rim was still surprisingly true." /> <figcaption>I think I should be seeing a spoke here. Amazingly, the Raleigh steel rim was still surprisingly true.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/raleigh/pedal.jpg" alt="The original Raleigh pedals should clean up well. They were really built to last." /> <figcaption>The original Raleigh pedals should clean up well. They were really built to last.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/raleigh/small-parts.jpg" alt="All the smart parts are put in bins and tagged as needed to keep track of them. Yes, there are a lot of loose bearings in a Raleigh headset." /> <figcaption>All the smart parts are put in bins and tagged as needed to keep track of them. Yes, there are a lot of loose bearings in a Raleigh headset.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/raleigh/bb-clamp.jpg" alt="Two days with a heavy-duty clamp and penetrating oil, and still, one of the cotter pins would not budge." /> <figcaption>Two days with a heavy-duty clamp and penetrating oil, and still, one of the cotter pins would not budge.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/raleigh/cotter.jpg" alt="Eventually I had to resort to drilling it out. Which was as terrible as you might imagine." /> <figcaption>Eventually I had to resort to drilling it out. Which was as terrible as you might imagine.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/raleigh/bugs.jpg" alt="When I finally got the bottom bracket apart, I found the remains of a whole colony of approximately ball-bearing-sized insects in there." /> <figcaption>When I finally got the bottom bracket apart, I found the remains of a whole colony of approximately ball-bearing-sized insects in there.</figcaption> </figure> </div> <p>Once it was in the shop getting disassembled, I got to learn a few quirks of old Raleighs:</p> <ul> <li>They're ridiculously overbuilt. Even though the '70s versions (like this one) cut a lot more corners than the legendarily well-made '50s versions, it was still clearly a bicycle that was built to last. Which means even parts that seem way too far gone to save tend to clean up well, most times.</li> <li>None of your wrenches will fit. Raleigh used their own standards and if either a metric or standard wrench fits, it's down to luck and coincidence, so you best have a collection of good adjustable wrenches. <a href="https://amzn.to/2FbQxE7">I like this Channel-Lock, which doubles as a cone nut wrench</a>.</li> <li>There are a ridiculous number of ball bearings in old Raleighs, and they're all loose. Be sure you're ready to catch them all when you open up the headset, bottom bracket, or basically anything else.</li> </ul> <h3 id="reassembly" tabindex="-1">Reassembly<a class="tdbc-anchor" href="https://another.rodeo/raleigh-sports/#reassembly" aria-hidden="true">#</a></h3> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/frame.jpg" alt="The Raleigh Sports frame, polished up." /> <figcaption>The Raleigh Sports frame, polished up.</figcaption> </figure> <p>The Raleigh had clearly been left outside, unloved, for a long time. There was a thick layer of grime and tree sap that had sun-baked deep into the paint. Cleaning it was a multistep process:</p> <ol> <li>Household multi-purpose cleaner and a <a href="https://amzn.to/2PIvM55">blue non-scratch scrubbing pad</a> to get the surface grime off.</li> <li><a href="https://amzn.to/33BFbmV">Turtle Wax Heavy Duty Rubbing Compound</a> to try to cut the paint back to the original Lemon Yellow as much as possible. This was only somewhat successful.</li> <li><a href="https://amzn.to/33BkKql">Turtle Wax polishing compound</a> to bring some shine back to the paint.</li> </ol> <p>In the end, the paint is still pretty chipped and scraped, but it's yellow again, and shiny, and the patina does have appeal.</p> <p>The fenders went through the same process, although they had an extra step of bending and hammering the metal back into some semblance of shape. I am not a metalworker by any means, but anyone with a little care can do some basic things to make the metal at least a bit more presentable. One of these days I'll get myself a proper <a href="https://amzn.to/2DOTMk9">set of metalworking hammers and dollies</a>.</p> <p>For the chrome parts, I sprayed a penetrating oil and scrubbed with fine steel wool. That's always worked well for me. Once the grime and surface rust was gone, <a href="https://amzn.to/2XEvGQl">Mother's metal polish</a> brought back the shine.</p> <div class="photogrid"> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/heron-before.jpg" alt="The 'heron' chainring was in pretty rough shape." /> <figcaption>The 'heron' chainring was in pretty rough shape.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/heron-after.jpg" alt="But it cleaned up surprisingly well." /> <figcaption>But it cleaned up surprisingly well.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/brakes-before.jpg" alt="The brakes, as found." /> <figcaption>The brakes, as found.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/brakes-after.jpg" alt="And after cleaning, ready for reassembly." /> <figcaption>And after cleaning, ready for reassembly.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/brakes-on.jpg" alt="The brakes back on the bike, along with the revived front fender." /> <figcaption>The brakes back on the bike, along with the revived front fender.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/fenders.jpg" alt="Here you can see the in-process front fender alongside the as-found rear fender and chainguard. The chainguard may be a lost cause." /> <figcaption>Here you can see the in-process front fender alongside the as-found rear fender and chainguard. The chainguard may be a lost cause.</figcaption> </figure> </div> <h3 id="the-rear-wheel-spoke-replacement-tensioning-and-trueing" tabindex="-1">The rear wheel - spoke replacement, tensioning and trueing.<a class="tdbc-anchor" href="https://another.rodeo/raleigh-sports/#the-rear-wheel-spoke-replacement-tensioning-and-trueing" aria-hidden="true">#</a></h3> <p>The rear wheel was a special challenge, since it was missing a spoke. After measuring carefully I ordered <a href="https://amzn.to/2PGgxJI">heavy-duty spokes</a> and a <a href="https://amzn.to/3aildPw">spoke wrench</a>. Neither is anything fancy, but they were more than adequate for the task at hand.</p> <p>I knew most of the spokes were under-tensioned, but had to do some research on how to easily check the tension. I was pretty happy when I learned <a href="https://www.sheldonbrown.com/spoke-pitch.html">you can &quot;tune&quot; spokes to notes on the scale</a>. With that knowledge in hand, I grabbed a <a href="https://amzn.to/3aiPDAZ">Snark tuner</a> and an <a href="https://amzn.to/3ivQAcb">Irwin Quick Grip</a>,and went to town. The Snark was clipped it to the seatstay to easily see the note the spoke was ringing out, while the Quick Grip accurately held the newly polished brake calipers in position.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/trueing.jpg" alt="Trueing the wheel, home-style." /> <figcaption>Trueing the wheel, home-style.</figcaption> </figure> <p>I can't claim the end results are pro-level, but I can't complain, either. The rim stays off the calipers and is pretty darn close to straight. Not bad for a first timer. It doesn't hurt that those heavy steel Raleigh wheels are pretty forgiving.</p> <h3 id="final-steps" tabindex="-1">Final steps<a class="tdbc-anchor" href="https://another.rodeo/raleigh-sports/#final-steps" aria-hidden="true">#</a></h3> <p>With the wheel straightened out, the rest of the rebuild was largely replacing the wear-item parts on it, including a new <a href="https://amzn.to/2PMnyJ7">KMC single-speed chain</a>, some <a href="https://amzn.to/2CiEGmy">faux-leather grips</a>, new <a href="https://amzn.to/31J0U9Z">yellow brake and shifter cables</a> and <a href="https://amzn.to/2DM7ogr">inexpensive brake pads</a>.</p> <p>I also had to buy <a href="https://amzn.to/2DSbrHF">new cotter pins</a> to replace the ones I destroyed in the removal process.</p> <p>And with that, it was done.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/raleigh-done.jpg" alt="The finished product." /> <figcaption>The finished product.</figcaption> </figure> <p>Truth be told, the frame is way too big for me and I'll probably end up selling it, letting it go to a new home and fund the next project. But for now, I'm enjoying it as it is. I call it &quot;Lemon&quot;.</p> <h3 id="august-2020-goodbye-raleigh" tabindex="-1">August 2020: Goodbye, Raleigh<a class="tdbc-anchor" href="https://another.rodeo/raleigh-sports/#august-2020-goodbye-raleigh" aria-hidden="true">#</a></h3> <figure class="image "> <img src="https://another.rodeo/img/bikes/raleigh/raleigh.jpg" alt="The completed Raleigh ." /> <figcaption>The completed Raleigh .</figcaption> </figure> <p>I really enjoyed rebuilding the Raleigh Sports and learning so much more of the lore of these fascinating bikes and their indestructible three-speed hubs (<a href="https://sheldonbrown.com/retroraleighs/">thank you Sheldon Brown!</a>) I really liked riding it around, too. The upright position, the smoothness of the internal gearing, the <em>character</em> of it, all that appealed. I found it thoroughly charming and enjoyed almost every minute of the restoration (except those cotter pins), especially since this particular example was so close to the brink before I brought it back.</p> <p>But really, it's quite a bit too big for me, and I can't keep them all. So on the market it went. And as it turned out it went to a very nice young lady who's already an avid rider, but wanted something fun and funky for around town. The lemon yellow Raleigh seems to fill the bill perfectly, so I think it went to a good home. I hope it's good to her for a long time. Raleigh sure built them to last.</p> </content>
</entry>
<entry>
<title>Making a smart vintage camper</title>
<link href="https://another.rodeo/smart-camper/"/>
<updated>2021-05-07T00:00:00Z</updated>
<id>https://another.rodeo/smart-camper/</id>
<content type="html"><p>In early 2020, with my <a href="https://another.rodeo/71-eco-restoration/">restoration of a 1971 fiberglass &quot;egg&quot; camper well underway</a> I started thinking about how it could be fun to bring some modern technology to it. I mean, if you could bring modern automation, monitoring and entertainment to a 50-year-old travel trailer, how cool is that?</p> <p>All of the code for this project is in the <a href="https://github.com/tBaxter/pi-smart-camper">pi-smarter-camper repo</a>.</p> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> <p>To get started, I looked at a Raspberry Pi I had recently picked up (back when you could still do that), it seemed like it would make the perfect base. It's small, affordable, works well on low voltage and is basically built for the sort of experimenting I'd be doing.</p> <p>So I took a good guess at what I'd want and started putting some parts together in a a decent-sized <a href="https://amzn.to/31TiPL3">water-resistant enclosure</a>. It was bigger than I needed, but would still tuck neatly into the bottom of the closet in the trailer, by the wheel well.</p> <p>Inside the box I mounted a Pi 4 using lightweight (and corrosion resistant) <a href="https://amzn.to/2SfGh1w">nylon stand-offs</a>. I could probably have used a cheaper Pi but I thought the 4 would provide the best media server capabilities, and best handle multi-tasking other things I want to do.</p> <p>I put in a 250GB <a href="https://amzn.to/37fqeFi">SSD drive</a>, chosen because it was reasonably cheap, appeared to be rugged and supported fast USB 3.1. I needed a drive to hold all the media files. I drilled out the faux bolts in the corners and then mounted the actual drive to the enclosure lid using stainless steel machine screws and acorn nuts.</p> <p>A simple <a href="https://amzn.to/2OKVRAb">12V-5V stepdown converter</a> took the camper's 12V system power down to something Pi-Friendly. I also added a <a href="https://amzn.to/3bqPrQs">Power button with LED</a> to safely power the Pi up and down. The button is recessed so it won't get toggled accidentally as the trailer jostles around, and it incorporates an LED so I can see if the PI is on or not. Pretty spiffy.</p> <p>I also ordered a <a href="https://amzn.to/2QcVRJR">15.6&quot; touchscreen monitor</a>. It checked all the boxes for my purposes:</p> <ul> <li>Touchscreen, so it can act as a control center</li> <li>Large enough and high enough resolution (1920x1080) to comfortably watch movies while in bed.</li> <li>Will fit on the closet door</li> <li>Single USB-C cord for power and data</li> </ul> <h3 id="wiring-a-pi-power-switch" tabindex="-1">Wiring a Pi power switch<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#wiring-a-pi-power-switch" aria-hidden="true">#</a></h3> <p>Wiring up a Pi power switch seems like it should be the simplest thing imaginable. It is not. That said, it's not <em>that</em> hard once you sort through a gazillion how-to guides to find the one that makes sense. There are nice, helpful scripts in the the <a href="https://github.com/Howchoo/pi-power-button">Pi Power Button repo</a> and <a href="https://howchoo.com/g/mwnlytk3zmm/how-to-add-a-power-button-to-your-raspberry-pi">related instructions</a>, which make the scripting part pretty straightforward.</p> <p>The key is to use a momentary switch with a resistor built in, so you're protecting the Pi. I used <a href="https://amzn.to/3bqPrQs">this power button with LED</a> and have been happy with it.</p> <p>Note when you're following the instructions, the files don't have to be written -- they're in the repo. Just use <code>cp</code> to move them where you need them and be sure to <code>chmod</code> them to set the permissions. <a href="https://howchoo.com/g/ytzjyzy4m2e/build-a-simple-raspberry-pi-led-power-status-indicator">A simple tutorial</a> took care of the LED portion of the switch.</p> <p>One catch: because there's a power switch and an LED, you have to think through the GPIO pins a little more. I used 5 and 6 for the Power button, as outlined in the instructions, then used 8 and 14 for the LED.</p> <h3 id="installing-a-motion-sensing-camera" tabindex="-1">Installing a motion sensing camera<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#installing-a-motion-sensing-camera" aria-hidden="true">#</a></h3> <p>I wanted to have a motion sensing camera by the front door of the camper to provide a layer of security when we're not there. I'd already prototyped one with a Pi Zero -- that was my first Pi project -- so it seemed like a good place to start here, too.</p> <p>I needed to drill two holes in the cabinet side wall, one each for the PIR sensor and one for the camera. This hurt a bit, since I had filled dozens of holes in the fiberglass since I got the trailer, but I figured I'd filled so many holes, what's a couple more if I needed to fill them later. A <a href="https://amzn.to/2Ucun8J">step drill bit</a> really helps for these sorts of things, and it made short order of making a couple of accurately sized holes.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/holes.png" alt="My accurately placed and sized holes." /> <figcaption>My accurately placed and sized holes.</figcaption> </figure> <p>Inside the closet, I continued to ignore the long-unpainted fiberglass (you can't see it anyway) and used a bit of <a href="https://amzn.to/2WgVp1m">butyl tape</a> to hold the PIR sensor in place. Butyl tape is amazing stuff. If you have a travel trailer, you really should have some on hand.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/putty.png" alt="Butyl tape to hold the PIR sensor in place." /> <figcaption>Butyl tape to hold the PIR sensor in place.</figcaption> </figure> <p>To get from the camera and sensor at the top of closet to the Pi, which lives in a box at the bottom, I had to pick up a <a href="https://amzn.to/2Wi8lnl">two-meter Pi camera ribbon cable</a> and splice in a lot of extra wire to run from the PIR sensor to the GPIO pins. I used some white duct tape to keep it held safely in an existing channel at the side of the door.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/splice.png" alt="I color-matched the wires and put heat-shrink on the splices. The exrtra-long ribbon cable for the camera is also visible." /> <figcaption>I color-matched the wires and put heat-shrink on the splices. The exrtra-long ribbon cable for the camera is also visible.</figcaption> </figure> <p>Then I used a Dremel cut-off wheel to cut a groove in my project box and fed the wires in, with more butyl tape to keep dust and moisture out.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/box-wiring.png" alt="Almost all wired up." /> <figcaption>Almost all wired up.</figcaption> </figure> <p>From there, it was just a matter of hooking up the ribbon cable and the PIR. The ribbon cable is easy and for the PIR there are only three pins: One of them goes to a 5v pin on the GPIO, one goes to ground, and the center output pin. In my case, the code expects it to be Pin 7.</p> <h4>Testing the motion sensor hardware</h4> <p>With both the camera and the PIR motion sensor wired in, I wanted to test it before going further.</p> <p>When I SSH into the Pi, I <em>should</em> have been able to run <code>raspistill -o testshot.jpg</code> from the command line. But since this was a fresh Pi, I got a <code>Camera is not enabled in this build</code> error. I needed to <code>sudo raspi-config</code> and turn it on.</p> <p>But after that, I still saw <code>Camera is not detected.</code> Time to go double-check the wiring. Sure enough, I inserted the ribbon cable backwards, like I <em>always</em> do. <a href="https://projects.raspberrypi.org/en/projects/getting-started-with-picamera/2">Rasperry Pi tries to make it idiot-proof</a> but apparently I am a special kind of idiot.</p> <p>After double-checking all connections <code>raspistill -o testshot.jpg</code> was running correctly. Now it's time to write some software.</p> <h4>The motion sensor code</h4> <p>All of the code is in the <a href="https://github.com/tBaxter/pi-smart-camper">pi-smarter-camper repo</a>. Inside the <a href="https://github.com/tBaxter/pi-smart-camper/blob/master/webapp/app.py">Flask app.py file</a> there's a fair bit of setup going on.</p> <p>In <code>index</code> we're creating a lot of variables that are, by default, nothing. But if they get set later we'll be able to show the status.</p> <p>The real meat of it is happening down in <code>camera_action</code>, which lets us toggle the camera off and on.</p> <p>In particular, if we're turning the camera and motion detection on, we're starting it in a thread in the background, so the webapp can go ahead and continue to do its thing.</p> <p>When we start the camera, we're calling <code>start_motion_detection</code> from <code>monitoring/motion_sensing.py</code>. This is made much simpler thanks to the <code>gpiozero</code> library.</p> <p>Basically, the <code>start_motion_detection</code> function initializes things, starting up the motion detection and configuring the camera. Then, when some movement is detected it uses a lambda to call <code>take_photo</code> and actually store a photo locally.</p> <p>Back in the <code>app.py</code> actions function, the second half just handles clean shutdown. If we turn the camera off, we want to be sure we cleanup on the Pi and leave everything as tidy as possible.</p> <p>Either way, we redirect back to <code>index</code>, now with those variables populated so we can show what we just did. Now I needed a way to show the camera status. A control center, if you will.</p> <h3 id="setting-up-a-local-web-server" tabindex="-1">Setting up a local web server<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#setting-up-a-local-web-server" aria-hidden="true">#</a></h3> <p>The goal here is to be able to monitor the status of things from anywhere, anytime. The easiest way I know to make that happen is with a web server and app.</p> <p>Normally, Django is my go-to framework for web app work, but in this case I decided to use Flask for a few reasons:</p> <ol> <li>It's really lightweight, which makes sense with the modest demands of the app and the modest resources of the Pi.</li> <li>I hadn't used it before, so there was a nice learning opportunity.</li> </ol> <p>Keep #2 in mind, though, when you look at my terrible Flask code.</p> <p>There are quite a few tutorials on how to <a href="https://randomnerdtutorials.com/raspberry-pi-web-server-using-flask-to-control-gpios/">set up Flask on a Pi</a>, but it's pretty straightforward.</p> <p>First, make sure everything is updated and upgraded, and install Flask:</p> <pre><code>sudo apt-get update sudo apt-get upgrade sudo apt-get install python-pip python-flask sudo pip install flask </code></pre> <p>Now, if you were starting from scratch, at this point you'd want to follow a Flask tutorial. But since I have an existing Github repository I can use that will save me a ton of time.</p> <p>First I navigate to where I want the code: <code>cd /var</code></p> <p>I want the code to be in <code>/var/www</code> but the <code>www</code> folder doesn't exist by default. That works well, though, as it gives me a clean place to clone my repository and create the <code>www</code> directory all at once with <code>sudo git clone https://github.com/tBaxter/pi-smart-camper.git www</code></p> <p>You have to run that as <code>sudo</code> to be able to create the <code>www</code> folder you're cloning into, but once you've done that, you can transfer ownership to the regular <code>pi</code> user with <code>sudo chown -R -f pi /var/www/</code></p> <p>If you <code>cd www</code> to go into your new <code>www</code> directory, and then use <code>ls</code> you should see <code>cellular_modem</code>, <code>LICENSE</code>, <code>monitoring</code>, <code>README.md</code> and <code>webapp</code> just like you would if you visited <a href="https://github.com/tBaxter/pi-smart-camper">the repo</a>.</p> <p>From there, you can move into the <code>webapp</code> directory (<code>cd webapp</code>) and start up your Flask app with <code>python3 app.py</code>. If everything is working correctly, you should see something like:</p> <pre><code> * Serving Flask app &quot;app&quot; (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: on * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) </code></pre> <p>From there, go to your browser and substitute the IP address for your Pi (the one you SSH'ed into) for 0.0.0.0 and you should see your new site, running on your Pi web server.</p> <p>If this was a real server on the open web you'd want to use Gunicorn or something, but since traffic is limited to just me on a local machine it's fine.</p> <h3 id="adding-the-touchscreen" tabindex="-1">Adding the touchscreen<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#adding-the-touchscreen" aria-hidden="true">#</a></h3> <p>For this project, my first thought for a screen was to use an old first-generation iPad I had laying around. Cost was zero, since I already had the iPad (and a first-generation iPad has nearly no value anymore). And I did manage to connect it up to the Pi and show the screen, which felt like a win, but still, it wasn't a great solution.</p> <ul> <li>It had to connect to the Pi over the network via VNC. With it being a very old iPad, that made it painfully slow.</li> <li>It was also too small to comfortably watch anything on from any distance.</li> <li>Since it was connecting over a network it required a network I might not have when I was camping.</li> <li>It wasn't <em>really</em> interfacing with the Pi. It was still running IOS, so my touchscreen abilities were kind of limited.</li> <li>On top of all that, mounting it in the door was going to tax my meager woodworking skills.</li> </ul> <p>So with that experiment set aside, I got thinking about the touchscreen I really wanted.</p> <ul> <li>Bigger, but not too big. I need it to be small enough to mount on the closet door, but easily viewable from the bed.</li> <li>Standard VESA mounts for simple installation.</li> <li>Powered by 12v or less. I'm not running 110v line just for the monitor.</li> <li>Very thin and lightweight. Since it's mounted on the closet door, the closer to a flush mount the better.</li> <li>Simple, direct interface with the Pi.</li> </ul> <p>After digging around a bit I landed on this <a href="https://amzn.to/2JaG7n5">15.6&quot; USB-powered touchscreen</a>. Connecting it to the Pi was pretty straightforward and the monitor was mostly plug-and-play.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/monitor.png" alt="Testing the touchscreen monitor." /> <figcaption>Testing the touchscreen monitor.</figcaption> </figure> <p>There was one wrinkle: while the monitor is USB-powered and promised to support both touch and video over a single cable, I learned the Raspberry Pi 4 does <em>not</em> support video over USB. Which means I'd need to use a separate HDMI cable. My closet door mounting got a bit more complicated. And ugly.</p> <p>Worse yet, in the interests of making a very thin monitor, all the plugs come out the side. Having two cords poking out of the side of this thing is not the look I'm going for. To mitigate this I bought a <a href="https://amzn.to/3dqFhAw">right-angle HDMI cord</a> and a <a href="https://amzn.to/2UiYOLL">low-profile USB-C cord</a>.</p> <p>As for actually mounting the monitor, that part was pretty simple. I found a <a href="http://geldner.com/wp-content/uploads/2016/11/VESA-100mm-75mm-Template.pdf">VESA mount template</a> online and taped it to the door to figure out where to drill.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/vesa-template.png" alt="VESA mount template." /> <figcaption>VESA mount template.</figcaption> </figure> <p>It's hard finding anything level or square in one of these old trailers and it was tricky accounting for where the hole for the cords needed to be. If I was doing it again I'd figure out how to put the template on a monitor-sized piece of paper, so I could get a better sense of the overall positioning of things, rather than just the mount points.</p> <p>For the actual mounting I used <a href="https://amzn.to/2QIm43i">stainless steel M4 screws with integrated washers</a>. I make a point of using stainless as much as possible in the trailer.</p> <h3 id="creating-a-dashboard" tabindex="-1">Creating a dashboard<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#creating-a-dashboard" aria-hidden="true">#</a></h3> <p>With the monitor now in place a lot of things are starting to come together, and it was time to put them all in a dashboard control center for the trailer. I'm going to skip most of the gory details of the code -- <a href="https://github.com/tBaxter/pi-smart-camper">it's all available on Github</a> -- and instead just talk about what it does.</p> <p>The first trick to the dashboard is to <a href="https://pimylifeup.com/raspberry-pi-kiosk/">turn the Pi's Chromium Browser into a full-screen kiosk</a>, which lets us build a web page that looks and acts like a full-screen experience.</p> <p>From there, we'll use the Flask web app we set up earlier to talk to the Pi's hardware and to serve the &quot;web page&quot; that forms the basis of our dashboard.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/dashboard.png" alt="The dashboard" /> <figcaption>The dashboard</figcaption> </figure> <h4>Weather</h4> <p>The weather module first geolocates the trailer, so it automatically knows where to get the weather for. Then it uses OpenWeather to get the local weather for that area. I need to add in weather alerts still, but this works pretty well.</p> <h4>Plex</h4> <p>The Plex module, so far, is the trickiest. It's easy enough to get Plex basic info from the Plex API, but harder to get images, and I'm still working through how to best play a video from there. Even so, it alreaady can show what you were last watching and unwatched movies. I'm still working on this one.</p> <h4>Camera</h4> <p>A nice interface to turn the motion-sensing camera on and off, and to report on its status.</p> <h4>Wifi Status</h4> <p>Shows the current Wifi network and it's strength. I've written the code to show nearby networks, too, but I'm not displaying that part yet. This was planned to be the stub for building out more robust Wifi &amp; virtual private network functionality in order to provide safer, stronger wifi for the trailer.</p> <h4>Time/date/messages</h4> <p>Doesn't do a whole lot yet other than show the local date and time. But it's a useful start.</p> <p>I've got a lot of work to do on all these modules still, but it's not a bad start for a weekend's worth of work! If you have questions, comments, suggestions or whatever, <a href="https://github.com/tBaxter/pi-smart-camper/issues">file an issue on Github</a>.</p> <h3 id="trimming-the-touchscreen" tabindex="-1">Trimming the touchscreen<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#trimming-the-touchscreen" aria-hidden="true">#</a></h3> <p>With the monitor VESA-mounted to the door, it was fucntional, but I needed to do something about the ugly cords coming out of the side. Looking at the scrap wood pile, I had a revelation. I saw some left-over L-shaped wood outer corner trim that could be cut down to the screen depth and work.</p> <p>After carefully measuring and cutting, I glued it together with spare wood providing some extra spacing and strength.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/clamped-frame.png" alt="Clamping and gluing the frame." /> <figcaption>Clamping and gluing the frame.</figcaption> </figure> <p>I drilled a hole in the lower corner for a piece of dowel that allowed me to still press the on/off button. Then I painted it white and screwed it in place from the back.</p> <figure class="image "> <img src="https://another.rodeo/img/camper/screen-frame.png" alt="The completed touchscreen frame." /> <figcaption>The completed touchscreen frame.</figcaption> </figure> <h3 id="setting-up-audio" tabindex="-1">Setting up audio<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#setting-up-audio" aria-hidden="true">#</a></h3> <p>This whole project had more than it's share of trials, setbacks, false starts and dead ends. If this sort of thing was easy, more people would have done it already. Getting usable audio in the trailer was definitely one of the big hurdles.</p> <p>I mean, I had a wonderful touchscreen and a Pi running Plex to show movies, and a new problem: I couldn't hear it. The meager speakers in the monitor were mostly covered by the frame around it, and it didn't matter because the Pi couldn't really push enough volume anyway.</p> <p>Figuring I didn't need audiophile quality just to watch a movie at bedtime or if it's raining, but I <em>did</em> want to put a premium on low-weight, low-cost, low-power solutions, I ordered a Kinter MA170 amp from eBay and some <a href="https://amzn.to/3gteWmD">nice little marine speakders</a>.</p> <p>I committed to doing it and cut holes for the speaker in the new closet door I had just made a couple of months earlier. Wired it all up and... it sounded horrible. Just horrible. A whiney, popping mess. All noise, no audio to speak of.</p> <p>So I spent money on <a href="https://amzn.to/2XuYYzX">noise suppressor clips</a> that helped, but not much.</p> <p>And I bought a <a href="https://amzn.to/3ekQRfT">HifiBerry</a> which, honestly, seems to solve a different problem. If I'd bought the version with a built-in amp it might have been just the ticket, but I'm unlikely to find out now. This was also a particularly painful dead-end because I spent a long time unwinding the audio settings it needed changed, and I'm still not sure I've got that completely sorted out.</p> <p>Then I bought a <a href="https://amzn.to/2ZQVWZJ">noise isolator</a> which also helped, but not enough.</p> <p>I mucked around with the power feed, with all sorts of settings (both in hardware and with software) and generally tried everything until finally I figured that everything was playing nicely, albeit with low volume, except the amp. So I broke down and bought another amp.</p> <p>And this turned out to be a <a href="https://amzn.to/2TIMYcV">nice little amp for the purpose</a>. The noise problem was gone immediately, it's plenty loud for the trailer and the sound quality is pretty good, even through the diminutive speakers. It turns out the original Kintner amp was just trash, which is why I won't link to it. The new amp works great, though. I'm happy.</p> <h2 id="addendum-setting-up-the-pi-from-scratch-as-of-may-2021" tabindex="-1">Addendum: Setting up the Pi from scratch (as of May 2021)<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#addendum-setting-up-the-pi-from-scratch-as-of-may-2021" aria-hidden="true">#</a></h2> <p>After using the camper through 2020 -- and utterly failing to document any of it -- I had some ideas on how I could do it better this year. In particular, I found that the thing I used the Pi for most (movies) wasn't working well. I was getting a lot of buffering and audio issues that were unpredictable and frustrating. Sometimes it worked fine. Others, not so much.</p> <p>So I figured I'd start from the ground up with an OS optimized for media playback. LibreElec, here we come! Why LibreElec? Because it's lightweight, built for media, and as I'm writing this OSMC still doesn't want to play nice with the Pi 4.</p> <p>So with that said, on with the setup (and a lot of this will look very much like last year's guide).</p> <hr /> <p>There are a million and two ways to set up a Pi, but here are the steps I think need to be done every time to set up a Pi from scratch to work well as a Smart Camper media and information hub (recorded here for my own future reference as much as anything).</p> <p>These steps may also be useful for other Pis acting as similar hubs, such as Magic Mirrors or car-puters.</p> <h3 id="first-get-an-os-on-the-pi" tabindex="-1">First, get an OS on the Pi<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#first-get-an-os-on-the-pi" aria-hidden="true">#</a></h3> <ol> <li>Use <a href="https://www.raspberrypi.org/blog/raspberry-pi-imager-imaging-utility/">Raspberry Pi Imager</a> to install LibreElec on a good-quality, 32GB SD card. LibreElec is lightweight and optimized for media playback, and we think it will better suit how we use the Pi when we're camping.</li> <li>Put the new card in the Pi and boot up. Assuming it starts OK, go through the first-run setup steps.</li> <li>Set a good password.</li> <li><a href="https://pimylifeup.com/raspberry-pi-ssh/#enablesshdesktop">Be sure to enable SSH</a></li> <li>And <a href="https://pimylifeup.com/raspberry-pi-static-ip-address/">set a static IP</a>. You'll be glad you did and aren't chasing ever-changing IP addresses set by your router. Note that your ISP and router may require additional work to make this happen.</li> </ol> <h3 id="install-plex" tabindex="-1">Install Plex<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#install-plex" aria-hidden="true">#</a></h3> <ol> <li>Ensure the external drive containing the media library <a href="https://pimylifeup.com/raspberry-pi-mount-usb-drive/">is mounted and will mount automatically</a>.</li> <li><a href="https://pimylifeup.com/raspberry-pi-plex-server/">Follow the steps to prep for Plex server installation</a>:<code>sudo apt-get install apt-transport-https curl https://downloads.plex.tv/plex-keys/PlexSign.key | sudo apt-key add - echo deb https://downloads.plex.tv/repo/deb public main | sudo tee /etc/apt/sources.list.d/plexmediaserver.list deb https://downloads.plex.tv/repo/deb public main</code></li> <li>Update packages: <code>sudo apt-get update</code>.</li> <li>Now get the Plex server: <code>sudo apt-get install plexmediaserver</code></li> <li>And upgrade: <code>sudo apt-get upgrade</code>. In the past I've cleaned up some unneeded packages, but honestly, it's probably not worth it. They're not hurting anything, really.</li> </ol> <h3 id="pi-configuration-and-further-installations" tabindex="-1">Pi Configuration and further installations<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#pi-configuration-and-further-installations" aria-hidden="true">#</a></h3> <ol> <li>Reset the resolution to 1440x900 (at 1920 it's too fine for fat fingers)</li> <li>Enable 1-wire interfacing, either through the <code>raspi-config</code> &quot;interfacing&quot; option or by manually editing the config.</li> <li><a href="https://www.raspberrypi.org/documentation/configuration/screensaver.md">Install xscreensaver</a>. It's by far the easiest way to control when the Pi and display go to sleep.</li> </ol> <h3 id="code-setup" tabindex="-1">Code setup<a class="tdbc-anchor" href="https://another.rodeo/smart-camper/#code-setup" aria-hidden="true">#</a></h3> <ol> <li>Pull my smarter camper code from the repo.</li> <li>Make sure it's on pythonpath: <code>export PYTHONPATH=&quot;${PYTHONPATH}:$HOME/var/www&quot;</code></li> <li>And just to be sure, put it in <code>~/.bashrc</code> too.</li> <li>Pip install dependencies from the repo's requirements file: <code>pip3 install -r REQUIREMENTS.txt</code></li> <li>Set environment variables for services we're using. See settings.py for details.</li> <li>Follow the instructions above to re-install the web server and monitoring page</li> </ol> </content>
</entry>
<entry>
<title>Peugeot mixte restoration</title>
<link href="https://another.rodeo/peugeot-ph19-mixte/"/>
<updated>2021-07-23T00:00:00Z</updated>
<id>https://another.rodeo/peugeot-ph19-mixte/</id>
<content type="html"><p>For awhile now I've been on the hunt for a nice step-through framed bike. My criteria weren't that tough: be pretty, and not terrible. Apparently in the world of step-through frames that seems to be a tall order.</p> <p>The fact is step-through frames -- even mixtes -- still have way too much of a &quot;girl bike&quot; stigma, and cycling in general has a tendency to treat women (and &quot;girl bikes&quot;) as second-class members of the community. You see it all the time: some guy is out front with the latest carbon-fiber Terminator 6000 SEX 40-speed wonder while his girlfriend/spouse lags behind on a 500-pound cruiser, struggling to keep pace, 'cause he's <em>much more serious a cyclist</em>.</p> <p>Hang on, it's hard to type with my eyes rolling so far into the back of my head.</p> <p>Anyways, back to the subject at hand: the difficulty in finding a decent step-through frame. I had been looking awhile, but nothing quite worked.</p> <p>I narrowly missed a pair of nice Bianchis, much to my chagrin. I had an eye on two different Raleighs, but neither quite spoke to me. And I suspect both may have been real heavyweights -- not what I was after. I spotted a nice Miyata and a Univega, but both weren't really priced like project bikes (although the Univega should have been).</p> <p>Finally, on a whim I inquired about this forlorn Peugeot that had been listed on the local marketplace a full year ago. Astoundingly, it was still available, and could be mine for couch-cushion money. So I grabbed it.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/peugeot.jpg" alt="The Peugeot, as found on the local marketplace site., immediately after transport to my basement. The blue tape and plastic bag on the rear wheel is holding parts of the rear derailleur." /> <figcaption>The Peugeot, as found on the local marketplace site., immediately after transport to my basement. The blue tape and plastic bag on the rear wheel is holding parts of the rear derailleur.</figcaption> </figure> <p>To be honest, it's not a great Peugeot. It's an OK Peugeot. I thought it was pretty and nice enough. After some research (and discovering the paper tag still intact on the bottom bracket) I learned this particular Peugeot is something of a rare bird (or lion, as the case may be): it's a circa 1982 PH19, as seen on <a href="http://www.bikeboompeugeot.com/Brochures%20USA/Peugeot%201982%20USA%20Brochure/Peugeot_1982_USA_Brochure_PH10s_PH19.jpg">this catalog page</a> and <a href="http://www.bikeboompeugeot.com/Brochures%20USA/Peugeot%201982%20USA%20Brochure/Peugeot%201982%20USA%20Special%20Flyer%20Page%204.jpg">this ad</a>.</p> <p>From those artifacts I gathered the PH19 was the mixte variant of the PH10. While the PH10 lasted a few years, I can't find any reference to the PH19 mixte variant after 1982. My guess is that Peugeot had too many mixtes in the mix and the PH19 was squeezed out.</p> <p>The PH10 and PH19 are a bit unusual for the era, too. Where their contemporaries would have had lugged frames, these Peugeots were lugless and internally brazed. Peugeot made a bit of a fuss about it at the time, claiming a step forward, but I could also see where it was simply a cost-cutting measure. Hard to say nearly 40 years later.</p> <div class="photogrid"> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/peugeot/carbolite.jpg" alt="The carbolite sticker tells you a lot about this ex-California bike: This was a high-tensile steel bike, sitting at the upper part of the lower end of the Peugeot line-up. The frame weighs in at 7 pounds even. so it's no lightweight, but the French could work magic with stovepipe frames." /> <figcaption>The carbolite sticker tells you a lot about this ex-California bike: This was a high-tensile steel bike, sitting at the upper part of the lower end of the Peugeot line-up. The frame weighs in at 7 pounds even. so it's no lightweight, but the French could work magic with stovepipe frames.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/peugeot/cluster.jpg" alt="One reason it was so cheap: the chain was so rusty the Simplex derailleur had a broken jockey pulley after someone had attempted to force it to move. Luckily the prior owner had kept the jockey pulley remnants in a ziploc bag helpfully taped to the rear wheel." /> <figcaption>One reason it was so cheap: the chain was so rusty the Simplex derailleur had a broken jockey pulley after someone had attempted to force it to move. Luckily the prior owner had kept the jockey pulley remnants in a ziploc bag helpfully taped to the rear wheel.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/peugeot/hub.jpg" alt="The hubs are Maillard, laced to pretty Rigida alloy 27" rims.="" Not="" terrible="" stuff,="" if="" I="" can="" get="" it="" to="" clean="" up.="" If="" not,="" will="" end="" up="" with="" a="" 700c="" conversion,="" but="" would="" rather="" keep="" the="" original="" French="" parts."="" /> <figcaption>The hubs are Maillard, laced to pretty Rigida alloy 27" rims. Not terrible stuff, if I can get it to clean up. If not, it will end up with a 700c conversion, but I would rather keep the original French parts.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/cranks.jpg" alt="There's a pretty nice Stronglight crankset, with a functional plastic chainguard. A Peugeot-branded Simplex derailleur handles shifting. It should clean up OK. The very rusty chain, however, is a goner." /> <figcaption>There's a pretty nice Stronglight crankset, with a functional plastic chainguard. A Peugeot-branded Simplex derailleur handles shifting. It should clean up OK. The very rusty chain, however, is a goner.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/bb.jpg" alt="This corrosion around the BB isn't nearly as bad as it looks here. It's really just surface rust and should be easily dealt with." /> <figcaption>This corrosion around the BB isn't nearly as bad as it looks here. It's really just surface rust and should be easily dealt with.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/headtube.jpg" alt="A good look at the lugless construction and clever Peugeot cable routing." /> <figcaption>A good look at the lugless construction and clever Peugeot cable routing.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/celo.jpg" alt="The original celophane bar tape. Almost everything in this photo will be dustbinned." /> <figcaption>The original celophane bar tape. Almost everything in this photo will be dustbinned.</figcaption> </figure> </div> <h3 id="november-2020-paint" tabindex="-1">November 2020: Paint<a class="tdbc-anchor" href="https://another.rodeo/peugeot-ph19-mixte/#november-2020-paint" aria-hidden="true">#</a></h3> <p>I knew when I bought the Peugeot it had some rust. I underestimated the extent of it. I should know better. I've made this mistake before. I'll probably make it again.</p> <p>Nevertheless, as I cleaned and scrubbed the bike I was clearly losing more and more of the original metallic blue paint until eventually I was clearly going to have to spray some paint.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/rust.jpg" alt="Rust on the Peugeot. Bad rust." /> <figcaption>Rust on the Peugeot. Bad rust.</figcaption> </figure> <p>I hoped to do a partial respray, but matching the light blue metallic proved difficult. Hobby stores couldn't help, and eventually I turned to pricey automotive paint. A local auto paint supply store custom mixed it for me, taking a color analysis of the fork I took in. Auto paint is high quality stuff, but the paint cost me three times what I paid for the bike. And they warned me it still might not be an exact match. It's tough color matching metallics. Any number of factors will throw it off, including temperature, humidity, and my own paint technique.</p> <p>But I had to try, and I dutifully taped off all the stickers and pinstriping and otherwise prepped the frame for spot painting.</p> <div class="photogrid"> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/peugeot/prepped.jpg" alt="I taped off everything I wanted to keep. If I was doing it again I'd have taped more." /> <figcaption>I taped off everything I wanted to keep. If I was doing it again I'd have taped more.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/peugeot/primer.jpg" alt="I used a high-build auto primer." /> <figcaption>I used a high-build auto primer.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/peugeot/sprayed.jpg" alt="And put the paint on carefully, with very light coats as recommended." /> <figcaption>And put the paint on carefully, with very light coats as recommended.</figcaption> </figure> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/nope.jpg" alt="and... nope. Color match fail." /> <figcaption>and... nope. Color match fail.</figcaption> </figure><p></p> </div> <p>It didn't work. No matter how I buffed and color sanded, there was a clear difference between the new and old paint and it was not going to feather in smoothly.</p> <p>Sigh.</p> <p>I was going to have to do a full respray. Which meant replacing all the graphics. I was convinced I'd never find the correct stickers and would have to bodge something together to make the Peugeot together.</p> <p>Luckily I found <a href="https://www.bicyclestickers.co.uk/collections/peugeot/products/00551-peugeot">the absolutely correct set of decals for this obscure Peugeot</a>. While I had to wait for them to come all the way from the UK, they were beautifully done, and I can happily recommend <a href="https://bicyclestickers.co.uk/">bicyclestickers.co.uk</a> for any sticker needs.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/measuring.jpg" alt="Measuring and prepping for paint. Again." /> <figcaption>Measuring and prepping for paint. Again.</figcaption> </figure><p></p> <p>Before I sprayed (again) I sanded everything back even more than I did the first time, and carefully measured the position of the existing decals, with lots of pictures.</p> <p>I really wanted to put it back together looking as close to original as possible, and once I had sanded and painted I wouldn't be able to see where they went. So I figured I'd better get it right before I went any further.</p> <p>Once prepped, it went out again for priming and painting. After letting the paint dry and harden a few days, I polished it up with <a href="https://amzn.to/33BkKql">Turtle Wax polishing compound</a> to bring out the shine.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/painted.jpg" alt="Painted and polished, and it looked beautiful." /> <figcaption>Painted and polished, and it looked beautiful.</figcaption> </figure><p></p> <p>And that worked. The original rust damage was invisible, and you could never tell the paint is a slightly different shade than the original. While I'm no professional painter, I'm very happy with how it came out.</p> <h3 id="december-2021-rebuilding-and-enjoying-the-peugeot" tabindex="-1">December 2021: Rebuilding and enjoying the Peugeot<a class="tdbc-anchor" href="https://another.rodeo/peugeot-ph19-mixte/#december-2021-rebuilding-and-enjoying-the-peugeot" aria-hidden="true">#</a></h3> <p>As I waited on the new decals to make their way across the pond from bicyclestickers.co.uk, I started work on all the components.</p> <p>I could tell the bike had been truly loved once. That had been awhile ago, though, and things were looking rough. It took a lot of time, effort and polishing compound.</p> <p>It's not perfect by any stretch, but it has a nice blend of shiny new and vintage patina, and it positively oozes Gallic charm. It's the kind of bike that makes you want to buy more just like it, even though you clearly already have one and don't need more.</p> <p>But that's the finished product. It took a lot to get there, as you can see in the before-and-after photos.</p> <p>Let's start with the rust. As noted previously, the rust on the frame wasn't deep, but it was extensive. Worse yet, the more I stripped back, the more rust I uncovered.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/rust.jpeg" alt="The rust that launched the respray." /> <figcaption>The rust that launched the respray.</figcaption> </figure><p></p> <p>If the bike had rusted from the inside-out then the frame would be junk. I think the California salt air attacked the paint, but not deeply.</p> <p>In the end, the automotive paint was expensive and worth it. The frame finished up very well, and the reproduction decals completed the look beautifully -- so much so that I picked white accents, including brake lines, to complement the white Peugeot logos.</p> <p>The PH19 and the closely related (and more common) PH10 were built from Peugeot's proprietary Carbolite 103 high-tensile steel. That should be a recipe for real pig of a bike, but the PH19 rides much lighter and feels lighter than it actually is. Normally I would be a hard pass on most high-tensile steel bikes. I'm glad I gave it a chance.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/103.jpeg" alt="Carbolite 103 tubing" /> <figcaption>Carbolite 103 tubing</figcaption> </figure><p></p> <p>The permit stickers tell us that at some point, long ago, this was a California bike before it found its way to the midwest and began a long period of neglect.</p> <p>The bottom bracket also showed a good bit of corrosion, but it was all surface rust, with no pits in the steel, and inside the bottom bracket wasn't rusty. It cleaned up well, as did the original Stronglight cranks. I added a new <a href="https://amzn.to/38whtt4">Greenfield kick stand</a> since it's just a kickstand sort of bike.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/bb.jpeg" alt="BB corrosion, before and after" /> <figcaption>BB corrosion, before and after</figcaption> </figure><p></p> <p>Speaking of the Stronglight cranks, they were one of the few bits that really just had some surface grime on them, so they cleaned up with very little effort. I did, however, have to pick up <a href="https://amzn.to/34zlaNq">new chainring bolts</a> since the originals were pretty far gone.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/cranks.jpeg" alt="Stronglight cranks, before and after" /> <figcaption>Stronglight cranks, before and after</figcaption> </figure><p></p> <p>The cranks and chainrings were just quickly dismantled and hit with a bit of <a href="https://amzn.to/2XEvGQl">Mother's polish</a> and they came out wonderfully. The alloy rings look like they've seen very few miles. Even the black plastic chainguard cleaned up well and was reused.</p> <p>The front derailleur is Peugeot branded but probably made by Simplex. The Peugeot sticker is a little yellowed, but that's just seems like a bit of patina.</p> <p>The derailleur itself polished right up and works well. The old chain was a goner, though, so a new <a href="https://amzn.to/3pg983v">KMC silver-finished chain</a> is in place now.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/front-der.jpeg" alt="Front derailleur, before and after" /> <figcaption>Front derailleur, before and after</figcaption> </figure><p></p> <p>The pedals looked absolutely terrible but they spun freely, had no end-play, and were fairly lightweight. They clearly must have been decent quality when new, and comparable new pedals would be out of the budget for this bike, if I could even find them. So I tried cleaning them up, with OK results.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/pedal.jpeg" alt="Pedals, before and after" /> <figcaption>Pedals, before and after</figcaption> </figure><p></p> <p>They're far from perfect, but they don't look bad and they still work very well. Of course I went ahead and repacked them with grease. Since pedals tend to get pretty abused, I chose some higher-quality <a href="https://amzn.to/3nV1kUR">Finish Line grease</a>.</p> <p>For polishing the pedals and other tight areas where my stubby fingers don't really fit, I picked up a new <a href="https://amzn.to/37GSrs3">rotary tool with a flexible shaft extension</a> and it's been one of my smarter recent tool purchases. It's so much easier than trying to polish everything by hand, and this particular rotary tool has impressed me more than several more expensive ones I've had in the past.</p> <p>It made a huge difference on the hubs and rims. Trying to polish around spokes isn't fun, but the flexible shaft made it go much better.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/rear-hub.jpeg" alt="Rear hub, before and after" /> <figcaption>Rear hub, before and after</figcaption> </figure><p></p> <p>The Peugeot had Malliard hubs mated to Rigida rims, with Speidel quick-releases. All decent enough, but they were in terrible shape, with a cruddy gray haze everywhere that wasn't covered in oily grime.</p> <p>The quick releases in particular were pretty rusty. A hard scrubbing with light oil and blue Scotch-brite pads took the rust off, and then they cleaned up well.</p> <p>Of course I had to buy <a href="https://amzn.to/2JiAGGk">yet another freewheel tool</a> to remove the Atom cluster for cleaning, and to remove the ugly yellowed plastic pie plate.</p> <p>The rims were a complete surprise. As I got the grime off I could see that they had a chrome-ish finish. At first I thought -- and fretted -- that they were steel rims.</p> <p>I was completely surprised to discover that they're definitely aluminum but had apparently originally been highly polished. I was just bringing the shine back to them. Regardless, they look great now.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/rim.jpeg" alt="Rigida rims, before and after" /> <figcaption>Rigida rims, before and after</figcaption> </figure><p></p> <p>Tires are <a href="https://amzn.to/3ay7FkX">Schwalbe HS159</a> with gum walls, because I had them in the parts bin already and they're 27&quot;. If I had to buy tires I would have picked <a href="https://amzn.to/2KJyUhI">Panaracer Paselas</a> in 27&quot;, but the Schwalbes are fine and durable.</p> <p>The original chrome sticker chain stay was looking ragged, so I picked up a Peugeot-branded one from eBay. </p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/rear-stays.jpeg" alt="Rear chain stays, before and after" /> <figcaption>Rear chain stays, before and after</figcaption> </figure><p></p> <p>I mistakenly thought the new chainstay protector would be hard chromed plastic, not a thin vinyl sticker, but it works. I also really like the white cables against the metallic French blue paint.</p> <p>The rear derailleur was an adventure. These old Simplex derailleurs have a reputation for brittle pulley wheels, and my pulley wheel came to me in pieces inside a plastic bag helfully taped to the spokes.</p> <p>Of course Simplex pulleys are complete unobtainium and the Shimano pulleys I already had laying around don't fit.</p> <p>After doing some research I learned Suntour pulleys <em>can</em> fit, with some work. I thought it would be simple enough to find a ragged Suntour derailleur to scavenge a pulley from, but then I couldn't find one for a reasonable price.</p> <p>In the end, it was faster/cheaper/easier to just get a different derailleur, and I found a nice Shimano 105 on eBay for a good price. Then I still had to buy a new <a href="https://amzn.to/3nJsxcX">hanger</a> because the original was made for the Simplex, which of course uses a different size bolt.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/rear-der.jpeg" alt="Rear derailleur, now Shimano 105." /> <figcaption>Rear derailleur, now Shimano 105.</figcaption> </figure><p></p> <p>I'm happy with the results. The 105 doesn't look too out of place to my eyes and it shifts fantastically.</p> <p>Taking a look from the rear, the finished Peugeot shows little touches that weren't readily visible, like a nicely fluted seatpost that polished up well.</p> <p>Even the seat post bolt was pretty nasty, but it came back surprisingly well with crubby pads, light oil and elbow grease make magic.</p> <p>A brand-new <a href="https://amzn.to/3rkJwV8">vintage-style Selle Italia saddle</a> in white (of course) makes a lovely and comfortable topper for all of it. Over the seat you can catch a glimpse of the new cockpit, too.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/seat-rear.jpeg" alt="Rear view of seat and post." /> <figcaption>Rear view of seat and post.</figcaption> </figure><p></p> <p>Taking a closer look at the cockpit, about all the stayed was the original stem and the headset.</p> <p>The headset needed some light rust removal but the races looked good, so no problems there. The headset spacers had darkened with age, but <a href="https://amzn.to/3h9pcRX">polished aluminum replacements</a> fixed that.</p> <p>The original stem took a fine shine, but the stem-mounted shifters went into the parts bin, along with the bars and brake levers, all to make way for converting the original drop-bar configuration to upright bars.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/stem.jpeg" alt="A view of the stem and headset" /> <figcaption>A view of the stem and headset</figcaption> </figure><p></p> <p>The original-looking celo bar tape went into the trash -- what was left of it, anyway. In their place I fitted <a href="https://amzn.to/3rmZX3i">Origin8 bars</a> and <a href="https://amzn.to/2M0oKKh">Tektro FL750 brake levers</a>, same as on <a href="https://another.rodeo/peugeot-ph19-mixte/tags/principessa/">the Principessa</a>.</p> <p>Shifting duties are handled by some <a href="https://amzn.to/2WD5zrX">Shimano Tourney units</a>, which work shockingly well for the price: $20 for both sides! They work perfectly with the original 2x12 gearing setup, and even have a little blue upshift button that complements the blue paint. I was really surprised at how nice these admittedly bargain-basement shifters turned out.</p> <p>Grips are simply <a href="https://amzn.to/2JfPQvW">SRAM cork bar tape</a> in white. I was going to lacquer them but in the end didn't bother. Even clear lacquer would have yellowed them some, and honestly, if they get that dirty, I can just re-wrap them. One box of bar tape would wrap them 2-4 times.</p> <p>Bar plugs are courtesy of Kendall-Jackson. More on that in an upcoming post.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/cockpit.jpeg" alt="Cockpit before and after." /> <figcaption>Cockpit before and after.</figcaption> </figure><p></p> <p>So how does it ride? Wonderfully. It's a beautiful little ride. It's very comfortable, with quick but not flighty handling. The mixte frame looks fantastic, it's easy to get on and off and it's very flingable -- but again, not squirrelly.</p> <p>It feels like you could ride it all day but you'd have to stop frequently to just enjoy the day with it.</p> <p>It may have been a surprisingly great bike back in the day, or maybe it's way more than the sum of its parts. Either way, I love this thing. It is, in every sense, a lovely bike. I'm glad it didn't go to the dumpster. </p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/made-in-france.jpeg" alt="Made in France." /> <figcaption>Made in France.</figcaption> </figure><p></p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/before-after.jpeg" alt="Before and after." /> <figcaption>Before and after.</figcaption> </figure><p></p> <p></p><p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p><p></p> <h3 id="july-2021-goodbye-peugeot" tabindex="-1">July 2021 - Goodbye Peugeot<a class="tdbc-anchor" href="https://another.rodeo/peugeot-ph19-mixte/#july-2021-goodbye-peugeot" aria-hidden="true">#</a></h3> <p>I kept the Peugeot until late July of 2021 before letting it go to make room for another project. To be honest, almost immediately I regretted letting it go, and that feeling has only intensified since. It remains possibly the prettiest, friendliest commuter/city bike I've built up yet, and I would gladly build up another Peugeot someday. Preferable a mixte.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/peugeot/on-the-rocks.jpg" alt="Beautiful bike." /> <figcaption>Beautiful bike.</figcaption> </figure><p></p> </content>
</entry>
<entry>
<title>Trek 520</title>
<link href="https://another.rodeo/trek-520/"/>
<updated>2022-07-18T00:00:00Z</updated>
<id>https://another.rodeo/trek-520/</id>
<content type="html"><p>For a good chunk of the 80s, touring bikes were a big deal, and most every manufacturer was tripping over themselves trying to one up eveyrone else in the segment. Bike stores were glutted with high quality, supremely comfortable touring bikes with wildly wide-range gearing, high quality steel and mounts galore. It was a lot like today's gravel and endurance bike craze. At least until the bottom fell out.</p> <p>In the summer of 2021 I decided I wanted one of these classic tourers, and few are more classic than the Trek 520, which had a remarkable 40-year production run from 1983 to 2023.</p> <p>And so I found this one -- an '88 or '89 model -- and it came home with me.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/as-found.jpeg" alt="It looks better in photos than it actually was, but you gotta love the old-school foam grips and toeclips." /> <figcaption>It looks better in photos than it actually was, but you gotta love the old-school foam grips and toeclips.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/nasty-brakes.jpeg" alt="A closer look shows how it really was. The brakes were destroying the gumwall tires, everything was dirty and crusty, and all the cables were rusty." /> <figcaption>A closer look shows how it really was. The brakes were destroying the gumwall tires, everything was dirty and crusty, and all the cables were rusty.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/filthy-front.jpeg" alt="Up front, things weren't looking much better." /> <figcaption>Up front, things weren't looking much better.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/hose-clamp.jpeg" alt="I never did figure out what the hose clamp on the stem was all about." /> <figcaption>I never did figure out what the hose clamp on the stem was all about.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/dropouts.jpeg" alt="Once it was on the rack and I started taking it apart I couldn't help but notice all the neat details and craftsmanship the Wisconsin Treks were known for, like these lovely proprietary cast dropouts, and the shifter-cable running through the chainstay." /> <figcaption>Once it was on the rack and I started taking it apart I couldn't help but notice all the neat details and craftsmanship the Wisconsin Treks were known for, like these lovely proprietary cast dropouts, and the shifter-cable running through the chainstay.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/polish.jpeg" alt="I did spend a fair bit of time giving it a deep clean and polish." /> <figcaption>I did spend a fair bit of time giving it a deep clean and polish.</figcaption> </figure> <p>I didn't do a lot of parts swapping and modernization on this one. Underneath the grime, they were pretty decent parts, and actually turned out to be in good shape after they were cleaned up and lubed. I swapped out the seat to a Serfas I had, fitted some Panaracer Pasela tires, and just didn't make a lot of other changes. I even kept the original 27&quot; wheels and downtube shifters.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/cleaned.jpeg" alt="Thoroughly cleaned and lubed, pretty close to when it was new." /> <figcaption>Thoroughly cleaned and lubed, pretty close to when it was new.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/deore.jpeg" alt="Trek specced an interesting mix of 105 and Deore components for the 520. Back then, Deore was known mostly as a touring bike groupset." /> <figcaption>Trek specced an interesting mix of 105 and Deore components for the 520. Back then, Deore was known mostly as a touring bike groupset.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/deore_rear.jpeg" alt="These scuffs by the rear derailleur were about the only blemishes in the paint, and I came to see them more as beauty marks, so I didn't attempt to touch them up and instead just put some clear-coat over them to keep the rust at bay. Also, the early Deore derailleurs Trek used are incredibly capable, even today, for anything up to 10 speed and 36 teeth. Amazing, given how old they are." /> <figcaption>These scuffs by the rear derailleur were about the only blemishes in the paint, and I came to see them more as beauty marks, so I didn't attempt to touch them up and instead just put some clear-coat over them to keep the rust at bay. Also, the early Deore derailleurs Trek used are incredibly capable, even today, for anything up to 10 speed and 36 teeth. Amazing, given how old they are.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/seat_lug.jpeg" alt="The cast seat lug and arched brake bridge were other lovely details typical of Trek back then." /> <figcaption>The cast seat lug and arched brake bridge were other lovely details typical of Trek back then.</figcaption> </figure> <p>I just rode it and rode it, enjoying it as Trek had intended all those years ago, while my wrenching attention shifted to another Trek (the 640 photo-bombing above) and a Schwinn LeTour. The 520 just did what it was built to do: gobble up miles with comfort. I <em>loved</em> the way this bike rode.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/tree.jpeg" alt="No matter where I took it, or what I asked of it, the 520 was happy to oblige." /> <figcaption>No matter where I took it, or what I asked of it, the 520 was happy to oblige.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/pond.jpeg" alt="Dirt, water, it didn't care." /> <figcaption>Dirt, water, it didn't care.</figcaption> </figure> <p>There was just one problem: the Trek was much bigger than it looked. At first I couldn't figure it out... I mean, look at that frame, it's tiny.</p> <p>And then the math started to make sense: 27&quot; wheels, plus lots of clearance for big tires and fenders, and you start pushing things up. So the 520s tiny 50cm-ish frame had a standover more like a 54 cm frame. I was comfortable riding it, but not so much when I had to stop. It just felt too big for me, so I decided to let it go.</p> <p>I still miss it, though. It was a great bike that I just couldn't get 100% comfortable on. Someday I may get another one with 700c wheels and see if it fits a bit better.</p> <p>I understand the buyer was intending to ride it across Missouri on the Katy Trail. It was built for that, so I'm happy it found a good home.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-520/rocks.jpeg" alt="Magnificent." /> <figcaption>Magnificent.</figcaption> </figure> <hr /> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> </content>
</entry>
<entry>
<title>Making wine cork handlebar plugs</title>
<link href="https://another.rodeo/cork-bar-ends/"/>
<updated>2023-02-22T00:00:00Z</updated>
<id>https://another.rodeo/cork-bar-ends/</id>
<content type="html"><p>Making your own custom handlebar plugs from wine corks is a nice and easy way of recycling an old cork or two while showing some individuality.</p> <p>It's also an easy fix for handlebars that have a very small internal handlebar diameter, which can be hard to match with off-the-shelf plugs -- something that happens fairly often with cheaper aluminum bars.</p> <p>I've made handlebar plugs from wine corks for quite a few bikes now, and feel like I have the technique down enough to share.</p> <p>First, you'll need a wine cork, of course. Any cork will work with more or less the same steps, so I'll leave the wine cork acquistion to you.</p> <p>For bars with larger internal diamters a champagne cork may work better, albeit with a bit more effort. The basic steps are pretty much the same.</p> <p>Once you have a wine cork in hand and are sober enough to wield a razor knife, then proceed:</p> <div class="photogrid"> <figure class="image "> <img src="https://another.rodeo/img/bikes/cork-bar-ends/cork.jpg" alt="Take your standard wine cork and cut it in half with a sharp razor knife. This will let you easily make plugs for both sides from a single cork. Of course, if you want to have different corks on each side, you can do that. It doesn't really matter." /> <figcaption>Take your standard wine cork and cut it in half with a sharp razor knife. This will let you easily make plugs for both sides from a single cork. Of course, if you want to have different corks on each side, you can do that. It doesn't really matter.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/cork-bar-ends/cork-groove.jpg" alt="Put the razor knife flat to your table surface and hold it there firmly. Then put your cork's uncut side down to the table surface, with the cork up to the knife blade. Once in position, carefully cut a groove in the cork by rotating it around the blade. You shouldn't need to move the blade -- just keep it steady and carefully rotate the cork to put a groove in it. If you're using a champagne cork you may want to skip this step and just cut down to the mushroom-y end of the cork in the next step." /> <figcaption>Put the razor knife flat to your table surface and hold it there firmly. Then put your cork's uncut side down to the table surface, with the cork up to the knife blade. Once in position, carefully cut a groove in the cork by rotating it around the blade. You shouldn't need to move the blade -- just keep it steady and carefully rotate the cork to put a groove in it. If you're using a champagne cork you may want to skip this step and just cut down to the mushroom-y end of the cork in the next step.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/cork-bar-ends/cork-slice.jpg" alt="You'll want to cut the groove down to approximately the inside diameter of the bar. If you don't get it quite right, it's OK. Once your groove is cut, carefully slice downward from the cut end of the cork toward your groove, making your way around the cork. Don't overshoot the groove or the visible part of the cork will be damaged. Continue until you've shaved off enough for the cork to fit in the bars. Again, be careful, take your time, and don't cut yourself." /> <figcaption>You'll want to cut the groove down to approximately the inside diameter of the bar. If you don't get it quite right, it's OK. Once your groove is cut, carefully slice downward from the cut end of the cork toward your groove, making your way around the cork. Don't overshoot the groove or the visible part of the cork will be damaged. Continue until you've shaved off enough for the cork to fit in the bars. Again, be careful, take your time, and don't cut yourself.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/cork-bar-ends/cork-done.jpg" alt="When you're finished, you'll have a sort of mushroom-shaped cork with a nice edge and outer face. Pop it in the bars as you would any other bar end plug. If you want, you can shellac the cork with the grips, or without, to better protect and color the cork. Or just leave it natural. Either way is fine, and it's your call." /> <figcaption>When you're finished, you'll have a sort of mushroom-shaped cork with a nice edge and outer face. Pop it in the bars as you would any other bar end plug. If you want, you can shellac the cork with the grips, or without, to better protect and color the cork. Or just leave it natural. Either way is fine, and it's your call.</figcaption> </figure> </div> </content>
</entry>
<entry>
<title>The electric Schwinn</title>
<link href="https://another.rodeo/electric-schwinn/"/>
<updated>2023-03-02T00:00:00Z</updated>
<id>https://another.rodeo/electric-schwinn/</id>
<content type="html"><p>I found myself interested in trying out an e-bike. That's how it often starts: idly wondering if something is as fun or interesting as people say it is. It's this idle wondering that will eventually get me to try pickleball.</p> <p>But on this day, it was e-bikes. And as my mind idly wandered -- and as I looked at the cost of factory e-bikes, I started thinking more and more about a conversion kit. It didn't hurt that I'd just renovated a '76 Schwinn Speedster, which heavy and overbuilt in a way that only the Chicago-built Schwinns can be. In other words, plenty strong enough for an e-bike conversion kit. I also thought the Scwhinn's three-speed, internal-gear hub might be a nice pairing with the extra power.</p> <p>Because I'm cheap, because it was an experiment, and also because I wasn't much interested in maximum range or top speed, I went with a pretty basic, inexpensive kit. I believe I used this <a href="https://amzn.to/3Smr0Kp">Voilamart front-wheel kit</a> or something very similar. The kits seem to change often, but that's pretty comparable. I also bought a compatible 36V battery. I can't recall which one, but it was similar to <a href="https://amzn.to/3SoMhTI">this one</a>. In 2022, the kit and battery were a smidge over $500. The prices have dropped quite a bit though, and now I think you could do it for much less.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/starting-point.jpeg" alt="The starting point for this project." /> <figcaption>The starting point for this project.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/battery-test.jpeg" alt="Initially, I thought I'd mount the battery on the downtube, but this proved to be both ugly and impractical on this size frame. I eventually decided to put both the controller and battery in a classic Wald wire basket out front." /> <figcaption>Initially, I thought I'd mount the battery on the downtube, but this proved to be both ugly and impractical on this size frame. I eventually decided to put both the controller and battery in a classic Wald wire basket out front.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/wheel-fork.jpeg" alt="The fork drop-outs had to be filed slightly to fit the oversize axle on the ebike motor. I had also hoped to run the wiring up through the tubular fork, but couldn't manage to fish it through at the fork crown. So zip ties came to the rescue. You can also see the e-bike kit throttle and wiring, right by the original 3-speed shifter." /> <figcaption>The fork drop-outs had to be filed slightly to fit the oversize axle on the ebike motor. I had also hoped to run the wiring up through the tubular fork, but couldn't manage to fish it through at the fork crown. So zip ties came to the rescue. You can also see the e-bike kit throttle and wiring, right by the original 3-speed shifter.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/wald.jpeg" alt="I also had to drill out the mounting holes for the Wald rack a lot to fit the oversize axle. Here you can see one size enlarged and the other still in the original size." /> <figcaption>I also had to drill out the mounting holes for the Wald rack a lot to fit the oversize axle. Here you can see one size enlarged and the other still in the original size.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/rack-wheel.jpeg" alt="With the rack and wheel in place, it was ready for wiring." /> <figcaption>With the rack and wheel in place, it was ready for wiring.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/test-fit-electric.jpeg" alt="I did a test fit to be sure the electric bits were going to fit." /> <figcaption>I did a test fit to be sure the electric bits were going to fit.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/ikea.jpeg" alt="I had a cheap IKEA backpack that coincidentally fit the Wald basket perfectly and hid all the electric parts. You can also see the brake levers have changed. That's because the e-bike kit cuts power when you use the brakes, so you have to use their levers." /> <figcaption>I had a cheap IKEA backpack that coincidentally fit the Wald basket perfectly and hid all the electric parts. You can also see the brake levers have changed. That's because the e-bike kit cuts power when you use the brakes, so you have to use their levers.</figcaption> </figure> <p>And that was pretty much it. I don't appear to have any pictures of the wiring, mostly because it was nearly plug and play. I do recall having to change one connector to make the battery and controller compatible, but other than that it was really just plugging things in. I did put some cable wrap on the wires to keep them tidy. But it was all pretty simple, and the instructions were decent enough.</p> <h2 id="how-does-it-ride" tabindex="-1">How does it ride?<a class="tdbc-anchor" href="https://another.rodeo/electric-schwinn/#how-does-it-ride" aria-hidden="true">#</a></h2> <p>Pretty great, mostly. There's a LOT of weight up front on this thing, so at very slow speeds the steering is heavy and floppy. But once you get going a little, it rides great. It's very smooth and very comfortable.</p> <p>As I hoped, the motor and the three-speed work great together, and hills are no longer a concern. It is definitely a heavyweight -- probably north of 50 pounds -- but if the motor is moving it, you just don't care. I've taken it on 25-mile+ rides and would go farther, but at some point I get worried about the battery dying. I would <em>not</em> want to be batteryless on this bike and trying to ride it 20 miles home.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/done.jpeg" alt="All done and ready to go." /> <figcaption>All done and ready to go.</figcaption> </figure> <h2 id="what-did-i-learn-and-what-would-i-do-differently" tabindex="-1">What did I learn, and what would I do differently?<a class="tdbc-anchor" href="https://another.rodeo/electric-schwinn/#what-did-i-learn-and-what-would-i-do-differently" aria-hidden="true">#</a></h2> <p>I learned these kits are pretty straighforward and well within the ability of anyone reasonably handy with a wrench and able to figure things out. Probably the biggest thing I think makes a difference in the conversion is thinking really hard about where the battery and controller will be stored, and what implications that has for wiring, weight, and handling. I've enjoyed mine and would make another. That said, if I were to do another here's what I'd change:</p> <ul> <li>I'd consider a hybrid frame, or an old hardtail mountain bike. Either would be much lighter than the Schwinn, but more importantly they'd have a JIS-standard bottom bracket rather than the larger &quot;american&quot; bottom bracket on the Schwinn. This would make it easier to put in a mid-mount engine, which I think would be preferable.</li> <li>I'd keep an internal-gear hub, but look at maybe a 7 or 8-speed hub. But that's me. I have no reason to believe a derailleur wouldn't work fine.</li> <li>I'd add the pedal assist feature. This kit came with pedal-assist, but it was another casualty of the Schwinn's oversize bottom bracket.</li> <li>I'd focus harder on the brakes. They're adequate on the Schwinn -- I upgraded them in the rebuild process -- but even a 36V motor can get you up to speeds where you really want good brakes.</li> </ul> <p>Fun bike. I should ride it more.</p> <h3 id="april-11-update" tabindex="-1">April 11 update<a class="tdbc-anchor" href="https://another.rodeo/electric-schwinn/#april-11-update" aria-hidden="true">#</a></h3> <p>I've decided I need to clear the herd a bit, so this one is hitting the market. To that end I stripped off the e-bike conversion kit and took it back to more of a BMX Cruiser/Klunker vibe. And when I rode it, it was suddenly my favorite cruiser ever. Such a fun, fun bike. I'm still going to sell it because I really do need to clear a few out, but I can tell I'm going to regret letting this one go, and sooner or later I'll end up building another one much like it.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/april-1.jpeg" alt="It just looks cool, in all of its late 70s/early 80s cruiser glory." /> <figcaption>It just looks cool, in all of its late 70s/early 80s cruiser glory.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/april-bars.jpeg" alt="Modern klunker-style bars and a pretty good reproduction of an 80s BMX stem." /> <figcaption>Modern klunker-style bars and a pretty good reproduction of an 80s BMX stem.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/april-fork.jpeg" alt="80's style tubular fork and reproduction Dia-Compe MX brakes" /> <figcaption>80's style tubular fork and reproduction Dia-Compe MX brakes</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/schwinn-speedster/april-cranks.jpeg" alt="Original cranks and Schwinn chainring, with new gold chain." /> <figcaption>Original cranks and Schwinn chainring, with new gold chain.</figcaption> </figure> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> </content>
</entry>
<entry>
<title>Maturity Model Generator</title>
<link href="https://another.rodeo/mm/"/>
<updated>2023-08-08T00:00:00Z</updated>
<id>https://another.rodeo/mm/</id>
<content type="html"><h2 id="maturity-model-generator" tabindex="-1">Maturity Model Generator<a class="tdbc-anchor" href="https://another.rodeo/mm/#maturity-model-generator" aria-hidden="true">#</a></h2> <p>In 2022 or so, it seemed like everywhere I turned there was either a maturity model popping up for something, or someone was calling for a maturity model. Something was in the air, and it seemed like we needed a maturity model for everything. Cheeseburgers were getting a maturity model.</p> <p>Naturally, half these maturity models were pretty much nonsense, full of big words to let the author of the maturity model feel like they had Thought Deeply About Things and nearly completely ignored by everyone.</p> <p>I realized long ago that if you're going to write volumes of nonsense that no one will ever read or act on, it's best to have a computer do it for you. Armed with that knowledge, I <em>could</em> have been on the forefront of AI, but instead I dithered about and hacked this thing together as my own little in-joke.</p> <p>And also because I wanted to play with Alpine.js and HTMX, but mostly because I just thought it was funny. So I ended up with this....</p> <figure class="image "> <img src="https://another.rodeo/img/web-things/mm.png" alt="A sample generated maturity model, featuring levels such as 'sophistimicated', 'sentimonies', and 'unfaceuptoable'." /> <figcaption>A sample generated maturity model, featuring levels such as 'sophistimicated', 'sentimonies', and 'unfaceuptoable'.</figcaption> </figure> <p>The maturity model names and text are mostly a mixture of business jargon and made-up words from the Simpsons, with a few of my own additions. The colors sort of map along the lines of &quot;green is good&quot; and &quot;red is bad&quot; to make it more in line with stereotypical maturity models. Of course that also makes it pretty inaccessible, among other problems, and I should call that out.</p> <p>At any rate, it's dumb, but no dumber than a lot of &quot;real&quot; maturity models I've seen.</p> <p>An interesting footnote, though, is that since building it, I've actually developed an appreciation for a well-crafted maturity model. You can usually tell the good ones because they illuminate rather than obfuscate.</p> <h3 id="why-did-i-do-it" tabindex="-1">Why did I do it?<a class="tdbc-anchor" href="https://another.rodeo/mm/#why-did-i-do-it" aria-hidden="true">#</a></h3> <p>To learn some mini JS frameworks, and because I thought I was being funny.</p> <h3 id="what-did-i-learn" tabindex="-1">What did I learn?<a class="tdbc-anchor" href="https://another.rodeo/mm/#what-did-i-learn" aria-hidden="true">#</a></h3> <ul> <li>Alpine.js and HTMX</li> <li>Some tricks to have semi-random CSS colors that still fell within predictable guidelines.</li> <li>Maturity models aren't all bad. Just the bad ones.</li> </ul> <h3 id="where-is-it" tabindex="-1">Where is it?<a class="tdbc-anchor" href="https://another.rodeo/mm/#where-is-it" aria-hidden="true">#</a></h3> <ul> <li><a href="https://maturity-model.online/">The site</a></li> <li><a href="https://github.com/tBaxter/mm_gen">The repo</a></li> </ul> </content>
</entry>
<entry>
<title>The Luxus folding bike restoration</title>
<link href="https://another.rodeo/luxus-sport-bike/"/>
<updated>2023-09-16T00:00:00Z</updated>
<id>https://another.rodeo/luxus-sport-bike/</id>
<content type="html"><p>I've never been overly cursed with good sense, especially when it comes to projects. If there is a lost cause, I'll find it. If there is a hopeless case, I'll take it on.</p> <p>I should have learned my lesson from the <a href="https://another.rodeo/bikes/1982-peugeot-ph19-mixte/">Peugeot rebuild</a> and found a nice easy project.</p> <p>I should know to watch my local market and pay attention to what sells and what doesn't.</p> <p>Did I do either of those things? Nope.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/as-found.jpg" alt="The Luxus, as found on the local marketplace site." /> <figcaption>The Luxus, as found on the local marketplace site.</figcaption> </figure> <p>I got it into my head that I wanted a vintage folding bike, and then I had to have one.</p> <p>Why? Beats me. I think I began to see old Italian Chiordas and Bianchi Nealeco's as a different sort of fun. I appreciate the cleverness of the rear stays forming a useful rack. Maybe I just wanted something to take camping.</p> <p>Regardless, I read <a href="https://sheldonbrown.com/raleigh-twenty.html">Sheldon Brown's love letter to the Raleigh Twenty</a>, noticed it said the other european folding bikes of the era were generally much lower quality, and then I promptly went out and bought one of the lower quality examples: a Luxus Sportbike.</p> <p>So what is a Luxus Sportbike? Who knows. It's labelled as being from West Germany, and per <a href="https://www.foldingcyclist.com/Klapprad-folding-bikes.html">this page</a> it may have been manufactured by any number of companies at the time. It may not even have been made in West Germany at all.</p> <p>Here's what we do know:</p> <ul> <li>It bears some resemblance to some better-known vintage folding bikes with the way the stays loop around to form a rack, but it also appears to differ from each of them in the details.</li> <li>Luxus did make other bikes, although details (at least in English) are sparse. I have managed to find examples of road bikes, utility bikes and an interesting motocross-inspired kid's bike.</li> <li>This particular one isn't technically a folding bike. There is no hinge at the middle, so it technically collapses into two parts.</li> <li>This thing is unbelievably heavy. Somehow, this little thing weighs in at 34 pounds, about the same as the <a href="https://another.rodeo/bikes/raleigh-sports/">Raleigh Sports</a> I rehabbed last year.</li> <li>The particular example I bought is in miserable shape.</li> </ul> <p>Since the market for used folding bikes is nearly non-existent, of course my plan is to throw parts and money at this one. I want to pick up a kids' bike with some 20&quot; alloy wheels, try to lighten up the weight, and just generally see if I can make this thing decent to ride. No matter what, it'll be interesting.</p> <p>So, with that in mind, I started tearing it down.</p> <div class="photogrid"> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/home.jpeg" alt="Once I got it home I could take stock. It's filthy and the paint is in bad shape, but it's mostly complete. I was surprised neither the stem nor seatpost had seized." /> <figcaption>Once I got it home I could take stock. It's filthy and the paint is in bad shape, but it's mostly complete. I was surprised neither the stem nor seatpost had seized.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/wired.jpeg" alt="Originally it was wired through the frame to run front and rear lights. The generator and front light are long gone, and I'm not sure how the wiring worked given that the frame separates." /> <figcaption>Originally it was wired through the frame to run front and rear lights. The generator and front light are long gone, and I'm not sure how the wiring worked given that the frame separates.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/sport-72.jpeg" alt="The headbadge decal IDs it as a Luxus Sport 72, made in West Germany, for whatever that's worth." /> <figcaption>The headbadge decal IDs it as a Luxus Sport 72, made in West Germany, for whatever that's worth.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/sportbike.jpeg" alt="The 'sportbike' decal on the main tube is pretty ragged. It hardly matters, since this thing needs a full respray. I am wondering if I can get Luxus decals. I haven't looked yet." /> <figcaption>The 'sportbike' decal on the main tube is pretty ragged. It hardly matters, since this thing needs a full respray. I am wondering if I can get Luxus decals. I haven't looked yet.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/rear-fender.jpeg" alt="The rear fender had a hard life but I think it can be straightened out and useful again. The rear light, however, appears to be a goner. I need to decide if I'm keeping the wiring." /> <figcaption>The rear fender had a hard life but I think it can be straightened out and useful again. The rear light, however, appears to be a goner. I need to decide if I'm keeping the wiring.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/guard.jpeg" alt="The chainguard has surface corrosion but it's straight and can also be re-used. Honestly, all of it looks like it could be re-used, but there's no way I'm keeping those cottered cranks." /> <figcaption>The chainguard has surface corrosion but it's straight and can also be re-used. Honestly, all of it looks like it could be re-used, but there's no way I'm keeping those cottered cranks.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/rack.jpeg" alt="The rack really is a clever bit of design and appears very useable." /> <figcaption>The rack really is a clever bit of design and appears very useable.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/forks.jpeg" alt="It's the same story at the forks: cosmetically a mess but all more or less solid. Even the fender looks salvageable." /> <figcaption>It's the same story at the forks: cosmetically a mess but all more or less solid. Even the fender looks salvageable.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/clamp.jpeg" alt="This star knob makes unclampling the two sections pretty straightforward. I think I can clean it up." /> <figcaption>This star knob makes unclampling the two sections pretty straightforward. I think I can clean it up.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/seatclamp.jpeg" alt="The seatpost clamp uses a plastic wingnut as an early take on making a quick-release. Again, a clever detail." /> <figcaption>The seatpost clamp uses a plastic wingnut as an early take on making a quick-release. Again, a clever detail.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/stemclamp.jpeg" alt="Up front another star knob is used to quickly adjust and tighten the long quill stem." /> <figcaption>Up front another star knob is used to quickly adjust and tighten the long quill stem.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/unclamped.jpeg" alt="Unclamped, you can see the two parts are completely separate. When the wiring was in place I'm not sure how this worked: Did that tiny wire just tie the two halves together?" /> <figcaption>Unclamped, you can see the two parts are completely separate. When the wiring was in place I'm not sure how this worked: Did that tiny wire just tie the two halves together?</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/pump-peg.jpeg" alt="The pump peg is another delightful detail. I wonder what the very short pump looked like when new, and how the other end clamped onto the oversized and curved main tube." /> <figcaption>The pump peg is another delightful detail. I wonder what the very short pump looked like when new, and how the other end clamped onto the oversized and curved main tube.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/headset.jpeg" alt="The headset had no discernible grease, and didn't appear to have had any grease in a long, long time. That probably explains why it made graunchy, gravelly sounds. The whole headset will have to be replaced." /> <figcaption>The headset had no discernible grease, and didn't appear to have had any grease in a long, long time. That probably explains why it made graunchy, gravelly sounds. The whole headset will have to be replaced.</figcaption> </figure> <figure class="image vert"> <img src="https://another.rodeo/img/bikes/luxus/bb.jpeg" alt="The bottom bracket looked no better. I was surprised the crankarm cotter came off pretty easily, but the bottom bracket looked like it was stuffed full of bog muck." /> <figcaption>The bottom bracket looked no better. I was surprised the crankarm cotter came off pretty easily, but the bottom bracket looked like it was stuffed full of bog muck.</figcaption> </figure> <h3 id="february-2021-cleaning-and-sanding-the-luxus" tabindex="-1">February 2021: Cleaning and sanding the Luxus<a class="tdbc-anchor" href="https://another.rodeo/luxus-sport-bike/#february-2021-cleaning-and-sanding-the-luxus" aria-hidden="true">#</a></h3> <p>The Luxus folding bike frame was in rough shape, and I could tell when I was tearing it down it was going to take a full respray. What I wasn't really prepared for was how much work simply cleaning it would be.</p> <p>I'm not sure if it had been inside a smoker's home, or if it was just age and neglect, or whatever else the cause may be, but the frame was covered in a smelly, irritating funk. And of course I had to use some of the most noxious chemicals in the house to cut through the gunk, making it a doubly unpleasant job.</p> <p>And it's way, <em>way</em> too cold and snowy to take it outside. So I've just been gutting it out, wearing a mask and nitrile gloves, and taking it in small doses.</p> <p>The grime is gone. The first round of sanding is complete. I've treated the frame with a <a href="https://amzn.to/3baSZHm">phosphoric acid based rust converter</a>, which takes ferric oxide and chemically converts it to something paintable. The rust just turns black, and it's gone. This is great stuff for stopping rust in its tracks and prepping for paint. Just wear gloves, and a mask.</p> <p>It's slow going and there's probably a fair bit of sanding left, but I'm starting to get it under control.</p> <div class="photogrid"> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/rear-before.jpeg" alt="The rear half, right after the teardown, showing a lot of scrapes, rust and grime." /> <figcaption>The rear half, right after the teardown, showing a lot of scrapes, rust and grime.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/rear-cleaner.jpeg" alt="The rear half, after the first round of cleaning and light sanding. I still have to remove stickers and it needs a lot more sanding." /> <figcaption>The rear half, after the first round of cleaning and light sanding. I still have to remove stickers and it needs a lot more sanding.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/fork.jpeg" alt="The fork was similar: a mix of broken-down decals, scraped paint and dirt." /> <figcaption>The fork was similar: a mix of broken-down decals, scraped paint and dirt.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/phospho.jpeg" alt="With the decals removed, plus a lot of scrubbing and the initial sanding done, I brushed the entire frame with phosphoric-acid-based rust converter." /> <figcaption>With the decals removed, plus a lot of scrubbing and the initial sanding done, I brushed the entire frame with phosphoric-acid-based rust converter.</figcaption> </figure> <h2 id="march-2021-bad-conditions-and-worse-paint" tabindex="-1">March 2021: Bad conditions and worse paint<a class="tdbc-anchor" href="https://another.rodeo/luxus-sport-bike/#march-2021-bad-conditions-and-worse-paint" aria-hidden="true">#</a></h2> <p>Successful spray painting really requires a pretty narrow temperature band. So of course I decided to spray paint the Luxus folding bike in the dead of winter. It went about as well as you'd expect.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/first-paint.jpeg" alt="Sportbike bits on the sawhorses getting the first round of paint." /> <figcaption>Sportbike bits on the sawhorses getting the first round of paint.</figcaption> </figure> <p>Everything started well enough. A few unseasonably warm days in February gave me a good opportunity to get it sprayed, and I took it. I was cooking along and the frame was looking good when disaster struck: on the last coat the paint crinkled. I had violated a second rule of painting and mixed paints. They did not get along well.</p> <p>So after spraying and wet-sanding multiple coats, I now had to strip it all back. Honestly, taking after it with a stripping wheel may have been overkill. It's possible I could have just sanded it back. But at this point I didn't trust my base paint anymore.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/stripping.jpeg" alt="Taking all that new paint back off" /> <figcaption>Taking all that new paint back off</figcaption> </figure> <p>Of course, by the time I'd stripped it all back the weather had turned. Painting outside was no longer an option.</p> <p>Luckily the individual parts of the Luxus aren't very large, so I took a large plastic tub and improvised a small spray booth. I don't really recommend this. It's hard to get adequate ventilation, and there <em>will</em> be overspray. It worked okay for me, but really, you probably shouldn't try this at home.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/secondspray.jpeg" alt="The plastic tub" /> <figcaption>The plastic tub</figcaption> </figure> <p>It was slow going, too, since I could only paint small portions at a time. Add in wet-sanding between coats and painting this little frame took a long, long time.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/sanding.jpeg" alt="Wet sanding kept finding more defects, so I'd sand and spray, sand and spray, spray and sand." /> <figcaption>Wet sanding kept finding more defects, so I'd sand and spray, sand and spray, spray and sand.</figcaption> </figure> <p>Because I had sanded back the first respray attempt, and I had more defects than usual from working in the cramped corners, I wet-sanded pretty aggressively between coats to get the best possible surface. For paint I was using a <a href="https://amzn.to/3tQs9fj">Rustoleum performance enamel</a> which worked well, especially coupled with a good (and compatible) <a href="https://amzn.to/3f9J34p">primer</a>. But still, if you want a really good coat, you've got to wet-sand and polish.</p> <p>With enough elbow grease it started coming together, finally. At this point the painting and sanding are done, and I've gone over it with <a href="https://amzn.to/33BFbmV">Turtle Wax Rubbing Compound</a> and then <a href="https://amzn.to/33BkKql">polishing compound</a>. I may give a few areas a bit more polishing, but it's looking good.</p> <p>While my paint was drying I polished up the original chrome chainguard, and had a go at straightening a few wobbles in it. I'm no metalworker and it remains not-quite-straight. But also not bad. With it sitting in place you can finally start seeing it all come together.</p> <p>The one upside to the long and painful painting process was that I had time to find a new bottom bracket, which was an adventure. You see, the bottom bracket on this thing was strange: smaller than an American BB as found on, say, a Schwinn cruiser, but larger than a normal square taper BB. And it was push fit. After a lot of digging I came to learn it's called a Thompson bottom bracket, and they're relatively common on Dutch city bikes. Who knew! So I made my best guesstimate on what the best spindle size would be to replace the cottered cranks and ordered one from Holland. And then I waited while it came all the way from Holland.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/almost.jpeg" alt="Almost there" /> <figcaption>Almost there</figcaption> </figure> <p>While the bottom bracket was tricky, I got completely lucky stumbling across some reproduction Luxus stickers being offered by a European seller on eBay. While they weren't an exact match I was happy to even get anything in the ballpark and I thought they looked great on the bike, especially with the new red paint.</p> <p>As I started putting it back together, the first thing to do was install a new Tange headset to connect the frame and fork together. The second thing was to renovate the frame clamp knob with some white Plasti-Dip.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/decals-front.jpeg" alt="At this point buffing and polishing was complete and a new Tange headset was in place, along with the headstock decal. " /> <figcaption>At this point buffing and polishing was complete and a new Tange headset was in place, along with the headstock decal. </figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/fenders.jpeg" alt="Polishing up the fenders took a mix of a rubber eraser wheel on the drill, fine steel wool, polishing compound, pliers and a hammer. And elbow grease. Still, they came up pretty nice. " /> <figcaption>Polishing up the fenders took a mix of a rubber eraser wheel on the drill, fine steel wool, polishing compound, pliers and a hammer. And elbow grease. Still, they came up pretty nice. </figcaption> </figure> <h3 id="may-2021-the-wheels-go-round-and-round" tabindex="-1">May 2021: The wheels go round and round.<a class="tdbc-anchor" href="https://another.rodeo/luxus-sport-bike/#may-2021-the-wheels-go-round-and-round" aria-hidden="true">#</a></h3> <p>By spring I had most of the rebuild under control. I was still trying to trim the Luxus' formidable weight by upgrading the original steel parts to aluminum where I could. The wheels in particular were a problem area. The originals weighed a ton and were completely shot anyway, so they had to be replaced. But as I learned most 20&quot; wheels with coaster brakes have steel rims -- not an upgrade. I kept my eye on the market, though, and eventually found a cheap Schwinn with decent wheels.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/test-fitting.jpeg" alt="Test-fitting the progress so far. The decals are on, and the frame clamp wheel has been plasti-dipped, so the frame looks complete-ish. I've got the rear fender polished and on, but not the front. And I've got a new alloy stem replacing the original steel unit, but some bullhorn handlebars did not stick around past the test fitting." /> <figcaption>Test-fitting the progress so far. The decals are on, and the frame clamp wheel has been plasti-dipped, so the frame looks complete-ish. I've got the rear fender polished and on, but not the front. And I've got a new alloy stem replacing the original steel unit, but some bullhorn handlebars did not stick around past the test fitting.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/schwinn.jpeg" alt="The original steel wheels were in terrible shape and incredibly heavy for 20-inch rims. This discarded kids' Schwinn was a cheap way to some half-decent aluminum rims. Because the Luxus had no mounts for rim brakes -- and cabling would have been a nightmare with the brakeaway frome -- I had to keep find aluminum wheels with a coaster brake. That was harder than you'd think." /> <figcaption>The original steel wheels were in terrible shape and incredibly heavy for 20-inch rims. This discarded kids' Schwinn was a cheap way to some half-decent aluminum rims. Because the Luxus had no mounts for rim brakes -- and cabling would have been a nightmare with the brakeaway frome -- I had to keep find aluminum wheels with a coaster brake. That was harder than you'd think.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/wheel-test.jpeg" alt="With the wheels cleaned up and rebuilt, and a new pair of white tires, it was time for the second test fit. By this time I had the retro-style LED headlight on and had settled on some Velo Orange North Road bars." /> <figcaption>With the wheels cleaned up and rebuilt, and a new pair of white tires, it was time for the second test fit. By this time I had the retro-style LED headlight on and had settled on some Velo Orange North Road bars.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/done-ish.jpeg" alt="And with a little more fiddling, that pretty much wrapped it up, just in time for camping season. It fits easily in our tiny camper!" /> <figcaption>And with a little more fiddling, that pretty much wrapped it up, just in time for camping season. It fits easily in our tiny camper!</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/luxus/fireball.jpeg" alt="However, when we took it camping, we learned it was missing a key accessory: a Fireball basket. So we remedied that." /> <figcaption>However, when we took it camping, we learned it was missing a key accessory: a Fireball basket. So we remedied that.</figcaption> </figure> <h3 id="september-2023" tabindex="-1">September 2023<a class="tdbc-anchor" href="https://another.rodeo/luxus-sport-bike/#september-2023" aria-hidden="true">#</a></h3> <p>After a few years of enjoying the Luxus, I found that I had too many bikes cluttering the garage and my interest in camping was waning. It was time for it to go. Luckily, JC, the nice fella that runs Kansas City's <a href="https://www.brightlightsforkids.org/">Bright Lights for Kids Charity Ride</a> spotted it and had to have it. So the deal was done. And somewhere out there in the world there is a (staged) picture of me riding it across the finish line at the ride!</p> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> </div></div></content>
</entry>
<entry>
<title>The giant list of questions to ask employers</title>
<link href="https://another.rodeo/employer-questions/"/>
<updated>2024-01-07T00:00:00Z</updated>
<id>https://another.rodeo/employer-questions/</id>
<content type="html"><p>In May of 2021 I was working at <a href="https://18f.gsa.gov/">18F</a> in a term-limited role, so I was actively interviewing. As I interviewed I realized that companies always asked me if I had any questions for them, and more often than not I completely froze and couldn't think of any questions at all in that moment. Not a great look.</p> <p>So I started compiling good questions. But the recovering journalist inside me knows: with any interview, a good question alone isn't enough. You need to understand why you're asking the question and what you hope to learn from it. So as I compiled the questions, I added notes on scenarios in which it might be a useful question and signals -- both good and bad -- to watch for.</p> <p>Over time it's grown to be a pretty large collection I've <a href="https://github.com/tBaxter/questions-for-employers">kept on Github</a>. It will remain there, but I'm also embedding it here as a convenience.</p> <hr /> <h1 id="questions-for-potential-employers" tabindex="-1">Questions for potential employers<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#questions-for-potential-employers" aria-hidden="true">#</a></h1> <p>This is a big collection of questions I've gathered over the years that have proven to be useful when interviewing, including why you might want to ask the question. Remember, in any interview you're trying to get to know the company and the people you might be working with as much as they're trying to get to know you. Maybe more.</p> <p>There are a lot of questions here. Some are just simple nuts-and-bolts questions. Some are only appropriate for certain types of companies. Some might help after you've already got a whiff of an org smell. You'll never ask all of these -- there's no time! But usually, after you've read the role description and had a phone screen, you should have a pretty good idea of which questions you want to highlight and ask.</p> <p>I've broken them out by subject matter, with some notes on things to look for.</p> <p>If you'd like more questions for director-and-above positions, <a href="https://jacobian.org/2019/apr/23/questions-for-employers-director-vp/">Jacob Kaplan-Moss has a great list</a>.</p> <hr /> <h2 id="table-of-contents" tabindex="-1">Table of contents<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#table-of-contents" aria-hidden="true">#</a></h2> <ul> <li><a href="https://another.rodeo/employer-questions/#getting-started">Getting started</a></li> <li><a href="https://another.rodeo/employer-questions/#culture">Culture</a></li> <li><a href="https://another.rodeo/employer-questions/#worklife-balance">Work/life balance</a></li> <li><a href="https://another.rodeo/employer-questions/#bureaucracy">Bureaucracy</a></li> <li><a href="https://another.rodeo/employer-questions/#diversity-equity-inclusion-and-ethics">Diversity, equity, inclusion and ethics</a></li> <li><a href="https://another.rodeo/employer-questions/#understanding-the-company-and-team">Understanding the company and team</a></li> <li><a href="https://another.rodeo/employer-questions/#leadership">Leadership</a></li> <li><a href="https://another.rodeo/employer-questions/#doing-the-work">Doing the work</a></li> <li><a href="https://another.rodeo/employer-questions/#career-development">Career development</a></li> <li><a href="https://another.rodeo/employer-questions/#performance-evaluation">Performance evaluation</a></li> <li><a href="https://another.rodeo/employer-questions/#compensation">Compensation</a></li> <li><a href="https://another.rodeo/employer-questions/#for-engineering-orgs">For engineering organizations</a></li> <li><a href="https://another.rodeo/employer-questions/#things-to-look-for-in-real-life">Things to look for in real life</a></li> </ul> <hr /> <h2 id="getting-started" tabindex="-1">Getting started<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#getting-started" aria-hidden="true">#</a></h2> <p><strong>What is the onboarding process like?</strong><br /> Do they have one? How well-defined is it? Do they have a &quot;buddy system&quot; or some other mechanisms to help you get ramped up, or do they just let you sink or swim?</p> <p><strong>In the first 60 to 90 days of employment, what would be my most urgent priorities?</strong><br /> This is helpful for getting past the position description to the real expectations of the work. Plus <a href="https://randsinrepose.com/archives/ninety-days/">the first 90 days are critical</a>.</p> <p><strong>What are the key accomplishments you’d like to see in this role over the next year?<br /> What is the one thing I absolutely must get right the first year?</strong><br /> This one extends on the previous question, looking longer term. This helps you get a sense of what your success criteria would be as well as how well the employer has defined the role. This one can also help get a better sense of the real priorities, which may differ from what the role description indicated. If they don't have clear answers to either of these questions, the role is probably poorly defined and not set up for success.</p> <p><strong>What does success look like <em>for your customers</em> for someone in this role?</strong><br /> A good question to help get a sense of how user-focused the organization is.</p> <h2 id="culture" tabindex="-1">Culture<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#culture" aria-hidden="true">#</a></h2> <p><strong>What type of people are successful here? What type of people are not?</strong><br /> <strong>Alternate: What characteristics do the people who are most celebrated have in common with each other? Conversely, what are the characteristics that are common to the promising people you hired, but who then flamed out and failed or left?</strong> Pay close attention to this one. You can potentially pick up a lot of red flags about what type of culture they <em>really</em> have versus what kind of culture they want you to think they have. The phrase &quot;culture fit&quot; itself can be a warning sign of homogenous, non-inclusive, bro-grammer culture.</p> <p><strong>How do you determine if someone is a poor fit for the company?</strong><br /> Same as above, they may tell you more than they mean to about what they value (and what they don't).</p> <p><strong>If an employee does something harmful that isn't a fireable offense, how do you handle that?<br /> What steps do you take to create a culture of accountability?</strong><br /> They should have a plan for this. If they don't, any number of toxic-but-not-fireable behaviors are probably not being addressed.</p> <p><strong>Is there any sort of institutionalized way of dealing with plateauing or preventing burnout?</strong><br /> You should hear something about rotation of duties or location, sabbaticals, etc. In other words, a real plan for avoiding burnout, not empty platitudes. <strong>Follow-up:</strong> Is it possible to take sabbaticals or unpaid vacation?</p> <p><strong>How does internal communication work? How does the company communicate with itself, and is that effective?</strong><br /> This can be a <em>really</em> telling question. Are company communications scattered? Leaked out? Top down? How does it work? Does it work?</p> <p><strong>Are there catered suppers?</strong><br /> This may sound like a nice perk, but you may want to learn more about why it's necessary. In a properly functioning organization with normal 8-5 or 9-5 hours, you should be home for supper. In crunch times it's nice when the organization brings in some decent food, but does the org find itself in crunch times all the time? If so, why?</p> <p><strong>What is your turnover rate?</strong><br /> How many people were hired last year and how many left? Over the past 2-3 years? What is the average time that people stay at the company? Attrition is one of the strongest tells that a culture is bad. If more than 30% of the company left in the past year, that's a real problem. What is the company doing about it?</p> <p><strong>How are disagreements solved? What happens when personalities clash?</strong><br /> You're looking for a real, equitable and fair plan here, not a handwave-y answer.</p> <p><strong>Given everything you like about the company culture, what's the flip side? What failure modes do you think your culture creates? Are those potential failure modes or have you seen them happen? How do you try to guard against them?</strong><br /> Even great cultural choices have downsides. If the person who's answering you has been in the company for a while and can't give you a good answer, either they're unwilling to give you bad news about the company, or they're not very thoughtful about the culture and its failure modes.</p> <h2 id="worklife-balance" tabindex="-1">Work/life balance<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#worklife-balance" aria-hidden="true">#</a></h2> <p><strong>How many hours a week does senior management work?</strong><br /> Do they put in 80-hour weeks? If so, run away.</p> <p><strong>How much vacation do people get?</strong><br /> If there's &quot;unlimited&quot; vacation, how much vacation do people normally take? What is the expectation for &quot;excessive&quot; vacation? There is always a number.</p> <p><strong>What holidays are observed?</strong><br /> Some companies do not observe federal and state holidays. For parents, this can be a real problem since schools usually do. If so, you may have to use a vacation day for your child's holiday.</p> <p><strong>Does this position require travel? How often?</strong><br /> This should have been in the job post, but if it wasn't, ask about it and think about how it fits with your lifestlye and commitments. Some folks are fine being road warriors, but if you've got kids or other commitments at home, it can be difficult.</p> <p><strong>Would I need to be on call? How often?</strong><br /> Another nuts-and-bolts question, but on-call rotations can be tough. While you're asking, consider asking of being on-call comes with extra compensation.</p> <p><strong>How many hours do people work in an average week? What time do people normally leave work? What time do they normally start? Do people work on the weekend?</strong> Seriously, if the job can't be done in 40 hours, more or less, something is probably wrong.</p> <p><strong>Do people check in when they're on vacation?</strong><br /> They shouldn't, and they shouldn't be expected to. Take the vacation.</p> <p><strong>What kinds of tasks are routinely demanded of by management beyond the original job description?</strong><br /> This can be a bit confrontational, or can sound like you want to do nothing more than what's explicitly in the job description. Be careful with it. Still, it can be useful if you're concerned you may be asked to walk your manager's dog or something weird.</p> <p><strong>What is the rhythm to the work?</strong><br /> Is there a time that's “all hands on deck” and everyone pulls all-nighters, or is it pretty consistent throughout the year?</p> <p><strong>How often are there emergencies or times when people have to work extra hours?</strong><br /> For most orgs, the number of emergencies and unplanned extra hours should be near zero. Generally speaking, emergencies indicate either faulty DevOps or faulty management. There are times and places where extra hours should be expected -- if you're involved in taxes in the U.S. in any way, you know April is busy, for example -- so it's worthwhile to differentiate planned extra hours from unplanned.</p> <p><strong>Are the company’s managers inclined to call employees at home with questions or comments?</strong><br /> If so, that could be an indicator of poor boundaries or a poor work-life balance. Or it could just be a busy boss trying to catch up with you. Use your judgement and ask follow-up questions if you're concerned.</p> <h2 id="bureaucracy" tabindex="-1">Bureaucracy<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#bureaucracy" aria-hidden="true">#</a></h2> <p><strong>Walk me through the process of expensing a $[price] [item]</strong><br /> Choose an item and price -- that could be a $50 book or something larger, it doesn't matter. What you're looking for here is a process that sounds reasonable and navigable for the price and item you chose.</p> <p><strong>How many layers of company managers or executives does one have to go through to get approval for a new idea?</strong><br /> The more layers, the more difficult and time consuming it will be. Well-defined process can mitigate the difficulty, but it is still a good indicator of overall bureaucracy and speed.</p> <p><strong>What is the policy on alternate work schedules?</strong><br /> Is variability okay, or is everyone expected to be on the same schedule? In modern orgs, especially distributed orgs, asking everyone to punch the clock at the same time is backwards, at best.</p> <p><strong>What is your remote work policy?</strong><br /> <em>Why</em> is that your remote work policy?</p> <p><strong>What is the company’s policy on work/life balance?</strong><br /> How does that work out in practice?</p> <p><strong>Is it easy to move to other divisions or offices?</strong><br /> Warning: the interviewer could infer that you are a difficult teammate and like to jump around.</p> <p><strong>What information is shared with the employees in terms of revenue, costs, operating metrics, etc?</strong><br /> Is this an “open book” shop, or do they play it closer to the vest? How is information shared? How do you get access to the information you need to be successful?</p> <p><strong>Does the company require a prospective employee to sign a non-compete contract? If so, could you explain in a few words how restrictive it is.</strong><br /> Is it negotiable?</p> <h2 id="diversity-equity-inclusion-belonging-and-ethics" tabindex="-1">Diversity, equity, inclusion, belonging, and ethics<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#diversity-equity-inclusion-belonging-and-ethics" aria-hidden="true">#</a></h2> <p><strong>Tell me about a situation where someone raised a concern about DE&amp;I or ethics?</strong><br /> How was it handled? If not, have there really not been any? Is management listening?</p> <p><strong>Tell me about the organization leadership demographics. What specifically are you doing to drive greater diversity in management?</strong><br /> Bad orgs don’t know or get defensive; good orgs are open and transparent; the best orgs share what they’re doing to improve. <strong>Follow-up:</strong> What benefits do you expect from increasing diversity among leadership?</p> <p><strong>Tell me about your effort to attract a diverse pool of candidates.</strong><br /> What metrics are they currently using to track DE&amp;I in hiring?</p> <p><strong>Tell me about your efforts to <em>retain</em> a diverse group of employees.</strong><br /> This is a particularly useful question. Lots of companies try to recruit diverse candidates and then don't do much at all after that to keep them. Again, what are the metrics they're using to track this?</p> <p><strong>Tell me about a time when a challenge or suggestion from an under-represented group was acted on in their favor?</strong><br /> How long ago was that?</p> <p><strong>How transparent is your salary and compensation data?</strong><br /> Not long ago, most orgs did not share salary and compensation info at all. State salary transparency laws have been changing that, but the information can still be vague or misleading. The best orgs will understand why salary transparency is valuable.</p> <p><strong>Am I the only one [in the demographic or under-represented group I identify as a member of]?<br /> If so, how do you plan to do to ensure that I am welcome, included and equal?</strong><br /> Incorrect answers include blinking in confusion, saying &quot;everything's fine and we don't see why we'd have to do anything in particular&quot;, and &quot;you're not the only one; we have a [person] in a $other_role!&quot; <strong>Follow-up:</strong> Where do you anticipate challenges?</p> <p><strong>Do you have a standard insurance package that covers trans health care?</strong><br /> Even if you yourself might not use the insurance package, this still gives you good insight into their commitment to inclusion.</p> <p><strong>Do you offer paternity leave, or just maternity leave?</strong><br /> If they only offer maternity leave it can say a lot about the roles they expect women to play.</p> <p><strong>Most/all of my interviewers were men. Can I speak to someone else on the team to hear more about their own experience?</strong><br /> Does the team lacks diverse perspectives?</p> <h2 id="understanding-the-company-and-team" tabindex="-1">Understanding the company and team<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#understanding-the-company-and-team" aria-hidden="true">#</a></h2> <p><strong>How are your teams structured? What is the management structure like?</strong><br /> Pay particular attention if you have any questions about reporting or power structures. Get clarity.</p> <p><strong>What’s the biggest challenge the team has gone through in the last year? Does the team currently feel optimistic about what's next?</strong><br /> Useful for getting a sense of team morale and working conditions.</p> <p><strong>Is this a new role?</strong><br /> If so, follow up with more questions about how the company plans to get buy-in for this new role and support the people in it. This can be useful to understand how well-defined the position is and if it's a position set up for success. If it is not a new role, see if you can learn more about why the person left. Best case is they were promoted up, meaning this role can lead to similar opportunities for you. <strong>Follow-ups:</strong></p> <ul> <li>If this is a replacement position, what happened to the former employee? How long were they in the role?</li> <li>If it's a new position, how is the company supporting it? What does success look like?</li> </ul> <p><strong>How does the organization reward employees?</strong><br /> Is it a star system / team-oriented / equity-based / bonus-based / golf-clap-based? Does it reward individual performance? Team performance? Is the reward tangible and real? How does the company demonstrate to an employee that they are an asset to the company? <strong>Follow-ups:</strong></p> <ul> <li>Why is that your reward system?</li> <li>If you could change any one thing about it, what would it be?</li> </ul> <p><strong>What has you most worried?</strong><br /> What keeps you up at night? A competitor? Something else?</p> <p><strong>What’s one thing that’s key to this company’s success that somebody from outside the company wouldn’t know about?</strong><br /> Can help you set priorities as you onboard.</p> <p><strong>What do you wish you had known when you joined this company?</strong><br /> Can tell you a lot about the culture or challenges.</p> <p><strong>What would you say are the company’s strengths?</strong><br /> Alternately, what would you say are the company’s weaknesses? It can be illuminating to flip these traditional interview questions back on the company.</p> <p><strong>What is the company’s current strategy for generating new business? What is the company’s strategy for maintaining existing business?</strong><br /> This speaks to the viability of the business model and is particularly useful for start-ups/scale-ups.</p> <p><strong>Are you profitable? if not, how does this affect what you can do? What's your planned timeline for becoming profitable?</strong><br /> Again, particularly useful for startups. Don't ask a publicly traded company this. It will just show you didn't do any research on readily available information.</p> <p><strong>How do you make money?</strong><br /> Again, mostly for startups, but can they explain the business model in a way that makes sense?</p> <p><strong>Are company financials transparent throughout the company?</strong><br /> What about salaries? (see the DE&amp;I section). This is another question that you probably don't want to ask a publicly traded company, because the financials should be public record. If you're curious, you should probably have already checked.</p> <p><strong>How much are you planning to hire in the next year?</strong><br /> If it's a large number, ask the follow-up: How do you plan to hire and onboard that many people?</p> <p><strong>How does the company usually solve problems: through committee, group meetings, individual meetings or management only?</strong><br /> Are they consensus-driven? Top-down? How well is that working for them?</p> <p><strong>How are important decisions made and communicated?</strong><br /> <strong>How many people are directly or indirectly involved in creative decisions?</strong> Are they dictated top down? Are ideas from anyone welcomed? If so, in what scope/context?</p> <p><strong>How does sales / operations / technology / marketing / finance work around here?</strong><br /> Groups other than the one you’re interviewing for -- the interviewer should have familiarity with those groups, and should (hopefully) speak well of them.</p> <h2 id="leadership" tabindex="-1">Leadership<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#leadership" aria-hidden="true">#</a></h2> <p><strong>Do managers regularly hold 1:1s?</strong><br /> What about skip levels? What sort of topics are discussed?</p> <p><strong>Who would I directly report to?</strong><br /> In some cases, this question can help you get a better sense of the org chart and where you'd be on it. It can also be a clue on whether the org is hiring you for a specific team, or just putting you in a pool of new hires to be farmed out as needed.</p> <p><strong>What’s your (or my future boss’) leadership style?</strong><br /> Is that style aligned with what you're looking for in a manager?</p> <p><strong>How do you know if people are comfortable giving you candid feedback? How do you fix it if they’re not?</strong><br /> Does your future manager value feedback and want to know what's not working? Hopefully, this is something they've thought about.</p> <p><strong>How do you nurture psychological safety in your team?</strong> The best organizations have probably spent considerable time thinking meaningfully about how they foster psychological safety on their teams and can readily articulate actions they've taken. Plenty of good organizations may not have thought about it in those terms -- they may lack the vocabulary -- but when prompted can still articulate what they've done. However, if get a blank stare or dismissiveness, even after prompting, that can indicate a toxic or hostile environment.</p> <h2 id="doing-the-work" tabindex="-1">Doing the work<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#doing-the-work" aria-hidden="true">#</a></h2> <p><strong>How does work get assigned?</strong></p> <p><strong>How often do inexperienced people get to work directly with more experienced people?</strong><br /> And how so? Pairing, or something else? How does it work?</p> <p><strong>How do you balance support and feature development?</strong></p> <p><strong>Tell me about your cross-functional teams</strong><br /> Do they have dedicated designers? Product owners? QA? Technical writer? Dev manager? How cross-functional teams are built tells you a lot about what the company values enough to put on the team.</p> <p><strong>How often do you have meetings? Are there scheduled/standing meetings? How much time should I expect to be in meetings</strong><br /> Remember, though, that for some positions (especially senior positions) meetings are a core component of the job.</p> <p><strong>When something goes wrong, how do you handle it?</strong></p> <p><strong>What kind of tools are provided by management to help an me do my job?</strong> (machinery, computers, office supplies, etc.)?<br /> How often is this equipment updated?</p> <h2 id="career-development" tabindex="-1">Career development<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#career-development" aria-hidden="true">#</a></h2> <p><strong>Are employees encouraged to go speak at conferences?</strong><br /> Do you cover travel to conferences?</p> <p><strong>Does your company support continuing education?</strong><br /> If so, how (and how much?)</p> <p><strong>In what other ways do you support career development?</strong></p> <p><strong>Does the company routinely provide training, either internal or external, for new technologies such as software updates or best practices?</strong></p> <p><strong>Does the company allow employees to pursue their own training path</strong><br /> To what extent?</p> <p><strong>When was the last time you promoted someone on your team? How did it happen?</strong><br /> How are they likely to handle it when you want a promotion?</p> <p><strong>Tell me about a time you supported a direct report leaving your team or company for the benefit of their own growth?</strong><br /> A supportive manager cares about your goals, not gluing you to your seat. The very best managers realize when it's time to move you up, even if that means moving you out.</p> <h2 id="performance-evaluation" tabindex="-1">Performance evaluation<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#performance-evaluation" aria-hidden="true">#</a></h2> <p><strong>How is performance evaluated?</strong><br /> What criteria does the company use for performance reviews? On what cycle? Are these criteria documented? If not, how do you ensure fair and equitable performance reviews?</p> <p><strong>How often can I expect job performance to be reviewed by management?</strong></p> <p><strong>Are raises based solely on job performance reviews? If not, what else is a factor?</strong></p> <p><strong>Do you stack-rank employees? Can you tell me how your stack ranking process works?</strong><br /> Most times, this should be a big red flag. &quot;Stack ranking&quot; usually means the company smooshes everyone into a bell curve, and the people who find themselves at the wrong end of the bell curve are now &quot;underperformers&quot; no matter how great they may be. In other words, stack ranking companies may say &quot;we only hire the best&quot; but then they'll treat at least half of their employees as under-performers, by design. Note that there are companies that employ some other sorting methods they may call &quot;stack ranking&quot;, so it's important to be sure you're working from the same definition.</p> <p><strong>Can you tell me about a time when you've had to let someone go?</strong></p> <h2 id="compensation" tabindex="-1">Compensation<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#compensation" aria-hidden="true">#</a></h2> <p><strong>If this is an exempt (salaried) position how much overtime do you assume I would put in without compensation?</strong></p> <p><strong>If this is an exempt (salaried) position, am I required to track all my time?</strong><br /> If so, how? And if it's not hourly, why?</p> <p><strong>What is the salary you expect to pay for this position?</strong></p> <p><strong>Is there a company/employee bonus structure and if so, how does it work?</strong></p> <p><strong>How often do you offer above asking?</strong><br /> Can you speak with someone who got such an offer?</p> <h2 id="for-engineering-orgs" tabindex="-1">For engineering orgs<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#for-engineering-orgs" aria-hidden="true">#</a></h2> <p><strong>What's the process for code review?</strong> <strong>How do you think about code correctness?</strong><br /> Bonus points if they can point to documented guidelines for behavior in code reviews.</p> <p><strong>How do you make sure that all code is understood by more than one person?</strong></p> <p><strong>How do you find bugs in your team's code?</strong><br /> Testing? Something else?</p> <p><strong>What happens when you find a serious bug in production code?</strong><br /> If they say this doesn't happen, that's a warning sign.</p> <p><strong>Who is responsible for doing deployment? How often do you deploy?</strong></p> <p><strong>Is there a written roadmap all developers can see?</strong><br /> How far into the future does it extend? How closely is it followed?</p> <p><strong>How/when do developers talk to non-developers?</strong><br /> How cross-functional are the teams? Is it easy to talk to the people who will be using your product?</p> <p><strong>What's your approach to technical debt?</strong></p> <p><strong>Do you contribute to open source projects?</strong><br /> Which projects? Which teams work on open source? Do you work mostly in the community or do you have a private fork?</p> <p><strong>Can I see some code the team I'm interviewing for has written?</strong><br /> From an open-source project, for example.</p> <h2 id="things-to-look-for-in-real-life" tabindex="-1">Things to look for in real life<a class="tdbc-anchor" href="https://another.rodeo/employer-questions/#things-to-look-for-in-real-life" aria-hidden="true">#</a></h2> <ul> <li> <p>How is the office space physically organized?</p> </li> <li> <p>Is it clean? Well kept?</p> </li> <li> <p>Are employees expected to pay for basics (like coffee)?</p> </li> </ul> <hr /> <p>With many thanks to all who have contributed to this list</p> </content>
</entry>
<entry>
<title>Pear</title>
<link href="https://another.rodeo/pear/"/>
<updated>2024-01-10T00:00:00Z</updated>
<id>https://another.rodeo/pear/</id>
<content type="html"><p>In late 2020 or early 2021, for a number of different reasons I decided I wanted to get a better understanding of Natural Language Processing (NLP) and Python's Natural Language Toolkit (NLTK). Maybe it's vestiges of my career in journalism, but the idea of converting a mess of text into something the machine can understand and do something useful with appeals to me.</p> <p>I was also pretty interested at the time in how government resumes are evaluated, and the need to match language. So given those converging interests it just made sense for me to try NLP to compare the language in a couple of documents -- like a resumé and a job post.</p> <p>And that was the beginnings of Pear. Over time I've re-written it a couple of times, built a nicer front-end for it and added functionality. I may keep doing that.</p> <p>I've also found I keep reaching for it, because similar commercial systems seem highly intrusive. I'm always wary about providing data or text to most any app, especially when they seem pushy about wanting me to do so. Are they harvesting and selling information? Are they doing something else with it? What happens to my doc when I hit submit? I like having something that's non-commercial and is clearly not in it for any worrisome reason.</p> <h3 id="why-did-i-do-it" tabindex="-1">Why did I do it?<a class="tdbc-anchor" href="https://another.rodeo/pear/#why-did-i-do-it" aria-hidden="true">#</a></h3> <p>To learn, and to solve a simple need I had to compare docs.</p> <h3 id="what-did-i-learn" tabindex="-1">What did I learn?<a class="tdbc-anchor" href="https://another.rodeo/pear/#what-did-i-learn" aria-hidden="true">#</a></h3> <ul> <li>A whole lot about Natural Language Processing. Even at my self-taught level this stuff is fascinating.</li> <li>Alpine.js and HTMX -- I'd been wanting to play with these mini-JS libraries and came away quite impressed. Would use again, and recommend.</li> <li>More Flask. As a died-in-the-wool Django person, it was really interesting learning more about Flask's approach to things.</li> </ul> <h3 id="where-is-it" tabindex="-1">Where is it?<a class="tdbc-anchor" href="https://another.rodeo/pear/#where-is-it" aria-hidden="true">#</a></h3> <ul> <li><a href="https://pear.fly.dev/">The site</a></li> <li><a href="https://github.com/tBaxter/pear">The repo</a></li> </ul> </content>
</entry>
<entry>
<title>Not funny, Dad</title>
<link href="https://another.rodeo/dad-joke/"/>
<updated>2024-01-27T00:00:00Z</updated>
<id>https://another.rodeo/dad-joke/</id>
<content type="html"><p>About every other year or so I'm reminded that the U.S. Federal government has a site called Fatherhood.gov, and tucked away inside that tiny little backwater in the vast sea of government web sites there is a collection of dad jokes. Yes, the United States government keeps and hosts a collection of dad jokes, and because they are the work the US government, they are owned by and open to the public.</p> <p>How this came to be is a fascinating story. Fatherhood.gov was established as part of the National Responsible Fatherhood Clearinghouse (NRFC), which came to be through the Deficit Reduction Act of 2005.</p> <p>For those who don't recall, in the mid-2000s there was a highly partisan (and arguably racially coded) panic over &quot;responsible fatherhood&quot; during the Bush/Cheney administration. When the DRA was rammed through Congress on a party-line vote, it authorized funds for &quot;the development, promotion, and distribution of a media campaign to encourage the appropriate involvement of parents in the life of any child and specifically the issue of responsible fatherhood.&quot;</p> <p>At some point, someone involved was smart enough to realize that all responsible fathers need a sizeable stable of dad jokes at the ready, and they were ready with a supply. And once they went into the site's CMS, providing a feed of them was trivial.</p> <p>What's extraordinary is that some buzzkill bureaucrat hasn't come along and squashed it all. It's a beautiful thing when you think about it.</p> <p>At any rate, inspired by this delightful bit of government arcana, I threw together a quick mashup putting the jokes together with a selection of dad-like images from Unsplash. You can see it at <a href="https://dadjoke.fly.dev/">dadjoke.fly.dev</a> -- at least until I move it to a more proper domain.</p> <p>Originally, I had planned to pair the jokes with photos from other government resources such as the National Archives, Library of Congress or Smithsonian, but despite of my best efforts and their robust APIs I was not able to locate a suitable feed of dad photos. If anyone knows where to find them, let me know, OK?</p> <p>The site itself is painfully simple. It's just a simple Flask site that tries to get a joke from fatherhood.gov (or icanhazdadjoke.com as a backup) pairs it with an image from unsplash, applies a short cache to it, and... well that's about it. There's just not much to it. Enjoy it as intended: as a silly little diversion.</p> <h3 id="why-did-i-do-it" tabindex="-1">Why did I do it?<a class="tdbc-anchor" href="https://another.rodeo/dad-joke/#why-did-i-do-it" aria-hidden="true">#</a></h3> <p>Because I could and I wanted to. That's about it. There are better places to get Dad jokes, if that's your thing.</p> <h3 id="what-did-i-learn" tabindex="-1">What did I learn?<a class="tdbc-anchor" href="https://another.rodeo/dad-joke/#what-did-i-learn" aria-hidden="true">#</a></h3> <p>Not a whole lot on such a simple site, but...</p> <ul> <li>I learned about Flask's built-in caching, which I hadn't used before.</li> <li>Learned a lot more about Library of Congress, Smithsonian and National Archives APIs, in spite of ultimately not using them.</li> </ul> <h3 id="where-is-it" tabindex="-1">Where is it?<a class="tdbc-anchor" href="https://another.rodeo/dad-joke/#where-is-it" aria-hidden="true">#</a></h3> <ul> <li><a href="https://dadjoke.fly.dev/">The site</a></li> <li><a href="https://github.com/tBaxter/dad-joke">The repo</a></li> </ul> </content>
</entry>
<entry>
<title>Markitup (v2)</title>
<link href="https://another.rodeo/markitup/"/>
<updated>2024-02-08T00:00:00Z</updated>
<id>https://another.rodeo/markitup/</id>
<content type="html"><p>I've used a library called <a href="https://markitup.jaysalvat.com/home/">MarkitUp</a> on different projects of mine for more than 15 years. Compared to most Rich Text Editors, I found it to be much lighter weight and gave users Just Enough help to format using markdown. On the server side, this also offered nice flexibilty: I could store markdown, HTML, or both. In short, for a lot of nerdy reasons I really liked MarkitUP.</p> <p>But time marches on in a way that software rarely does, and as I've spun up a new project lately -- more on that to come -- I found that not only had Markitup not really kept up with times, I couldn't find anything comparable to replace it with, either.</p> <p>In a nutshell, the world had left Markitup behind. It was built for jQuery, and in 2024 browsesrs have gotten a lot better and it's hard to see a reason to use jQuery anymore. It also was bloated with a lot of code to support browsers that just aren't really used anymore.</p> <p>I decided I wanted to update it. This was a foolhardy spur of the moment decision, since I don't entirely trust my modern javascript skills, either. Markitup isn't the only thing that's been left behind, I have, too.</p> <p>And then I thought, hey, what if I see if ChatGPT can convert it for me? And so I did.</p> <p>And it wasn't a perfect conversion, but it was pretty close. I still put in hours checking and testing, but even counting that time, it saved me hours. It was impressive.</p> <hr /> <p>I've recognized for awhile now that I have been lucky -- the entire cohort of engineers who came up over the last 25 years have been lucky. Software engineering has been, for all of my career and all of recent memory, a highly paid, very expensive specialist field.</p> <p>This has been a historical fluke, and one the market will eventually correct. It always does. There's too much incentive to turn expensive specialities into commodities.</p> <p>We are seeing the beginnings of the commoditization of software development. It had to happen. It is happening.</p> <p>I don't think that's the end of the world for software developers, though. All of the best ones I've known have understood that the code is -- relatively speaking -- the easy part. The people you're building it for -- both the end users and the stakeholders -- that's the hard part.</p> <p>So while I may be impressed with ChatGPTs ability to convert jQuery code, I remain less impressed with it's problem solving ability, and that's the the real value of a good developer.</p> <p>But anyways, about Markitup....</p> <h3 id="why-did-i-do-it" tabindex="-1">Why did I do it?<a class="tdbc-anchor" href="https://another.rodeo/markitup/#why-did-i-do-it" aria-hidden="true">#</a></h3> <p>Because I had a need, and because I thought it would be interesting to see how close generated code could get.</p> <h3 id="what-did-i-learn" tabindex="-1">What did I learn?<a class="tdbc-anchor" href="https://another.rodeo/markitup/#what-did-i-learn" aria-hidden="true">#</a></h3> <p>Generated code gets you about 80% there and you still need a human for the remainder. But that 80% may be the difference between a problem that gets solved and one that doesn't.</p> <h3 id="where-is-it" tabindex="-1">Where is it?<a class="tdbc-anchor" href="https://another.rodeo/markitup/#where-is-it" aria-hidden="true">#</a></h3> <ul> <li><a href="https://github.com/tBaxter/markitup2">The repo</a></li> </ul> </content>
</entry>
<entry>
<title>Deploying</title>
<link href="https://another.rodeo/deploying/"/>
<updated>2024-02-13T00:00:00Z</updated>
<id>https://another.rodeo/deploying/</id>
<content type="html"><p>At one time, deployments were simply uploading files via FTP. When we weren't editing live files in production. We were but simple cavedwellers, and those were interesting times.</p> <p>Since then we've developed a lot more rigor in our deployments and have greatly improved their reliability, repeatability and security.</p> <p>We've also introduced a lot of extra steps, and where there are extra steps, there's a sure likelihood I've missed one. Or 12.</p> <p>So, for my future self, I am starting a running list of questions to ask myself as I first deploy a new application into a new environment.</p> <p><em>Note: I recognize that many of these questions are painfully basic and some readers may feel compelled to tell me a better way of doing things. It's OK if you don't.</em></p> <hr /> <ul> <li>Did you set the environment variables in all the environments?</li> <li><em>How</em> did you set all the environment variables in all the environments?</li> <li>How are you <em>getting</em> all the environment variables in all the environments?</li> <li>If you put them in a flat file, did you remember to put that in <code>.gitignore</code>?</li> <li>Did you remember to <code>pip freeze</code> the requirements?</li> <li>Do you remember the correct command to launch the app? Hint: for fly.io, it's <code>fly launch</code></li> <li>Did you remember that there's a different command to deploy that app? Hint: <code>fly deploy</code></li> <li>Did you remember to pre-install the dependencies in your dockerfile that your app will need to put itself together?</li> <li>Do you remember that you probably need to copy requirements.txt to do that for it to work?</li> </ul> <pre><code>COPY ./requirements.txt /app/requirements.txt RUN pip install --no-cache-dir -r requirements.txt </code></pre> <ul> <li>Do you need to rebuild the app because you changed the dockerfile?</li> <li>Did you forget about your database settings?</li> <li>Did you figure out how you're going to send email? You know you're gonna need to send emails, right?</li> <li>Did you figure out how to receive emails?</li> <li>Did you remember to put the email service API keys in your secrets, too?</li> </ul> <h3 id="why-did-i-do-it" tabindex="-1">Why did I do it?<a class="tdbc-anchor" href="https://another.rodeo/deploying/#why-did-i-do-it" aria-hidden="true">#</a></h3> <p>Because I had a need, and because I thought it would be interesting to see how close generated code could get.</p> <h3 id="what-did-i-learn" tabindex="-1">What did I learn?<a class="tdbc-anchor" href="https://another.rodeo/deploying/#what-did-i-learn" aria-hidden="true">#</a></h3> <p>Generated code gets you about 80% there and you still need a human for the remainder. But that 80% may be the difference between a problem that gets solved and one that doesn't.</p> <h3 id="where-is-it" tabindex="-1">Where is it?<a class="tdbc-anchor" href="https://another.rodeo/deploying/#where-is-it" aria-hidden="true">#</a></h3> <ul> <li><a href="https://github.com/tBaxter/markitup2">The repo</a></li> </ul> </content>
</entry>
<entry>
<title>The Five Conditions for (Organizational) Improvement</title>
<link href="https://another.rodeo/five-conditions/"/>
<updated>2024-02-19T00:00:00Z</updated>
<id>https://another.rodeo/five-conditions/</id>
<content type="html"><p>Back in 2017 Roy Rapoport wrote “<a href="https://medium.com/@royrapoport/the-five-conditions-for-improvement-20909f856dab">The Five Conditions for Improvement</a>”, talking about the conditions necessary for an employee to fix a performance problem. I think he came up with a great framework for helping people improve, but what really keeps me coming back, over and over again, is how applicable it is in larger contexts. I think what Roy really described were the five conditions necessary for <em>any</em> entity to improve. And that includes organizational entities.</p> <p>Let’s say, the “Bob” in Roy’s essay isn’t an individual, but is instead Bob’s Organic Bagels, a scrappy start-up that has grown to become a solid little company bringing in a few million a year. They’ve reached the stage where they need to develop a little more maturity in their processes in order to scale, yet they can’t quite seem to get there. Why?</p> <ol> <li><strong>Does BOB agree there is a problem?</strong> Is there consensus across BOB senior leadership that there is a problem? What about outside the senior leadership team? If only one or two senior leaders agree there is a problem to be solved, it’s not likely to be solved.</li> <li><strong>Does BOB actually want to see this problem resolved?</strong> Ok, so a useful plurality of BOB management sees the problem, but there is no consensus that it’s a problem — maybe they don’t want extra process or scale, maybe they think it will happen organically, or they’re just busy and don’t want a new initiative. Whatever they reason, they don’t care. Even if they want to care, they can’t manage to really care. So it doesn’t happen.</li> <li><strong>Does BOB management see their role in the creation or ongoing care and feeding of the problem?</strong> If thinking around the BOB general managers meeting is that there is a problem that just arose mysteriously out of the ether and is an unsolvable mystery, then the outcome is certain: nothing will happen. Problems are created – and solved – by people, and this is what management exists to do. To solve the thorniest problems, management must be willing to recognize their own part in the creation of the problem and course correct. If they’re unwilling to change how they manage the business, then how the business is managed will not change.</li> <li><strong>Can BOB figure out a plan to solve the problem?</strong> Imagine BOB management agrees the problem exists, needs to be solved, and recognizes their part in the creation of the problem. They know they need to change course, but can’t figure out how to chart a new one. If Bob can’t figure out what to do about things, they’re not to get better.</li> <li><strong>Can BOB successfully execute the plan to solve the problem?</strong> The final step: Can they stop managing how they’ve been managing, successfully change course, and go in a new direction without stumbling or turning back around? This may take some time to prove out, and they may find they need to change course again. That’s normal and expected. Or should be.</li> </ol> <p>Knowing where you and your company are at in the five steps is key to successfully navigating organizational change, and that’s what keeps me coming back to Roy’s piece, time and again.</p> <h3 id="ok-great-now-what-am-i-supposed-to-do-with-this" tabindex="-1">OK, great, now what am I supposed to do with this?<a class="tdbc-anchor" href="https://another.rodeo/five-conditions/#ok-great-now-what-am-i-supposed-to-do-with-this" aria-hidden="true">#</a></h3> <p>If you’re a leader at BOB, understanding where you’re at on that scale – and being honest with yourself about it – is going to be pretty key to the success of any initiative you’re undertaking. The more important the change, the more important it is to understand where you’re at.</p> <p>And if you’re a leader thinking of joining BOB, you need to understand where they’re at, too. Worse, you need to try to separate where they <em>think</em> they are at from where they are really at, because the problem may not be seen the same way across the management team. See Levels 1 and 2, for example. Plenty of great leaders have joined companies both large and small and then found out the difference between an organization that truly wants to change versus an organization that wants to feel like it is changing.</p> <p>But here’s the thing: recognizing the levels is a great tool for overcoming them. And just as Bob successfully made it through in Roy’s original essay, BOB can, too.</p> <figure class="image "> <img src="https://another.rodeo/img/writing/five-conditions.jpeg" alt="A nonsensical AI-generated image I somehow liked for this, courtesy of hotpot.ai" /> <figcaption>A nonsensical AI-generated image I somehow liked for this, courtesy of hotpot.ai</figcaption> </figure> </content>
</entry>
<entry>
<title>Quicksand meetings</title>
<link href="https://another.rodeo/quicksand-meetings/"/>
<updated>2024-02-19T00:00:00Z</updated>
<id>https://another.rodeo/quicksand-meetings/</id>
<content type="html"><p>Lots of people dislike meetings, with good reason: Meetings interrupt. They take time. They steal focus.†</p> <p>For managers, though, meetings are a key part of the job. It’s how they brainstorm, balance efforts, build alignment, and broadcast knowledge. It’s how things get done when you’re a manager.</p> <p>Which makes it especially infuriating when managers schedule meetings that do just the opposite. Meetings that make it harder to get things done. Meetings that bring the work to a painful crawl. Meetings that cause more confusion and angst than they solve. In other words… <strong>Quicksand Meetings</strong>.</p> <p>As a manager, you're trying to build momentum, clarity, and team morale. If you’re scheduling these meetings, you aren’t just creating problems for your team, you’re failing at those fundamentals of management, and you’re blunting your own impact and delivery. Become a better manager: schedule better meetings.</p> <p>Take a look at the meetings you’re scheduling. Are they quicksand meetings? What would the folks attending them say? If you feel like you might have a meeting that matches one of these types, you probably do.</p> <figure class="image "> <img src="https://another.rodeo/img/writing/quicksand.jpeg" alt="You try to fight back, but the harder you fight, the deeper you sink. Until you can't move... you can't breathe... because you're in over your head. Like quicksand. -- Keanu Reeves" /> <figcaption>You try to fight back, but the harder you fight, the deeper you sink. Until you can't move... you can't breathe... because you're in over your head. Like quicksand. -- Keanu Reeves</figcaption> </figure> <h2 id="five-types-of-quicksand-meetings-you-dont-want-to-be-scheduling" tabindex="-1">Five types of Quicksand Meetings you don't want to be scheduling<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#five-types-of-quicksand-meetings-you-dont-want-to-be-scheduling" aria-hidden="true">#</a></h2> <h3 id="the-eternal-standing-meeting" tabindex="-1">The Eternal Standing Meeting<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#the-eternal-standing-meeting" aria-hidden="true">#</a></h3> <p>These are the meetings that turn up on calendars with regularity whether they are needed or not, forever. This isn’t a daily standup, it’s the ordeal created by the manager who says “I want us to get together so we can coordinate our efforts” completely ignoring that the folks on the team are already effectively coordinating efforts on Slack or Jira or any of the many other tools they have at their fingertips to asynchronously coordinate efforts.</p> <p>And of course The Eternal Standing Meeting is usually scheduled at some terrible time “that was the only time everyone was available” like 7:30 a.m. every day and has no agenda or action items.</p> <p>So everyone dutifully schleps themselves to the meeting, as requested, and pretends to pay attention while their mind wanders to a more productive use of their time.</p> <p>At best the Eternal Standing Meeting duplicates coordination and communication that’s already happening. At worst, it’s a purely ego-driven exercise scheduled by managers who feel the need to center everything around themselves. Even if it impacts the work.</p> <p>Possibly the most egregious example of the Eternal Standing Meeting is <strong>the hour-long daily standup</strong>. Nothing says “agile” like stretching what’s supposed to be a quick 5-10 minute meeting into a daily slog through minutiae. People only have about eight hours a day to get work done and you want to take 1/8 of that to talk about what’s happened since yesterday? It’s downright disrespectful of your own team.</p> <h3 id="the-fire-drill" tabindex="-1">The Fire Drill<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#the-fire-drill" aria-hidden="true">#</a></h3> <p>The Fire Drill looks a lot like an emergency meeting, but then you find out that either the emergency isn’t really an emergency at all, it was just normal operations. You can often spot The Fire Drill because there is no context or information about the “emergency” in the meeting invite, only an urgent “we have to talk about this.”</p> <p>Usually, everyone even remotely involved with the emergency is invited, but because there is no shared plan or context, people tend to wander aimlessly, hoping someone attending knows what's going on.</p> <p>If you find yourself regularly scheduling Fire Drill meetings, you should first step back and ask why your team has so many fires, and why you don’t have effective fire suppression systems in place? Well run teams rarely have fires. They have plans. They have processes. They have it under control.</p> <p>In the atypical cases where there truly is a fire, the lack of context fuels the fire. When everything is burning, effective communication is crucial. A contextless meeting isn’t that.</p> <h3 id="the-big-room" tabindex="-1">The Big Room<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#the-big-room" aria-hidden="true">#</a></h3> <p>The Big Room meeting happens when a manager invites everyone even tangentially related to a topic and then invites more folks, just in case, whether they have anything to contribute or not.</p> <p>A core handful of people who are invested in the topic will be at the center of the meeting, while everyone else is checked out, multi-tasking, or occasionally wandering into the conversation with non sequiturs.</p> <p>In the old office days, everyone huddled into a standing-room-only conference room. In the modern remote era it’s more comfortable, but also much easier for the attendees to surreptitiously check their phone for the duration.</p> <p>As a manager, it’s easy to think that inviting everyone is a good way to share context and communicate, but that’s wrong. But what you’re really doing is stealing focus and exacerbating Zoom Fatigue.</p> <p>The most productive meetings have <a href="https://hbr.org/2018/06/the-most-productive-meetings-have-fewer-than-8-people">fewer than eight people</a> (<a href="https://www.inc.com/sean-wise/want-to-have-more-productive-meetings-stanford-researcher-says-invite-fewer-people.html">really</a>) and you can communicate the results of the meeting to the larger group more effectively after the meeting, when you’ve had time to hone the communication.</p> <h3 id="the-chain-meeting" tabindex="-1">The Chain Meeting<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#the-chain-meeting" aria-hidden="true">#</a></h3> <p>The Chain meeting is when you schedule an endless series of meetings that just circle back around to the same predictable places. There’s no decision-making, no consensus, just going ‘round and ‘round, ‘round and ‘round. If you find yourself scheduling your third meeting on a given topic and there’s been no real movement since the first meeting, you may be scheduling a Chain Meeting.</p> <p>The good news is you can break the chain, starting now. Define the actions to be taken and a timeline for them. Know who the <a href="https://tettra.com/article/directly-responsible-individuals-guide/">Directly Responsible Individual</a> is for each item. Move things forward, not in circles.</p> <h3 id="the-marathon-meeting" tabindex="-1">The Marathon Meeting<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#the-marathon-meeting" aria-hidden="true">#</a></h3> <p>The marathon should never happen, but it does, usually at the worst possible time: when the team is already behind and stressed. That’s when someone will have the bright idea to schedule 20 hours of calls straight through two days “so we can all go over all the requirements together.”</p> <p>Of course it doesn’t work and people check out. That’s not how people’s brains work, it’s not how agile works, and it’s not how remote teams work. But people still try it.</p> <p>If you find yourself even considering a Marathon Meeting, ask yourself this: How has it come to this? How has the work and the communication about the work broken down so completely that the only apparent solution is to stuff everyone in a room until they give up and cry “uncle”?</p> <p>And then consider the cost of the Marathon, with all those highly paid people, not doing their regular jobs.</p> <p>If neither of those things give you pause, you may not actually be a manager.</p> <h2 id="five-steps-to-avoid-quicksand-meetings" tabindex="-1">Five steps to avoid Quicksand Meetings:<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#five-steps-to-avoid-quicksand-meetings" aria-hidden="true">#</a></h2> <p>All of these Quicksand Meetings share a few common traits: A lack of input, a lack of output, and a lack of ownership among the participants.</p> <p>Does this meeting have a clear and actionable agenda? Has everyone seen it, along with any supporting materials they need to digest before the meeting? Give everyone a chance to do their homework and develop informed opinions before the meeting instead of shooting from the hip. You can still give <a href="https://www.inc.com/justin-bariso/jeff-bezos-knows-how-to-run-a-meeting-here-are-his-three-simple-rules.html">a Bezos-style moment of silence at the start of the meeting</a> to review the materials, but at least give folks a chance to get up to speed before the meeting. Before we leave the meeting, what actions are we taking on those agenda items? What are our next steps? Who’s doing it, and when? You should know. If you can’t name the action items and a person handling each of them, that’s a problem. You’re not done yet. Am I inviting the right people? And the right number of people? Curate your guest list like it’s a wedding dinner and each guest costs you 100 bucks a plate. Find the people who want to contribute and are prepared to do so. Leave everyone else alone. They’ll be glad you did, because they have other things to do. Communicate the outcome of the meeting. Do this for the benefit of those who weren’t in the meeting, but also to reinforce the understanding of the folks who were in the meeting. You may feel like you don’t have enough time. You do. Especially if it helps you avoid another meeting on the topic. Track your meeting load. Do it for yourself. Do it for your team. On a personal level this is built into Google Calendar. At the team level, you may want to consider something like <a href="https://support.getclockwise.com/hc/en-us/articles/360050295911-Manager-s-guide-to-Clockwise#h_01HA7MAV1Z2S4FZEENW4CX2JH0">Clockwise</a> to track your teams’ bandwidth, and think about what a healthy bandwidth number really looks like, both for delivery, and for a healthy team.</p> <p>As managers, we sometimes hear “the meeting is the work” but that’s not quite right. <em>Meetings are in the middle of the work</em>. To make them useful, you as a manager have to put in the work to prepare for them (and to prepare others for them) and then you have to follow up on both the actions and communications afterwards. <em>That’s</em> the work.</p> <p>Good meetings are a quick and effective way for a group to collectively get from Point A to Point B. To do so, you should go in with a clear and shared understanding of Point A. During the meeting, you should identify Point B, what it will take to get there, and who is doing each of those things.</p> <h3 id="that-seems-like-a-lot-for-my-little-meeting" tabindex="-1">That seems like a lot for my little meeting<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#that-seems-like-a-lot-for-my-little-meeting" aria-hidden="true">#</a></h3> <p>Does every meeting need all of that structure? No. For some meetings, particularly 1:1s or team-building/conversational type meetings, that much structure can get in the way or even be counterproductive. Maybe you need a partial agenda. Maybe you don’t need an agenda at all. Feel it out, and see what the other folks in the meeting think.</p> <p>But if you find yourself invited to a Getting Things Done meeting, be sure things are getting done.</p> <p>Time is the one resource that does not and cannot scale. Don’t waste it.</p> <hr /> <h3 id="hat-tips" tabindex="-1">Hat tips<a class="tdbc-anchor" href="https://another.rodeo/quicksand-meetings/#hat-tips" aria-hidden="true">#</a></h3> <ul> <li><a href="https://amzn.to/3OLcLO8">Kevin Hoffman’s “Meeting Design”</a> is highly recommended. Kevin’s a righteous dude.</li> <li>The <a href="https://www.cia.gov/static/5c875f3ec660e092cf893f60b4a288df/SimpleSabotage.pdf">1944 CIA Simple Sabotage Field Manual</a> is a good primer on how plan bad meetings, too. Thanks to <a href="https://billhunt.dev/">Bill Hunt</a> for a timely reminder of it.</li> <li>And many thanks to Mark Headd and Elizabeth Ayers for challenging me to think harder about all of this.</li> </ul> <p>†<em>”There is no shortage of think-pieces about bad meetings”, he says, as he adds another to the pile.</em></p> </content>
</entry>
<entry>
<title>Know your (documentation) audience</title>
<link href="https://another.rodeo/know-your-audience/"/>
<updated>2024-03-01T00:00:00Z</updated>
<id>https://another.rodeo/know-your-audience/</id>
<content type="html"><p>Many years ago, armed with little more than a crude word processor and a take-on-the-world attitude, I embarked on a quest to become A Great Journalist. Day after day I fell bleary-eyed into early-morning classes, seeking knowledge. My words were going to make a difference.</p> <p>In the end, I only became a Middling Journalist, but I did manage to pick up a few insights and aphorisms that have proven useful since. Few are as useful and true (if clichéd) as this:</p> <p><strong>Know your audience</strong></p> <p>My journalism days are long past, but I continue to find applications for that shopworn slogan. It's hugely applicable in design, of course, but also product management and engineering. And nowhere in engineering is it more applicable than when it comes to writing technical documentation.</p> <p>Every day, engineering teams everywhere bicker endlessly about where to put their docs: Do we need a developer portal? Should they all be in Confluence? Do we need a Wiki?</p> <p>They endlessly seek the Single Source of Truth, writing and re-writing docs hoping to create the one true version of their technical docs. But here’s the real truth: <strong>for most engineering teams and technical projects there will never be a Single Source of Truth because there is no single group seeking truth</strong>.</p> <p>You have to know your audience, so start with the simple questions: Who will read these docs? Why? What do they hope to learn?</p> <p>Just thinking about the audience for your documentation will put you ahead of most engineering teams, because most engineering teams don’t really understand – or completely misunderstand – the audience for their technical docs. Even fewer understand that they almost definitely have more than one audience for their documentation.</p> <p>Nearly every engineering project will have at least two different audiences for their documentation.</p> <p>At least two audiences. Probably three or four. Maybe more.</p> <p><strong>Know your audience(s)</strong></p> <p>Each of the audiences for your docs have divergent needs and desires. Without understanding that, your documentation will always be bloated, messy, and hard to understand. You don't know your audiences, so you’re not giving them what they need. If you’re like most teams, you’ll either give up and leave everything under-documented, or you’ll shotgun out ever-larger heaping piles of docs, few of which will ever be read, let alone usable to their audience.</p> <p>Each of your audience needs documentation at a different fidelity, in a different location, to meet different needs. Your Single Source of Truth is wasting all their time. And yours.</p> <p>You need to write the right documentation, for the right audience, in the right place. And that’s not a one-time thing. So who are the audiences? Allow me to pull back the curtain and shine a spotlight...</p> <h3 id="1-engineers-in-the-codebase" tabindex="-1">1. Engineers <em>in</em> the codebase<a class="tdbc-anchor" href="https://another.rodeo/know-your-audience/#1-engineers-in-the-codebase" aria-hidden="true">#</a></h3> <p>This is probably you. And your team. And your future teammates. You are the folks reading and writing the code, actively developing it.</p> <p>What you want (what you really, really, want) is documentation adjacency. You want the docs to be close to what you're reading or writing spatially, not in some far-off wiki, but also focused cognitively to the work at hand. In other words, you don't want or need a birds-eye view of the system, you need to understand this function, right here. And that's enough.</p> <p>So it makes sense that these docs should live <strong>in</strong> the code, or as close as possible to the code it is talking about. I mean, you can't generally put comments in JSON, but you can, and should, put any docs you need explaining the JSON as near to it as possible, probably in the functions creating or consuming the JSON.</p> <p>Also remember that you and your team will likely read the code far more than you will write new code, so document accordingly.</p> <ul> <li><strong>Adjacency to code</strong>: high</li> <li><strong>Granularity</strong>: high</li> <li><strong>System-level understanding</strong>: low</li> <li><strong>Explanation of benefits</strong>: low</li> </ul> <h3 id="2-engineers-leveraging-the-codebase" tabindex="-1">2. Engineers <em>leveraging</em> the codebase<a class="tdbc-anchor" href="https://another.rodeo/know-your-audience/#2-engineers-leveraging-the-codebase" aria-hidden="true">#</a></h3> <p>This could be teams building on your platform, or consuming your API, or leveraging your open source project, or a million other things. Whatever they're doing, they have their own code to worry about, but for some miraculous, wondrous reason they want to use yours too. You should be flattered, and you should take good care of them by understanding and meeting their needs.</p> <p>But if it's all engineers, what do they want that's different than what you and your team wants? A higher-level system view. They probably don't care about the individual functions and they almost definitely have no interest in reading your code to understand it. They want things like:</p> <ul> <li>how-to instructions to implement and get it running</li> <li>Understanding of how to interface with it</li> <li>Gotchas they should watch out for</li> <li>Code examples and snippets to show how things work</li> <li>Clear and honest documentation of limitations. If it's not going to do [thing] but they really need [thing] let's just get that out of the way up-front.</li> </ul> <p>These folks don't want their docs in your code, because they don't want to read the code, but they probably want it pretty adjacent to wherever they go to <em>get</em> your code. Most times, that's probably the github repo, or someplace close to it. This is where you want to document the higher-level technical functions and APIs, and how engineers are expected to consume and use your codebase. It’s where documentation generators – SwaggerUI, Doxygen, Swimm, etc – may be most helpful.</p> <ul> <li><strong>Adjacency to code:</strong> medium</li> <li><strong>Granularity</strong>: medium-low</li> <li><strong>System-level understanding</strong>: medium-high</li> <li><strong>Explanation of benefits:</strong> medium</li> </ul> <h3 id="3-people-understanding-the-codebase-at-a-high-level" tabindex="-1">3. People <em>understanding</em> the codebase at a high level<a class="tdbc-anchor" href="https://another.rodeo/know-your-audience/#3-people-understanding-the-codebase-at-a-high-level" aria-hidden="true">#</a></h3> <p>This is most likely to be stakeholders, prospective partners or customers, your product manager, a technical writer or even your marketing department. Whoever it is, they have a healthy interest in your codebase, but they’re more interested in <em>what</em> it does, rather than <em>how</em> it does it. Many times, they’re seeking enough understanding that they can then explain it to their own audience.</p> <p>This group may be looking at the docs pretty far removed from the actual codebase, and that's OK. In fact, for this group, Confluence or some other system closer to where they work can make a lot of sense.</p> <ul> <li><strong>Adjacency to code:</strong> low</li> <li><strong>Granularity</strong>: low</li> <li><strong>System-level understanding:</strong> high</li> <li><strong>Explanation of benefits:</strong> medium-high</li> </ul> <h3 id="4-people-using-the-product-built-on-the-codebase" tabindex="-1">4. People <em>using the product</em> built on the codebase<a class="tdbc-anchor" href="https://another.rodeo/know-your-audience/#4-people-using-the-product-built-on-the-codebase" aria-hidden="true">#</a></h3> <p>These could be your most valuable audience, but too often they're ignored by engineering completely and simply handed off to the marketing department.</p> <p>This group has very little interest in the codebase. If they’re looking at it at all, it’s probably because they accidentally wandered into the Github repo from a link added by someone who didn’t understand the audience he was speaking to.</p> <p>What this group wants to know is simple: can it solve their problem? As an engineer, you offload these conversations to another department at your peril: You know better than they do what your code can and can't do, so you are better equipped to take at least the first pass at documenting it.</p> <p>Talk about the benefits with honesty and without hype. Someone will inevitably add additional hype downstream of your efforts. Before it gets there, though, you can have a real conversation about <em>why</em> you created the thing you created, <em>who</em> you created it for, and <em>what it can do to make their lives better</em>. The <em>how</em> is for another audience.</p> <ul> <li><strong>Adjacency to code:</strong> very low</li> <li><strong>Granularity</strong>: very low</li> <li><strong>System-level understanding:</strong> medium</li> <li><strong>Explanation of benefits:</strong> high</li> </ul> <h3 id="putting-it-all-together" tabindex="-1">Putting it all together<a class="tdbc-anchor" href="https://another.rodeo/know-your-audience/#putting-it-all-together" aria-hidden="true">#</a></h3> <p>Writing docs for all these audiences sounds like a lot of work, but in practice it could lead to writing fewer docs that are more effective. If the docs aren't meeting the needs of the intended audience, and meeting them where they are, then throw those docs out and never update them again.</p> <p>And the docs you <em>are</em> investing time in will have more clear value. Your team is happier. Your stakeholders and users are happier. Your product is more successful because the folks using it are happier and more able to solve their problems. For each audience, you’re focusing on their needs, and not weighing them down with extraneous baggage. They appreciate that.</p> <p>In many cases you'll be moving the docs someplace more adjacent to the codebase, if not within it, which means keeping them up to date gets a lot easier: you update them when you change the code that's right there, rather than updating some far-flung wiki no one remembers to read.</p> <p><strong>Know your audience.</strong></p> <p>To help visualize all this, here’s a carefully crafted high-fidelity rendering I created:</p> <figure class="image "> <img src="https://another.rodeo/img/writing/docs.png" alt="Here's a finely hand-crafted scatterplot with some squiggly dots intended to represent some of your audiences and their needs. " /> <figcaption>Here's a finely hand-crafted scatterplot with some squiggly dots intended to represent some of your audiences and their needs. </figcaption> </figure> <hr /> <p><small>With my thanks to Stacy Holmstedt, Jeff Triplett, Jennifer Wadella, Josh Chessman and others who helped me bounce these ideas around. If you’re interested, Daniele Procida built a framework on some similar ideas awhile back. Check it out at https://diataxis.fr/</small></p> </content>
</entry>
<entry>
<title>So you don't want to be a manager</title>
<link href="https://another.rodeo/straight-talk-ic-path/"/>
<updated>2024-03-07T00:00:00Z</updated>
<id>https://another.rodeo/straight-talk-ic-path/</id>
<content type="html"><p>I’ve heard it a thousand times from a thousand engineers: “I don’t want to be a manager.” A lot of senior engineers think this, but I’m not sure many of them understand what it will mean to them and their career. Here it is:</p> <p><strong>This will be a long, hard and lonely journey.</strong></p> <p>Your career progression will slow to a crawl. You'll watch your peers move up in the company before you. You'll wonder why. There are a few good reasons, and they're all hard to hear.</p> <h3 id="1-your-organization-does-not-need-very-many-senior-staff-level-ics" tabindex="-1">1. Your organization does not need very many senior (Staff+ level) ICs<a class="tdbc-anchor" href="https://another.rodeo/straight-talk-ic-path/#1-your-organization-does-not-need-very-many-senior-staff-level-ics" aria-hidden="true">#</a></h3> <p>Most teams are fairly autonomous. They have reasonably good to very good engineers on them who understand the systems they use. They have managers who are talking to one another, filling in the blanks. There's only so much need for a Super Engineer who knows how everything across teams works. Most of that work is already getting done.</p> <p>When you have one, it can be hard to find Super Engineer-level work for them to do, and it's really easy for management to start wondering what Super Engineer is doing to justify their very expensive salary.</p> <p>So there's not a lot of need for really senior pure ICs, not a lot of demand for them, and not a lot of seats for them. Take a look around: most likely your org has somewhere around five engineering managers for every IC-track Principal Engineer. That's not to say you can't do IC work. It's to say that if you <em>only</em> want to do IC work, the demand can be thin. There's almost always demand for another team lead.</p> <p>If you want one of those Principal seats, you're going to have to show a lot of value, and you're still likely to be stuck because there just isn't a seat open. Meanwhile, the folks on the management track have a much easier time finding openings. People are messy and everyone mostly agrees they need managing.</p> <h3 id="2-its-really-hard-to-show-impact-as-a-very-senior-ic" tabindex="-1">2. It's really hard to show impact as a very senior IC<a class="tdbc-anchor" href="https://another.rodeo/straight-talk-ic-path/#2-its-really-hard-to-show-impact-as-a-very-senior-ic" aria-hidden="true">#</a></h3> <p>From here on out, your career progression is mostly about creating larger and larger impact zones. As an IC it can be be hard to even create opportunities for impact, let alone have people recognize it. Let me break it down:</p> <p>As a Senior Software Engineer, you've mastered at least one and probably more than one of the systems your teams use. That's awesome. Your impact zone is that system.</p> <p>If you become a Team Lead, in addition to caring for your team, you'll also be building relationships beyond the borders of your team. Similarly, as a Staff Software Engineer (on an IC track) you'll be looking at the systems beyond the borders of your team. That's the impact zone at this level: one team, looking to create impact beyond the borders of that team.</p> <p>And so it goes: as a Principal Engineer you'll be expected to have mastered most systems and have an impact zone beyond the walls of the department. Or even outside of the organization. At some point, you'll be expected to uncover whole new lines of work or create mass efficiencies across the organization. That's hard.</p> <h3 id="3-youll-be-mostly-alone" tabindex="-1">3. You'll be mostly alone<a class="tdbc-anchor" href="https://another.rodeo/straight-talk-ic-path/#3-youll-be-mostly-alone" aria-hidden="true">#</a></h3> <p>This ties back to the first point, but it's worth calling out separately. If you take this path, you'll be largely on your own. Especially as you go higher there are fewer and fewer people on the path with you. You'll have fewer people to bounce technical ideas off of and you'll have to figure more out by yourself.</p> <h3 id="but-i-dont-want-to-be-a-manager-you-say" tabindex="-1">But I don't want to be a manager, you say.<a class="tdbc-anchor" href="https://another.rodeo/straight-talk-ic-path/#but-i-dont-want-to-be-a-manager-you-say" aria-hidden="true">#</a></h3> <p>Hey I get it. You've got to do what feels right for you, and going into management can just feel <em>wrong</em> for a lot of engineers. You're not alone. You're not even uncommon. People are messy and complicated and they make funny noises and they want things. Ick.</p> <p>And it feels like you're leaving behind everything you're good at. You are. You're taking on an all-new thing and the odds are that you'll probably be terrible at it at first. Most new managers are, until you figure it out. The world is full of lousy managers and new managers tend to swell those numbers. Especially if they don't have a great manager themselves to guide them.</p> <p>That's a bitter pill when you've fought to reach a stage in your career where you're respected and are just beginning to feel like an expert. It’s even harder if you’re prone to feelings of Imposter Syndrome.</p> <p>This is one reason why a lot of engineers <a href="https://charity.wtf/2017/05/11/the-engineer-manager-pendulum/">swing back and forth on the pendulum</a>.</p> <h3 id="i-get-it-i-do" tabindex="-1">I get it. I do.<a class="tdbc-anchor" href="https://another.rodeo/straight-talk-ic-path/#i-get-it-i-do" aria-hidden="true">#</a></h3> <p>I completely understand why you feel the way you do. People who follow and succeed on an IC path can be transformative. They can make highly technical (and potentially highly profitable) things happen that no one else can even see as possibilities.</p> <p>Senior-level ICs can wander from team to team making the hardest problems just disappear. They have real, visceral, quantifiable impact. There’s no denying the appeal in that.</p> <p>And they're building on their strengths rather than riding the &quot;I'm not sure I'm good at any of this&quot; rollercoaster that leaves pits in the stomach of new managers.</p> <p>But at the same time, some folks find that squishy people-problems are intricate and fascinating in a way that technical problems rarely are, and they find great satisfaction in that.</p> <p>There are also a lot of people who find that becoming a manager unleashes their super-powers. These are the folks who may have been under-recognized and under-valued throughout their career because they excel at <a href="https://noidea.dog/glue">glue work</a> and were seen as &quot;not technical enough&quot;. Now, as a manager, those skills they've honed are suddenly incredibly valuable. Critical, even. They have, finally, met their moment.</p> <h3 id="after-all-of-that-you-still-dont-want-to-manage" tabindex="-1">After all of that, you still don't want to manage?<a class="tdbc-anchor" href="https://another.rodeo/straight-talk-ic-path/#after-all-of-that-you-still-dont-want-to-manage" aria-hidden="true">#</a></h3> <p>Good. You do what feels right for you, just do it with open eyes. For some folks, even knowing all of this, the IC track still feels right. If that’s you, awesome. Go forth and do great things. I just want you to know what you're getting into. And that you can change paths if you change your mind. Good luck!</p> <p><em>Edited later 3/7 to clarify a few points people had raised. Thank you, people!</em></p> </content>
</entry>
<entry>
<title>AI is boring and stupid and maybe that's OK</title>
<link href="https://another.rodeo/ai-boring-stupid-ok/"/>
<updated>2024-03-11T00:00:00Z</updated>
<id>https://another.rodeo/ai-boring-stupid-ok/</id>
<content type="html"><p>We’re now just a bit over two years into the AI revolution. The chorus of hype and promises — both empty and real — remains deafening. The capabilities of AI increase every day. Yet right now, the most impressive thing about AI may be how quickly we’ve trained our primitive monkey brains to recognize how incredibly boring it is.</p> <p>In months, really, we’ve retrained our brains. We've gone from being utterly dazzled by the magic of AI to seeing the machine behind the curtain, moving the levers. Not long ago we watched incredulously as AI conjured credible art out of thin air, held lengthy conversations with us on the fly, and generated new lyrics for Taylor Swift songs anytime we liked. Then, after a moment of magic, we started to shrug.</p> <p>We learned in an astonishingly short time to recognize AI-generated content for what it is: Boring. Trite. Been there, done that, got the AI-generated T-shirt.</p> <figure class="image "> <img src="https://another.rodeo/img/writing/ai/ai-t-shirt.jpeg" alt="Inspiring, isn't it?" /> <figcaption>Inspiring, isn't it?</figcaption> </figure> <p>AI as a capability may be fascinating, but the output of it is nearly always dull and plodding. Recognizable as the work of a machine and marked by predictability and sameness. The AI-generated art proliferating across blog posts and the pages of LinkedIn Thought Leaders has already become a cliché. When we see someone pass off AI-generated text as their own, we know.</p> <p>We <em>know</em>.</p> <p>We’ve learned to see it, and just as we can’t help but see the green screen effect in an old sci-fi movie, we’ll only get better at spotting it, until eventually it's all we can see.</p> <h3 id="boring-by-design" tabindex="-1">Boring by design<a class="tdbc-anchor" href="https://another.rodeo/ai-boring-stupid-ok/#boring-by-design" aria-hidden="true">#</a></h3> <p>AI is built to be boring. That’s literally how it works: it predicts the most likely next word or pixel, based on the gazillion words and pixels fed to it. The problem is you, you’ve likely seen some version of the words and pixels fed to it before. Not every permutation, but enough to recognize the lack of originality.</p> <p>And so it goes with the most visible use cases for AI today: We see AI-generated art and reject both the processed sameness of it as quickly as we recoil from the six-fingered uncanny valley.</p> <p>We gloss over AI-generated text the same as we’ve learned to gloss over text that’s clearly overly optimized for SEO. Whether written by machines or for machines, our human brains want text written for humans, quirks and non-sequiturs and all. We want humor and humanity and something that makes us think in a way we haven’t thought before.</p> <p>Creativity doesn’t exist without unpredictability. Good doesn’t exist with humanity. Not yet at least.</p> <p>So, in a remarkably short time we’ve trained ourselves to see the machines working, and we recognize their work is largely... boring.</p> <p>And yet, this is not a problem for AI. Or for people. Because a lot of what we do every day really is boring. Repetitive. Predictable. The sort of thing the machines literally trained on.</p> <div style="position: relative; width: 100%; padding-bottom: 56.25%;"> <iframe style="position:absolute; width:100%; height:100%;" src="https://getyarn.io/yarn-clip/474d7a6b-f993-4713-8a7b-60a778ec1454/embed?autoplay=false&responsive=true" frameborder="0"></iframe> </div> <h3 id="boring-can-be-useful" tabindex="-1">Boring can be useful<a class="tdbc-anchor" href="https://another.rodeo/ai-boring-stupid-ok/#boring-can-be-useful" aria-hidden="true">#</a></h3> <p>The world is full of things that exist because of a need to fulfill some requirement, not because they need to bring us joy. Sometimes we just need to get something done in order to get to something more important to us.</p> <p>We write an awful lot of boilerplate and scaffolding on our way to something else, and then we write a lot of other things just to check a box. Boilerplate code. Boilerplate legal documents. Boilerplate grants and guidance and RFPs and SOWs and a whole alphabet soup of other documents and filings and records and reports.</p> <p>We don’t always need these things to be good, we just need them to be done. This is where AI can really shine. It’s great at creating all that boilerplate and scaffolding, and then it can just as easily turn around and consume it all and spit out a nice, concise summary.</p> <p>If we really over-achieve we can build a future where mountains of content aren't written or read by humans much at all. And maybe that’s not a bad thing. I mean, a lot of this stuff was never all that human-centered or human-readable to begin with.</p> <p>The worrisome part is that nobody reads this stuff now, so who's going to read it and catch errors in the future? Any editor (or coder) will tell you: it’s easy to gloss over errors when something is already written.</p> <h3 id="so-what-if-errors-sneak-in-ai-can-catch-those-too" tabindex="-1">So what if errors sneak in? AI can catch those, too.<a class="tdbc-anchor" href="https://another.rodeo/ai-boring-stupid-ok/#so-what-if-errors-sneak-in-ai-can-catch-those-too" aria-hidden="true">#</a></h3> <p>Sure. Maybe. But will they catch them <em>before</em> real people are impacted? I don't think so. We know real people are impacted already, starting with the people who created the works AI is regurgitating. But as more and more AI-generated text creeps into more places – especially highly regulated places – what will it bring along for the ride?</p> <p>This is especially worrisome in my field – government technology – where what's written determines which people receive needed benefits. Which Veterans get services. Which mothers are able to feed their children today. Which small businesses will survive thanks to a government loan. Literally, an entire world hinges on fine text and how it's read and interpreted. This is the kind of text AI excels at generating and we are terrible at reading.</p> <p>My very smart friend Mark Headd recently wrote up <a href="https://adhoc.team/2024/02/27/LLMs-gov-future/">some pretty smart use cases for AI and LLMs in government</a>. Bill Hunt, another very smart friend also working in government, has <a href="https://billhunt.dev/blog/2023/10/09/llms-are-not-government-ready/">a pretty strong opinion that today’s AI models aren’t ready</a>. I think it’s possible that they’re both right.</p> <p>There's an air of inevitability to generative AI – a vibrating sense of a genie in the air, refusing to go back into the bottle, sending a siren call to both those eager to summon and those fearful of what comes next.</p> <p>What comes next is happening now, and a lot of it is happening in highly regulated and highly senstive spaces. Government systems are using AI to detect fraud and waste, to help agencies with regulatory compliance and, undoubtedly, a lot of other things. With a lot of questions about what happens when there are false positives, or false negatives.</p> <p>AI generated content may be boring and trite, but that doesn't mean people aren't finding it incredibly useful, today, right now. And many of the most touted, most exciting use cases remain largely on the horizon.</p> <p>We can't wait to reach that horizon before we start figuring out how to handle editorial control, quality checking, rules compliance and a host of other factors for anything AI-generated.</p> <p>We’re going to have to find a way to ensure that AI is producing something like what human intelligence would have produced and that it is not introducing a bunch of errors. Getting AI to generate boilerplate is the easy part. Figuring out how we ensure that it’s correct will be the bear we have to wrestle.</p> <p>This is not the first time we've had this problem.</p> <h3 id="the-assembly-line" tabindex="-1">The assembly line<a class="tdbc-anchor" href="https://another.rodeo/ai-boring-stupid-ok/#the-assembly-line" aria-hidden="true">#</a></h3> <p>True fact: The precursor to modern assembly lines – arguably the first assembly lines – could be found in 19th century meatpacking plants. There you'd find overhead trolleys moving heavy carcasses from worker to worker for processing. At the time &quot;processing&quot; generally meant large knives and bone saws, so conditions were dire. Defects and accidents were largely ignored – even though they could be deadly.</p> <p>When automotive assembly lines in the early 20th century spurred a manufacturing revolution across industries, defects and errors still abounded, especially when plant owners made the the machines run faster to drive greater productivity. They got the idea from English textile companies, who had done for years with their looms – much to the horror of Luddites, who really just wanted a living wage and respect for workers. But we were talking about errors....</p> <p>It wasn't until well into the 20th century that manufacturers really began to master rigorous multi-stage, multi-faceted quality control. Even with huge advancements in the field, quality in many industries has remained spotty and sporadic.</p> <p>And that was when inspectors and testers only had to move at the speed of the line, which was limited at each step by what one person could do. Today, with AI we've automated the creation of nonsense at mass scale. Our traditional quality control checks don't match and won't scale.</p> <p>We already know that <a href="https://visualstudiomagazine.com/Articles/2024/01/25/copilot-research.aspx">AI-generated code lowers quality</a>. We've <a href="https://www.bloomberg.com/graphics/2024-openai-gpt-hiring-racial-discrimination/?accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb3VyY2UiOiJTdWJzY3JpYmVyR2lmdGVkQXJ0aWNsZSIsImlhdCI6MTcwOTg1NjE4NCwiZXhwIjoxNzEwNDYwOTg0LCJhcnRpY2xlSWQiOiJTQTA1Q1FUMEFGQjQwMCIsImJjb25uZWN0SWQiOiI4QkY3REVFODZERTk0QjdEOEVDRDA1OEQ4RUJDQzAzMyJ9.q4dHdWWVcJO9PMKhwQ-IF5BfvVNVmPAX8hWNyrtwSYY">discovered that it increases racial bias in hiring</a>. Microsoft's AI reportedly <a href="https://www.cnbc.com/2024/03/06/microsoft-ai-engineer-says-copilot-designer-creates-disturbing-images.html">generates violent sexual images</a> while Google had to <a href="https://www.axios.com/2024/02/23/google-gemini-images-stereotypes-controversy">stop humans from generating images of other humans</a> after tripping over themselves trying to correct AI stereotypes and bias. Across the industry, people are calling out failures to limit bias, misinformation and controversial content. The hazard of mimicking human content is that humans say some pretty messed up stuff.</p> <p>So given both the mediocrity of generated text and the high likelihood of damaging errors in generated content, how do we ensure safety and validity in highly regulated services where when compliance, correctness and contractual obligations are on the line? Who's going to check this stuff?</p> <p>I don’t think we can trust humans to be the answer. Even if they want to ensure accuracy and have a strong vested interest, I don't think they'll be able to keep up with fact-checking and error-checking all the content AI can generate.</p> <p>So of course the answer is to have the AI check itself. Just like grizzled veteran editors taught newcomers to read stories from bottom to top to break the brain's flow and catch errors, we'll think up creative ways to make AI better at catching it's own mistakes. But of course each layer of AI cleverness creates another layer of AI to check. It a hall of mirrors. A matryoshka. A hall of mirrors endlessly reflecting matryoshkas.</p> <p>For now, we find ourselves hacking through an ever-deepening forest of generated content, hoping we can spot the bear lurking in the forest before it mauls us. We're not good at this, and we're not going to be good at this. That forest of AI-generated content is boring as hell. And yet, somehow, we will find a path through it. It will be OK.</p> <p>Unless we use up all the electricity in the world first. In the meantime, here's a picture of Joe Biden and Donald Trump enjoying some quality time together.</p> <figure class="image "> <img src="https://another.rodeo/img/writing/ai/biden-trump.jpg" alt="Reality is the only word in the English language that should always be used in quotes." /> <figcaption>Reality is the only word in the English language that should always be used in quotes.</figcaption> </figure> </content>
</entry>
<entry>
<title>11ty Linkrolls</title>
<link href="https://another.rodeo/linkroll/"/>
<updated>2024-03-13T00:00:00Z</updated>
<id>https://another.rodeo/linkroll/</id>
<content type="html"><p>One of the things I've always loved about blogs were the linkrolls... that candy trail to more and more interesting things scattered around the web. I love to see folks sharing the interesting things they find. Social media is built on that sort of sharing, but they've also commoditized it and gamified it beyond recognition, and there's no persistence to it, either. I wanted an old-fashioned linkroll for myself.</p> <p>Surely, I thought, this must be a paved cowpath in the Eleventy world, so I asked on Mastodon:</p> <iframe src="https://mastodon.social/@tbaxter/112083281191909486/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://mastodon.social/embed.js" async="async"></script> <p>And I learned that yes, it has been done (and done well), but <em>how</em> to do it is less clear. in particular <a href="https://nicolas-hoizey.com/">Nicolas Hoizey</a> had a very nice version, and had <a href="https://nicolas-hoizey.com/articles/2023/02/08/a-bookmarklet-to-create-a-new-link-content-markdown-on-github/">written up part of it</a>. In the interest of completeness (and so I can remember how I did it), here are all the steps. I should also note that Nicolas' implementation is way, way more sophisticated and complex than mine, and that his 11ty codebase is chock full of interesting things I'll probably emulate later. For now, for this linkroll, this is the cavedweller version. We're <a href="https://www.youtube.com/watch?v=xekfBhiqfig">digging for fire</a> here.</p> <h3 id="prepare-the-bookmarklet" tabindex="-1">Prepare the bookmarklet<a class="tdbc-anchor" href="https://another.rodeo/linkroll/#prepare-the-bookmarklet" aria-hidden="true">#</a></h3> <ol> <li>Install the <a href="https://www.npmjs.com/package/bookmarklet">bookmarklet NPM package</a> with <code>npm install bookmarklet</code> or, if you're like me and you have some sort of NPM path issue you don't want to track down, shake your head and make it a global install: <code>npm install -g bookmarklet</code></li> <li>Following the link from Nicolas' site, I grabbed his <a href="https://github.com/nhoizey/nicolas-hoizey.com/blob/main/assets/js/bookmarklets/new-link.js">bookmarklet code</a> and put it in the same location on my site: <code>/assets/js/bookmarklets/</code></li> <li>In the bookmarklet script, look for <code>newFileUrl</code> and change the Github address to your own. I also modified it to automatically prompt for tags after getting <em>really</em> confused about why my pages didn't show up in any collections. You can see <a href="https://github.com/tBaxter/another-rodeo/blob/main/assets/js/bookmarklets/new-link.js">my version in Github</a>.</li> <li>Build the bookmarklet with <code>bookmarklet --demo assets/js/bookmarklets/new-link.js src/tools/bookmarklets/new-link.html</code>. Note that the last half of that command is the destination. In my case, I had to create a directory or two before I could get the output file there.</li> <li>Fire up your local site with <code>npm start</code> and navigate to <code>http://localhost:8080/tools/bookmarklets/new-link/</code>. You should see your bookmarklet and be able to drag it to your bookmarks bar.</li> <li>This is a good time to test it. Navigate to any page and click the bookmarklet. You should see prompts for the page title and a slugified (URL-safe) version of the title. If you're using my version, you should also get a prompt for tags. Click &quot;OK&quot; through the prmpts and you <em>should</em> get redirected to github, where you should see a draft of a new page.</li> </ol> <h3 id="creating-new-entries-for-the-linkroll" tabindex="-1">Creating new entries for the linkroll<a class="tdbc-anchor" href="https://another.rodeo/linkroll/#creating-new-entries-for-the-linkroll" aria-hidden="true">#</a></h3> <p>Whenever you click the bookmarklet it will create a new page in Github. At that point, you still need to save and commit the changes to create the new entry. I don't know if this part could be automated, and I didn't look into it because I thought it was a useful final step to ensure that the entry looked correct and an additional point to add any last-minute edits.</p> <p>Anything in the page you create here should be available to your site downstream, so you very well may want to add additional information. By default it attempts to grab and excerpt from the page, but you can also add your own thoughts.</p> <h3 id="showing-the-entries" tabindex="-1">Showing the entries<a class="tdbc-anchor" href="https://another.rodeo/linkroll/#showing-the-entries" aria-hidden="true">#</a></h3> <p>This is where things went sideways for me and the simple things got hard. I got pretty confused about why my new content didn't show up, and why I didn't have a &quot;links&quot; collection.</p> <p>It turned out that the original bookmarklet didn't add any tags -- I'm guessing Nicolas adds them himself -- and without them, the pages didn't appear in any collection and the collection wasn't created. Once I figured that out, things got simpler.</p> <p>To create a links page, I pretty much copied what Nicolas had done for his archives, although in a pretty dumbed-down version.</p> <ol> <li>I grabbed Nicolas' link index page and <a href="https://github.com/tBaxter/another-rodeo/blob/main/src/links/index.njk">made my own version</a>.</li> <li>That index page relies on the <a href="https://github.com/tBaxter/another-rodeo/blob/main/src/_includes/macros/linkCard.njk">linkcard macro</a>, which in turn relies on the <a href="https://github.com/tBaxter/another-rodeo/blob/main/src/_includes/macros/card.njk">card</a> and <a href="https://github.com/tBaxter/another-rodeo/blob/main/src/_includes/macros/meta.njk">meta</a> macros, all of which I grabbed from Nicolas and then stripped down. I admit macros are a part of 11ty I'm not familiar with, so it's very possible this part could be simpler and/or more elegant.</li> <li>Fire up the local version again, if it's not already running. You should see a page with the link you created earlier (although you may need to <code>git pull</code> to bring it down to your local build). If not, start debugging.</li> </ol> <p>I also created a simple sidebar for my index page, which was considerably less involved:</p> <pre><code> &lt;ul class=&quot;linkroll&quot;&gt; {% for link in collections.links %}&lt;li&gt; &lt;a href=&quot;{{ link.url }}&quot;&gt;{{ link.data.title }}&lt;/a&gt; {{ link.content | safe }} &lt;/li&gt;{% endfor %} &lt;/ul&gt; </code></pre> <p>So, that's how I did it.</p> <h3 id="my-to-do-list-from-here" tabindex="-1">My to-do list from here<a class="tdbc-anchor" href="https://another.rodeo/linkroll/#my-to-do-list-from-here" aria-hidden="true">#</a></h3> <ol> <li>Make saving a new entry trigger a Netlify build. Right now it doesn't appear to. I imagine there's a Github action or something to do it, I just haven't figured it out yet.</li> <li>Possibly related to the above, or causing the entry to not show up on deployment, but I introduced a defect when adding multiple links. They're becoming a single string, so they don't get added to collection properly. I'll have to sort that out.</li> <li>Think about how I might introduce images. Nicolas appears to use thumb.io to get screenshots. I'm wondering about leveraging <code>og:image</code> tags where they're found</li> <li>Nicolas really does have a lot of interesting ideas in his repo, and I think I'm likely to incorporate more of them.</li> </ol> </content>
</entry>
<entry>
<title>The handcycle</title>
<link href="https://another.rodeo/handcycle/"/>
<updated>2024-03-28T00:00:00Z</updated>
<id>https://another.rodeo/handcycle/</id>
<content type="html"><p>This is one of those projects where I wish I'd kept better notes and photos, because it was pretty fascinating to me....</p> <p>In spring 2001 a friend learned I'd been renovating old bikes and asked if I'd look at his daughter's bike. His daughter has some issues with mobility, so the bike in question was a handcycle. I'd never heard of a handcycle, let alone put a wrench to one, but was I going to let that stop me? No, I was not.</p> <p>When it came to me, it had been sitting in the back corner of a warehouse for some time, and that time had not been good it it. Aside from a thick coating of dust, it appeared someone may have backed a forklift into the front wheel. In addition, chemicals in the air at the factory had attacked the metal parts.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/handcycle/starting.jpg" alt="The starting point for this project. Dirty and neglected, but sound." /> <figcaption>The starting point for this project. Dirty and neglected, but sound.</figcaption> </figure> <p>On the other hand, the paint was still good and it was sound and not overly rusty. It would clean up.</p> <p>Before I tore into it, I took a minute to familiarize myself with handcycles. Essentially they're sort of a trike, using wheelchair back wheels, coupled with a combination steerer/crankset operated by the rider's hands to provide forward propulsion. So there are lots of off-the-shelf bike parts coupled with off-the-shelf wheelchair parts, all used in interesting new ways and mixed in with some bespoke custom stuff to make it all work.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/handcycle/crank.jpg" alt="The crank is a pretty standard 110BCD square-taper triple crank. Looked a bit like a Sugino to me, but it wasn't marked. A very tiny chainring is bolted to the inner mounting point. You can also make out the vertically-mounted brake lever, which is set up to act as a parking brake." /> <figcaption>The crank is a pretty standard 110BCD square-taper triple crank. Looked a bit like a Sugino to me, but it wasn't marked. A very tiny chainring is bolted to the inner mounting point. You can also make out the vertically-mounted brake lever, which is set up to act as a parking brake.</figcaption> </figure> <p>For the most part, this was a straightforward refurbishment, with a few twists. All the normal stuff you'd buy for a bike refurb was just a bit different. For example, the tires were wheelchair tires, which I had to track down a good source to find. Eventually I discoverd <a href="https://www.sportaid.com/">sportaid.com</a>, who have everything one could want for a high-performance wheelchair, including some nice tires.</p> <p>One thing I learned: wheelchair tires run at <em>very</em> high pressure and they are <em>very</em> hard to seat on the rim. I think I broke a half-dozen tire irons.</p> <p>The chain was also a bit quirky. Because of the length of travel from the hand cranks to the front wheel, I had to buy two chains and merge them together.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/handcycle/flat-spot.jpg" alt="The front wheel had a big flat problem." /> <figcaption>The front wheel had a big flat problem.</figcaption> </figure> <p>The front wheel had taken a pretty bad hit, and I didn't trust the rim to be solid anymore. I lucked out and found a New Old Stock Sun CR18 rim that matched the stock rims nearly perfectly. Score! This was before I learned to lace rims myself, though, so I had a local shop lace swap over the stock Shimano internal-geared hub to the new rim. They did a great job.</p> <p>Speaking of that Shimano hub, they're not for the faint of heart, even for someone like myself who's experienced with Sturmey-Archer 3-speed hugs. Luckily I just need to re-lube it and it and give a good cleaning. It worked beautifully.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/handcycle/reassembly.jpeg" alt="Reassembly. That big bracket on the fork is for two chain idler pulleys. The chain is that long." /> <figcaption>Reassembly. That big bracket on the fork is for two chain idler pulleys. The chain is that long.</figcaption> </figure> <p>A lot of the work was pretty normal, though: disassemble, clean, lube, re-assemble. In spite of the surface corrosion the bike cleaned up well and as it came back together it looked nearly like new.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/handcycle/finished.jpeg" alt="Finished!" /> <figcaption>Finished!</figcaption> </figure> <p>So what's it like to ride? It's work. The 8-speed hub and small chainring help, but even if you enjoy cycling, this is a whole different set of muscles. But it's also a lot of fun.</p> <p>Most important, the owner <em>loved</em> having her bike back so she could go for a ride whenever she wanted, on her own terms.</p> <p>And isn't that what it's all about?</p> </content>
</entry>
<entry>
<title>About this site</title>
<link href="https://another.rodeo/about/"/>
<updated>2024-04-07T00:00:00Z</updated>
<id>https://another.rodeo/about/</id>
<content type="html"><h3 id="april-8" tabindex="-1">April 8<a class="tdbc-anchor" href="https://another.rodeo/about/#april-8" aria-hidden="true">#</a></h3> <p>I skipped some small updates over the past few weeks, but today sees the launch of some fairly major typography and hero image changes.</p> <h3 id="mar-15" tabindex="-1">Mar 15<a class="tdbc-anchor" href="https://another.rodeo/about/#mar-15" aria-hidden="true">#</a></h3> <p>I've recently added a linkroll and <a href="https://another.rodeo/links">links page</a>, along with a page <a href="https://another.rodeo/about-carter">about me</a>. I'm thinking a bit about the <a href="https://aboutideasnow.com/about">about | ideas |now model</a> but don't honestly know if I want to keep up with updating all those pages. Seems like a lot.</p> <p>I've also been making CSS tweaks here and there. I need to take a harder look at the CSS. It is currently broken on small screens, I'm not sure my color choices are accessbible, and I don't love the way it's organized and builds.</p> <h3 id="feb-22" tabindex="-1">Feb 22<a class="tdbc-anchor" href="https://another.rodeo/about/#feb-22" aria-hidden="true">#</a></h3> <p>I've needed to fix the site navigation for awhile now, and finally did. I used the simple <a href="https://www.11ty.dev/docs/plugins/navigation/">11ty Navigation Plugin</a> and it was so easy it made me a bit embarrassed that I hadn't fixed it already.</p> <h3 id="feb-7" tabindex="-1">Feb 7<a class="tdbc-anchor" href="https://another.rodeo/about/#feb-7" aria-hidden="true">#</a></h3> <p>I've added a lot more content this week as I consolidate various things I've had on other websites and bring it all here. That means my Smart Camper content is here now and I'll be retiring smartercamper.com, and I've started bringing over a bunch of the bike content from re-cycled.net. I'll be retiring that one, too.</p> <p>I've also pulled in the Giant List of Questions for Prospective Employers. I'm experimenting with embedding that here as a Github submodule. We'll see how well it works.</p> <p>And I added a bunch of photos and thumbnails.</p> <h3 id="jan-30-2024" tabindex="-1">Jan 30, 2024<a class="tdbc-anchor" href="https://another.rodeo/about/#jan-30-2024" aria-hidden="true">#</a></h3> <p>As I begin to diverge from the perfectly nice <a href="https://github.com/5t3ph/11ty-netlify-jumpstart/generate">11ty Netlify jumpstart template</a>, I've changed the main logo image and theme colors. Those who have known me for awhile will recognize the horseshoe isn't just a nod to this site's name, it's also the same horseshoe found on Gretsch guitars, in particular the Gretsch 6120 Chet Atkins. I created the Gretsch Pages in 1995 and over time it became the leading resource and community for Gretsch guitar owners. After 25 years I retired, but not without some regrets. It was a huge part of my life for a very long time. Just seemed right to have a little homage here.</p> <h2 id="were-doing-it-live" tabindex="-1">We're doing it live<a class="tdbc-anchor" href="https://another.rodeo/about/#were-doing-it-live" aria-hidden="true">#</a></h2> <p>I'm Carter Baxter. I like to tinker with things. You can read more about me on <a href="https://www.linkedin.com/in/carter-baxter/">Linkedin</a>, on <a href="https://github.com/tBaxter">Github</a>, or on <a href="https://mastodon.social/@tbaxter">Mastodon</a>.</p> <p>This site is a little clearinghouse for various experiments and projects I've taken on and tinkered with. Because it's all about the projects, we'll treat the site as a project, too, and build it out live.</p> <p>We're starting from the <a href="https://github.com/5t3ph/11ty-netlify-jumpstart/generate">11ty Netlify jumpstart template</a> and going from there. If I don't abandon the project, it should be constantly changing. We'll see where it goes.</p> <figure class="image "> <img src="https://another.rodeo/img/web-things/building-it.jpeg" alt="We're building it out in the open. Photo generated by hotpot.ai" /> <figcaption>We're building it out in the open. Photo generated by hotpot.ai</figcaption> </figure> <!-- ### Jump to: - [Global Site Data and .env](#global-site-data-and-env) - [Template Languages Used](#template-languages-used) - [Layout Hierarchy and Features](#layout-hierarchy-and-features) - [Expected Frontmatter](#expected-frontmatter) - [Permalink Style](#permalink-style) - [Asset Handling](#asset-handling) - [Linting](#linting) - [Sass Framework](#sass-framework) - [Anchor links](#anchor-links) - [Sitemap](#sitemap) - [RSS Feed](#rss-feed) - [Prism Syntax Highlighting](#prism-syntax-highlighting) - [.eleventy.js Config Features](#eleventyjs-config-features) - [VSCode Tips](#vscode-tips) ## Template Languages Used Page templates are created as Nunjucks (`.njk`), and feature are added that expect Markdown for most page content. ## Layout Hierarchy and Features There are two layouts and one partial included. **New in v1.1.0** - layouts are customized to be located in `src/_layouts`. - `_layouts/base.njk` includes the standard HTML boilerplate including meta and "og" tags in `<head>`. - `_layouts/page.njk` includes the `sitenav.njk` partial and chains up to `base` The `src/index.njk` template chains to the `base` layout and includes a loop that will create "cards" for everything in `collections.pages`. ## Expected Frontmatter There are only two fields expected: - `title` - essentially required, by default is used in the page `<title>`, and in the layout "hero". - `description` - optional, by default appears below the title for the `page` template and is used as for the "description" meta tag. > If you want typed front matter, consider my plugin for [collection schemas](https://www.npmjs.com/package/@11tyrocks/eleventy-plugin-collection-schemas) ## Permalink Style The default setup expects content - using any template language - within `pages/`. The `pages.json` in that directory includes a `permalink` setting so that the file name is used directly to prevent 'pages' being the base of the URL. You can [override permalinks per file](https://www.11ty.dev/docs/permalinks/). ## Asset Handling In the `.eleventy.js` config, there are included "pass-throughs" for an `img/` directory as well as `favicon.png`. You can replace the included favicon, and create an `img` directory or remove the `addPassthroughCopy` if you do not have need of images. Creating an `img` directory and keeping the pass-through directive will make images available at `/img/[image-file-path]` relative to the site root. ## Linting A `prettier` config is included, with the only update being `printWidth: 100`. ## Sass Framework Review the [styling documentation](https://5t3ph.github.io/html-sass-jumpstart/) for the included minimal Sass framework, particularly the theme variables, to quickly customize the starter. The only notable differences are: 1. `sitenav` - adjust the styles for the navigation header that appears on pages 1. `tdbc-anchor` - styles for the `#` anchor that appears next to page headings ([or turn that feature off](#anchor-links)) can be adjusted in `sass/_utilities` 1. Additional `article`-scoped styling for typography as it appears on `pages` 1. A theme for the [`prism` syntax highlighting](#prism-syntax-highlighting) for code blocks. You can adjust or replace the theme in `sass/_prism`. Additionally, the Sass in this starter is processed using LightningCSS by way of my plugin: [@11tyrocks/eleventy-plugin-sass-lightningcss](https://www.npmjs.com/package/@11tyrocks/eleventy-plugin-sass-lightningcss). This affords you access to some super modern CSS features, if you choose to use them. ## Anchor Links Anchor links next to headings throughout Markdown content are generated by an add-on plugin for `markdownIt`. This feature can be adjusted or removed in the `.eleventy.js` config file. ## Generated Features ### Sitemap A `sitemap.xml` is generated from all available content. To exclude non-page or non-public content from the sitemap, include `eleventyExcludeFromCollections: true` in frontmatter, or [create a custom filter](https://www.11ty.dev/docs/collections/#advanced-custom-filtering-and-sorting). ### RSS Feed An RSS feed is included, and output at `[siteurl]/feed/feed.xml`. If publishing from Netlify, the included `netlify.toml` file will create a redirect so that the feed becomes available at `[siteurl]/feed`. ## Prism Syntax Highlighting Syntax highlighting of inline or code blocks found within Markdown content is provided by Prism via `@11ty/eleventy-plugin-syntaxhighlight`. You can change the theme used in `sass/_prism.scss`. Or, remove the plugin if you are not in need of code highlighting. ## .eleventy.js Config Features ### Overrides - **Input directory**: `src` - **Output directory**: `public` - **Layout directory**: `_layouts` Also, `markdownLibrary` is extended to add the `markdownItAnchor` plugin for [anchor links](#anchor-links). ### Shortcode: `year` Returns the current `YYYY` year, used by the footer copyright. ### Filter: `slug` Makes the default `slug` function more strict to ensure things like excluding emojis and enforcing lowercase. ## VSCode Tips ### Nunjucks If you haven't previously worked with Nunjucks, you will want a syntax highlighting extension: [Nunjucks](https://marketplace.visualstudio.com/items?itemName=ronnidc.nunjucks) In addition, you may want to ensure Emmet works on `.njk` files by updating/adding the following in the `settings.json`: ```json "emmet.includeLanguages": { "nunjucks": "html", }, ``` ### Formatting As noted previously, a `prettier` config is included, and you may want to get the Prettier extension and update your VSCode settings to "Format on Save". However, to format template files Prettier doesn't recognize like `.njk`, you can update the "Language Mode" on the currently open file from "Nunjucks" (or other current templating language) to "HTML" to allow formatting to be applied. Then, flip it back to re-allow the syntax highlighting if needed. This is located in the VSCode bottom toolbar near the right-hand side and will display the value of the current file's detected language. Click the name to open the selector. --></content>
</entry>
<entry>
<title>On values</title>
<link href="https://another.rodeo/values/"/>
<updated>2024-04-08T00:00:00Z</updated>
<id>https://another.rodeo/values/</id>
<content type="html"><p>One crisp spring morning in May 1969, a soft-spoken, mild-mannered 41-year-old sat down in front of the United States Senate Subcommittee on Communications and quietly took on the Nixon administration.</p> <p>Nixon wanted to gut funding for public television and the Corporation for Public Broadcasting. In his eyes, and in the eyes of many conservatives at the time, public TV was an expensive government overreach, a waste of taxpayer dollars, and a hotbed of liberal and progressive indoctrination.</p> <p>Against that backdrop, this subdued man spoke to the US Senate, delivering an impassioned and heartfelt case for the importance of television programming that nurtured, that led with empathy, and created smarter, more well-rounded people.</p> <p>This was not a winning pitch for the Senate Subcommittee on Communications. The  heartfelt plea was met with skepticism, the passion with derision. Arguments were skewered. Entreaties ignored.</p> <p>This quiet man did not waver, though, and eventually enough of the committee — and enough of the public — saw things as he saw them. The votes were there, and no matter what Nixon wanted, public television funding would stay.</p> <p>That is, of course, the story of how Fred Rogers took on the President of the United States, stood by his convictions, and saved public television — and “Mr Rogers Neighborhood” — for the next three decades.</p> <p>Later the same year Rogers again stood up with quiet conviction against powerful forces when he invited Officer Clemmons — a black man — to <a href="https://www.youtube.com/watch?v=v4recJ6qXyk">soak his feet in a wading pool on a hot day</a>. TV itself was almost completely segregated in 1969 —  outside of comedy/variety shows, about the only diverse cast you’d find was on Rogers’ PBS neighbors on Sesame Street — and swimming pools across the country were still segregated. Racial tensions in general were running high. Yet here was Fred Rogers, dipping his toes in a pool with a Black man. His critics said it was inappropriate and divisive. Rogers did not care, and he did not falter.</p> <h3 id="choices" tabindex="-1">Choices<a class="tdbc-anchor" href="https://another.rodeo/values/#choices" aria-hidden="true">#</a></h3> <p>The point here is not to extol the virtues of Fred Rogers. There were many, and plenty of folks have done a great job of talking about them. They’re right. No, the point here is to talk about what Rogers knowingly gave up in his unflinching commitment to his values.</p> <p>He gave up a fortune in lucrative merchandising and merchandising deals in order to preserve the integrity and authenticity of his program over making a fortune in licensing and merchandising deals.</p> <p>He weathered a lifetime of whisper campaigns full of baseless accusations and character assassinations, turning the other cheek to his detractors and leaving their foul rumors unaddressed. He acted as he believed, guided by the power of kindness, forgiveness and grace.</p> <p>He struggled through his life with his own mental health, depression, and anxiety. He grappled with the weight of his work and buckled under the load of constant emotional labor, caring for so many others.</p> <p>Fred Rogers understood this well: for everything we value — for anything we value — there is something else we are choosing not to value, whether we’re aware of it or not. There are trade-offs and compromises. So it is for all of us.</p> <p>What we care about costs us.</p> <p>If we value a quiet, simple life, we’re not optimizing for material possessions, or a rich and busy social schedule. We may be de-prioritizing connection and community, or wealth we could have pursued.</p> <p>And if we optimize for connections and relationships or success and achievement, we may have a life full of cocktail mixers and lively conversation, but our personal lives are likely to be anything but quiet and simple.</p> <p>These things aren’t binary. Most of us fumble along somewhere in the middle, without truly optimizing for any one particular thing, or we flip-flop between valuing one thing and then another.</p> <p>Still, as we consider what we truly believe in and truly care about, there is also value in considering what we don’t, and why.</p> <h3 id="which-brings-us-to-corporate-values" tabindex="-1">Which brings us to corporate values<a class="tdbc-anchor" href="https://another.rodeo/values/#which-brings-us-to-corporate-values" aria-hidden="true">#</a></h3> <p>Corporate values. Oh boy. Every company has them, and most of them are terrible.  Superficial. Hypocritical. Hollow. You know it, I know it, most likely the corporation knows it, too.</p> <p>Most corporations, just like most people, don’t really think through the choices they’re deprioritizing when they choose their values, which is how we get hollow and meaningless values.</p> <p>There are <a href="https://blog.hubspot.com/marketing/company-values">endless</a> <a href="https://www.indeed.com/hire/c/info/company-values">empty</a> <a href="https://www.wordstream.com/blog/ws/2021/06/09/company-core-values">lists</a> of <a href="https://builtin.com/company-culture/company-core-values-examples">corporate</a> <a href="https://www.hotjar.com/blog/company-values/">values</a> you can pick and choose from and have ready-made corporate values, without all the messy reflection, introspection, or thinking about the tradeoffs inherent in optimizing for any given value.</p> <p>“Integrity,” for example, consistently tops the list of most common corporate core values. Companies tout their honesty, transparency, and desire to do the right thing, even when it's difficult or inconvenient. But integrity is inherently at odds with the true number one goal of nearly every corporation over the past 40 years or more: <a href="https://www.forbes.com/sites/stevedenning/2014/06/17/why-the-worlds-dumbest-idea-is-finally-dying/?sh=5ed3f61f104e">maximizing shareholder value</a>.</p> <p>It’s not even a matter of illegality or unethical behavior. True integrity means telling customers honestly that maybe your product isn’t the right product for them. It means standing behind a product even when doing so might be very, very costly. It means being transparent about those things that drive down shareholder value.</p> <p>Fred Rogers made a choice to value integrity over a fortune he could have made. Few corporations would do the same, and many would argue that they <em>shouldn’t,</em> that corporations should optimize for profit over all else.</p> <p>Google’s “Don’t be Evil” mantra remains one of the most famous corporate core values ever. In their 2004 IPO letter, Google founders Larry Page and Sergey Brin recognized the tradeoff inherent in the value, saying “We believe strongly that in the long term, we will be better served—as shareholders and in all other ways—by a company that does good things for the world <em>even if we forgo some short term gains</em>” (Emphasis mine).</p> <p>Over time, however, it became clear that pursuing and following “Don’t be Evil” would mean giving up <a href="https://longreads.com/2019/09/05/how-google-discovered-the-value-of-surveillance/">wildly profitable surveillance capitalism</a>, <a href="https://www.bbc.com/news/business-55357340">anti-competitive behaviors</a>, and <a href="https://www.nytimes.com/2022/03/18/technology/google-discrimination-suit-black-employees.html">discriminatory</a> and <a href="https://fortune.com/2023/08/03/union-accuses-google-of-retaliating-against-workers-for-organizing/">retaliatory</a> labor practices, among other problems. Google initially set a high bar, but in 2018 they dropped “Don’t be Evil” from their core values in favor of the more ambiguous and anodyne “Do the right thing”.</p> <p>Corporate values tend to ring hollow because we can see the company clearly optimizing for something other than their stated value.  Starbucks, for example, says it strives to “[Create]  a Culture of Warmth and Belonging, where Everyone is Welcome” yet it installs <a href="https://www.reddit.com/r/HostileArchitecture/comments/or9zlt/new_chairs_in_starbucks_specifically_designed_so/">hostile architecture</a>, <a href="https://www.cnn.com/2022/06/10/business-food/howard-schultz-starbucks-bathrooms/index.html">closes restrooms</a>, and even <a href="https://www.nbcbayarea.com/news/local/why-are-electrical-outlets-covered-at-starbucks/3350970/">removes or covers electrical outlets</a>, all in an effort  to deter people from staying too long in that warm space where everyone is welcome. And <a href="https://www.nytimes.com/2023/07/21/opinion/starbucks-union-strikes-labor-movement.html">ask any union organizer how welcome they were in Starbucks’ culture of warmth and belonging</a>.</p> <p>Similarly, Amazon’s stated value of “Customer Obsession” appears increasingly at odds with an ever more <a href="https://www.theatlantic.com/technology/archive/2023/09/amazon-shopping-experience-decline/675472/">frustrating slog</a> through page after page full of <a href="https://nymag.com/intelligencer/2023/01/why-does-it-feel-like-amazon-is-making-itself-worse.html">junk products</a>, many of which may be actually <a href="https://www.cnn.com/2021/07/15/tech/cpsc-sues-amazon/index.html">dangerous and harmful</a> to those same customers Amazon claims to be obsessing over.</p> <p>Can a profit-driven corporation manage to create values that ring true, understand the trade-offs, and follow them anyway? Sure. Patagonia is one great example. They’ve consistently sacrificed profit in favor of sustainability and fair labor practices. They’ve foregone traditional marketing in favor of authenticity and transparency. They’ve encouraged customers to consider waste and environmental impact, even if it meant fewer sales. Sounds a bit like Fred Rogers.</p> <p>But most companies fail to live up to their stated values. In many cases, their values never meant much in the first place – they were probably put together by a small team from marketing or HR and never reflect the true organizational culture or interests of leadership.</p> <p>Other times the company has the best intentions when they post their values, but they fall down when facing financial pressures and managers trying to make their numbers. In other words, the company wasn’t really willing to accept what they would give up for their values.</p> <h3 id="this-i-believe" tabindex="-1">This I Believe<a class="tdbc-anchor" href="https://another.rodeo/values/#this-i-believe" aria-hidden="true">#</a></h3> <p>In 1951, right around the time Rogers was getting his degree in child psychology, legendary journalist Edward R. Murrow and the CBS radio network began airing a short, five-minute program called “This I Believe,” in which both famous people and people who weren’t famous at all would write essays about their values and what they believed in. The show became a cultural phenomenon in the 50s and has been revived multiple times since.</p> <p>One could listen to famed science fiction writer Robert Heinlein talk about his belief in <a href="https://thisibelieve.org/essay/16630/">in the virtues of communities and “Our Noble, Essential Decency</a>, Margaret Sanger’s belief that <a href="https://thisibelieve.org/essay/16953/">all children should be wanted before they are conceived</a>, or Oscar and Esther Hirschmann, a New York City couple whose biggest claim to fame was being married to one another for 30 years, as they explained how they believed <a href="https://thisibelieve.org/essay/16602/">their love for one another was their key to loving and understanding their fellow citizens</a>.</p> <p>The appeal is clear and perennial: At its best “This I Believe” segments are not stories of people crowing about their beliefs or patting themselves on the back for their own empty platitudes. They are stories of people doing the work of examining what they believe with a sharp and analytical eye, successfully distilling down to the essence of their core beliefs, then showing the world their work.</p> <p>We could use a bit more of that.</p> <p>We can’t all be Fred Rogers, as individuals or as companies, unfailingly, forever following our convictions. We have foibles and missteps. Things go wrong.</p> <p>Even if we recognize we may fall short, we can do better, as individuals and as companies, as we contemplate our values. We can do is think harder about what we truly believe in and what we’re willing to forgo to believe in those things. We can be transparent and honest with both ourselves and others about what those trade-offs look like to us, so that our values do not sound hollow and hypocritical.</p> <p>Do the work. Show the work. Stand by the work.</p> <p>This I believe.</p> </content>
</entry>
<entry>
<title>We’ve got to make the damn websites work</title>
<link href="https://another.rodeo/make-the-damn-web-sites-work/"/>
<updated>2024-04-16T00:00:00Z</updated>
<id>https://another.rodeo/make-the-damn-web-sites-work/</id>
<content type="html"><p>When leaded gasoline was introduced in the early 1920s, it was a real innovation. Every engine suddenly ran better, performed better and lasted longer. Consumers rushed to it, and for decades leaded gas was the gold standard. Then we learned more about the harmful effects of lead and lead pollution. By the mid-1960s we knew it was terrible stuff, dangerous to the public health, and still it wasn’t entirely phased out in the US until 1996.</p> <p>Similarly, asbestos was seen as a breakthrough innovation when it was introduced. This stuff was <em>amazing</em> -- fire-resistant, an excellent insulator, durable and cheap. We used it everywhere in construction through most of the 20th century. It took 35 years from the first Surgeon General warning about the stuff until the EPA finally banned the stuff in 1989.</p> <p>On the web today, we’re living in the age of leaded gasoline and asbestos. We’ve introduced innovation after innovation, disruption after disruption, but the thing we’ve disrupted most may be the web itself. Usability is at an all-time low. Sites are painfully slow. Basic functionality baked into the HTML spec for decades is broken. We optimize for marketing or developer experience while the people using the sites are left baffled by simple content that won’t load, back buttons that won’t work, and other erratic, janky behavior.</p> <p>And that’s before we even talk about dark patterns, surveillance, disinformation, out-of-control AI energy usage and the other big, big problems caused by the web and technology in 2024.</p> <p>We have reached a point where the most disruptive, digital transformation possible — the biggest innovation around — would be to simply make the damn web sites work.</p> <p>Right now, they don’t work, at least not for the people using them.</p> <ul> <li>Loading times have slowed.</li> <li>Ads are more intrusive, often covering the content or reducing it to a postage stamp.</li> <li>Forms are clearly optimized to extract data and without any sort of testing or user research to ensure they’re usable.</li> <li>Auto-playing media annoys everyone but the companies trying to “drive engagement”</li> <li>Important content is hidden or locked away behind registration walls.</li> <li>Sites use misleading or deceptive practices to make it difficult for users to opt out, cancel or unsubscribe.</li> <li>Privacy and account settings are baffling and hidden, leaving users sharing more information than intended.</li> <li>Contact information is just gone from most web sites, so good luck if you have a problem.</li> </ul> <p>And that’s at a personal level, before we even talk about the global lack of privacy and security, broken or non-existent accessibility, misinformation and hate speech and the growing environmental impact of crypto and AI tech.</p> <p>Taken as whole it’s clear: Our never-ending focus on disruption has become destructive. We’ve coined and popularized the already overused term “enshittification” to describe our technological hostility to our own users, and yet we ply layer upon layer of AI and crypto solutions so we can monitor and manipulate those users.</p> <p>What if we didn’t?</p> <p>What if “human-centered” meant something beyond being a buzzword in the UX department? What if we put the same effort into making things work for users that we put into tracking them? What if we fixed the damn websites?</p> <p>That would be transformative.</p> <hr /> <p><em>Hat tip to GSA Commissioner Robin Carnahan, for first saying “<a href="https://develop.fedscoop.com/radio/robin-carnahan-on-gsas-role-making-the-damn-websites-work/">we’ve got to make the damn websites work</a>.”</em></p> <p><em>Photo is of a 1919 Red Cross-organized &quot;Cleanup and Health Parade&quot;, from the <a href="https://www.loc.gov/resource/anrc.03904/">Library of Congress</a>.</em></p> </content>
</entry>
<entry>
<title>DSCovery</title>
<link href="https://another.rodeo/dscovery/"/>
<updated>2024-07-01T00:00:00Z</updated>
<id>https://another.rodeo/dscovery/</id>
<content type="html"><p>Over the past 10 years or so there's been something of a revolution in Civic Technology, as a whole bunch of firms have popped up promising to do better than traditional government contractors, who have an appalling record when it comes to building anything that works at all, let alone delivering it on time.</p> <p>The <a href="https://digitalservicescoalition.org/">Digital Services Coalition</a> followed closely behind, working to build a sense of community for this new breed of civic tech firms promise to bring modern engineering principles, agile methodology and human-centered practices to government. From an initial handful of companies involved, the DSC has grown to include nearly 50 companies.</p> <p>For someone like myself, who likes working in the civic tech space and would like to continue to do so, this presents a problem: I'd like to keep track of job openings in the field, but I can't go check 50 jobs pages all the time. I'm privileged with a lot more time on my hands than a lot of folks, but ain't nobody got time for all that.</p> <p>So I thought I should build the thing I wish to see in this world, and created <a href="https://dscovery.fly.dev/">DSCovery</a> to bring those job posts to me, and to anyone else who may be interested in them.</p> <p>DSCovery is a not-particularly-complex Django/Python application that goes out to careers pages, retrieves new job posts from across the DSC organizationss and puts them all conveniently in one place.</p> <p>As of today (July 1) it collects jobs from the following companies:</p> <ol> <li>540</li> <li>Ad Hoc</li> <li>Agile Six</li> <li>Analytica</li> <li>Acquia</li> <li>Archesys</li> <li>AWL (All Women Leadership)</li> <li>Bixal</li> <li>Bloom Works</li> <li>BlueLabs</li> <li>Bracari</li> <li>Capital Technology Group</li> <li>Civic Actions</li> <li>Clarity Innovations</li> <li>Coforma</li> <li>Corbalt</li> <li>Exygy</li> <li>Fearless</li> <li>Metrostrar</li> <li>MO Studio</li> <li>Nava</li> <li>Oddball</li> <li>Pluribus Digital</li> <li>Raft</li> <li>Simple</li> <li>Softrams</li> <li>Skylight</li> <li>Skyward</li> <li>Truss</li> <li>Verdance</li> </ol> <p>I should note that any company's presence does not necessarily constitute an endorsement. I want to believe all the DSC firms are highly mission-driven and human-centered, but I also know there is a lot of variance in how different DSC firms approach the work. When interviewing, <a href="https://another.rodeo/employer-questions/">you should still ask smart questions</a> to determine if any of these companies are the right fit for you.</p> <p>There are also a lot of companies I'm not currently importing jobs from, and some of them are very good companies with fantastic people. In most cases, that's simply because they didn't have any openings and so I wasn't sure how to retrieve their posts. I'll be adding more of these to the mix over time, but for now, you won't find them:</p> <ul> <li>Blue Tiger</li> <li>Coa</li> <li>Cognitive</li> <li>Element</li> <li>Flexion</li> <li>Focus</li> <li>For People</li> <li>Friends from the City</li> <li>Kind</li> <li>Mediabarn</li> <li>Mobomo</li> <li>Simon</li> <li>Snowbird</li> <li>Valiant Solutions</li> <li>Wheelhouse</li> </ul> <h3 id="whats-next" tabindex="-1">What's next?<a class="tdbc-anchor" href="https://another.rodeo/dscovery/#whats-next" aria-hidden="true">#</a></h3> <p>One of the things I learned as I put this together is that there are some really great civic tech firms that have decided, for whatever reason, to not join the DSC. I'll be adding some of them, too, starting with more firms in the <a href="https://www.digitalwosballiance.org/">Digital Women-Owned Small Business Alliance</a>, which has considerable overlap with the DSC.</p> <p>I'm also planning on introducing some methods to filter results by practice, and perhaps some custom user-centered views.</p> <p>I'm also thinking about how I might pull in some job details, particularly salary info.</p> <p>If you have thoughts on what you'd like to see, drop me a note in <a href="https://github.com/tBaxter/dscovery/issues/">the repo issues</a>.</p> <h3 id="why-did-i-do-it" tabindex="-1">Why did I do it?<a class="tdbc-anchor" href="https://another.rodeo/dscovery/#why-did-i-do-it" aria-hidden="true">#</a></h3> <p>Because I wanted it to exist, thought it might help other people, and nobody else was doing it. Story of my life.</p> <h3 id="what-if-something-is-broken" tabindex="-1">What if something is broken?<a class="tdbc-anchor" href="https://another.rodeo/dscovery/#what-if-something-is-broken" aria-hidden="true">#</a></h3> <p>Don't be surprised. This was a three-day project by a single person, and there will certainly be things that could be better. If you see something drop a note in <a href="https://github.com/tBaxter/dscovery/issues/">the repo issues</a>.</p> <h3 id="where-is-it" tabindex="-1">Where is it?<a class="tdbc-anchor" href="https://another.rodeo/dscovery/#where-is-it" aria-hidden="true">#</a></h3> <ul> <li><a href="https://dscovery.fly.dev/">The site</a></li> <li><a href="https://github.com/tBaxter/dscovery">The repo</a></li> </ul> </content>
</entry>
<entry>
<title>Trek 2100</title>
<link href="https://another.rodeo/trek-2100/"/>
<updated>2024-07-18T00:00:00Z</updated>
<id>https://another.rodeo/trek-2100/</id>
<content type="html"><p>It's been awhile since I've written about one of my bike projects, yet somehow the house keeps filling up with them. This one's been with me since last October and I'm just now getting around to writing it up. The backlog is real, y'all.</p> <p>Anyways, sometime last summer I got to thinking: I love these old steel bikes, but why not try something a bit newer? It might be nice to have a featherweight around.</p> <p>I'd barely had the thought when this Trek 2100 turned up on my local marketplace, with an asking price of 80 bucks. How could I not nibble?</p> <p>For those who don't know, the 2100/2300/2500 series was among Trek's earliest forays into carbon fiber in the early 90s, with CF main tubes bonded to aluminum lugs and an aluminum rear triangle via industrial adhesive. Based on the colors and graphics <a href="http://www.vintage-trek.com/images/trek/91/1991TrekCatalog.pdf">this one appears to be a 1991 model</a>.</p> <p>Over time similarly bonded bikes from that era have developed a pretty mixed reputation, with complaints about the bonding failing at the lugs. It may just be my imagination, but from my research it appeared that the bonded Treks were more highly regarded when new and appear to hold up well. Or maybe I'm just not smart enough to listen to the ominous warnings.</p> <p>Either way, I went to look at it, haggled a bit and brought it home for $60. A steal. And I figured that for that price even if the frame was trash I'd come out OK on the components.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/as-purchased.jpeg" alt="It looked a bit worn and unloved, but not bad at all." /> <figcaption>It looked a bit worn and unloved, but not bad at all.</figcaption> </figure> <p>As it turns out, the frame was pretty much flawless -- absolutely amazing condition, with no signs of oxidation, damage or bonding failure. There was barely a scratch or scuff to be found.</p> <p>Overall, most of the bike wasn't in bad shape, although some failing grip tape and a sad sack Walmart saddle let it down, and there was no getting around the reality that a lot of the parts were well-worn early 90s tech.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/front.jpeg" alt="From the front, a bit of grime, Sakae stem, Modolo 'ergo' bars and decent RX100 brakes. The ancient ride computer had to go." /> <figcaption>From the front, a bit of grime, Sakae stem, Modolo 'ergo' bars and decent RX100 brakes. The ancient ride computer had to go.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/hub.jpeg" alt="A closer look at the hub shows more of the same: decent components, a lot of grime, and interesting splatter paint." /> <figcaption>A closer look at the hub shows more of the same: decent components, a lot of grime, and interesting splatter paint.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/cf.jpeg" alt="That's how you know it's carbon fiber. And a genuine US-made Trek." /> <figcaption>That's how you know it's carbon fiber. And a genuine US-made Trek.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/bottle-bosses.jpeg" alt="The water bottle bosses are interesting, too." /> <figcaption>The water bottle bosses are interesting, too.</figcaption> </figure> <p>So, what did I do with it?</p> <p>Well, I'll tell you what I didn't do... take enough pictures of the rebuild. But that said:</p> <ul> <li>I built up a new wheelset with DT Swiss hubs and rims and butted spokes, so I could move to a wide-range 11-speed drivetrain, rather than the original narrow range 7-speed.</li> <li>That necessitated changing to a long-cage 11-speed derailleur, too I found a nice Ultegra derailleur for it.</li> <li>Up front I needed new, compatible chainrings. I went with 50/34, married to a Shimano 600/Ultegra crankset I had laying around. I think I'll go to something with outboard bearings soon, though.</li> <li>Shifting was moved from the downtube to Microshift bar-end, indexed for 11 speeds. I like bar-ends, but on this bike I think I might actually switch to brifters soon, just for a change.</li> <li>Seat is a Selle Italia.</li> <li>Bars are Soma Highway Ones (a fave) mated to a Nitto stem, but I think I may go back to the original Sakae/Modelo combo just of the period-correct vibe.</li> </ul> <p>Final weight comes in just shy of 19 pounds. Not bad! I'm definitely not sure where I could skim too much more off without going deep into carbon parts. Which I may do someday. Or not.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/2100.jpeg" alt="Done. For now." /> <figcaption>Done. For now.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/rear-der.jpeg" alt="It goes to 11." /> <figcaption>It goes to 11.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/brakes.jpeg" alt="The original RX100 dual-pivot rim brakes are more than capable. The 'carbon fiber' brake pads just made me smile." /> <figcaption>The original RX100 dual-pivot rim brakes are more than capable. The 'carbon fiber' brake pads just made me smile.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/clean.jpeg" alt="Very clean and tidy." /> <figcaption>Very clean and tidy.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/trek-2100/stairs.jpeg" alt="One more, just 'cause I like the pic." /> <figcaption>One more, just 'cause I like the pic.</figcaption> </figure> <p>So how is it to ride? Lovely. I was worried it would be a jittery beast, but it's not. Not at all.</p> <p>It actually rides really, really well, especially given the stiffness of the frame and the narrow 25mm tires. It's by far the fastest bike I have, regularly coming in at a couple of MPH faster than anything else I'm riding. I mean, I'm still old and slow, but the bike is old and fast. It's also a monster when climbing. It just goes and goes.</p> <p>I like it quite a bit.</p> <hr /> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> </content>
</entry>
<entry>
<title>Tasks</title>
<link href="https://another.rodeo/tasks/"/>
<updated>2024-09-04T00:00:00Z</updated>
<id>https://another.rodeo/tasks/</id>
<content type="html"><p>The whole thing started on the <a href="https://midwestdevchat.slack.com/">Midwest Dev Chat Slack</a>, when someone posted a screenshot from their work Slack that read:</p> <blockquote> <p>The fact that we only have &quot;Herculean task&quot; and &quot;Sisyphean task&quot; feels so limiting. So here's a few more tasks for your repertoire:</p> </blockquote> <ul> <li><strong>Icarian Task:</strong> When you have a task you know is going to fail anyways, so why not have some fun with it before it all comes crashing down.</li> <li><strong>Cassandrean Task:</strong> When you have to deal with people you <em>know</em> won't listen to you, despite having accurate information, and having to watch them fumble about when you told them the solution from the start.</li> <li><strong>Odyssean Task:</strong> You'll complete but it will take 20 times longer than it should and involve multiple side quests and mini-adventures.</li> </ul> <p>From those first screenshots it took off, with the wits on Midwest Dev Chat adding more:</p> <ul> <li><strong>Achillean Task:</strong> A task shipped with known issue.</li> <li><strong>Escherian Task:</strong> Looks achievable until you examine the details. (Not from mythology, but still pretty great.)</li> <li><strong>Hydraeous Task:</strong> The task you complete spawns two new tasks.</li> <li><strong>Theseusian Task:</strong> Scope creeps so many times, and so far, that philosophers spend centuries arguing if any of the original scope remains.</li> </ul> <p>I liked these an awful lot, and I thought the smart folks on the <a href="https://randsinrepose.com/welcome-to-rands-leadership-slack/">Rands Leadership Slack</a> would, too, so I posted them there, referencing the original MWDC posts. While I was already wishing I could take credit for the first batch, the Rands folks just went bananapants with the idea. This is the brilliance of those folks, not me, and all accolades are due them. Only one of these is my own original thought. The rest come from the minds of smarter, more creative (and apparently better read) people...</p> <ul> <li><strong>Atlassian Task:</strong> you’re writing all the Jira tickets.</li> <li><strong>Chronean Task:</strong> Didn't I already do this task?</li> <li><strong>Damoclean Task:</strong> A task you enjoy doing, but there is always this underlying sense of foreboding and anxiety while doing so.</li> <li><strong>Diogenian Task:</strong> absolute dog's work, but better than talking to people</li> <li><strong>Dionysian Task:</strong> Who cares, it's Friday.</li> <li><strong>Epicurian Task:</strong> I just like doing it this way.</li> <li><strong>Gordian Task:</strong> Instead of doing the task, you delete the ticket or maybe the whole epic.</li> <li><strong>Gorgon Task:</strong> Whenever you approach someone about your task, they stonewall you.</li> <li><strong>Kronusian Task:</strong> Driving away people that threaten your power and position.</li> <li><strong>Minotian Task:</strong> Just a lot of bull.</li> <li><strong>Midasean Task:</strong> a very lucrative endeavour, but might leave you feeling hungry for more substantive work.</li> <li><strong>Narcissian Task:</strong> Just make it pretty.</li> <li><strong>Orphean Task:</strong> you have to write this entire service in isolation, but the moment you run one integration test the other services will block you.</li> <li><strong>Pandorean Task:</strong> When you have a task to do that you know will unleash chaos on the world when complete.</li> <li><strong>Poseidan Task:</strong> When you are drowning in the work.</li> <li><strong>Penelopean Task:</strong> same as an odyssean task but nobody talks about it because it is a woman doing it.</li> <li><strong>Promethean Task:</strong> Do some hero work for your team and then get picked apart by upper management for all eternity.</li> <li><strong>Siren Task:</strong> Your sole task is to distract others from doing their tasks.</li> <li><strong>Trojan Task:</strong> I'm only doing this task so I can sneak this other thing into the next release.</li> </ul> <p>So there you go, there they are in all their glory, with a few small minor edits. I hope you enjoy them as much as I did.</p> <p>I did leave a few off the list here if they duplicated others, if I am not smart enough to understand the reference, or if I just flat missed one. Forgive me.</p> <hr /> <p>Artwork: &quot;Sisyphus&quot; by Jeffrey Hummel</p> <p>Contributors (who wished to be identified) include Blaise Vignon, Caleb Huitt, Steven Harrison and Michael Van Nieuwenhoven. Thank you all, smart and funny people!</p> <p>If you submitted any of these and would like to be credited, please <a href="https://github.com/tBaxter/another-rodeo/issues">let me know via a Github Issue</a>. Or if you know my email address, just shoot me an email. That's fine, too. Be sure to tell me <em>how</em> you would like to be credited.</p> </content>
</entry>
<entry>
<title>Another one?</title>
<link href="https://another.rodeo/monark-2/"/>
<updated>2024-10-16T00:00:00Z</updated>
<id>https://another.rodeo/monark-2/</id>
<content type="html"><p>Within days of finishing up the <a href="https://another.rodeo/monark-road-king">Monark/Road King resto-mod</a> another rough and down-on-its-luck old cruiser popped up and I couldn't resist. I mean, for $25 it was this or a light lunch at Chipotle. So I bought the bike.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/rocket/as-found.jpeg" alt="As I found it." /> <figcaption>As I found it.</figcaption> </figure><p></p> <p>This one is also a Monark-made frame (a twin to the last one) but without any badges I don't know if it was originally another Road King, or maybe a Monark Rocket, or some other badge-engineered Monark. I just know it's the same frame, and from the same era: mid-to-late 40s.</p> <p>And it is definitely in rough shape, maybe worse than the last one, with a bad home paint job and plenty of rust.</p> <p>I believe I'll either build this one up as more of a rat rod, or just a nice classic cruiser. Should be fun.</p> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> </content>
</entry>
<entry>
<title>Road King</title>
<link href="https://another.rodeo/monark-road-king/"/>
<updated>2024-10-16T00:00:00Z</updated>
<id>https://another.rodeo/monark-road-king/</id>
<content type="html"><p>Let's start this story in the middle of the 20th century, when consumer confidence was high, unions were strong, and American factories were working overtime to satisfy consumer demand and new-found discretionary spending.</p> <p>Against that backdrop a strange sort of amalgamation of hardware/auto parts/durable goods store was common in even the smallest towns in America. Western Auto and Firestone may have been best known, for these types of stores, but they were far from the only ones.</p> <figure> <img src="https://kubrick.htvapps.com/htv-prod-media.s3.amazonaws.com/images/westernautosign-1529943950.png" /> <figcaption>Obligatory photo of the historic Western Auto building in Kansas City.</figcaption> </figure> <p>At the time, the <a href="https://en.wikipedia.org/wiki/Seiberling_Rubber_Company">Sieberling Rubber Company</a> was one of the biggest tire companies in the US, and just like Firestone and other tire makers, they ran a chain of these odd retail stores, selling their tires, car batteries and other various things... including bicycles, which they sold under their &quot;Road King&quot; brand.</p> <p>And since Sieberling wasn't in the business of making bicycles, they contracted that work out to several different companies that once dominated US bicycle manufacturing.</p> <p>So that's how the now largely forgotten <a href="https://www.madeinchicagomuseum.com/single-post/monark-silver-king/">Monark Silver King</a> bicycle company of Chicago found itself contracted to build this bike:</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/as-purchased.jpeg" alt="1948 Monark-made Road King bicycle." /> <figcaption>1948 Monark-made Road King bicycle.</figcaption> </figure> <p>Which found its way to me recently.</p> <p>Monark ceased to exist after 1957, following a buy-out by Huffman/Huffy. Sieberling Rubber made it to the mid-60s before being gobbled up by Firestone, and then later becoming part of the multinational Bridgestone corporation.</p> <p>I started out buying a classic cruiser, I got a lesson in America's 20th century manufacturing boom and bust. The bicycle is going to get a lesson in how bicycle technology has progressed over the past 75 years.</p> <p>But, about that bike: I had been wanting to build a classic &quot;<a href="https://www.turbochaos.com/cars/what-is-a-klunker-bike/">Klunker</a>&quot; for awhile. When this one turned up on the local marketplace, I liked the details of the frame, so I threw out a low offer and was surprised when it was accepted. Next thing I knew I was driving a half-hour out of town to pick it up. Once I got it home I took some pics to document the &quot;before&quot; state...</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/orig-cockpit.jpeg" alt="At some point long ago it had been repainted. Possibly with house paint. Also, I've never seen a stem quite like that one before." /> <figcaption>At some point long ago it had been repainted. Possibly with house paint. Also, I've never seen a stem quite like that one before.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/drivetrain.jpeg" alt="I believe the drivetrain was all original, possibly even down to the pedals. I do know this: our grandparents mashed some big gears back then." /> <figcaption>I believe the drivetrain was all original, possibly even down to the pedals. I do know this: our grandparents mashed some big gears back then.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/seatpost.jpeg" alt="I really like the filet-brazed frame and the unusual seatstay and chainstay arrangement. I was less thrilled to discover a possible crack by the seat clamp." /> <figcaption>I really like the filet-brazed frame and the unusual seatstay and chainstay arrangement. I was less thrilled to discover a possible crack by the seat clamp.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/mesinger.jpeg" alt="I don't think I'll be keeping this old Mesinger seat. You can get a better view of the neat seatstay arrangement, though." /> <figcaption>I don't think I'll be keeping this old Mesinger seat. You can get a better view of the neat seatstay arrangement, though.</figcaption> </figure> <p>I pretty much immediately began stripping it down, and was really pleased with how easy that went. I was prepared for every bolt to be stripped, a rusted-in-place seat post and stem, and all sorts of other horrors. But really it came apart with no problems, just a little penetrating oil and patience.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/stripped.jpeg" alt="Stripped down, it weighed in at 8 pounds. No featherweight, to be sure, but only a few ounces more than a modern aluminum mountain bike frame I won't shame by name." /> <figcaption>Stripped down, it weighed in at 8 pounds. No featherweight, to be sure, but only a few ounces more than a modern aluminum mountain bike frame I won't shame by name.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/water.jpeg" alt="When I took out the rear fender about a half-cup of trapped water came dribbling out of the frame." /> <figcaption>When I took out the rear fender about a half-cup of trapped water came dribbling out of the frame.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/coldset.jpeg" alt="Since the frame was originally built with 110mm spacing for a coaster brake hub, it was going to take a BIG cold-set to fit a modern cassette hub in there. It took a lot of patience and careful checking of alignment, but the old steel took the set well. It now sits at 135mm, ready for modern hubs." /> <figcaption>Since the frame was originally built with 110mm spacing for a coaster brake hub, it was going to take a BIG cold-set to fit a modern cassette hub in there. It took a lot of patience and careful checking of alignment, but the old steel took the set well. It now sits at 135mm, ready for modern hubs.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/testfit.jpeg" alt="Test-fitting with a spare wheel I had laying around. The string is there for double-checking alignment." /> <figcaption>Test-fitting with a spare wheel I had laying around. The string is there for double-checking alignment.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/painted.jpeg" alt="I really debated what color to paint it, but the bike kept telling me it wanted to be white. So I listened. Here it's been sprayed but still needs final wet-sanding and polishing." /> <figcaption>I really debated what color to paint it, but the bike kept telling me it wanted to be white. So I listened. Here it's been sprayed but still needs final wet-sanding and polishing.</figcaption> </figure> <p>That's as far as I made it in the first week, but parts were on the way.</p> <h3 id="august-18-polishing-modernizing-and-test-fitting" tabindex="-1">August 18: Polishing, modernizing &amp; test-fitting<a class="tdbc-anchor" href="https://another.rodeo/monark-road-king/#august-18-polishing-modernizing-and-test-fitting" aria-hidden="true">#</a></h3> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/polished.jpeg" alt="After wet-sanding and polishing, I was pretty happy with the finish." /> <figcaption>After wet-sanding and polishing, I was pretty happy with the finish.</figcaption> </figure> <p>You really can get good results from a rattle-can paint job, but it takes a <em>lot</em> of patience and work. I'm willing to work, but not always patient enough. Nevertheless, I was pretty happy overall with the paint after wet-sanding and polishing, especially considering the number of nicks and divots in the nearly 80-year-old steel. I may still give it a bit more love, but it's really looking pretty good to my eyes.</p> <p>The original headbadge also cleaned up nicely. I wish some prior owner hadn't &quot;touched up&quot; the paint, but I'm not going to try to correct it -- it can wear it's history. I just wanted to polish the grime off and bring back some shine.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/bb.jpeg" alt="Conversion kit." /> <figcaption>Conversion kit.</figcaption> </figure> <p>I put in a nice <a href="https://amzn.to/3McpS9k">bottom bracket conversion kit</a> so I can use modern three-piece cranks. I also had a <a href="https://amzn.to/3X8qWBl">strong and light Sunlite bottom bracket with chrome-moly spindle</a> in the toolkit, so that will save a few grams, too. I considered external bearings and a hollowtech crank, but I'm not sure how well they'd play with the conversion kit, and good quality square taper stuff isn't much heavier at all. Plus I have a lot of good square taper stuff laying around already.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/threadless.jpeg" alt="And another conversion kit." /> <figcaption>And another conversion kit.</figcaption> </figure> <p>This bike pulled another rabbit out of its hat up front, where I've fitted a <a href="https://www.etsy.com/listing/1526775966/old-school-bmxschwinn-conversion-headset">threadless headset</a>. Basically, these old American frames used a head tube that's within a gnat's whisker of the modern 1 1/8 standard, so some enterprising souls have taken machined about 0.01 inched off a modern alumninum headset and <em>voila</em> it all fits.</p> <p>I had a fork I had purchased for the build, but when I put it altogether it looked goofy. So for now I've put a parts-bin GT fork on there, and I actually kinda like it, even in the partially sanded unfinished current state.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/test.jpeg" alt="Testing bars and stem." /> <figcaption>Testing bars and stem.</figcaption> </figure> <p>Since I was throwing some parts-bin bits at it, I added a stem and some bars. Not exactly what I'd envisioned, but I like them for now and the price was right.</p> <h3 id="sept-22-wheels" tabindex="-1">Sept 22: Wheels!<a class="tdbc-anchor" href="https://another.rodeo/monark-road-king/#sept-22-wheels" aria-hidden="true">#</a></h3> <p>I knew when I decided to paint the frame white that I was going to have to introduce some visual interest elsewhere, so I decided to make some pretty flashy wheels, starting with some <a href="https://amzn.to/3ZApOIC">red anodized SE Racing Wheels</a>.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/se_rims.jpeg" alt="Very red rims." /> <figcaption>Very red rims.</figcaption> </figure> <p>Because BMX and cruiser rims are nearly universally 36 holes, I was a little limited in my choices for 36H disc hubs, but Shimano came through with suitable <a href="https://amzn.to/4edWOdY">Deore hubs</a> for a great price. The whole thing was laced up with double-butted black spokes and chrome brass nipples. They are definitely eye-catching.</p> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/front_rim.jpeg" alt="Lacing the front was straightforward." /> <figcaption>Lacing the front was straightforward.</figcaption> </figure> <figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/rear_rim.jpeg" alt="But lacing up a disc rear was far from straightforward. It just about broke my brain, and I had to lace it up 3 times before I finally got it right. The tape was there to help me keep track of things." /> <figcaption>But lacing up a disc rear was far from straightforward. It just about broke my brain, and I had to lace it up 3 times before I finally got it right. The tape was there to help me keep track of things.</figcaption> </figure> <p>Once they were finally tensioned and trued, I slapped some Schwalbe Billy Bonkers tires on -- probably my favorite 26&quot; tires -- and they were ready for the bike.</p> <p>Connecting a derailleur to this thing was going to require an <a href="https://amzn.to/4deXApU">old school claw hanger</a>, and it's surprisingly tough to get a decent one nowadays. A lot of them are very thin and flimsy, or even unthreaded. Next time I take apart an old bike with one, I plan to keep it, as the old ones were clearly made better. But it'll do.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/drive_side.jpeg" alt="There's a lot more happening on the drive side than Monark ever intended." /> <figcaption>There's a lot more happening on the drive side than Monark ever intended.</figcaption> </figure><p></p> <p>I dug around in the parts bins and found a little dropout spacer for the other side that I'd saved from some prior project. I wish I knew where I got it, 'cause it's pretty handy.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/dropout.jpeg" alt="Non-drive-side dropout spacer." /> <figcaption>Non-drive-side dropout spacer.</figcaption> </figure><p></p> <p>I was really surprised by how easy the disc brake conversion went. <a href="https://amzn.to/3Bbfnkt">Disc brakes</a> are surprisingly cheap, and <a href="https://amzn.to/3THrcoT">the little disc brake converstion/adapter bracket</a> worked way, way better than I expected it to, at least in this case. They don't work in a lot of cases, but on this bike they worked without much trouble. I was shocked. Everything just worked.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/brake_side.jpeg" alt="The brake side also has a lot more going on than Monark ever intended." /> <figcaption>The brake side also has a lot more going on than Monark ever intended.</figcaption> </figure><p></p> <p>Cables were managed by some little <a href="https://amzn.to/3zw5DAN">clip on guides</a> that were pretty slick.</p> <p>The seat was a bit of a hiccup, as the original post measured 21.78 mm, and nothing is that size. Nothing. So after looking fruitlessly I decided not to worry about it and just cleaned up the original as best as I could. I did have a nice <a href="https://amzn.to/4dfUqSH">Charge saddle</a> that completed the white/black/red motif.</p> <p>Most of the other stuff was left over from other projects. Pedals, cables, even the crankset, it was all just laying around, so I went ahead and built it up, at least to establish a baseline.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/first_build.jpeg" alt="Freshly built." /> <figcaption>Freshly built.</figcaption> </figure><p></p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/rear.jpeg" alt="The rear" /> <figcaption>The rear</figcaption> </figure><p></p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/front.jpeg" alt="And the front" /> <figcaption>And the front</figcaption> </figure><p></p> <p>The baseline is good. It's a fun, fun, fun bike. That said, there are some issues I need to address:</p> <ul> <li>I still want those big klunker bars, with a bit more rise.</li> <li>I need to either pick up a disc brake fork or fit some V-brakes on the front (and risk messing up that pretty red rim).</li> <li>It needs a spacer under the stem. Right now there's too much movement.</li> <li>The disc brake isn't adjusted quite right and tends to squeal.</li> <li>I don't like the derailleur I used and need to clean up a better one.</li> <li>My cabling could be a lot tidier.</li> </ul> <p>None of this stuff is particularly surprising with such an involved build, and none of it is all that hard to sort out.</p> <h3 id="october-16-sorting-it-out" tabindex="-1">October 16: Sorting it out<a class="tdbc-anchor" href="https://another.rodeo/monark-road-king/#october-16-sorting-it-out" aria-hidden="true">#</a></h3> <p>I continued tweaking and tuning and sorting it out. With a big custom build like this one, it's not surprising.</p> <p>At this point, I've taken care of most all of my to-do list above and the bike is riding much better. Probably the most visible change is the switch to some massive BMX cruiser bars. This entailed re-cabling, swapping out the shifters and brake levers, and a lot of other small changes. I'm not sure it was worth it, but they do look cool.</p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/bars.jpeg" alt="The complete bike, hanging out by some rocks." /> <figcaption>The complete bike, hanging out by some rocks.</figcaption> </figure><p></p> <p></p><figure class="image "> <img src="https://another.rodeo/img/bikes/road-king/complete-rear.jpeg" alt="A rear view of the 'finished' bike." /> <figcaption>A rear view of the 'finished' bike.</figcaption> </figure><p></p> <p>Honestly, I may revert back to the low-rise bars. I haven't decided. I'm feeling pros and cons each way.</p> <p>But regardless, I think that's about it for this bike, at least for now. Maybe after riding it a bit I'll think of something else I want to do. For now, though, I think I can call this one finished.</p> <p>That's good, because I've already bought the next one.</p> <p class="affiliate">As an Amazon Associate I earn from qualifying purchases. In other words, I get commissions for purchases made through links in this post. When you follow a link and buy something, it doesn't cost you anything extra, but I may make buck or two. So thank you! That said, any recommendations I make are my recommendations, based on my experience, and are not paid endorsements. I only point you toward the stuff I use, and if I don't like it, you'll hear about why.</p> </content>
</entry>
<entry>
<title>Engineering velocity</title>
<link href="https://another.rodeo/engineering-velocity/"/>
<updated>2024-10-17T00:00:00Z</updated>
<id>https://another.rodeo/engineering-velocity/</id>
<content type="html"><p>It's a question I've heard a lot over the years, from a lot of frustrated managers and stakeholders. They can't get past it.</p> <h4><em>&quot;Seriously, why are my engineering teams so much slower than they used to be?&quot;</em></h4> <p>I get it. The frustration is palpable. A team that used to cook along now appears to be stuck in molasses. They get slower and slower, and it's confounding to everyone waiting for the next major feature to be delivered, or even just looking at a burndown chart. It can be confounding and frustrating to the team, too.</p> <p>But I'm here to tell you, the frustration is likely misplaced: Teams slowing down as they mature and grow is not only normal, it may be <em>better</em>.</p> <p>After looking at the velocity of dozens -- possibly hundreds -- of teams over the years, and how it changes over time, here are the common threads among the &quot;formerly fast&quot; teams.</p> <h3 id="they-finished-the-fast-part" tabindex="-1">They finished the fast part<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity/#they-finished-the-fast-part" aria-hidden="true">#</a></h3> <p>Everything moves a lot faster when you're a cowboy, riding breathlessly across green fields. You can shift direction on a whim, you can explore, you can strike out in bold new directions. That's fast, and it's easy. But getting from <em>something</em> to <em>something good</em> takes a lot more time and effort.</p> <p>No matter what the project, from software engineering to home renovations, smart people know that the first 80% is the easy part, and the work goes quickly. But the last part -- the sorting out and polishing -- takes much, much longer.</p> <h3 id="theyre-swimming-in-a-bigger-pond-now" tabindex="-1">They're swimming in a bigger pond now<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity/#theyre-swimming-in-a-bigger-pond-now" aria-hidden="true">#</a></h3> <p>In the early days, engineering efforts usually start off as an experiment, or perhaps a small team carefully curating their own little walled garden. But as the team matures and the codebase grows, it inevitably becomes part of a larger ecosystem. There are APIs to integrate and platforms to build on. Which means you are now part of an ecosystem. Ecosystems introduce interdependencies, and interdependencies slow things down.</p> <p>When you were a young team you could do pretty much whatever you wanted, so long as you got your homework done. Now you have to play nice with others. You have to get permissions. You have to stop to read the instructions. These things take time.</p> <h3 id="they-were-good-lets-throw-a-party" tabindex="-1">They were good. Let's throw a party.<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity/#they-were-good-lets-throw-a-party" aria-hidden="true">#</a></h3> <p>And finally, <em>success leads to slowdowns</em>. Only successful programs live to grow and mature, which means as programs grow and are seen by more people, more people have thoughts.</p> <p>Or, to put it another way, early on a team may only have to satisfy <em>an idea</em>, while later they have to satisfy <em>a whole org chart</em>. As more eyes are on the team, more demands are made.</p> <p>The team may be cranking along like the same high-efficiency machine they've always been, but more demands means more backlog. While the throughput may not change, the time to satisfy any one request may get a lot longer, which makes each individual stakeholder think the team is now slower than they used to be. They're not, they just may be slower to get to <em>your</em> request.</p> <h3 id="this-is-still-a-good-team" tabindex="-1">This is still a good team.<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity/#this-is-still-a-good-team" aria-hidden="true">#</a></h3> <p>The irony is that all those factors are positive outcomes of a successful, maturing team. They are also, notably, largely out of control of the people on the team.</p> <p>But still, most discussions around improving velocity start from the perspective of &quot;how do we get these teams to go faster.&quot; And the short answer to that is that you don't. Assuming the team is continuing to work well together, then any perceived slowdown is probably not true -- they're likely working as fast as they ever did -- and also ignoring how the team and program has matured and works in a different context now.</p> <p>So if you're a team getting hit with questions about why you've slowed down, what can you do?</p> <p><a href="https://another.rodeo/engineering-velocity-part-2/">Take a look at part two!</a></p> </content>
</entry>
<entry>
<title>Engineering velocity: Part 2</title>
<link href="https://another.rodeo/engineering-velocity-part-2/"/>
<updated>2024-10-22T00:00:00Z</updated>
<id>https://another.rodeo/engineering-velocity-part-2/</id>
<content type="html"><p>Last time we covered <a href="https://another.rodeo/engineering-velocity/">a lot of reasons why that once-fast team has slowed down</a>. If you haven't read that part already, you should, but to give a quick recap, those were:</p> <ul> <li><a href="https://another.rodeo/engineering-velocity/#they-finished-the-fast-part">They finished the fast part</a></li> <li><a href="https://another.rodeo/engineering-velocity/#theyre-swimming-in-a-bigger-pond-now">They're swimming in a bigger pond now</a></li> <li><a href="https://another.rodeo/engineering-velocity/#they-were-good-lets-throw-a-party">They were successful</a></li> <li><a href="https://another.rodeo/engineering-velocity/#this-is-still-a-good-team">They're still good, it's just the perceptions that have changed</a></li> </ul> <p>This time, we'll talk about what you might be able to do about it.</p> <h3 id="they-finished-the-fast-part" tabindex="-1">They finished the fast part<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity-part-2/#they-finished-the-fast-part" aria-hidden="true">#</a></h3> <p>The first 80% is always the fast part, right? It's just the <a href="https://conceptually.org/concepts/pareto-principle">Pareto Principle</a> in action: You get 80% of the benefit for 20% of the overall effort. But the rest takes 80% of the total effort -- and time. Which people notice. So the paradox is that while the team is now putting in <em>more</em> effort, people are seeing <em>less</em> output.</p> <p>Shifting how you approach demonstrating value can help here. Instead of demonstrating <em>things being delivered</em>, try to shift to demonstrating <em>problems being solved</em>.</p> <p>Early on, it's easy to show the tangibles the team is delivering. But that inevitably slows down as the project matures. Teams find themselve spending more time solving more complex problems, with less visible forward momentum.</p> <p>It's not that progress isn't happening, it's that it's not visible. Make it visible. Enlist a designer to help illustrate the problem. Have a product manager help build a timeline showing the invisible capabilities that have been delivered. Talk through the systemic issues that have been worked through. In short, shine a spotlight on the the hidden work and bring it out of the shadows.</p> <h3 id="theyre-swimming-in-a-bigger-pond-now" tabindex="-1">They're swimming in a bigger pond now<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity-part-2/#theyre-swimming-in-a-bigger-pond-now" aria-hidden="true">#</a></h3> <p>As a project matures it always seems to connect more and more to a larger ecosystem. Maybe the work gets so big it gets split across multiple teams. Maybe it becomes a platform other teams are building on. Maybe it comes to rely on a platform itself. Maybe they just have more APIs they're relying on for more features. No matter what the specifics of the story may be, the outline is the same: this work is part of a larger whole.</p> <p>Which means you now have a hand-off problem, which goes something like this:</p> <ul> <li>On November 1, Team A decides they want to do <code>small-thing</code>, so they add it to their next sprint, starting Nov 11.</li> <li>About a week in, around Nov 19, they realize they can't complete <code>small-thing</code> until Team B does <code>other-thing</code>. Team B says &quot;Hey, no problem, we'll add it to the next sprint!&quot;</li> <li>But Team B's sprint just started on the 18th, so their next one won't start until December 2.</li> <li>And then, in sprint planning, a senior engineer pipes up to say &quot;You know we can't complete <code>other-thing</code> until Team C resets the config on the thingModulator.&quot;</li> <li>So now it bounces over to Team C, who thankfully get it into their next sprint, starting December 9. They get the config change done quickly so it can get back to Team B, just in time for their December 16 sprint.</li> <li>Team B also gets the work done quickly, as promised, in time for Team A to finally do <code>small-thing</code> in their next sprint -- which is a holiday sprint starting Dec 23.</li> </ul> <p>And that's how a bunch of teams can work really hard, really quickly, and really concientiously, and yet it takes more than eight weeks to get <code>small-thing</code> done. And there's not a whole lot you can do about it.</p> <p>But you can try:</p> <ul> <li>identifying dependencies as early as possible. Long before the story is about to go into a development sprint. Track them, get them done as part of the work (and again, show and demo that work as it gets done).</li> <li>Aligning sprint start dates across teams can help. Sometimes.</li> <li>Lobby for config changes and small dependencies to be handled as they arise, either kanban-style, or by keeping some capacity within the existing sprint cycles.</li> </ul> <h3 id="they-were-successful" tabindex="-1">They were successful<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity-part-2/#they-were-successful" aria-hidden="true">#</a></h3> <p>If a project is successful, it grows. As it grows more eyes are on it, and more demands are made. This is another case where the team has to show all of the work they're doing, that includes the less-visible work, as discussed above. It also includes making their priorities very clear and public. If Stakeholder A isn't getting what he wants because all of the efforts are on Stakeholder B's initiative, everyone involved should see that trade-off.</p> <p>If a project becomes <em>really</em> successful, it might develop into a platform other applications and teams rely on. Which means they're slow by intent. Platforms optimize for reliability and stability, not speed. For a small project, application, or site, it only has to work for a small group. For a platform, it has to work for every consumer and team in the ecosystem.</p> <p>Just the layer between the platform and the application teams building on it can be a source of slowdowns. For application teams leveraging the platform, enhancements depend on the platform team implementation timeline. For the platform team every deprecation and migration is an exercise in waiting for all the application teams to upgrade -- and that happens at the pace of the slowest team.</p> <h3 id="theyre-still-good-its-just-the-perceptions-that-have-changed" tabindex="-1">They're still good, it's just the perceptions that have changed<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity-part-2/#theyre-still-good-its-just-the-perceptions-that-have-changed" aria-hidden="true">#</a></h3> <p>We've already covered how teams often fail at highlighting all the progress they're making, which in turn feeds the false perception that they're slower than they used to be.</p> <p>The irony is that false perception can actually make the team <em>truly</em> slower. It goes like this:</p> <ul> <li>Over time the team natually picks up tech debt, bugs, and hidden work.</li> <li>Like most teams, they don't do a great job of showing that work.</li> <li>People start pushing them to &quot;increase velocity.&quot;</li> <li>The team responds by prioritizing quick wins, which means they're not focused on bug fixes and work that enables more meaningful forward momentum.</li> </ul> <p>Which means they end up slower than they were before they started. It's like a company so focused on short-term earnings that they don't do the hard work of staying in business (GE is a great recent example).</p> <h3 id="show-the-work" tabindex="-1">Show the work<a class="tdbc-anchor" href="https://another.rodeo/engineering-velocity-part-2/#show-the-work" aria-hidden="true">#</a></h3> <p>If there's one takeaway here, it's that good teams usually don't get slower as they mature, they get more complex. In complex systems sometimes you go slow now because it will make you faster later. Sometimes you're not going slow at all, but people aren't seeing all that's happening. In either case, illuminate them.</p> <p>“Velocity” can mean a lot of different things depending on the context and who's throwing it around. It's like a hex, and the best defense against the dark arts is the bright light of day. So never fail to shine a light on the work.</p> <p>The big exception is platform teams, which are slow by intent, but even then, they're <em>enabling</em> application teams to be faster. Show that.</p> <p>Show the work.</p> <hr /> <p><em>Photo is reportedly of a 1930 incident where a bunch of elephants escaped a vaudeville show in New York, but I can't confirm. If anyone has a link to the story, I'd love to hear about it.</em></p> <p><em>If you'd like to read more about why platform teams may be slow, my friend Mark Headd and I once wrote quite a bit about it: The <a href="https://adhoc.team/platform-smells/">Platform Smells Playbook</a>. Mark is wicked smart.</em></p> </content>
</entry>
<entry>
<title>Skipped teeth and blockchains</title>
<link href="https://another.rodeo/skipped-teeth-blockchains/"/>
<updated>2024-10-24T00:00:00Z</updated>
<id>https://another.rodeo/skipped-teeth-blockchains/</id>
<content type="html"><p>So I recently <a href="https://another.rodeo/monark-2/">bought an old bike</a> -- nothing new for me -- but as I was poking around on it, I realized something <em>was</em> unusual: I'd bought a skiptooth bike. I had questions.</p> <p>So first, what is a &quot;skiptooth&quot; bike? Without getting too much into bike nerdery (I do that plenty elsewhere around here) the basics are this: Modern bike chains have 1/2&quot; between their pins, but that wasn't always the case. Up until around 1950 or thereabouts, most chains used an uneven one-inch spacing, with long links alternating with short links between rollers. This was called &quot;skiptooth&quot; because the sprockets were missing one tooth in between each tooth. They skipped those.</p> <p>What? Yeah. Take a look at the picture above to visualize it, cause it just seems weird. Why not just make them all the same size?</p> <p>Because it was mimicing an earlier 1&quot; spacing standard from the 1890s or so called... wait for it... &quot;blockchain.&quot;</p> <p>The original blockchain literally had big 1&quot; steel blocks, with short linking plates between them. I believe the thinking was to limit the amount of parts that bend so it would be stronger. This didn't work nearly so well for bicycles as it did heavy machinery, but it <em>was</em> the first viable bike chain.</p> <figure class="image "> <img src="https://another.rodeo/img/writing/blockchain.jpeg" alt="An example of a blockchain as used for a bicycle. Photo from thecabe.com." /> <figcaption>An example of a blockchain as used for a bicycle. Photo from thecabe.com.</figcaption> </figure> <p>The difference, of course, between this 125-year-old tech and the modern blockchain is that a bicycle blockchain actually solved an identifiable problem.</p> <p>Blockchains were inefficient and clumsy -- some things never change -- and only lasted about 20 years or so before they were replaced by the much more flexible, quieter skip tooth, which lasted about 50 years before being replaced by the standard chain spacing we've all been using for the past 75 years.</p> <p>SkipToothChain: the next big thing.</p> <figure class="image "> <img src="https://another.rodeo/img/writing/pun-dog.jpeg" alt="" /> <figcaption></figcaption> </figure> <p>I'm not proud. After all, I did make <a href="https://dadjoke.fly.dev/">https://dadjoke.fly.dev</a>.</p> <hr /> <h3 id="further-reading" tabindex="-1">Further reading<a class="tdbc-anchor" href="https://another.rodeo/skipped-teeth-blockchains/#further-reading" aria-hidden="true">#</a></h3> <ul> <li><a href="http://www.american-vintage-bicycles.com/home/vintage-bicycle-parts/skip-tooth/">American Vintage Cycles: Skip Tooth Chains</a></li> <li><a href="https://nostalgic.net/vintage-bicycle-chain">Dave's Vintage Bicycles: Vintage Bicycle Chains</a></li> <li><a href="https://thecabe.com/forum/threads/one-inch-pitch-block-chain-available-mike-cates-ca.62886/">Thecabe.com</a></li> </ul> </content>
</entry>
<entry>
<title>Backpacks</title>
<link href="https://another.rodeo/backpacks/"/>
<updated>2024-11-15T00:00:00Z</updated>
<id>https://another.rodeo/backpacks/</id>
<content type="html"><p>Everyone has a backpack, and everyone has stuff in their backpack.</p> <p>Sometimes your backpack has too much stuff in it, and you've got to get rid of something.</p> <p>Sometimes your backback may not have all that much in it, but that stuff is heavy and it's hard to carry around.</p> <p>Most of us are carrying some stones in our backpacks. These are heavy loads. Sometimes we carry those rocks for years. Some of us have backbacks so full of rocks nothing else fits in there. We can barely lift the pack at all, let alone carry it all.</p> <p>People will often want to give you something that was in their backpack. In some cases, that may be a gift.</p> <p>&quot;Hey, this is so cool, you think, as you tuck your new treasure carefully away in the backpack, hopefully far from the rocks.You'll be happy to carry this wonderful new thing in your backpack, and even though it's in there, the pack somehow feels lighter.</p> <p>Other times it's just another rock for you to carry around.</p> <p>You don't always get to choose what's in your backpack, but when you do... choose wisely.</p> <p>Every day, some people are carrying overloaded packs. If you can take some of their load and help them, that's good. If you can't, well, carry your own load as best you can, and maybe you can help more on down the road.</p> <p>Sometimes you just gotta put your backpack down for a minute. That's ok. Take a breather. But you can't leave it behind. There's important stuff in there.</p> <hr /> <p>Yes, this is a metaphor, one that I've belabored before, and will belabor again. It works for me. I like having it in my backpack.</p> <p>It may not work for you. You may think, this is just a different metaphor for what <a href="https://en.wikipedia.org/wiki/Spoon_theory">Spoon Theory</a> already describes. I disagree, but that's OK, I'm not asking you to carry my metaphor around if you don't want to. And I don't plan to carry your opinion of my metaphor around either.</p> <p>Carry what you need and want. Sometimes carry more, if you can, or if you want to.</p> <p>Don't be afraid to leave some rocks behind.</p> </content>
</entry>
<entry>
<title>Building DSCovery</title>
<link href="https://another.rodeo/building-dscovery/"/>
<updated>2024-11-18T00:00:00Z</updated>
<id>https://another.rodeo/building-dscovery/</id>
<content type="html"><p>I was asked today how I built <a href="https://dscovery.fly.dev/">DSCovery</a>, the aggregator I put together awhile back to help people find jobs in civic tech.</p> <p>I wish it was a better story.</p> <p>The reality is that on a technical level it's a not-very complex Django app. I just <em>love</em> Django for this sort of thing. You can get from zero to something in no time at all. Rails has the same advantages, but I know Django much better, and the Django admin made my life a lot easier in this case. It was kind of the killer feature for this project.</p> <p>But, to back up a bit, aside from Django I already had experience with two things that would be key to DSCovery:</p> <ul> <li>I had used BeautifulSoup to scrape sites for various reasons, like hitting the Secretary of State site for election night returns back in my journalism days. I wasn't at the Lawrence Journal-World, but <a href="https://www.b-list.org/weblog/2010/nov/02/news-done-broke/">James' Bennett's classic rundown of what that usually looks like seems pretty universal</a>.</li> <li>I had spent enough time with various ATSs that I knew what their output tended to look like. For those who don't know, an ATS is an Applicant Tracking System -- The thing recruiting uses to keep track of open roles and who's applying for them.</li> </ul> <p>Because I'd spent so much time with ATSs as a hiring manager, I knew there weren't <em>that</em> many of them out there, and most folks congregated around just a few. Which meant that if I wrote the importer for one, I'd written it for all of them.</p> <p>So I started going down the list of DSC firms using the most common platforms and started building an importer for each platform, as simple as possible:</p> <ol> <li>For each company known to use this ATS platform....</li> <li>Use the Requests library to get the HTML from the jobs page</li> <li>Use BeautifulSoup to parse the jobs out</li> <li>Tuck them away in a python data structure.</li> </ol> <p>This got easier as I added more companies, because more often than not I could re-use an importer I'd already written. When I was fairly happy with the first importers, I built a view to wrap them and do a few things:</p> <ul> <li>Clean up old and/or unreachable jobs to keep things fresh</li> <li>Set up the data structures for the importers</li> <li>Pull in each of the importers as a module and runs them.</li> <li>Take the data structure, do any last-minute cleaning, and write the new records to the database.</li> </ul> <p>From the Django admin I can then keep an eye on the roles, assign them to different practices, set things as featured etc.</p> <p>And really, that's about it. There are a few basic display views, but not a whole lot more. I've got some more things I'd like to do when I find time, but right now it's still pretty simple.</p> <p>I recall doing some almost-interesting things with includes in the templates to make them more reusable, and to allow me to more easily use Alpine.js and/or HTMX, but if I'm being honest I can't recall now what it was that I was doing with Alpine.js or HTMX, and I'm not sure if I ever implemented it publicly.</p> <h3 id="the-challenges" tabindex="-1">The challenges<a class="tdbc-anchor" href="https://another.rodeo/building-dscovery/#the-challenges" aria-hidden="true">#</a></h3> <p>There were a few challenges along the way, to be sure, and some of them have persisted.</p> <p>For example, some of the ATSs are really difficult to parse, usually because they use client-side rendering (side note to ATS vendors: a jobs page is nearly the last place client-side rendering makes any sense). This borks BeautifulSoup because it sees the page as it was delivered from the server, not as it's hydrated client-side. Or, in other words, it sees an empty page.</p> <p>In some of those cases I've been able to find the raw JSON it's hydrating the page from. In those cases I sidestep BeautifulSoup, grab the JSON and parse that. But in other cases the JSON is also unavailable and I'm stuck. Workable, for example, just seems unparseable, so I can't yet import jobs from Blue Tiger, Friends from the City, or Pixel Creative. That bums me out. They're good folks.</p> <p>And some ATS are just completely stupid and awful to work with. Usually, but not always, these are old-school &quot;enterprise&quot; offerings that feature lousy markup and horrific user interfaces: ADP, ApplicantPro, UKG, that sort of thing. I really feel for the companies saddled with these systems.</p> <p>In some cases (like, Ad Hoc, for example) I think the company is important enough that I really want to include them, but their ATS system is so incredibly bad that it's just impossible. All I can do is pull from LinkedIn. It's not ideal. To all the DSC companies (and anyone else who'll listen) listen to this advice: Don't listen to fools trying to sell you these &quot;enterprise&quot; ATSs. They are garbage, and the person trying to convince you to switch to them should not be listened to.</p> <p>There are also some cases where the ATS is too niche, or the companies are so small, that I'm waiting for some more jobs to import before going through the effort of writing a new importer.</p> <p>At any rate, I continue to iterate, add more firms, and more functionality.</p> <p>The whole thing is hanging together pretty well so far, which makes me happy. It'd been awhile since I'd coded up much of anything, really, so I was glad to see I could still do it.</p> <p>If you'd like to read more about DSCovery and <em>why</em> I built it, <a href="http://localhost:8080/dscovery/">I wrote that up awhile back</a>. If you'd like to take a look under the hood, <a href="https://github.com/tBaxter/DSCovery">all the code is public</a>.</p> <hr /> <p><em>Photograph is of a Side Corridor on a Dirigible, ca. 1933, <a href="https://www.flickr.com/photos/usnationalarchives/7951499644/in/photostream/">from the National Archives</a></em></p> </content>
</entry>
<entry>
<title>This is where it all breaks</title>
<link href="https://another.rodeo/ai-service-design-real-work/"/>
<updated>2025-05-30T00:00:00Z</updated>
<id>https://another.rodeo/ai-service-design-real-work/</id>
<content type="html"><p>Let’s skip past the philosophical debate — there’s been plenty of that already (including some here). Whether or not you <em>should</em>, you did: you bought into AI. You committed your teams to building AI-driven solutions, and you’re starting to ship them.</p> <p>You are in it. Or rather, AI’s in it. And then things get complicated.</p> <p>Because, as usual, the hard part isn’t really the technology, or even integrating it.</p> <p>It’s the world around it.</p> <p>That’s not an AI problem. It’s a <strong>service design</strong> problem.</p> <h3 id="systems-are-like-people-theyre-messy-and-they-often-dont-make-much-sense" tabindex="-1">Systems are like people: they're messy and they often don't make much sense.<a class="tdbc-anchor" href="https://another.rodeo/ai-service-design-real-work/#systems-are-like-people-theyre-messy-and-they-often-dont-make-much-sense" aria-hidden="true">#</a></h3> <p>A lot of software up until now has been built on the dream of reducing human messiness down to a clean loop: <code>human asks → software responds → happy human</code>.</p> <p>But real systems rarely end up like that. They’re often more like:<br /> <code>human asks → website makes API call to CRM → help desk → someone in compliance → another tool → export to spreadsheet → escalated to manager → judgment call → back down from manager for data entry → backend system → another person copy/pasting → software pushes results to other systems → human gets an email days later</code>.</p> <p>Yet somehow, in 2025, we seem to think we can reduce <em>that</em> to:<br /> <code>human asks → AI responds → happy human</code>.</p> <p>The real world is full of handoffs, mismatched expectations, missing context, and partial automation duct-taped together so people just trying to do their jobs may actually succeed most of the time. More importantly, even when they're doing their best, those people are inconsistent and make mistakes — because they’re human. This is the mess that <strong>service design</strong> has always tried to make sense of.</p> <p>Service design isn’t just about the user journey on a screen. It’s about the whole system — who’s doing what, with what tools, at what point, and what happens when that handoff goes sideways.</p> <p>It pays attention to the awkward stuff: the delays, the workarounds, the “I guess I’ll email someone” moments. The parts where two systems almost work together, but not quite. That’s where services tend to break — not just what the user sees, or even what the engineers build, but in the in-between and the edges.</p> <h3 id="what-changes-when-you-add-ai" tabindex="-1">What Changes When You Add AI?<a class="tdbc-anchor" href="https://another.rodeo/ai-service-design-real-work/#what-changes-when-you-add-ai" aria-hidden="true">#</a></h3> <p>Everything. And nothing.</p> <p>AI doesn’t just drop into an existing step like a new library or subsystem behind a feature flag. It reshapes the dynamics of the whole system. That’s because AI is introduced to replace one of two things:</p> <ol> <li>Predictable but limited <strong>deterministic process</strong>, like code, workflow, or rules</li> <li>A <strong>human</strong> with judgment, context, and fallback instincts</li> </ol> <p>In the first case, you lose the predictability and testability. In the second, you keep the all the human weirdness without the innate paths to fixes.</p> <h4>Example 1: AI in Customer Support</h4> <p>Let’s say you’ve got a chatbot handling support. It answers questions, escalates tough ones, runs 24/7.</p> <p>But what happens when:</p> <ul> <li>It confidently gives the wrong refund policy?</li> <li>It tells a customer to do something that voids their account?</li> <li>It doesn’t escalate because the person didn’t phrase their problem the right way?</li> </ul> <p>Now the human on the other end isn’t just annoyed — they’re angry. They’ve been misinformed, misunderstood, and made to feel powerless. The AI made the problem <em>worse</em>.</p> <p>And what happens to the remaining members of your human support team? They’re now <strong>cleaning up</strong>, not just answering questions. They're managing emotional escalations. They're carrying the risk of an AI that doesn't know what it doesn’t know.</p> <p>They are the last line of defense for a system failure.</p> <h4>Example 2: AI in Internal Tools</h4> <p>Let’s say you give a policy analyst a tool that uses AI to summarize regulatory comments from the public. Hundreds of thousands of them. Saves time, right?</p> <p>But then:</p> <ul> <li>The summary misses a key legal objection raised by multiple stakeholders.</li> <li>It flattens nuance into something “neutral” but meaningless.</li> <li>It leaves key details out, but the analyst doesn’t know what got left out.</li> </ul> <p>Now you’ve reduced transparency and increased risk. The AI didn’t just summarize — it reshaped the evidence base for policy.</p> <p>If the rest of the system wasn’t built to catch that, you don’t have a model problem. You’ve got a service design problem.</p> <h3 id="wait-dont-humans-make-these-mistakes-too" tabindex="-1">Wait — Don’t Humans Make These Mistakes Too?<a class="tdbc-anchor" href="https://another.rodeo/ai-service-design-real-work/#wait-dont-humans-make-these-mistakes-too" aria-hidden="true">#</a></h3> <p>Yes. All the time.</p> <p>They misread. They skip steps. They make bad calls under pressure. But at the same time...</p> <p><strong>1. Humans don’t make mistakes at AI scale.</strong> An AI can repeat the same bad output hundreds of times in seconds. A person can’t.</p> <p><strong>2. You can train (or fire) humans.</strong> There’s a feedback loop. With AI, that loop is harder to build and slower to act on.</p> <p>So no, the bar isn’t “perfect accuracy.” If AI performs roughly as well as a human — and you can <strong>catch its mistakes</strong> — you're no worse off than you were before, and you may be much better off. That's good!</p> <h3 id="design-for-the-drop-not-just-the-lift" tabindex="-1">Design for the Drop, Not Just the Lift<a class="tdbc-anchor" href="https://another.rodeo/ai-service-design-real-work/#design-for-the-drop-not-just-the-lift" aria-hidden="true">#</a></h3> <p>This is the part we skip too often. We talk about what AI <em>adds</em> — the “lift.”</p> <p>But every time you add AI, you’re also <strong>removing</strong> something:</p> <ul> <li>Human context</li> <li>Transparent decisions</li> <li>Known error types</li> </ul> <p>That’s the “drop.”</p> <p>If you only design for the lift — and ignore the drop — you’re building something brittle.</p> <p>Designing for the drop means asking:</p> <ul> <li>What context did this rely on before?</li> <li>Can the AI replicate it?</li> <li>What happens when it gets it wrong?</li> <li>Who notices?</li> <li>Who can recover?</li> <li>Are downstream humans ready — and do they have enough info to fix it?</li> </ul> <p>If your service falls apart silently when the AI outputs garbage, then the service isn't well designed, is it?</p> <h3 id="ai-makes-service-design-more-important-not-less" tabindex="-1">AI Makes Service Design More Important — Not Less<a class="tdbc-anchor" href="https://another.rodeo/ai-service-design-real-work/#ai-makes-service-design-more-important-not-less" aria-hidden="true">#</a></h3> <p>If you’re introducing AI, you’re taking on more responsibility:</p> <ul> <li>To define the seams</li> <li>To build guardrails</li> <li>To enable recovery</li> <li>To preserve accountability</li> </ul> <p>That’s not a better prompt. It’s not a fine-tune. It’s not tweaking your retrieval chain.</p> <p>It’s designing a system where people — not just models — can succeed.</p> <h3 id="one-more-thing" tabindex="-1">One More Thing<a class="tdbc-anchor" href="https://another.rodeo/ai-service-design-real-work/#one-more-thing" aria-hidden="true">#</a></h3> <p>The worst failures won’t look like outages. They’ll look like slow erosion:</p> <ul> <li>Trust lost without a clear breach</li> <li>Bad decisions built on subtle misfires</li> <li>Teams overwhelmed cleaning up silent messes</li> </ul> <p>If you’re not designing the <strong>whole service</strong> — inputs, AI, outputs, context, escalation, recovery — you’re not designing a system.</p> <p>You’re just crossing your fingers.</p> <p>Hope isn’t a strategy.</p> <p>Service design is.</p> </content>
</entry>
<entry>
<title>Vintage bicycle projects</title>
<link href="https://another.rodeo/bikes/"/>
<updated>2025-05-30T19:40:27Z</updated>
<id>https://another.rodeo/bikes/</id>
<content type="html"> <div class="tdbc-section"> <ul class="tdbc-column-container"><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/raleigh/raleigh.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/raleigh-sports/" class="tdbc-card__title">The bedraggled Raleigh</a> <p> A bound-for-the-dumpster Raleigh Sports gets a new lease on life. </p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/peugeot/completed.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/peugeot-ph19-mixte/" class="tdbc-card__title">Peugeot mixte restoration</a> <p> Parlez-vous français? </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/trek-520/rocks.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/trek-520/" class="tdbc-card__title">Trek 520</a> <p> A great bike, with a few caveats </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/cork-bar-ends/installed.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/cork-bar-ends/" class="tdbc-card__title">Making wine cork handlebar plugs</a> <p> Want something different for your handlebars? How about a wine cork bar end? They're easy to make. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/schwinn-speedster/done.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/electric-schwinn/" class="tdbc-card__title">The electric Schwinn</a> <p> My e-bike conversion on a 50-year-old Schwinn. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/luxus/fireball.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/luxus-sport-bike/" class="tdbc-card__title">The Luxus folding bike restoration</a> <p> For some inexplicable reason, I wanted a vintage folding bike. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/handcycle/starting.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/handcycle/" class="tdbc-card__title">The handcycle</a> <p> An interesting journey into making bicycling more accessible. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/trek-2100/2100.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/trek-2100/" class="tdbc-card__title">Trek 2100</a> <p> What? A carbon fiber bike? In this house? Well, sort of... </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/rocket/as-found.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/monark-2/" class="tdbc-card__title">Another one?</a> <p> Another bedraggled classic cruiser finds its way to my house. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/bikes/road-king/complete.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/monark-road-king/" class="tdbc-card__title">Road King</a> <p> Bringing a 1948 cruiser bicycle into the 21st century. </p><p></p> <p></p></div> </li></ul><p></p> </div> </content>
</entry>
<entry>
<title>Fiberglass "egg" camper restoration</title>
<link href="https://another.rodeo/the-camper/"/>
<updated>2025-05-30T19:40:27Z</updated>
<id>https://another.rodeo/the-camper/</id>
<content type="html"> <div class="tdbc-section"> <ul class="tdbc-column-container"><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/camper/almost-done.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/71-eco-restoration/" class="tdbc-card__title">1971 Eco fiberglass camper restoration</a> <p> Trying to put an egg (camper) back together again. </p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/camper/thumb.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/smart-camper/" class="tdbc-card__title">Making a smart vintage camper</a> <p> My attempt to bring modern tech to a very old camper. </p><p></p> <p></p></div> </li></ul><p></p> </div> </content>
</entry>
<entry>
<title>Web Things</title>
<link href="https://another.rodeo/web-things/"/>
<updated>2025-05-30T19:40:27Z</updated>
<id>https://another.rodeo/web-things/</id>
<content type="html"> <div class="tdbc-section"> <ul class="tdbc-column-container"><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/mm.png" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/mm/" class="tdbc-card__title">Maturity Model Generator</a> <p> Need a maturity model? Just enjoy a silly joke? Either way, we've got you covered. </p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/cartoon-interview.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/employer-questions/" class="tdbc-card__title">The giant list of questions to ask employers</a> <p> Do you get sytmied when you're asked if you have any questions in an inteview? Have we got a list for you. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/pear.png" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/pear/" class="tdbc-card__title">Pear</a> <p> Comparing text from two documents easily, with no sign-up or data sharing. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/dadjoke.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/dad-joke/" class="tdbc-card__title">Not funny, Dad</a> <p> The end result of a fascination with obscure government data sources and dad jokes. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/typewriter.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/markitup/" class="tdbc-card__title">Markitup (v2)</a> <p> Bringing an old favorite jQuery library into the modern era. And some musings on ChatGPT. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/facepalm.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/deploying/" class="tdbc-card__title">Deploying</a> <p> A running list of the questions I have to remember to ask myself when deploying a new app to a new environment. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/chain.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/linkroll/" class="tdbc-card__title">11ty Linkrolls</a> <p> How to build an old-fashioned linkroll for the 11ty static site generator. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/building-it.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/about/" class="tdbc-card__title">About this site</a> <p> We're doing it live! Whatever this site becomes, we're gonna build it out in the open so everybody can see all the half-baked ideas and dead ends. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/dscovery.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/dscovery/" class="tdbc-card__title">DSCovery</a> <p> Building an aggregator for jobs in civic tech. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/web-things/dirigible.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/building-dscovery/" class="tdbc-card__title">Building DSCovery</a> <p> How I built DSCovery, the civic tech jobs aggregator, and lessons learned. </p><p></p> <p></p></div> </li></ul><p></p> </div> </content>
</entry>
<entry>
<title>Selected writing</title>
<link href="https://another.rodeo/writing/"/>
<updated>2025-05-30T19:40:27Z</updated>
<id>https://another.rodeo/writing/</id>
<content type="html"> <div class="tdbc-section"> <ul class="tdbc-column-container"><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/five-conditions.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/five-conditions/" class="tdbc-card__title">The Five Conditions for (Organizational) Improvement</a> <p> Understanding why organizations get stuck and won't change </p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/quicksand.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/quicksand-meetings/" class="tdbc-card__title">Quicksand meetings</a> <p> Managers: Avoid these sinking meetings so your teams don't feel stuck. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/audience.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/know-your-audience/" class="tdbc-card__title">Know your (documentation) audience</a> <p> Why nobody likes your docs and your Single Source of Truth isn't working </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/office-pool.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/straight-talk-ic-path/" class="tdbc-card__title">So you don't want to be a manager</a> <p> Straight talk to a senior engineer wanting to stay on an IC track. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/ai/assembly.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/ai-boring-stupid-ok/" class="tdbc-card__title">AI is boring and stupid and maybe that's OK</a> <p> Sometimes boring and stupid is still really useful. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/values/tightrope.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/values/" class="tdbc-card__title">On values</a> <p> What we care about costs us. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/cleanup-parade.jpg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/make-the-damn-web-sites-work/" class="tdbc-card__title">We’ve got to make the damn websites work</a> <p> Is it the most transformative thing we can do on the web in 2024? </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/sisyphus-by-Jeffrey-Hummel.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/tasks/" class="tdbc-card__title">Tasks</a> <p> Herculean tasks, Sisyphean tasks, what else have ya got? </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/circus-elephants.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/engineering-velocity/" class="tdbc-card__title">Engineering velocity</a> <p> Why is my engineering team so much slower than they used to be? </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/elephants-nyc.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/engineering-velocity-part-2/" class="tdbc-card__title">Engineering velocity: Part 2</a> <p> Your team seems slower... Here's what to do about it. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/skiptooth.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/skipped-teeth-blockchains/" class="tdbc-card__title">Skipped teeth and blockchains</a> <p> Down a different blockchain rabbit hole. </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/backpack.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/backpacks/" class="tdbc-card__title">Backpacks</a> <p> How are you carrying your load? </p><p></p> <p></p></div> </li><li class="tdbc-card"> <img class="thumb" src="https://another.rodeo/img/writing/retro_robot.jpeg" alt="" /> <div class="tdbc-card__content"> <a href="https://another.rodeo/ai-service-design-real-work/" class="tdbc-card__title">This is where it all breaks</a> <p> AI, service design, and the real work ahead </p><p></p> <p></p></div> </li></ul><p></p> </div> </content>
</entry>
</feed>