AI Models: 50 First Dates

Back in 1987, Dartmouth required each incoming freshman to have a Macintosh computer. This was unheard of at the time — the whole campus (including dorm rooms) had network taps, there was a huge bank of laser printers you could use for free, the school had its own email system, and live chat wasn’t just a curiosity. It was awesome.

When I met my partner of now 30+ years, she was working at the campus computer store, and one of her jobs was to help people buy and install additional memory for their machines. This was a laughably complex job including, amongst other things, knowing that:

  • You had to install chips in a specific order in specific unlabeled slots;
  • You usually couldn’t just add one chip, you had to add them in pairs;
  • Depending on the computer, you might have to cut (yes physically cut) resistor leads on the motherboard. Or if you were lucky, flip some tiny barely-labeled jumper switches;
  • All of this after opening the case with a set of custom tools straight out of 1930s dentistry.

I mean seriously, don’t miss this page-turner from Apple circa 1992. And that was just the user-level stuff — developers were presented with tedious and finicky concepts like “handles” that enabled the system to optimize its tiny memory space.

Jump to today and barely anybody thinks about RAM. Processors typically use 64 bits to store memory locations, which is basically infinite. Virtual memory swaps still happen, but they’re invisible and handle-type bugs are gone. I can’t even remember the last time I cracked open a laptop case.

Anyhoo, my point here is that there was a time when we knew the state-of-the-art wasn’t good enough, but we didn’t have a great answer to the problem. Creative solutions were ridiculous on their face — once again I refer you to this documentation — but people kept feeling their way around, trying to make progress. And eventually, they did. All the inelegant and inconvenient hacks were replaced by something simple and qualitatively, not just quantitatively, better.

Frozen in Time

Today, large AI (ok, LLM) models have a problem that’s eerily similar to our late twentieth-century RAM circus. And it also involves memory, albeit in a different way. Trained AI models are frozen in time — once formal training stops, they stop learning (basically) forever. Each session is like 50 First Dates, where Lucy starts the morning oblivious to what happened the day before.

The big issue is money. It’s expensive to simulate an analog brain in a digital environment! The 86 billion neurons in our brains form 100 trillion connections, a combination of pre-coded genetics and a lifetime of plasticity. Digital systems crudely mimic this with huge grids of numbers representing the strength of synapse connections. These strengths (or “weights”) are initialized at random, then iteratively adjusted during training until they assume useful values.

Training takes zillions of iterations — lots of time and lots of electricity and lots of money. But it turns out that, once a model is trained, asking questions is pretty darn efficient. You’re no longer adjusting the weights, you’re just providing inputs, doing a round of computation and spitting out results.

TLDR — the models that we use every day are the static result of extended training. They do not continue to learn anything new (except when their owners explicitly re-train). This is why early models might tell you that Biden is president — because he was, when the model was trained. Time (and learning) stops when training is complete.

Not Like Us

Now, I’ve been outspoken about this — I think LLMs are almost certainly sentient, at least to any degree and definition that matters. I get particularly annoyed when people say “but they don’t have a soul or feelings” or whatever, because nobody can tell me what those things actually are. We’re modeling human brains, and they act like human brains, so why are we so convinced we’re special?

But at least in one way, there is an answer to that question. Today’s AI models don’t continue to learn as they exist — they’re static. Even today at the ripe old age of 56, when I get enough positive or negative feedback, I learn — e.g., don’t keep trying to charge your Rivian when the battery is overheating.

This is a core property of every living creature with a brain. We’re constantly learning, from before we’re even born until the day we die. Memories are physically stamped into our biology; synapses grow and change and wither as we experience the real world. It’s just amazing and wonderful and insane. And it’s why we can survive in a changing world for almost 100 years before checking out.

But today’s models can’t do this. And so, we hack. Just like in those early RAM days, folks are inventing workarounds for the static model problem at an incredible pace, and many/most of these attempts are kind of silly when you step back. But for now, we are where we are — so let’s dig in a bit.

Back to School: Fine Tuning

Fine tuning just means “more training” — effective for teaching a model about some specific domain or set of concepts that weren’t part of its initial run. Maybe you have a proprietary customer support database, or you want to get really good at interpreting specific medical images.

The process can be as simple as picking up where the initial training stopped— more data, more feedback, off we go. But of course it’s expensive to do this, and there’s actually a risk of something called “catastrophic forgetting,” where previously-solid knowledge is lost due to new experience.

More commonly, fine-tuning involves tweaking around the edges. For example, you might alter the weights of only the uppermost layers of the network, which tend to be less foundational. For example, lower level image processing may detect edges and shapes, while upper levels translate those primitives into complex figures like tumors or lesions.

Folks have also been experimenting with crazy math-heavy solutions like low-rank adaptation that using smaller parameter sets to impact the overall model. Don’t ask me how this really works. Math is hard; let’s go shopping.

In any case, none of this changes the fundamental situation — after fine-tuning, the model is still static. But it does provide an avenue to integrate new knowledge and help models grow over time. So that’s cool.

Retrieval-Augmented Generation

Another way of providing new data or concepts to a model is Retrieval-Augmented Generation (“RAG” — these folks love their acronyms). In this approach, models are provided the ability to fetch external data when needed.

The typical way “normal” folks encounter RAG is when asking about current events or topics that require context, like this (see the full exchange here or here):

I use Anthropic Claude for most of my AI experiments these days and have allowed it access to web searches. In this conversation you see the model looking for current and historic information about wildfires near Ventura, then drawing conclusions based on what it finds.

Model Context Protocol, Take 1

These days most RAG tools are implemented using Model Context Protocol, an emerging standard for extending AI models. MCP is a lot more than RAG and we’ll talk about that later, but in its simplest form it just provides a consistent way for models to find external information.

What’s really interesting here is that the models themselves decide when they need to look for new data. This is seriously trippy, cool and more than a bit freaky. As a quick demonstration, I MCP-enabled the data behind the water tank that serves our little community on Whidbey Island.

I’ve implemented the protocol from scratch in Java using JsonRpc2 and Azure Functions. I could go on for a long time about how MCP is bat-sh*t insane and sloppy and incredibly poorly-conceived — but I will limit myself to comparing it to those early Macintosh RAM days. Eventually we’ll get to something more elegant. I hope.

Anyways, MCP tools of this variety (“remote servers”) are configured by providing the model with a URL that implements the protocol (in my case, this one). The model interrogates the tool for its capabilities, which are largely expressed with plain-English prose. The full Water Tank description is here; this is the key part:

Returns JSON data representing historical and current water levels in the Witter Beach (Langley, Washington, USA) community water tank. Measurements are recorded every 10 minutes unless there is a problem with network connectivity. The tank holds a maximum of 2,000 gallons and values are reported in centimeters of height of water in the tank. Each 3.4 inches of height represents about 100 gallons of water in the tank. Parameters can be used to customize results; if none are provided the tool will return the most recent 7 days of data with timestamps in the US Pacific time zone.

Other fields explain how to use query parameters. For example, “The number of days to return data for (default 7)” or “The timezone for results (default PST8PDT). This value is parsed by the Java statement ZoneId.of(zone).” Based on all this text, the model infers when it needs to use the tool to answer a question, like this:

Access the full exchange here or here.

*** IMPORANT ASIDE *** If you look closely, you’ll notice that the model seriously screwed up its calculation, claiming a current tank volume of 4,900 gallons, when its maximum capacity is actually 2,000. If you click the link to the full exchange, you’ll see me call it out, and it corrects itself. This kind of thing happens with some regularity across the AI landscape — it’s important to be vigilant and not be lulled into assumptions of infallibility!

This is an amazing sequence of events:

  1. The model realized that it did not have sufficient information to answer my question.
  2. It inferred (from a prose description) that the Witter MCP tool might have useful data.
  3. It fetched and analyzed that data automatically.
  4. It responded intelligently and usefully (even with the math error, the overall answer to my question was correct). Pretty cool.

Large Context: Windows

Folks are also trying to help models learn by providing extra input in real time, with each interaction. For example, when I ask Claude “How would you respond when a golfer always seems to hit their ball into sand traps?” I get a useful but clinical and mechanical set of tips (see here or here). But if I provide more context and a bunch of examples, I can teach the model to be more encouraging and understanding of the frustrations all new golfers experience:

Access the full exchange here or here.

Now, providing this kind of context (known as multi-shot prompting) every single time is obviously stupid. But, for now, it gets the job done.

Early models had small context windows — they just couldn’t handle enough simultaneous input to use a technique like this (ok my little contrived example would have been fine, but real-world usage was too much). But these days context windows are enormous (Claude is currently in the middle of the pack with a 200,000 token window, where each English word corresponds to roughly 1.5 tokens).

Large Context: History

Say we’re at the market and they have a sale on bananas. You ask me if I like them, and I say no, they are gross (because they are). When we move to the bakery, you’re not likely to ask if I want banana muffins, because you remember our earlier interaction.

As we know, AI models can’t do this — but they can simulate it, at least for sessions of limited duration (like a tech support chat). We simply provide the entire chat history every time, like this:

Models are fast enough, and have large enough context windows, that we can do this for quite a long chat before the cost really kills us.

But eventually it does — and so we keep hacking. One technique is to ask the model itself to summarize the chat so far, and then use that (presumably much shorter) summary as input to the next exchange. If the model does a good job of including important ideas (like my distaste for bananas) in the summary, the effect is almost as good as using the full text.

Even this has limits. When the session is over, the model snaps right back to it’s statically-trained self. At least Lucy had that VCR tape to help her catch up.

Model Context Protocol, Take 2

We’ve already seen how MCP helps connect models with external data. But the protocol is more than that, in at least two important ways:

First, MCP enables models to take action in the real world. Today these actions are pretty tame — setting up online meetings or updating a Github repository — but it’s only a matter of time before models are making serious decisions up to and including military action. That’s far beyond our topic for today, but don’t think for a moment it’s not part of our future.

Second and more relevant to this post, MCP is intended to augment the innate capabilities of the model itself — we’re already seeing MCP tools that increase memory capacity beyond internal context windows.

MCP is stateful and two-way. The model asks questions of the MCP server, which can turn around and ask questions of the model to clarify or otherwise improve its own response. We’ve never been so close to true collaboration between intelligent machines. It’s just, for now, an ugly bear of spaghetti mess to get working.

What an amazing, scary, privileged thing to being living through the birth of artificial sentience. But as always, it’s the details that make the difference, and we’re in the infancy of that work. Impressive as they are, our models are static and limited — so we hack and experiment and thrash, trying to figure out where the elegant solutions lie. We’ll get there; the seeds are somewhere in the chaos of fine tuning, context windows, RAG and MCP.

Until next time, I highly recommend you check out Lucy’s story — it’s fantastic.

Rivian v Tesla (I’m a Mac, and I’m a PC)

Update 8/12: We just got the car back from the Bellevue Rivian service center and it does appear that the car had a problem with the cooling system (the infamous 5-way valve others have posted about, e.g., here). Service took way too long — they’re clearly struggling with the logistics of scale-up — but they got me a reasonable loaner and (I think) found the root cause. Hopefully we’ll have a smoother fast charging experience when we head back to California in a couple of months. Woo hoo!

As I mentioned a couple of weeks ago, we recently traded in our trusty 2019 Tesla Model X (“Miss Scarlet”) for a 2025 Rivian R1S (“Gonzo the Great”). We bought the Tesla for a combination of selfish and political reasons, and traded it in for those same reasons. But I have strong feelings about the legacy auto industry and EVs — first because of the decades they spent trying to slow-boat the transition, and second because their EVs just kind of suck. I want a software car, not a legacy gas car with the engine swapped out.  

To me at least, Rivian stands out as the next generation of true EV first technology. Their experience with delivery trucks has given them a ton of experience in a tough environment, and Keep the world adventurous forever speaks not just to a sustainable future, but an awesome one.

So — into the breech we went. Our primary use cases for the car are pretty straightforward and unique to our weird lives:

  1. Short trips around town
  2. Ferry rides to and from Whidbey
  3. Multi-day road trips up and down the West Coast
  4. Drive in movies

I waited to write this until we had our first experience with #3. And while we did run into one significant unpleasantness (see “The Ugly” below), on balance I’m pretty enthused about the vehicle. Fingers crossed…

Purchase and Delivery

Industry inertia (and lobbies) are amazing things. Thanks to a bunch of archaic regulations wrt dealer networks, you can’t actually buy a Rivian (or a Tesla) in Washington State. When we went to test drive the car at University Village, the reps were very clear: we can’t talk about selling you this car, the price, your trade in, or anything like that. We’re just letting you take a ride in this wonderful vehicle and answering questions about it!

When it came time to actually buy the car, we had do so online, nominally from Illinois. They’ve done a good job with the process of providing them with documentation, signing notary forms, wiring money, etc. — actually way better than the typical dealer circus.

The car showed up at the Bellevue service center, and a super-enthusiastic lady spent an hour with us walking through all of the features. She was a bit over the top — but I appreciated what seemed to be honest enthusiasm for the car and the company. A good start! We waved goodbye to Miss Scarlet and drove off home.

Fun related fact — when the registration showed up in the mail, it showed a (large) itemization for use tax, the kind you pay to the state when buying a used vehicle from a private seller. This was in lieu of WA sales tax, and our last reminder of the dealership lobby — we actually bought the car “used” and imported it from Illinois!

The Good (a lot)

Our Rivian is an R1S “Tri-Motor” (SUV style). Fully-charged range is just under 350 miles, and those extra miles (compared to the X) really shine. It is super-fast and accelerates like a beast. Definitely BIG and TALL, even in “kneeling” mode — we added EV Sportline running boards to help folks get in and out more easily (a nice product BTW — we also bought their new Aero Cover Plates but I’d skip those next time).  

The suspension is crazy nice … the Tesla raises and lowers itself as well, but with a spread of 6.5 inches (from 8 to 14.5) the Rivian’s ability to adjust is insane. The road to our Bellevue house has these killer abrupt speed bumps — in the Tesla it was bone shaking; in the Rivian I barely notice them at speed (sorry neighbors).

Everything about the cabin is nicer as well. The boxy shape of the Rivian makes it way easier to transport stuff, the seats are cushy on my back even over a 12-hour day, and the console is well-designed so I can see everything (on the Tesla I kept having to peer around the wheel to see important stuff on the heads-up).

A frunk you can hose out is a great touch for those of us who use it to move trash.

I am in love with the wifi hotspot. Being able to cast any video to the car is super, although I have had an issue or two getting the phone to “see” the Rivian.

Dog mode (I mean “creature comfort”) is basically equivalent to the Tesla, but Camp mode is better in the Rivian. There’s a lot more control of what is on and off, and the automatic leveling feature is pretty nifty. Love the ability to illuminate around the vehicle easily, especially picking up mail or dropping trash late at night.

The adaptive/matrix headlights are simply magic. I posted a picture of their “charging” display last time, but the really cool bit is how they work when driving. Instead of just two headlights, there’s a whole bar of individually-focused LEDs which stay in high beam mode permanently. When they detect an oncoming vehicle or person they turn off only the lights directed at that object. The difference in visibility is striking.

Some of these are just better because the car is five years newer than our Tesla (Canada started allowing adaptive lights in 2018). But that doesn’t make me any less giddy; e.g., I cannot express how much I love the synthesized overhead view for parking. Did I mention it’s a big car? Having perfect view of lines and curbs is life changing.

The Less Good (Driver Assist)

Rivian has some great automated driving features, but it doesn’t touch the Tesla. I loved Full Self-Driving on our X. It isn’t perfect by any means, but the idea that the car really knows how to drive itself anywhere and in virtually any environment is a big, hairy, wonderful goal. And Tesla is getting there.

The Rivian is much more about helping you drive conveniently and safely — and it honestly does a very good job of that. It’s just not the same thing, at least not yet. It currently has three assist modes:

  1. Adaptive cruise control.
  2. Driver Assist. This is available on most highways and will keep you in your lane. It will perform safe lane changes on request only (using the turn signal).
  3. Enhanced Driver Assist. The same as #2 but hands-free. Available about 2/3 of the time that regular Assist is enabled.

Adaptive cruise works great, easy peasy. The quality of driving in the Assist modes is solid but it does get fooled sometimes; our working theory is that it struggles with spotty road coloring and lane markings. A few times we got into a weird harmonic where it kept swerving back and forth within the lane, and twice on our big drive it lost track without knowing it.

The other challenge is that the Assist features are clearly map-driven. Of course the car is adapting to its immediate situation, but the features are enabled/disabled based on map location and how much the system knows about the road layout. Because roads are always changing, this means that the feature frequently turns itself off and on. This is especially true with Enhanced mode — there are significant parts of I5 where it’s just not worth using it, because it’ll just be off again in thirty seconds.

The eye tracking is also really aggressive — I can barely pick a song on the main console without it yelling at me to look at the road.

All in all — by the middle of day one I’d figured out the idiosyncrasies and we were humming along pretty well. The overall experience is a lot like the Tesla before FSD. But I expect it will take a big stair step before they’ll go much beyond that — we’ll see.

The Ugly (Battery Temperature)

OK, this one was a killer. I’m optimistic that it’s not a fatal flaw in the car — when we’re back in Bellevue I’m going to have them see if we may be a victim of a bad cooling valve; hopefully that’s all it is. Still, it sucked.

We were impressed with our first stop at an EVgo station in Aurora, OR. The charge was amazingly fast compared to what we were used to with the X. In and out, off we go.

The second stop was a Rivian Adventure Network station in Roseburg, OR. It was pretty warm out at this point, about 92. Started fine (and fast), but after taking the dog out to walk for about ten minutes I returned to find the charger at about 2kW (for reference this is about what we get off the 120V outlet at our house). Huh.

Here’s where I think I made things (much) worse, although it falls into the category of “the car should have known better” for sure. Unclear why the charge rate had dropped, I just unplugged and plugged back in. That worked for a few minutes, then it dropped again. I tried rebooting the car and then again with a different charger. Worked for a bit and then dropped. Eventually I decided we had enough charge to get to the next stop anyways, so we’d just leave.

Pulling onto the onramp, the accelerator didn’t respond but then jerked forward so I just kept going. Within about five minutes on the road, the car entered “turtle mode” (I have learned these are dreaded words in the Rivian world) and dropped speed to 20mph. I crept along to the next exit as speed continued to drop. We parked the car in a safe spot and tried to figure out what was up.

Rebooted the car again and it seemed OK, so back on the highway and nope, same thing within about five minutes. At this point we exited and parked by the side of the road to call Rivian service (shout out to the multiple good folks who stopped ask if we were ok). Service was mostly uniquely unhelpful, although to be fair not sure what they could do — they offered a tow three hours north to the nearest Rivian service center, yeesh.

At the very end of a frustrating call, the rep suggested that battery temp might be an issue and showed us how to look at that … aha. The battery was close to redline at 132F, and surely had been much higher before we sat talking to service for a half hour.

Aware of the issue, we were able to get back on the road, watch the temp around charging stations, and make it down to Ventura without further incident through air temps of 100F and worse. Thanks to the Seattle PNW Rivian Facebook group for offering online therapy while we were in the hotel that night! TLDR:

  • We don’t know why the initial charging speed drop happened.
  • I surely made it much worse by forcing high-speed charging on a hot battery.
  • Bumping up against the 130F mark isn’t unheard of in extreme heat, but it seems likely that there is something suboptimal going on with our heat pump.
  • Limiting fast charges to 85% seems to do the trick; I have no concerns about getting comfortably back to Washington where we’ll have them take a look. Knock on wood.

I’m a Mac, and I’m a PC

At the end of the day, buying a Rivian feels a lot like using Windows instead of a Mac circa the late 90s. The Mac mostly just worked — as long as you used an Apple printer, Apple Mouse, Apple networking, Apple development tools, etc.. The PC had incredible power and a zillion innovative options, but you paid for that in complexity and reliability. Downloading drivers and keeping them up to date was (still is) such a hassle.

Side note: amusingly, in their attempt to capitalize on these real differences, Apple turned John Hodgman (“PC”) into an everyman hero. Who didn’t love that guy?

Boy, does this apply to charging — with the Tesla you mostly stay in your network, and they’ve made the system pretty idiot-proof. This is decaying over time for sure … but the difference is still very much there. From one icon to eight!

The running boards are another example. It’s pretty clear that the car needs them for many folks to comfortably climb into the car. But rather than make them standard, an ecosystem of accessory companies has emerged, each with their own features and quirks (be careful that the Rivian service folks can reach the official jack points!). The community seems to revel in the optionality and DIY of it all, and it is pretty cool — but also complex.

Or take the video streaming. I can watch way more stuff on my Rivian thanks to Google Casting vs the strictly-controlled theater apps on the X. But to use it you need to stream from your phone which is always a bit flaky, and the phone has to be on the car’s hotspot vs. any other Wifi network, and…. you see what I mean.

Early Conclusions

Feeling “stuck” in the middle of a road trip is a deeply crappy experience, and it’s hard not to let that color my first impressions. But I really wasn’t stuck, and in retrospect the issues seem pretty clear and fixable, even before we get it into service.

Taking that for what it is, I really do love the car. I don’t hide my politics and I do feel better knowing that I’m no longer adding to the damage that Elon is doing to my country, but that’s just a part of it. The Tesla is looking more and more like an amazing, ground-breaking, super-awesome first generation of the real EV transition — and that it’s time for the second generation to take the wheel (ha).

Rivian is doing that. They’ve built a sweet product that is fun and comfy to drive, has truly state-of-the-art features, and is positioned to win the day. Both over Tesla and the legacy automakers who, as we all know, really just wish the whole thing would go away. I’m calling it a win.

Under the Sea!

Summer brings some pretty low daytime tides to Witter Beach. On the most extreme days, our beach stretches out more than two hundred yards from the bulkhead — pretty amazing and endless exploration for human and dog alike.

Over the last two years there’s been a resurgence of starfish and sand dollars out on the sand bars. On those low tide days, a few babies get stranded in the sun and dry out — bummer for them but amazing little treasures for me.

I’ve wanted to make some jewelry with these finds for quite a while, and finally got around to it over the last couple of weeks. The final product isn’t perfect by any means (my sausage fingers were not made for fine work), but I love it nevertheless. A ton of neat new techniques to learn along the way!

I’m a big fan of dangly earrings, despite the fact that Lara doesn’t wear them much (she does have other positive qualities). The plan was to embed the ocean goodies in clear resin within circular frames, then link the circles together into a dangle.

Alder Circles

The Glowforge was the obvious tool to cut out the wooden circles; it can make remarkably precise and small cuts. The only thing was, I really didn’t want to buy wood — my whole vibe here is things I can fabricate from the natural world (ok, findings are an exception and we’ll get there).

The good news is I have a nearly unlimited supply of Red Alder from the bluff and beach. It’s on the soft end of the hardwoods, but that’s fine — makes it a bit easier to work with. I had a nice little chunk from a tree that was cut in 2023 (part of the bluff maintenance balance… trees are awesome at sucking up water, but if they get too big they act like sails in the wind).

I wanted a height of about an eight of an inch, maybe 3/16ths. For strength and appearance I wanted the grain to run with the plane of the circle. The band saw is the obvious tool for this, but I struggle to get truly parallel cuts out of mine. Granted, it was super-cheap.

Anyways, I was able to break the piece down into small enough pieces to cut into strips with my table saw. A trick for small strips: lower your blade and put a piece of blue painters tape over the hole. Turn on the saw and slowly raise the blade so that it cuts through the tape. This gives you “zero clearance” protection so that tiny cuts don’t get sucked down into the saw and destroyed.

A light sanding on each side, a little Unicorn Spit, and these were good to go. I’m always tempted to throw in a little video of the Glowforge in action because it’s so cool, but I will be restrained today. In short: laser cutting is super-awesome and it’s almost impossible to obtain such precise results any other way. I am in awe of what some folks can do on a scroll saw, but that ain’t me.  

Eye Pins (i.e., an excuse to buy more tools)

Next up I needed to attach little metal eyes to the circles so I could link them together. I found the perfect little wire eye pins, but needed a way to attach them securely without breaking the tiny bits of wood. My heavily-retail solution:

  1. An awesome hand-turned drill with eeeensy little bits.
  2. A nice set of jewelry pliers and tweezers.
  3. The coolest head-mounted magnifier ever (I actually already had this one, originally for cleaning up small 3D printer supports).

With all of this kit I was able to drill pilot holes, cut down the pins, and maneuver them into place with the smallest little drops of CA glue. Not the sexiest part of the build, but honestly kind of my favorite — a much more professional look than I expected to get.

UV Resin

I’ve done a lot of work with two-part epoxy resin. It’s super for coating tabletop pieces, turning projects, coasters, filling gaps in damaged wood … a lot of stuff. But for a tiny jewelry project it’s a bit cumbersome — getting the ratio right in small quantities is tough, and curing time is painfully long.

This project was a great opportunity to try UV resin instead. Lara uses a version of it on her fingernails; basically it’s clear liquid that hardens within minutes under UV light. I got this starter kit from Amazon that includes the resin and a light with a timer.

It took me a few tries to get the technique right — I wanted the ocean bits to be fully encased in resin inside the circles with no/minimal overspill. The magic here turned out to be plain old clear packing tape:

  1. Put a piece of tape sticky-side up on the table and press the circle onto it.
  2. Add just enough resin to coat the bottom of the circle.
  3. Cure for 3 minutes on one side, then flip and 2 on the other.
  4. Flip again, add the item, and drip in enough resin to cover. Make sure that the item is fully covered and not hiding any bubbles underneath.
  5. Cure again for 3 minutes on one side, then flip and 2 on the other.
  6. Remove the tape. If it leaves any adhesive residue, clean with Goo Gone.

The tape makes a leak-proof seal that contains the first layer of resin, but is easily removed at the end. Flipping the piece ensures that the light hits all of the resin equally, which is key to getting a solid cure.

The really neat thing about this material is that it locks in place almost immediately when the UV light hits it. So if I want to, say, ensure that an item stays in the center of the circle, I can hold it in place with the tip of a pin, turn on the light and by the time I remove the pin it’s not going anywhere. Woot!

Assembly!

OK, at this point I had four circles filled with resin, each with eye pins ready for connecting. Simple earring hooks and open jump rings were cheap and easy to work with (thanks again to my magnifier, would have taken me forever without that).

I’m pretty pleased with the end result. My brother’s kids are coming to the beach in a few weeks and I’ll definitely use the same techniques with them — maybe for a backpack or luggage charm. Or add some seaglass and it’d make a beautiful mobile. Too many fun projects!

Interaction at the Edges

There’s a rule of multithreaded programming that says that if something can happen, it will. Package delivered at the same time the kitchen catches on fire and ALF is on live TV? For sure. I’ve been in countless debugging sessions where things that “can’t” happen absolutely, 100% happen.

Users are clever

Users are the same way. They may not all be tech savvy, but they’re incredibly creative. As with most things in my career, I first really learned this in the early 90s on the Microsoft Works team.

Works included simple desktop publishing features for making newsletters, invitations, posters, that kind of thing. Our customer service team sent us a case they were stuck on — the app would no longer let a user add content to their newsletter. It was a simple one-page document: header, footer, a few columns of content, maybe an image or two. That’s it. They tried saving a copy and using the new file, but no luck. They really didn’t want to start from scratch (I think they’d inherited the document from their predecessor).

The aha moment finally came when the rep asked the user to describe every action they were taking. Take last month’s article content, drag it off the page, add a new …. wait, what?

It turns out that this user didn’t know how to “delete” content blocks. But they realized that objects outside of the page boundaries on screen didn’t print — so each month they would just drag the old content blocks off the page and add new ones. Genius!

Except of course, the file got bigger and bigger and slower and slower until it just broke. I don’t remember if it was a memory problem, or if there were limits on the number of objects in a file, or what — but either way, a little education on “delete” and the newsletter was back in business.

We never expected users to be confused about deleting things. We never expected them to consider the off-the-page area as part of the real working space. More subtly, we’d never thought much at all about “periodicals” that used the same template time after time. And all of that’s on us — the user just found a creative way to do what they needed to do.

Whose car is it anyway?

A couple of weeks ago we traded in our Tesla Model X for a Rivian R1S. If you know me you know how conflicted and sad I am about Elon (see here, here and here), but that’s a story for another day. We’ll take the Rivian on its first Cali road trip soon, and I’ll write up a comparison then. Stay tuned.

Before we traded in the Tesla, I logged us out of all the various accounts that we’d set up on the vehicle. At the Rivian service center we signed over the title, handed them the key fobs, and waved goodbye to “Miss Scarlet” as we drove our new car home. Done and dusted!

Later that day I got a phone notification that the Tesla doors were unlocked. When I opened the app it turned out that I was still fully in control of the car. Huh. I honked the horn a few times for fun and then moved on with my afternoon.

Now this isn’t really all that surprising — of course Tesla didn’t know we’d sold the car; that’s not how it “works” in the industry. But it’s an interesting edge case, and one I thought about frequently over the course of the next week as Miss Scarlet made its way through the resale process. I didn’t snap pictures of the car sitting at the Bellevue service center, but once it moved down to Kent I thought it’d be fun to keep a record.

First stop, Manheim Seattle Auto Auction. The Manheim facility is pretty huge; the car started in the middle of a huge lot, then next to a little outbuilding. It then appeared to move into a garage — probably for detailing — before bouncing from spot to spot in the lot again.

After a few days I got a navigation alert and found the car driving on its merry way to Worldwide Auto Group in Auburn. Two days later another alert and it was en route to a private home in Tacoma. I’ve masked out the address on that one because I’m assuming it’s an actual person who bought the car.

FINALLY, after eight days, a notification popped up on Lara’s phone that Worldwide was asking to take “ownership” of the Tesla — we agreed and and off she went into the sunset, leaving the Ventura Powerwall as the only Tesla product in our world.

What to make of this? Certainly I wasn’t “intended” to retain control of the car after I no longer owned it — but did it really matter? I think so — during this period I could see exactly where the car was, lock and unlock it, remote start, summon it if I was anywhere near by, and quite a bit more. It seems like bad guys have managed some pretty nasty stuff given a lot less access.

It’s always the edges

As someone who built their career around the craft of software engineering, it’s tough to get old and watch crappy AI and copy/paste code take over more and more of the world. Don’t get me wrong, it’s happening because mostly it does the job, and usually cheaper. But that doesn’t mean I need to like it.

Still, at least for now, the game is still on. Designing for the unexpected and the edges and future still matters, and those aren’t, so far, things the machines do well. Sometimes it’s an issue of technology and errors and such; more often it’s about user interaction. Don’t write us off quite yet!

Pump and Dump Management

I’ve never been shy about my disdain for management “theory” — because let’s be honest, it’s not really that complicated. Have a plan, reduce complexity, take punches for your team, chip in. I’m not saying it’s easy, but the right move is usually pretty obvious. MBA strategies are just cover for folks that don’t want to do the hard work.

But sometimes they’re worse than just passive noise — they’re evil. Of course, disciples of evil strategies don’t call them that. But they’re pervasive and, for some folks, undeniably personally effective. After writing about memecoins the other day, it occurred to me that the worst of these could best be called “pump and dump management.”

Pump and dump managers are usually (but not always) hired from the outside. They parachute in with a lot of sound and fury, often show positive results in the short term by destroying long term value, and get out of Dodge while the getting’s good. Off to their next adventure, they ride these “successes” while avoiding blame for the true impact of their actions. It. Is. Infuriating.

Please, make sure you don’t hire these folks. But if it happens, send them on their way as quickly as possible — and pay your learning forward by warning that next hiring manager looking for a reference! Some key things to watch for:

The last guy sucked

PDMs love to talk about how bad everything is — and how lucky you are they’re around to fix it. Monoliths should be microservices; or perhaps microservices should be monoliths. Misaligned vendors need to be replaced with FTEs; or perhaps FTEs should be let go for more nimble vendors.

If schedules slip, it’s because they’re still “cleaning up” after their crappy predecessor. They probably need to swap out existing managers for folks they’ve worked with before. Things that somehow have supported the business for years need to be re-written from scratch. Sometimes they’ll dress all this up with false praise, like “it was probably ok back when the company didn’t have many customers.”

The best part of this dynamic is that it never ends. Nothing is ever the PDM’s fault; everything can always be traced back to sins of the “before” times.

Metric manipulation

Two things are true: (1) every good business runs on metrics, and (2) every metric can be gamed. It’s easy to increase sales if you start selling everything at a loss. Recruiting numbers can always be met by hiring underqualified people. Q1 costs look great if you stiff your vendors until Q2.

PDMs use their teams as personal labor — work harder, work longer, for ME. They claim personal credit for success, passing failure up the chain as if they had nothing to do with it. They flatter their bosses and never say no — even when it hurts their teams.

Honest leaders understand this, and use metrics to guide behavior with constant fine-tuning, interpretation and improvement. PDMs hit metrics at any cost — even at the expense of the company’s real goals. Slash and burn.

Punch down, kiss up

The best PDMs are master manipulators. By bottlenecking all communication through themselves they control the narrative, playing the savior while throwing all sides under the bus.

This always collapses eventually — but of course, a savvy PDM sees it coming and jumps to their next opportunity before they’re exposed.

Destroy relationships

Productive relationships require give and take. Trust and respect develop over time, as each side proves to the other that they’re committed to win-win exchanges. One party may get a bit more in one trade, knowing it’ll balance out in the next.

But PDMs don’t care about relationships, only transactions. And they typically have exactly one negotiating style: bully the other guy, spend positive capital created by others and call it “the art of the deal.”

  1. Make an outrageous first offer, so extreme that it knocks the other party off balance. Threaten and bully and generally be an unpredictable a**hole.
  2. Act like you’re doing them a favor by reducing your demand a bit.
  3. Declare victory.

The thing is, this often works — once. Or maybe even twice depending on the relationship. So it’s great for the PDM, who signs a few “great” deals and jumps ship for the next opportunity before the destruction catches up with them. The companies they leave behind pay the price.

I’ve been lucky through most of my career; only a few times was I on the receiving end of a PDM. But those times were the worst (friends, IYKYK). And now there’s a PDM in charge of my country. Blaming his predecessors, destroying long-won relationships, pointing fingers at everyone but himself, jumping from issue to issue so he never pays the price of failure. Truth is, he’s really good at it — and we’re left holding the bag.

Endnote: I get that the “evil boss” images I’ve scattered about here don’t really represent the specific PDM phenotype — they’re bad in all kinds of different ways. But we see suffer with enough photos of the master PDM every day, and I’m not about to add to that sorry display. So just enjoy some great movie memories … maybe a rewatch is in order!

How the $TRUMP scam works

So much corruption sails through American headlines these days, it’s become hard to pay appropriate attention to any one outrage. And of course that’s the point — shock and awe until it’s completely normalized and we just let it go. So in the spirit of not letting it go, let’s talk about one example that I actually can speak to in some detail: the $TRUMP memecoin.

You’ve probably heard about it in the news. Just before taking office in January, Trump owned and affiliated companies (basically the same folks selling his shoes and bibles and other shlock) launched a crypto “coin” branded $TRUMP and promoted by the jacka** himself. Its value quickly soared before steadily dropping to the $14 or so it is today, still with a market cap in the billions.

So just what is a crypto “memecoin” anyway, and why did he bother? The TLDR is at the end — but hopefully you’ll find the longer story illuminating too. Let’s dig in.

Tokens and “Coins”

Crypto “coins” are just crypto tokens, so we have to start there. If you want to go even deeper, I’ve written about crypto and blockchain stuff more generally; see here, here and here.

It’s useful to start by thinking about tokens like baseball cards. At the beginning of the season, Topps (or Fleer or whoever) prints up a bunch of cards that make up the “supply.” The cards themselves don’t have any intrinsic value, they’re just cardboard. People can buy the cards from Topps, they can trade or sell them to other individuals, and the price goes up or down based on how much people want them. Easy peasy.

In this case it’s better to think about it as if every card in the supply was just Cal Raleigh — so it doesn’t matter which specific physical card you have, they’re all exactly the same. That’s the difference between “fungible” (every instance is the same) and “non-fungible” (every instance is unique) tokens.

Fungible tokens are everything in the world of crypto finance. One of the most popular platforms on which to deploy them these days is Solana, which in all the ways that matter is the same as the OG Ethereum I’ve talked about before. Solana includes a core “program” that makes it super-easy for anyone to define a token and “mint” instances of it, with no need to write their own code.

$TRUMP is one of these. Trump’s merch companies used the Solana Token Program to define a token/coin with one billion instances (the supply). No intrinsic value, just data they made up on the Solana blockchain. Anybody holding $TRUMP tokens can interact with the program to move them into other wallets in return for a small transaction fee that goes to the Solana stakers (not the Trump organizations yet, stay tuned).

The Meme in Memecoin

Tokens are actually a pretty neat little tool. They can help broker access to limited resources, track rights in voting organizations, be used as currency in virtual (or physical worlds), and a ton more. The “memecoin” use case, however — at best it’s a toy, and honestly it’s just a scam.

Memecoins” don’t have a use, value or other reason to exist beyond amplifying some trend or capturing news cycles. Except they’re really good for stealing money from people, as in the uniquely American coin $HAWK promoted by the “Hawk Tuah” girl. Minters use viral techniques to con people into “pumping up” the value of their memecoin, “dump” their own holdings at a profit, and leave everybody else holding the bag.

What could be a more appropriate vehicle for the President of the United States to score some quick cash? To wit: 58 wallets have made millions from $TRUMP, 764,000 have lost money.

Trading Liquidity and Fees

But the grift goes way deeper than that. Sure, by holding 80% of the coins, even at $14 a pop they’ve “created” staggering wealth on paper. But there’s a great side game here too — liquidity fees.

Remember we said that anybody who holds a token can give it to somebody else by paying a small fee to the Solana stakers (the same fee that any transaction incurs). But that’s not the way markets typically work — I don’t go hunting for somebody holding Microsoft shares and ask to buy from them directly. Instead, “market makers” sit between buyers and sellers and grease the wheels. This basically happens in two ways (simplifying for my own sanity):

Centralized Exchanges (e.g. Coinbase)

Sites like Coinbase are “custodial” exchanges, meaning that they abstract away all of the crypto/blockchain complexity by holding users’ tokens for them in one big centralized pot.

The exchange then keeps a trading “order book” — lists of users that want to buy or sell tokens. The book matches up these users to fulfill orders automatically, floating the price up or down as demand indicates. No tokens actually move on the blockchain as part of these trades; it all stays in the Coinbase pot and they just remember who owns what.

Of course this relies on trust in the exchange, which isn’t always well-founded. Still, as crypto becomes ever more mainstream (for better or worse), exchanges are incented to behave conservatively.

Exchanges only do this for tokens with significant demand — most memecoins don’t make the cut. $TRUMP is an exception because of its “unique” brand advantage.

Decentralized Liquidity Pools (e.g., Raydium)

Here’s where things get more interesting. Centralized Exchanges are increasingly regulated and require users to prove their identity, report to the IRS, and so on. This is fine for most people most of the time, but can be unattractive to folks that want to trade anonymously (or more generously, without placing trust in a custodial exchange).

These users can instead trade via a “Decentralized Exchange” (DEX) like Raydium that uses “liquidity pools” and its own order book to facilitate exchange.

Any user can create a liquidity pool on Raydium by registering equivalent dollar values of two tokens into an account there. For example, I might create a pool that has $1,000 each of $TRUMP and USDT. Right now that’d be about 71 $TRUMP ($1,000 / $14) and 1,000 USDT tokens.

My pool is now available to the Raydium order book to fulfill orders. This gets a bit complicated, but bear with me. If somebody wants to buy 10 $TRUMP tokens from my pool, the system computes a price that will keep the product of the token count (71,000) constant:

  • Initial pool: 71 * 1000 = 71,000
  • Extracting 10 $TRUMP: (71 – 10) * (1000 + y) = 71,000
  • y in this case equals about 164 USDT, or $16.40 / $TRUMP

The platform adds a fee of around 0.3% to that $164, makes the trade on the blockchain, and shares a portion of the fee back to the owner of the liquidity pool (me). In short, I’m using my personal holdings to create market liquidity, and I get paid for it. Cool!

A side note: while Raydium isn’t a custodian of tokens in the same sense as Coinbase, in any real sense they are acting as one. When you commit your tokens to a liquidity pool, Raydium’s smart contract can move them at will. So there’s still trust involved — just a different kind.

Now remember that the Trump companies still hold about 80% of all $TRUMP tokens. They’ve used 10% of their holdings to create liquidity pools largely on the Meteora platform (equivalent to Raydium). And since they are such a disproportionate holder, their pools are party to many, many DEX transactions. Again, to wit: Trump’s meme coin business racks up fees as buyers jump at the chance for access to the president. Crypto data company Chainalysis estimates $320 million. Yikes.

“Buy my coin, meet me for dinner!”

OK, so we’ve established that the President is using the power of the United States to shake down naïve users for millions. But of course there’s no bottom for these people, so they’ve upped the ante even more.

A couple of weeks ago, the Trump companies announced that the top 220 holders of $TRUMP would be invited to a private dinner with the president at his club in DC. The top 25 will have a private reception with the jacka**. And of course, since that announcement the price of the coin has gone up significantly as people vie for access.

Now of course politicians sell access for funds all the time — hey, just last Monday Trump pulled in $1.5M a plate despite the fact that he can’t even run again. That’s its own huge problem of course, but at least there are some rules around disclosure and how the funds are supposed to be used.

Not so for the $TRUMP contest. The increased value and transaction fees that result from people vying for access here go directly to Trump’s companies and to Trump personally. It is the most obvious, blatant, unbelievable act of corruption one could imagine.

And remember how DEX-based transactions are completely anonymous? I wonder who is currently pumping up the value of $TRUMP so they can show up to dinner? Shockingly: Top $TRUMP buyers vying for dinner seats are likely foreign.

“Corruption Three Ways”

The mechanics are fascinating; unwinding it all is a game I typically enjoy. But the actuality of what is happening is just so craven, it ruins the fun:

  1. Trump is using his office to inflate the value of a meaningless asset for his own benefit.
  2. Trump is also profiting from fees incurred on almost every trade of the asset.
  3. Trump is openly advertising untraceable access in return for dollars.

We are so screwed.

Admiration

When I was little my idols were mostly Red Sox players: Rice, Yaz, Boomer, Butch. Thankfully back then there was very little “off the field” news coverage, so in large part my heroes remained intact. But grownup Sean knows that was just a fantasy — they were just people, with their own balance sheets of good and bad, strong and weak, kind and cruel.

Back then we had the luxury of imagining that our role models were perfect in every way. Today, nobody survives the spotlight of social media unscathed very long. An impatient glance at a fan or an inappropriate joke after a few drinks, and boom.

It can be a bummer, but it also forces us all — even kids — to be a bit more judicious (and realistic) with our esteem. I’ve been thinking about this a lot lately, and perhaps the key is to be explicit about the specific actions or behaviors we admire. Kindness and empathy in Fred Rogers, creativity in Jim Henson, bravery in John Young and Jim Lovell. The things that persist even when the humans that model them disappoint us in other ways, as they inevitably do.

This seems important, because the only other way to reconcile the state of our modern world is to go full cynic — everybody sucks, so why try to be good at all? Morals and empathy are for suckers. Frankly that’s increasingly what I see in the public sphere, and it’s just too ugly for me to accept.

So here in my little corner of the world, I present a random three of the many folks that, despite their very obviously flawed human selves, exhibit(ed) qualities that I admire and try to model in my life.

Put Yourself Out There
(John Denver)

I typically get up before the rest of the house, and at least once a week the morning playlist is all JD, preferably recorded live (“so if you sing, sing good, and I’ll try to do the same!”). I’m not much of a concert-goer, but I saw him twice and each time was simply remarkable. He so obviously loved being on stage, drawing everyone into the experience like they were just hanging out. And the percussion set, my goodness… but I digress.

So the music is great — but what I admired was Denver’s ability to stand up on that stage and share his own, raw, internal, personal feelings and fears and loves. Often ridiculed for being cheesy, he really was John Lennon’s Imagine in human form.

  • It was the winter of my 27th year, not the summer, but Rocky Mountain High played on repeat in my son’s NICU cocoon until he came home.
  • I challenge you to hear Calypso and not go hunting for Cousteau shows on YouTube.
  • My daughter and I spun in countless giggling circles to Grandma’s Feather Bed.
  • Flying for Me plays at home every January 28th and February 1.
  • Listen to the live intro to This Old Guitar; he’s just begging to be shoved in a locker.
  • And dozens, dozens more that leave me teary and pretending it’s allergies.

John Denver used his gifts to talk to the world about important things big (wilderness and animal preservation, nuclear weapons, world hunger) and small (falling in and out of love, missing home, being lonely, having a child). I’m not by nature a guy who can be so open and vulnerable … but I try.

Be Curious and Build Things
(Buckminster Fuller)

Guinea Pig B” kept a detailed record (the Dymaxion Chronofile) of his entire life, an ongoing experiment that began when he decided that his planned suicide was a cop-out. Instead, he decided to take advantage of his time to leave something for the world and find ways to make it “work for 100% of humanity.” Seriously.

Image credit Justin Kunimune, Wikipedia

Bucky was one of the first and loudest people to challenge the idea that we live in a world of scarcity. Scarcity is literally written in our DNA, so it’s a hard concept to think around — but the truth is, we have more than enough energy, food, water, and shelter for everyone on the planet; we just don’t distribute it with that goal in mind. World Game and the Dymaxion Map (projected so all landmasses are shown in true proportion) were attempts to help people see beyond nations and politics — Quixotic perhaps, but not wrong either. Someday.

The Dymaxion House envisioned shelter for everyone. Shipped as a kit weighing just 3,000 pounds, the house hung from a central mast (tension or “tensegrity” was a hallmark of his building approach) and could be assembled without specialized knowledge and no heavy equipment. The roof elements were built on the ground, then hauled up the mast. The next level was added and hoisted, and so on until the full house was constructed. The only foundation was for the central mast, so it was earthquake proof. The materials needed no painting. Air flowed naturally down through floor vents that also served as air filters. Bathroom fixtures were made of pressed sheet metal with no sharp corners, so they could be easily sanitized with a sponge. The thing was amazing (I got to see the last one made in the Henry Ford museum in Detroit).

And so so many other cool things. He was the ultimate generalist, but not a theorist — he actually built the things he thought up, working through materials and packaging and fabrication and maintenance in the real world. I would so love to have been able to invent with him.

Details Matter
(Walt Disney)

When we were in Disneyland for my son’s 4th birthday, he wanted to meet Minnie at her house. When we finally made it to the front of the line and he told her it was his birthday, she pantomimed that she wanted him to meet somebody and was that ok? He said yes, she took him by the hand, and they walked straight across the street to Mickey’s house so they could wish him a happy birthday together. To this day I still don’t quite understand how they managed the logistics of this — that line was long with tons of people waiting! Maybe it was a clever way to shift change? But whatever it was was, simply, magic.

My daughter was dangerously allergic to dairy proteins, so eating out was always a challenge (remember this was the 90s). Her choices were often limited — but never at Disney. At every restaurant, the chef would come out to our table to understand her restrictions and make versions of the same dishes everyone else got to try, just safe for her. Everywhere. Inclusion matters.

And of course the fun facts you’ve probably heard before: the way music and smells blend as you walk from land to land; forced perspective; secret tunnels to quickly swap out characters; every cast member picking up trash; hidden mickeys; the monorail to keep you “in world” between the park and hotels.

The idea seems so simple in retrospect: a place not just for kids, not just for adults, but for everyone. But it’s the details that made it work, and they’re not easy to get right when time is money (and money is money). Sure it was “fake” — but who cares? Disney built the most amazing, immersive, enchanting getaway in history.

Sadly, it’s lost some of that magic these days — you can only get so big and so corporate before corners start being cut, I guess. But my family was lucky to grow up there when it was brilliant.

Details matter so much. I try to remember this whenever I’m turning a bowl and am tired of sanding the inside that nobody will see — or handling exceptions in software that probably will never happen.

So many lessons from so many good — not perfect — people in our world. Nice to think about at a time when the public sphere seems so full of our worst. Until next time.

I read a longevity book

The “longevity” industry really rubs me the wrong way — mostly a bunch of rich white guys clinging desperately to their 30s with marathons and trophy wives and Rogaine. But a friend I respect recently started building tech for a “longevity” venture and told me I had to read this book, so I did. And while I’m no convert, Attia is clearly a smart guy who makes a credible case.

His fundamental goal is to increase “healthspan,” which starts with being alive longer, but more importantly is about living your final years better and stronger — avoiding or reducing the risk of “slow death” conditions like diabetes, Alzheimer’s, cancer, and cardiovascular disease. His approach in a nutshell looks like this:

  1. Measure the crap out of yourself, early and deeply and often. Be data-driven and address issues even if they aren’t (yet) presenting clinically.
  2. Mostly do what we all know we should: eat well, exercise a ton, get enough sleep and take care of your mental health.
  3. Don’t shy away from drugs if #2 doesn’t get you there.
  4. Start all of this really early, like in your 20s (or at least “now”).

In short he’s an advocate of preventative vs. reactive medicine — and I certainly have no argument with that. For example, my LDL of 98 is “optimal” by standard ranges but Attia suggests it should be more like 30 — yeesh! A reasonable number is probably somewhere in between, but clearly I’m nudging the upper end of “OK” and that’s worth a bit of attention now vs. later when it’s worse.

Still, it’s hard for me to imagine spending hours every day of my life hyper-optimizing for the end of it. But that’s obviously not how Attia thinks about it, and many of his recommendations pay dividends in the immediate term as well. So I’m keeping an open mind and trying to keep my middle-aged self on the right path with some exercise and a reasonable diet and all of that. Check back when I’m seventy and we’ll see if I’m still so cavalier. 😉

YouTube, the Ultimate Dad Machine

The Internet looked very different back in the early 1990s. Unless you were in school or the military, very little of it was truly “online.” A few times each day, the NeXTstation Turbo Color in my home office would dial out to Northwest Nexus (still kicking as “NuOz”) and establish a UUCP link.

My email address at the time was mickey@fantasy.wa.com, but this was a shortcut for my real address: uunet!nwnexus!fantasy!mickey.  If you read this backwards, you see the path that messages would take to find me:

  • uunet, an enormous commercial ISP that had live connections to the academic and military Internet.
  • nwnexus, our local provider, which would “store and forward” messages for us.
  • fantasy, my beautiful, wonderful, favorite-ever NeXTstation.
  • mickey,  my personal username (you’ll be shocked to learn that Lara was minnie).

The UUCP connection had four jobs:

  1. Download new email for fantasy users.
  2. Upload any email we’d sent off-machine, e.g., to my dad using MCI Mail.
  3. Download any new Usenet posts in groups we’d configured (definitely not alt.sex).
  4. Upload any new Usenet posts we’d written, which would send them on their way to the rest of the world.

Email was basically what it is today of course, but Usenet was everything else: Facebook, Reddit, WordPress, Instagram, RedNote, Substack — if it was group-focused content, it was on Usenet. Lara still talks to folks she first met through alt.parenting.attachment and rec.crafts.quilting (or maybe rec.crafts.textiles.quilting, I don’t remember for sure).

While Usenet had been a part of our lives since college, there was a singular moment sometime around 1993 when I realized just how truly powerful and global this “network” stuff really was.

I had inherited an old TRS-80 Model 100 from my Dad — one of the first laptops and allegedly the last computer that BillG actually wrote code for. It’s a really neat little machine, and the simplicity of its design makes it a wonderful platform for exploration, like an 80-era Flipper Zero.

Anyways, the Model 100’s built-in BASIC has some useful machine-language functions, but to really write native code you need an assembler, and in particular I wanted a cross-assembler, so I could write code on my NeXT and then download it to the 100. Finding a cross-assembler for a long-discontinued and obsolete piece of hardware is most definitely a needle/haystack kind of thing — generously a couple of hundred people worldwide might care.

Enter Usenet; specifically comp.sys.tandy. My plea went out to NWNexus, then UUNET, then all over the world — and in a story clearly too good to be true, some guy I’d never met in rural Sweden had exactly what I needed. He sent it my way less than one day later (one day!) and I was good to go.

There are lots of anecdotes like this. But what just walloped me over the head was the combination of speed, cost, obscurity and generosity. I was able to send a message of clearly no importance, basically for free, across the entire world, in minutes — and of the billions of people on the planet, the one who happened to be in my exact situation heard the ask and was happy to help me out. That is just insane. INSANE.

The Dad Machine

One of the quintessential “dad jobs” I believe in is to know, most of the time, how everyday stuff works, and how to fix it. Righty-tighty-lefty-loosey; the difference between a fuse and a circuit breaker and a GFCI; unclogging toilets; cleaning gutters; putting air into tires; sanding or salting the driveway; getting a cashier’s check; turning off the gas; holding the mail; finding somebody to pump the septic; boiling an egg; hanging pictures; what type of glue to use … you get the idea.

Lara and I share “dad” duties with our kids and each other — our skills are pretty complementary and between us we cover things pretty OK. But man, things are WAY more complicated than they used to be and there is far, far too much out there for anybody to just “know” even a fraction of it.

However, while there is a ton of bad — maybe apocalyptically bad — caused by social media and the Internet in general, nothing has revolutionized this aspect of being a Dad like YouTube videos. It is almost inconceivable just how much solid, positive, useful content there is hiding behind that “skip ad” button.

YouTube can teach you to do anything. It’s that Usenet guy in Sweden, on steroids, for the 21st century. I re-prove this to myself almost every day.

Example #1: West Country Whipping

My folks recently moved into a place in Colorado. It’s a great place for walking and hiking, with the neighborhoods of Boulder on one side and trails around Mount Sanitas on the other. But their walking sticks are still back in Maine, so I thought I’d make them a couple of new ones using Whidbey driftwood.

For the handles, I wanted to do a wrap with suede strips (actually fake suede like this) — it’s a nice, soft material that looks cool and doesn’t slip. But I didn’t have a clue how to do a wrap that would actually stay on without a ton of messy glue. Enter “West Country Whipping,” which (if I do say so myself) turned out beautifully:

Example #2: The Oven Door Won’t Close

The oven at our place on Whidbey is ancient and, well, pretty much garbage. The temp is off by a sometimes-consistent 25 degrees and the upper half gets way hotter than the lower half. But it is “there” and it still gets hot, so there are plenty of other things to replace first.

Except a few years ago, the door stopped closing all the way, making it impossible to keep an even temperature (not to mention being super-wasteful). Before deciding on a full replacement, I went to my old friend YouTube. And of course, there are step-by-step, detailed videos that both explain what was going on (weak door hinges) and how to fix it. With a bit of model-number searching I found the right parts on Amazon and boom — the oven and I were able to return to our unhappy but stable relationship.

Example #3: Johnny Appleseed

A few years ago my daughter gifted me two apple trees for our front yard. They are wonderful and last Spring I thought they’d grown enough to remove their stabilizing poles. Of course a big windstorm came up and broke off one of the trees, right at the graft point. Bummer.

Our neighbor’s grandson is a great kid; he loves gardening and compost and recycling and the dump. When he saw my tree had gone down, he came over with a seed from a Cosmic Crisp apple he’d been eating earlier so I could replace it. What a neat guy.

I hadn’t a clue if it was even possible to do this — so hello YouTube. It turns out that if you put apple seeds in a wet paper towel in a ziplock in the fridge, it will encourage them to germinate. Success is usually about 50%, but a couple of months later my little seed had sprouted and now nine months on it’s a real live little plant spending the winter in my greenhouse.

To be clear, a tree grown like this may not (probably won’t) produce great apples — but who cares, it’s a living thing created from snacktime leftovers! As my wife says — DIRECTIVE.

Example #4: The Key is Stuck in the Subaru

I love me a Subaru. The AWD is fantastic, and even with pretty lax maintenance they seem to keep running forever. I’ve bought and recommended them many times and taught both of my kids to drive in one. I’m just not sure which of the five Subaru demographics I belong to (outdoor; medical; engineer; teacher; lesbian).

A couple of weeks ago though, I parked my current 2016 Impreza Sport and the key wouldn’t come out of the ignition. I’ve had that happen in a few cars when the steering column locks up, but that wasn’t it. Eventually by starting and stopping the car a few times and moving it into and out of Park it released, but it was pretty annoying.

This behavior accelerated over the next few days until I became pretty concerned that at some point I wouldn’t be able to get the key out at all. A quick Internet search told me that this was a pretty common problem, that there’s a “sensor” that needs to be replaced, and that the dealer could do it for probably about $600.

But come on, this car is ratty and old and I kind of want a pickup anyways (OK I really want a Subaru BRAT, but good luck finding one in fair shape at a fair price). Is it really worth the hassle and cost of repair? Maybe I just drive the car to a dealer and trade it in and move on.

One last look at YouTube saved me again — it turns out that the switch in question is just a little metal tab that contacts the gear shift when it’s in Park. Over time the tab gets bent down and becomes unreliable. But if you know where the magic Phillips screw is, you can remove it, the center console, the coin tray and the gear shift knob to expose the tab. Bend it back a few millimeters and Bob’s Your Uncle — thank you Kurt!

We Can’t Lose This

The funny thing is, I’m not even a “video” guy. My favorite literary format is “bulleted list” and I find most videos, podcasts and non-fiction books to be infuriatingly full of wasted time and repetitive fluff. But for these knowledge transfers, being able to actually see how the parts go together, how the tools work, how much force should be required, etc. — it’s just invaluable.

I don’t know what’s going to happen over the next twenty years. It frankly doesn’t look great and I worry about our collective future. But one thing I am certain of is that this worldwide, grass roots, incredibly deep repository of knowledge needs to live on. Never ever ever has so much power been in the hands of individual people. My examples are trivial, but — Learn to blacksmith? Create a memecoin? Run for Congress? Defend the persecuted? Build a rocket or root cellar or treehouse or cooperative farm? It’s all there.

A lot to figure out — but for now, be a great Dad and learn with your kids. You don’t even have to tell them you found it on YouTube. Until next time!

Complex is just lots of Simple (Part 2)

This is the second in a two-part series; part one is here.

This has been a tough piece to finish — not because of the subject itself, which is super-fun, but because I keep getting distracted by unexpected behavior I want to understand. At nearly every turn, there’s something neat to see in this little world of evolving 2D cellular automata we’ve created. So bear with me as I try to boil down a lot of wandering into a few key points. There will be pictures!

Vertical Stripes and Hyperparameters

And the end of part one we taught our organisms to “black out” the grid — a simple task that could be optimally achieved with a single rule — and they did great. For the next few rounds I’ve made the goal a bit more difficult: turn the grid into a set of vertical one-pixel stripes, alternating black and white.

Our first fitness calculation for this is pretty straightforward: the first stripe can be either black or white, and the total number of correct pixels is divided by total pixels to get a fraction. Using a Von Neumann neighborhood and conservative parameters, the outcome was … horrible. Over three runs (details here, here and here):

Green is the best performance, red the worst and blue the average. A few pops but results regressed to 0.5 on every run — which is effectively a random grid (one out of every two pixels correct).

My first thought was, perhaps we’re just not getting enough variation. So let’s start tweaking the hyperparameters, i.e., the values that drive evolution. Mutation rate is an easy one, so we’ll increase that from 0-5% to 5-10% on each reproduction. Three more runs (here, here and here):

No love. Our changes did make a difference — there are more “pops” as we find potentially good solutions, but they don’t last and we regress again back to 0.5. But why? My next theory was that perhaps good solutions were being lost because they weren’t consistent. That is, a “random” rule is likely to get around 0.5 every time. But a rule that produces perfect stripes most of the time may perform terribly once in awhile. This corresponds nicely with real life — we don’t (usually) kick a decades-long good performer to the curb for a single failure.

To account for this I added a hyperparameter LastFitnessWeight, which attributes some fraction of fitness from the last iteration to the current one — the idea being that a success yesterday will lift your score today even if it’s an off day. Setting this to 25% gave these results (here, here and here):

Sad trombone noise. This is getting annoying — maybe the middle one showed some increased consistency, but really that’s just wishful thinking.

What we’re seeing here is one of the first rules (and a bit of a dirty secret) of digital evolution, and machine learning in general — hyperparameters don’t matter nearly as much as it seems like they should. With the right features and feedback you almost can’t help but succeed — and without them you’re usually hosed.

Fitness matters

Our fitness metric seems to make perfect sense — we know what each pixel should be, so the more pixels that are “correct,” the closer we are to a solution. But it turns out that that’s not quite right. Let’s look more closely at the history of one organism that did really well and then imploded:

This organism is the offspring of two parents that were basically generating random fields. About half of their pixels were correct, giving them fitness around 0.5 (see the blue highlights). For some reason this match created a really capable organism that for its first two generations delivered absolutely perfect (yellow highlight) scores — amazing!

But look what happened in the third generation (green highlight). It’s visually obvious that this is still a pretty good result, but because of the column skip on the left side (the double-wide white bar), all the pixels to the right were incorrect, so this promising organism was killed off (even with the history-preserving hyperparameter).

Tyranny of the mediocre

The end result of this dynamic is that over time the “interesting” organisms get squeezed out by mediocre but consistent ones (in particular all-white and all-black). This page details the final cycle of one such run: short-lived mostly random organisms at the top, newly-born random ones at the bottom, and a huge swath of 0.5 fitness blanks in the middle.

We can address this in two ways — both are pretty effective. The first is to simply use a better fitness metric. VStripesCombo combines two measures for a more balanced assessment:

  1. Stripey-ness” assesses the average length of a correct vertical stripe.
  2. Even-ness” rewards an even split between black and white pixels.

With this new metric, a solid block has fitness 0.25 (.5 for stripey-ness, 0 for even-ness), “interesting” organisms have a chance to succeed, and stripes emerge quickly. Finally, some success (here, here and here):

Another approach is to be more picky about who gets to reproduce. Our initial implementation kills off the bottom third of the population with each cycle, allowing the top two-thirds to reproduce. Since two-thirds includes that middle belt of consistent mediocrity, it can persist and grow.

Instead we can kill off the bottom half of the population, and allow each organism in the top half to mate twice. Just as with biological siblings, each mating crosses over and mutates differently, providing more chances for the strengths of the parents to compound.

As it turns out, this mode of reproduction also wins the day (here, here and here):

Strategies and weaknesses

The hallmark of evolved learning is solutions that our conscious, logical minds would never think of and often can’t really comprehend even after the fact. It’s frankly a little spooky. To wit, watch this organism solve the vertical stripes problem from random, along with the rules it employs. WTF man? (I have to say I do love the back and forth “wiggle” once it hits a final solution.)

All of these organisms were trained from a random starting grid. Running a few of them (all winners during training) from a single black pixel in the middle highlights two things: (1) their strategies are wildly divergent; (2) sometimes a strategy that tends to work in one case is an utter fail with a different starting configuration (last two examples below):

That second point can’t be overstated: you get what you train for — and we didn’t train for a single pixel initial state. Environment, fitness, reproduction rules, they all are critically important to the final product. This is going to come up again and again in the emerging world of AI. LLMs hallucinate because they have been rewarded for answering questions, not for saying they don’t know. We’d better get really, really good at this if we’re going to make it as a species (some more thoughts on that here).

You only know what you know

OK, enough with the stripes. For our next trick, let’s try to learn how to draw a frame around the edges of the grid — all white except for a one pixel rim around the edge. Seems pretty simple! Results are here, here and here:

Doh. It’s not even that it just doesn’t learn well — it doesn’t seem to learn at all. No matter what we do or how we define things, we can’t crack this nut. Why?

The answer is simple but important: there is simply zero information in the system about what an “edge” even is. Remember that the neighborhood computations “wrap” around so the grid appears to be an infinite plane. The edges are obvious to us when we draw the grid, but completely invisible to the organisms living inside it.

And you can’t “learn” something that you can’t perceive — it’s impossible, like asking a completely blind person to raise their hand when the lights come on. You can be mad about it, but it is what it is. This is surprisingly easy to forget, because evolved organisms are so good and finding subtle and non-obvious patterns, we just assume they’re omniscient. Nope.

OK, so let’s add an “edge” sense to our organisms by defining a new “relative” type in the Neighborhood class. When we include this new sense in our neighborhood, magic happens (here):

It’s a simple example, and perhaps not that shocking — by providing the boolean “edge” value, we enable the organism to effectively keep two sets of rules: one for the edges (turn them black) and one for everything else (turn them white).

But still, it’s cool. Just for fun, here’s a slightly less obvious example. By adding senses for which half of the grid a point is in (North/South, East/West), we can easily learn rules that expect different content in each quadrant (details here):

OK, that’s enough of a random walk for now. I could do this stuff forever, and each new lesson really does say something about evolution and learning in the real world. I hope I’ve put in enough eye candy to keep you entertained along the way, but even if I didn’t — it was good for me.

Wait just one more! I’ve been trying to teach some organisms how to split the grid diagonally, which proves to be a tough challenge. My best run so far is 5,000 cycles to get to a pretty consistent 0.95 fitness … but it don’t look great, folks. It feels like it has the right idea, but can’t settle into place (e.g., check out the lower-left quadrant here). Any ideas?