jverkamp.comhttps://blog.jverkamp.com/Recent content on jverkamp.comHugoen-usTue, 30 Dec 2025 00:00:00 +0000Doctor Who: 2008 Specialshttps://blog.jverkamp.com/2025/12/30/doctor-who-2008-specials/Tue, 30 Dec 2025 00:00:00 +0000https://blog.jverkamp.com/2025/12/30/doctor-who-2008-specials/<p>The 2008-2010 specials!</p> <p>We have:</p> <h2 id="the-next-doctor">The Next Doctor</h2> <p>Where the Doctor meets&hellip; the Doctor?!</p> <blockquote> <p> Jackson Lake: There she is. My transport through time and space. The TARDIS!<br>  The Doctor: You&rsquo;ve got a balloon.<br>  Jackson Lake: TARDIS. T - A - R - D - I - S. It stands for Tethered Aerial Release Developed in Style! Do you see?<br>  The Doctor: Well, I do now. I like it. Good TARDIS.</p></blockquote> <p>And you know? Dervla Kirwan as Miss Hartigan gets a bit of flack, but if you ignore for a moment the history of the <span class="spoiler">Cybermen</span> , she&rsquo;s quite the fun row. Plus, an absolutely giant robot in old fashioned london down. What&rsquo;s not to love?</p> <h2 id="planet-of-the-dead">Planet of the Dead</h2> <p>The Doctor, sent through a portal to a desert planet, where he has to depend on a temporary companion in jewel thief Lady Christina to get back home.</p> <blockquote> <p>Christina: It&rsquo;s Christina Da Souza. To be precise it&rsquo;s Lady Christina Da Souza.<br> The Doctor: Oh, that&rsquo;s handy because I&rsquo;m a lord.<br> Christina: Seriously, lord of where?<br> The Doctor: It&rsquo;s quite a big estate.</p></blockquote> <p>It&rsquo;s yet another case (Voyage of the Damned was another one) where a companion for a special would have been <em>fascinating</em> to keep around. So it goes though.</p> <h2 id="the-waters-of-mars">The Waters of Mars</h2> <p>Fixed points in time don&rsquo;t <em>really</em> make sense for the Doctor. Especially given how it turns out in the end. But still, a giant marsbase and soggy zombies? What&rsquo;s not to love?</p> <p>And it&rsquo;s yet another one of those episodes that digs just into how broken and&ndash;at some level&ndash;insane the Doctor is, after all those years and triumphs. And failures.</p> <blockquote> <p>Adelaide: But you said we die. For the future. For the human race!<br> The Doctor: Yes, because there are laws. There are laws of time. Once upon a time there were people in charge of those laws but they died. They all died. Do you know who that leaves? <em>Me!</em> It&rsquo;s taken me all these years to realize that the laws of time are <em>mine</em> and they will obey me!</p></blockquote> <p>Quite the set up for&hellip;</p> <h2 id="the-end-of-time-parts-one-and-two">The End of Time (Parts One and Two)</h2> <p>Tennats finale is coming&hellip;</p> <blockquote> <p>The Doctor: Even if I change it still feels like dying. Everything I am dies. Some new man goes sauntering away&hellip; and I&rsquo;m dead.</p></blockquote> <p>But on the way, we have Wilfred Mott as the Doctor&rsquo;s companion? Yes please.</p> <blockquote> <p>The Doctor: I&rsquo;m going to die.<br> Wilfred Mott: Well, so am I one day.<br> The Doctor: Don&rsquo;t you dare!<br> Wilfred Mott: Alright, I&rsquo;ll try not to.</p></blockquote> <p>And add to that, the Master (back from he dead) and perhaps&hellip; something even worse.</p> <p>Oh that&rsquo;s an intense pair of episodes. Even if it&rsquo;s more than a <em>touch</em> overdone at times (as all of ennats finales seem to be).</p> <p>But this time around, we get a victory lap of sorts.</p> <p>And so Ten ends.</p> <blockquote> <p>The Doctor: I don&rsquo;t want to go.</p></blockquote> <p>On to Eleven!</p>Syncing Kobo Annotationshttps://blog.jverkamp.com/2025/12/29/syncing-kobo-annotations/Mon, 29 Dec 2025 00:00:00 +0000https://blog.jverkamp.com/2025/12/29/syncing-kobo-annotations/<p>I&rsquo;ve recently been trying out a <a href="https://www.kobo.com/" target="_blank" rel="noopener">Kobo</a>. Amazon has some issues and Kindles are hard to do any amount of customization to, let&rsquo;s just leave it at that.</p> <p>So what fun tricks can one do with a Kobo?</p> <p>Well, for one, it&rsquo;s a Linux system. And if you attach it to your computer, you get access to a lot of the local filesystem. This includes the SQLite database holding all of teh system metadata, along with places to install all sorts of interesting scripts.</p> <p>One that I&rsquo;ve been wanting in particular is the ability to extract my annotations. It&rsquo;s a great way to <a href="https://blog.jverkamp.com/reviews">review</a> books. Highlight, write a note, and then export right at the end.</p> <p>So how do you do that on a Kobo?</p> <nav id="TableOfContents"> <ul> <li><a href="#starting-point">Starting point</a></li> <li><a href="#via-dropbox">Via Dropbox</a></li> <li><a href="#adding-a-button-on-the-kobo">Adding a button on the Kobo</a></li> <li><a href="#exporting-notes">Exporting notes</a></li> <li><a href="#todo">Todo</a></li> </ul> </nav> <hr>The Riverhttps://blog.jverkamp.com/2025/12/29/the-river/Mon, 29 Dec 2025 00:00:00 +0000https://blog.jverkamp.com/2025/12/29/the-river/<blockquote> <p>Derek shook his head. “Not exactly. Bill and Erik are instructors, but I’m a psychologist. We work with people who may need to survive in bad situations—you know, like downed pilots, astronauts, soldiers. How to live off the land and get out safely.”</p> <p>“What do you want with me?</p> <p>”Derek smiled. “You can probably guess. . . .”</p> <p>Brian shook his head.</p> <p>“Well, to make it short, we want you to do it again.”</p></blockquote> <p>And so it went!</p> <p>That&rsquo;s pretty much the idea. Brian is adjusting well enough, but still dreams of the wilderness. And now he has a chance to go back, so of course he does!</p> <p>This time, with another along (ish), knives instead of a hatchet, and to a different lake.</p> <p>Of course, things have to go wrong&hellip; And this time Brian finds himself needing to make a raft and go down the titular River to get help.</p> <p>It&rsquo;s an interesting enough story, but I feel like there wasn&rsquo;t quite as much there are in <a href="https://blog.jverkamp.com/2025/12/22/hatchet/">Hatchet</a>? I&rsquo;m curious what the rest have in store.</p>DNS/Wireguard Tunnel Weirdness on iOShttps://blog.jverkamp.com/2025/12/28/dns/wireguard-tunnel-weirdness-on-ios/Sun, 28 Dec 2025 00:00:00 +0000https://blog.jverkamp.com/2025/12/28/dns/wireguard-tunnel-weirdness-on-ios/<p>A note so that if anyone ever haves this same bit of weirdness, hopefully they might stumble across this. I had a heck of a time searching for this&hellip;</p> <p>So, I have Wireguard set up on my home server along with various services that are designed to only be accessible locally.</p> <p>If I want to use my home connection/Wireguard from my phone (iOS), this is easy enough to deal with:</p> <p><img src="home.png" alt="My wireguard setup"></p> <p>Everything works just fine.</p> <p>However, I found that this connection was sometimes not working, especially if I was on a cellular connection or switching connections. The connection would just hang until I either switched to the full tunnel or turned it off entirely (and made it home).</p> <p>I tried all manner of switching around the <code>Allowed IPs</code>, adding 10. ranges (for the Wireguard IPs), other private ranges, leaving off specific IPs, all of it.</p> <p>But what did it take in the end?</p> <p><img src="home-minimal.png" alt="My on-demand wireguard setup"></p> <p>Note the difference?</p> <p>I had to tunnel the DNS.</p> <p>I believe that this is an iOS specific security behavior&ndash;I have public DNS addresses that <em>resolve to a private IP range</em>. It works fine for me and won&rsquo;t work for anyone else&ndash;they&rsquo;ll go to whatever their local private network is. But iOS (rightfully) thinks that might be a security hole and wouldn&rsquo;t let the DNS resolve for me&ndash;unless I also tunnelled the DNS server (for now I&rsquo;m using 1.1.1.1 for that; I&rsquo;m hoping to self host that as well some day).</p> <p>So if you have: an on-demand wireguard tunnel on iOS with a limited Allowed IPs range <em>and</em> a custom DNS set up, you may just need to tunnel the DNS.</p> <p>Oy that was a fun one.</p> <p>But it&rsquo;s been working absolutely fine for a month now, so all is well. Onward!</p>Hatchethttps://blog.jverkamp.com/2025/12/22/hatchet/Mon, 22 Dec 2025 00:00:00 +0000https://blog.jverkamp.com/2025/12/22/hatchet/<blockquote> <p>Patience, he thought. So much of this was patience - waiting, and thinking and doing things right. So much of all this, so much of all living was patience and thinking.</p></blockquote> <p>This is a book about patience.</p> <blockquote> <p>He had to keep thinking of them because if he forgot them and did not think of them they might forget about him. And he had to keep hoping.</p></blockquote> <p>And hope.</p> <p>And hunger.</p> <p>And fire.</p> <p>And survival.</p> <p>It&rsquo;s a quick read&ndash;and it&rsquo;s probably been 20 years since I last read it, so I figured I would give it another chance.</p> <p>It&rsquo;s not a bad book. It feels visceral at times, really making you aware of Brian. And knowing that&ndash;because it&rsquo;s that sort of book&ndash;he has to survive at the end, you always have hope. Even if some of those situations are <em>so ridiculous</em>.</p> <p>Worth a read.</p> <p>And now, apparently, there are <em>4</em> sequels? How in the world are they going to do that?</p> <p>Onward!</p>Doctor Who: Season 4https://blog.jverkamp.com/2025/12/21/doctor-who-season-4/Sun, 21 Dec 2025 00:00:00 +0000https://blog.jverkamp.com/2025/12/21/doctor-who-season-4/<p>Oh Doctor Who.</p> <p>This such a wonderful season (and I do say that about a lot of the seasons).</p> <p>First off, we have Donna back as the companion. I do love that she&rsquo;s not pining after the Doctor as others have been want to do. And she&rsquo;s just so delightfully snarkily&ndash;human. They really do play off each other well.</p> <p>On top of that, we have <em>The Fires of Pompeii</em>, with both a future Doctor and a future companion (in other rolls), <em>Planet of the Ood</em> (delightfully creepy), <em>The Doctor&rsquo;s Daughter</em> (actually his wife&hellip;), <em>Silence in the Library</em> (well, okay maybe she is), and <em>Midnight</em> (for such a limited set it&rsquo;s so intense).</p> <p>There are just so many solid episodes this season!</p> <p>Onward, to the 2008-2010 specials! Man those can be a pain to find/categorize. I&rsquo;m still not sure why they weren&rsquo;t just considered season 4.5 or even season 5.</p> <p>Onward!</p>The Dungeon Anarchist's Cookbookhttps://blog.jverkamp.com/2025/12/21/the-dungeon-anarchists-cookbook/Sun, 21 Dec 2025 00:00:00 +0000https://blog.jverkamp.com/2025/12/21/the-dungeon-anarchists-cookbook/<blockquote> <p>I liked Bautista, I thought as I finished building my train bomb, but his Tigran race made him look like a tiger that had been vomited upon by a Lisa Frank notebook. I didn’t know how anything could embarrass him.</p></blockquote> <p>Oh, that&rsquo;s another fun one.</p> <p>Two major things that stand out:</p> <ul> <li>The titular Dungeon <a href="https://en.wikipedia.org/wiki/Anarchist%20Cookbook">Anarchist’s Cookbook</a>. That&rsquo;s a fun idea already and I&rsquo;m just waiting to see what more can be done with it.</li> <li>The floor of the dungeon we spend most of the time on&ndash;trains. All the trains in a chaotic snarl. Delightful.</li> </ul> <p>And the stakes just keep rising (which, all things considered, is impressive).</p>Locking BGA tabs with UserScriptshttps://blog.jverkamp.com/2025/12/20/locking-bga-tabs-with-userscripts/Sat, 20 Dec 2025 00:00:00 +0000https://blog.jverkamp.com/2025/12/20/locking-bga-tabs-with-userscripts/<p>I play a lot of games on <a href="https://boardgamearena.com/" target="_blank" rel="noopener">Board Game Arena (BGA!)</a>. A lot of those are turn based games with random people, but I have two subsets of games that I consider &lsquo;more important&rsquo;:</p> <ul> <li>Turn based games with people I know</li> <li>Alpha games I&rsquo;m testing</li> </ul> <p>Unfortunately, the first tends to have longer &lsquo;per turn&rsquo; times and the latter doesn&rsquo;t have a timer at all, so both end up right at the very end of the sorted table list. But both, I&rsquo;d rather play first and in-between other games.</p> <p>Super niche problems, I know.</p> <p>Generally, my solution has been to keep a tab open for each of those games in a Firefox Tab Group, but in those cases, I keep navigating off those pages accidentally (thank you next table button).</p> <p>Super <em>super</em> niche problems, now.</p> <p>In any case, I whipped up a quick userscript (I use ViolentMonkey) that will:</p> <ul> <li>Detect if a tab I&rsquo;m on is one of the games I want to &rsquo;lock&rsquo;</li> <li>Remove the next table button (buttons; there are two different ones)</li> <li>Disable navigation (at least make it pop up a warning)</li> <li>Periodically refresh the tab (BGA tends to go to sleep in the background)</li> </ul>Stone and Skyhttps://blog.jverkamp.com/2025/12/18/stone-and-sky/Thu, 18 Dec 2025 00:00:00 +0000https://blog.jverkamp.com/2025/12/18/stone-and-sky/<blockquote> <p>It all started when Dr Brian Robertson, retired GP, enthusiastic amateur ecologist and self-confessed cryptid aficionado, stumbled over a dead sheep a few kilometres west of the town of Mintlaw, Aberdeenshire. Normally, because they are famously geniuses at finding inventive ways of getting themselves killed, a dead sheep does not cause much concern beyond irritation in the farmer and speculation as to whether it can be disposed of off the books to avoid costs.</p></blockquote> <p>That is most certainly an opening paradox.</p> <p>So here we are. Caught up (for now).</p> <p>With Peter Grant (and family) on vacation in Scotland (but not really). It&rsquo;s interesting having the change of view&ndash;given how much the &lsquo;London&rsquo;ness of Rivers of London made the series&ndash;right up there along with the &lsquo;magical cop&rsquo; half of the stories. But I liked it; it&rsquo;s fun having Peter and co on an adventure and out of their element.</p> <blockquote> <p>How’re you going to lure it down?’ he asked. ‘Birdseed, chips, a nice fresh herring?’</p> <p>‘Since we’re looking for a magic bird,’ I said, ‘I’m going to lure it down with magic.’</p> <p>Blinschell stared at me for a whole minute. As police, you learn to be almost as good a liar as any random grifter or multinational CEO, so it said something that I read every expression as it passed across his face. Suspicion … Is he taking the piss? Are the rumours true? No, I’m fairly certain he’s taking the piss. But what if he isn’t? You hear stories. Yeah, stories, right. Rumours, more like, because that’s reliable …</p></blockquote> <p>Well. Sort of out of his element. &#x1f604;</p> <p>We have Abigail all grown up (and with her own point of view chapters, that was surprising; also, with her own romance subplot, which is &hellip; odd, mostly in contrast with Peter&rsquo;s point of view we&rsquo;ve had up until now) and the twins already old enough to be talking. And of course causing chaos along the way.</p> <p>Oh, and all manner of sea people and creatures.</p> <p>Downright cthulian that.</p> <p>It&rsquo;s a fun book. And it&rsquo;s weird to be caught up!</p> <p>Onward.</p>Lost: Season 4https://blog.jverkamp.com/2025/12/17/lost-season-4/Wed, 17 Dec 2025 00:00:00 +0000https://blog.jverkamp.com/2025/12/17/lost-season-4/<p>Survival. Mysteries. The Others.</p> <p>And now, just possibly&hellip; rescue?</p> <p>But, as they said in the end of the previous season, it&rsquo;s <em>not Penny&rsquo;s boat</em>.</p> <p>So who&rsquo;s is it?</p> <p>I really enjoy this season. We get a chance to have some new characters (from the freighter come to rescue them), a bit of a shake up in terms of who&rsquo;s on which side on th island, and a whole pile of &lsquo;what is even going on&rsquo;, split a bit between Desmond and newcomer Daniel Faraday&ndash;I do enjoy his character.</p> <p>Overall, we really are starting to get into the point where you question &lsquo;so&hellip; were they planning that all along? do even the <em>writers</em> know what&rsquo;s going on?&rsquo;</p> <p>And &hellip; I&rsquo;m pretty sure the answer is no? That doesn&rsquo;t mean it&rsquo;s a bad season though!</p> <p>And, because of the 2008 writer&rsquo;s strike, it&rsquo;s a shorter season as well&gt; Ramps of the tension that.</p> <p>Favorite episodes this season?</p> <p>The first flashes off the island&ndash;with their own level of *you did <strong>what</strong> now. <em>The Constant</em>, with timey-whimey shenanigans and <em>There&rsquo;s No Place Like Home</em>, with everything coming to a tense, sometimes magical, and always chaotic end.</p> <p>It&rsquo;s interesting seeing Lost straddle the line between science fiction and more supernatural/fantasy. I tend to like the former, but a lot of times, it&rsquo;s the contrast that really does the best.</p> <p>Only two seasons left!</p> <p>Onward!</p>The Mechanicalhttps://blog.jverkamp.com/2025/12/13/the-mechanical/Sat, 13 Dec 2025 00:00:00 +0000https://blog.jverkamp.com/2025/12/13/the-mechanical/<blockquote> <p>I wonder how the world might differ today if not for two hundred and fifty years of the subjugation of living, thinking beings. If the entire architecture of the modern world didn’t rest upon a fiendish foundation of imprisoning, torturing, and enslaving immortal souls. If the ingenuity you people celebrate daily hadn’t been devoted to the greatest possible affront to God.</p></blockquote> <p>Well that&rsquo;s a fascinating book.</p> <p>It&rsquo;s an early 1900s world, full of mechanical slaves (Clakkers) run by the Dutch. With full on mindcontrol in their &lsquo;hierarchical metageas&rsquo;, which compels them to act&ndash;up until it doesn&rsquo;t.</p> <blockquote> <p>The hot ache of multiple geasa smoldered in his soul. At base, the slow, steady background throb of the hierarchical metageas, a constant reminder that he served many masters. In concert with that, filling out the lowest registers of discomfort, came dozens of generic geasa, those that only came to the fore in unusual or emergency circumstances. Layered atop these came the specifics of Jax’s circumstances. Madam Schoonraad’s admonition to hurry with the packing yet preserve the leather finish of her trunks and attend her guest: a sizzling brand plunged through his eye, melting through his skull case. Mr. Schoonraad’s order that Jax attend his guest, returning to the den as necessary to top up their glasses: banked coals that flared to agonizing life every few minutes. Pastor Visser’s order to deliver the microscope: searing flames licking at the edge of Jax’s imprisoned soul. Nicolet’s insistence that she ride on his shoulders after dinner: a white-hot marlinespike scraping the back of his mind.</p></blockquote> <p>It&rsquo;s just such a fun idea (enough so that I have a similar story of my own! &#x1f604;), but it&rsquo;s fascinating to see how differently it can be implemented.</p> <p>It does tend to meander a bit, with some discourses on free will and experimentation on what it means to be &lsquo;human&rsquo;. But oh, it ramps right up in the end.</p> <p>I somehow didn&rsquo;t realize this was the first of a trilogy before I moved on to other books. I most definitely will have to come back to these to see where it goes next!</p> <p>Onward! And remember:</p> <blockquote> <p>Clockmakers lie.</p></blockquote>AoC 2025 Day 12: Knapsackinatorhttps://blog.jverkamp.com/2025/12/12/aoc-2025-day-12-knapsackinator/Fri, 12 Dec 2025 00:00:03 +0000https://blog.jverkamp.com/2025/12/12/aoc-2025-day-12-knapsackinator/<h2 id="source-day-12-christmas-tree-farm">Source: <a href="https://adventofcode.com/2025/day/12" target="_blank" rel="noopener">Day 12: Christmas Tree Farm</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2025/src/day12.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-12-christmas-tree-farm">Source: <a href="https://adventofcode.com/2025/day/12">Day 12: Christmas Tree Farm</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-1---its-actually-trivial">Part 1 - It&rsquo;s actually trivial</a></li> <li><a href="#rendering">Rendering</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Solve the <a href="https://en.wikipedia.org/wiki/knapsack%20problem">knapsack problem</a>.</p> <p>&hellip;</p> <p>&hellip;</p> <p>But really, you are given a set of tiles (which all happen to be some subset of a 3x3) and a set of constraints&ndash;a MxN grid and how many of each tile to place. Count how many constraints are possible.</p> <p>Tiles may be rotated and/or flipped.</p></blockquote>AoC 2025 Day 11: Graphinatorhttps://blog.jverkamp.com/2025/12/11/aoc-2025-day-11-graphinator/Thu, 11 Dec 2025 00:00:03 +0000https://blog.jverkamp.com/2025/12/11/aoc-2025-day-11-graphinator/<h2 id="source-day-11-reactor">Source: <a href="https://adventofcode.com/2025/day/11" target="_blank" rel="noopener">Day 11: Reactor</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2025/src/day11.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-11-reactor">Source: <a href="https://adventofcode.com/2025/day/11">Day 11: Reactor</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a <a href="https://en.wikipedia.org/wiki/directed%20graph">directed graph</a> defined where <code>aaa: you hhh</code> means <code>aaa</code> is connected to <code>you</code> and <code>hhh</code>, how many paths are there from <code>you</code> to <code>out</code>.</p></blockquote>AoC 2025 Day 10: Linear Algebranatorhttps://blog.jverkamp.com/2025/12/10/aoc-2025-day-10-linear-algebranator/Wed, 10 Dec 2025 00:00:03 +0000https://blog.jverkamp.com/2025/12/10/aoc-2025-day-10-linear-algebranator/<h2 id="source-day-10-factory">Source: <a href="https://adventofcode.com/2025/day/10" target="_blank" rel="noopener">Day 10: Factory</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2025/src/day10.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-10-factory">Source: <a href="https://adventofcode.com/2025/day/10">Day 10: Factory</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a></li> <li><a href="#part-2---a-system-of-equations-wip">Part 2 - A system of equations [WIP]</a></li> <li><a href="#part-2---memoization">Part 2 - Memoization</a></li> <li><a href="#part-2---add-branch-and-bound">Part 2 - Add branch and bound</a></li> <li><a href="#part-2---just-use-z3">Part 2 - Just use z3</a></li> <li><a href="#1211-part-2---equations-continued">[12/11] Part 2 - Equations continued</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a target light pattern <code>[.##.]</code> and a series of buttons (<code>(3) (1, 3) etc</code>) where the first button toggles light &lsquo;3&rsquo; (the 4th light) and the second toggles the first and 4th etc, what is the minimum number of buttons you need to press to match the light pattern.</p></blockquote>AoC 2025 Day 9: Polygoninatorhttps://blog.jverkamp.com/2025/12/09/aoc-2025-day-9-polygoninator/Tue, 09 Dec 2025 00:00:03 +0000https://blog.jverkamp.com/2025/12/09/aoc-2025-day-9-polygoninator/<h2 id="source-day-9-movie-theater">Source: <a href="https://adventofcode.com/2025/day/9" target="_blank" rel="noopener">Day 9: Movie Theater</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2025/src/day9.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-9-movie-theater">Source: <a href="https://adventofcode.com/2025/day/9">Day 9: Movie Theater</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a> <ul> <li><a href="#line2drs">line2d.rs</a></li> <li><a href="#polygonrs">polygon.rs</a></li> <li><a href="#back-to-the-problem">Back to the problem</a></li> </ul> </li> <li><a href="#visualization">Visualization</a></li> <li><a href="#1213-part-2---dimensional-compression">[12/13] Part 2 - Dimensional Compression</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a list of points (2D), find the pair of points which form the largest rectangle.</p></blockquote>AoC 2025 Day 8: Point Cloudinatorhttps://blog.jverkamp.com/2025/12/08/aoc-2025-day-8-point-cloudinator/Mon, 08 Dec 2025 00:00:03 +0000https://blog.jverkamp.com/2025/12/08/aoc-2025-day-8-point-cloudinator/<h2 id="source-day-8-playground">Source: <a href="https://adventofcode.com/2025/day/8" target="_blank" rel="noopener">Day 8: Playground</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2025/src/day8.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-8-playground">Source: <a href="https://adventofcode.com/2025/day/8">Day 8: Playground</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a></li> <li><a href="#part-1---binary-heap">Part 1 - Binary Heap</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a list of points in 3D space, connect the 1000 closest nodes to each other. Calculate the product of the size of the 3 largest resulting regions?</p></blockquote>AoC 2025 Day 7: Laser Splittinatorhttps://blog.jverkamp.com/2025/12/07/aoc-2025-day-7-laser-splittinator/Sun, 07 Dec 2025 00:00:03 +0000https://blog.jverkamp.com/2025/12/07/aoc-2025-day-7-laser-splittinator/<h2 id="source-day-7-laboratories">Source: <a href="https://adventofcode.com/2025/day/7" target="_blank" rel="noopener">Day 7: Laboratories</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2025/src/day7.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-7-laboratories">Source: <a href="https://adventofcode.com/2025/day/7">Day 7: Laboratories</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a></li> <li><a href="#benchmarks">Benchmarks</a></li> <li><a href="#rendering">Rendering</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>You are given a map like this:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>.......S....... </span></span><span style="display:flex;"><span>............... </span></span><span style="display:flex;"><span>.......^....... </span></span><span style="display:flex;"><span>............... </span></span><span style="display:flex;"><span>......^.^...... </span></span><span style="display:flex;"><span>............... </span></span></code></pre></div><p>A laser shines from the top <code>S</code> and splits each time it hits a <code>^</code>, making this:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>.......S....... </span></span><span style="display:flex;"><span>.......|....... </span></span><span style="display:flex;"><span>......|^|...... </span></span><span style="display:flex;"><span>......|.|...... </span></span><span style="display:flex;"><span>.....|^|^|..... </span></span><span style="display:flex;"><span>.....|.|.|..... </span></span></code></pre></div><p>The two lasers in the center of this example merge to count as one laser.</p> <p>Count how many times lasers hit splitters.</p></blockquote>AoC 2025 Day 6: Column Operatinatorhttps://blog.jverkamp.com/2025/12/06/aoc-2025-day-6-column-operatinator/Sat, 06 Dec 2025 00:00:03 +0000https://blog.jverkamp.com/2025/12/06/aoc-2025-day-6-column-operatinator/<h2 id="source-day-6-trash-compactor">Source: <a href="https://adventofcode.com/2025/day/6" target="_blank" rel="noopener">Day 6: Trash Compactor</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2025/src/day6.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-6-trash-compactor">Source: <a href="https://adventofcode.com/2025/day/6">Day 6: Trash Compactor</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a></li> <li><a href="#part-1---grid">Part 1 - Grid</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given input like this:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>123 328 51 64 </span></span><span style="display:flex;"><span> 45 64 387 23 </span></span><span style="display:flex;"><span> 6 98 215 314 </span></span><span style="display:flex;"><span>* + * + </span></span></code></pre></div><p>Apply the operation in each column then sum the results.</p></blockquote>AoC 2025 Day 5: Range Merginatorhttps://blog.jverkamp.com/2025/12/05/aoc-2025-day-5-range-merginator/Fri, 05 Dec 2025 00:00:03 +0000https://blog.jverkamp.com/2025/12/05/aoc-2025-day-5-range-merginator/<h2 id="source-day-5-cafeteria">Source: <a href="https://adventofcode.com/2025/day/5" target="_blank" rel="noopener">Day 5: Cafeteria</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2025/src/day5.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-5-cafeteria">Source: <a href="https://adventofcode.com/2025/day/5">Day 5: Cafeteria</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a></li> <li><a href="#part-2---bruteforce">Part 2 - Bruteforce</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a list of ranges (inclusive) and a list of IDs, how many of the IDs are in any range?</p></blockquote>The Arabian Nightshttps://blog.jverkamp.com/2025/12/05/the-arabian-nights/Fri, 05 Dec 2025 00:00:00 +0000https://blog.jverkamp.com/2025/12/05/the-arabian-nights/<p>Well, that was most certainly a book!</p> <p>I&rsquo;m vaguely aware of the general idea of the Arabian Nights&ndash;a woman is threatened with death and staves it off by telling such an amazing story each night&hellip; And then always leaving them wanting more.</p> <p>Except apparently within the stories, there are more story tellers. I think it got at least 4-5 layers deep before I noticed.</p> <p>And&hellip; never returned to the frame story? Weird that.</p> <p>In any case, the individual stories are fun enough, even if some get more than a bit questionable and/or gruesome. But I enjoyed them. I wonder how much of that is the stories and how much this particular translation.</p> <hr>AoC 2025 Day 4: Fade Awayinatorhttps://blog.jverkamp.com/2025/12/04/aoc-2025-day-4-fade-awayinator/Thu, 04 Dec 2025 00:00:03 +0000https://blog.jverkamp.com/2025/12/04/aoc-2025-day-4-fade-awayinator/<h2 id="source-day-4-printing-department">Source: <a href="https://adventofcode.com/2025/day/4" target="_blank" rel="noopener">Day 4: Printing Department</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2025/src/day4.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-4-printing-department">Source: <a href="https://adventofcode.com/2025/day/4">Day 4: Printing Department</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a></li> <li><a href="#part-2---no-map">Part 2 - No Map</a></li> <li><a href="#rendering">Rendering</a> <ul> <li><a href="#register_render"><code>register_render</code></a></li> <li><a href="#render_imagewidth-height-filename-f"><code>render_image!(width, height, filename, f)</code></a></li> <li><a href="#render_framewidth-height-f"><code>render_frame!(width, height, f)</code></a></li> </ul> </li> <li><a href="#rendering-part-2">Rendering Part 2</a></li> <li><a href="#edit-part-2---floodfill">[Edit] Part 2 - Floodfill</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a grid of solid <code>@</code> and empty cells <code>.</code>, count how many solid cells have less than 4 neighbors.</p></blockquote>AoC 2025 Day 3: Loopinatorhttps://blog.jverkamp.com/2025/12/03/aoc-2025-day-3-loopinator/Wed, 03 Dec 2025 00:00:03 +0000https://blog.jverkamp.com/2025/12/03/aoc-2025-day-3-loopinator/<h2 id="source-day-3-lobby">Source: <a href="https://adventofcode.com/2025/day/3" target="_blank" rel="noopener">Day 3: Lobby</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2025/src/day3.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-3-lobby">Source: <a href="https://adventofcode.com/2025/day/3">Day 3: Lobby</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a></li> <li><a href="#a-recursive-solution">A recursive solution</a></li> <li><a href="#part-2---recursive">Part 2 - Recursive</a></li> <li><a href="#part-1---recursive">Part 1 - Recursive</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a list of numbers, for each find the two digits in the number which if concatenated make the largest. Sum these values.</p> <p>For example: <code>811111111111119</code> should be <code>89</code>.</p></blockquote>AoC 2025 Day 2: Repeat Repeat Repeatinatorhttps://blog.jverkamp.com/2025/12/02/aoc-2025-day-2-repeat-repeat-repeatinator/Tue, 02 Dec 2025 00:00:03 +0000https://blog.jverkamp.com/2025/12/02/aoc-2025-day-2-repeat-repeat-repeatinator/<h2 id="source-day-2-gift-shop">Source: <a href="https://adventofcode.com/2025/day/2" target="_blank" rel="noopener">Day 2: Gift Shop</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2025/src/day2.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-2-gift-shop">Source: <a href="https://adventofcode.com/2025/day/2">Day 2: Gift Shop</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-1---regex">Part 1 - Regex</a></li> <li><a href="#part-2---matching-integers">Part 2 - Matching Integers</a></li> <li><a href="#part-2">Part 2</a></li> <li><a href="#part-2---matching-integers-1">Part 2 - Matching Integers</a></li> <li><a href="#benchmarks">Benchmarks</a></li> <li><a href="#edit-part-1---chatgpt">(Edit) Part 1 - ChatGPT</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a list of ranges <code>a-b</code> (ie <code>11-22</code>), sum all values that are made of two repeated chunks of digits (ie <code>123123</code>)</p></blockquote>Undergravel Filterhttps://blog.jverkamp.com/maker/3d-printing/2025-12-02-undergravel-filter/Tue, 02 Dec 2025 00:00:00 +0000https://blog.jverkamp.com/maker/3d-printing/2025-12-02-undergravel-filter/<p>Four years / a day? What&rsquo;s really the difference.</p> <p>I was asked to design an <a href="https://en.wikipedia.org/wiki/undergravel%20filter">undergravel filter</a>. Let&rsquo;s do it.</p> <nav id="TableOfContents"> <ul> <li><a href="#prototype">Prototype</a></li> <li><a href="#version-1">Version 1</a></li> <li><a href="#tube-tolerance">Tube tolerance</a></li> <li><a href="#version-2">Version 2</a></li> </ul> </nav> <h2 id="prototype">Prototype</h2> <p>Here&rsquo;s the original prototype:</p> <p><img src="prototype.png" alt="Picture of the original design, made of paper"></p> <p>Not much to go on.</p> <h2 id="version-1">Version 1</h2> <p>And here&rsquo;s where we ended up:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scad" data-lang="scad"><span style="display:flex;"><span><span style="color:#75715e">// Units </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>inch <span style="color:#f92672">=</span> <span style="color:#ae81ff">25.4</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e">// Requested dimensions (converted to mm) </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>box_x <span style="color:#f92672">=</span> <span style="color:#ae81ff">9</span> <span style="color:#f92672">*</span> inch; </span></span><span style="display:flex;"><span>box_y <span style="color:#f92672">=</span> <span style="color:#ae81ff">6</span> <span style="color:#f92672">*</span> inch; </span></span><span style="display:flex;"><span>box_z <span style="color:#f92672">=</span> <span style="color:#ae81ff">0.75</span> <span style="color:#f92672">*</span> inch; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e">// Piece thickness of walls and bottom (top?) </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>wall <span style="color:#f92672">=</span> <span style="color:#ae81ff">2</span>; </span></span><span style="display:flex;"><span>bottom <span style="color:#f92672">=</span> <span style="color:#ae81ff">2</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e">// Size and space between centers for grid holes </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>hole_d <span style="color:#f92672">=</span> <span style="color:#ae81ff">2.5</span>; </span></span><span style="display:flex;"><span>spacing <span style="color:#f92672">=</span> <span style="color:#ae81ff">10</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e">// Size of the larger tube hole in the corner </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>tube_hole_d <span style="color:#f92672">=</span> <span style="color:#ae81ff">18.4</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e">// --- Don&#39;t change anything below this line --- </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#75715e">// Derived cavity size </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>inner_x <span style="color:#f92672">=</span> box_x <span style="color:#f92672">-</span> <span style="color:#ae81ff">2</span> <span style="color:#f92672">*</span> wall; </span></span><span style="display:flex;"><span>inner_y <span style="color:#f92672">=</span> box_y <span style="color:#f92672">-</span> <span style="color:#ae81ff">2</span> <span style="color:#f92672">*</span> wall; </span></span><span style="display:flex;"><span>inner_z <span style="color:#f92672">=</span> box_z <span style="color:#f92672">-</span> bottom; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e">// Centered hole grid counts </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>nx <span style="color:#f92672">=</span> floor((inner_x <span style="color:#f92672">-</span> hole_d) <span style="color:#f92672">/</span> spacing) <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span>; </span></span><span style="display:flex;"><span>ny <span style="color:#f92672">=</span> floor((inner_y <span style="color:#f92672">-</span> hole_d) <span style="color:#f92672">/</span> spacing) <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e">// Offset to center hole grid </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>start_x <span style="color:#f92672">=</span> wall <span style="color:#f92672">+</span> (inner_x <span style="color:#f92672">-</span> (nx <span style="color:#f92672">-</span> <span style="color:#ae81ff">1</span>) <span style="color:#f92672">*</span> spacing) <span style="color:#f92672">/</span> <span style="color:#ae81ff">2</span>; </span></span><span style="display:flex;"><span>start_y <span style="color:#f92672">=</span> wall <span style="color:#f92672">+</span> (inner_y <span style="color:#f92672">-</span> (ny <span style="color:#f92672">-</span> <span style="color:#ae81ff">1</span>) <span style="color:#f92672">*</span> spacing) <span style="color:#f92672">/</span> <span style="color:#ae81ff">2</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e">// Tube hole in the corner </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>tube_hole_x <span style="color:#f92672">=</span> start_x <span style="color:#f92672">+</span> spacing; </span></span><span style="display:flex;"><span>tube_hole_y <span style="color:#f92672">=</span> start_y <span style="color:#f92672">+</span> spacing; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>difference() { </span></span><span style="display:flex;"><span> <span style="color:#75715e">// Outer box </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> cube([box_x, box_y, box_z]); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#75715e">// Hollow interior (cut from top) </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> translate([wall, wall, bottom]) </span></span><span style="display:flex;"><span> cube([inner_x, inner_y, inner_z <span style="color:#f92672">+</span> <span style="color:#ae81ff">0.01</span>]); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#75715e">// Hole for the tube </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> translate([tube_hole_x, tube_hole_y, <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>]) </span></span><span style="display:flex;"><span> cylinder(h <span style="color:#f92672">=</span> inner_z <span style="color:#f92672">+</span> <span style="color:#ae81ff">2</span>, d <span style="color:#f92672">=</span> tube_hole_d, $fn <span style="color:#f92672">=</span> <span style="color:#ae81ff">64</span>); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#75715e">// Hole array through bottom </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> <span style="color:#66d9ef">for</span> (i <span style="color:#f92672">=</span> [<span style="color:#ae81ff">0</span>:nx<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>]) { </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> (j <span style="color:#f92672">=</span> [<span style="color:#ae81ff">0</span>:ny<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>]) { </span></span><span style="display:flex;"><span> x <span style="color:#f92672">=</span> start_x <span style="color:#f92672">+</span> i <span style="color:#f92672">*</span> spacing; </span></span><span style="display:flex;"><span> y <span style="color:#f92672">=</span> start_y <span style="color:#f92672">+</span> j <span style="color:#f92672">*</span> spacing; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#75715e">// Skip grid hole if too near tube hole </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> dist <span style="color:#f92672">=</span> sqrt( (x <span style="color:#f92672">-</span> tube_hole_x)<span style="color:#f92672">*</span>(x <span style="color:#f92672">-</span> tube_hole_x) <span style="color:#f92672">+</span> </span></span><span style="display:flex;"><span> (y <span style="color:#f92672">-</span> tube_hole_y)<span style="color:#f92672">*</span>(y <span style="color:#f92672">-</span> tube_hole_y) ); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> (dist <span style="color:#f92672">-</span> <span style="color:#ae81ff">1</span> <span style="color:#f92672">&gt;</span> tube_hole_d<span style="color:#f92672">/</span><span style="color:#ae81ff">2</span>) { </span></span><span style="display:flex;"><span> translate([x, y, <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>]) </span></span><span style="display:flex;"><span> cylinder(h <span style="color:#f92672">=</span> bottom <span style="color:#f92672">+</span> <span style="color:#ae81ff">2</span>, d <span style="color:#f92672">=</span> hole_d, $fn <span style="color:#f92672">=</span> <span style="color:#ae81ff">32</span>); </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p><img src="rendering.png" alt="Rendering of final design"></p>AoC 2025 Day 1: Turn Turn Turninatorhttps://blog.jverkamp.com/2025/12/01/aoc-2025-day-1-turn-turn-turninator/Mon, 01 Dec 2025 00:00:03 +0000https://blog.jverkamp.com/2025/12/01/aoc-2025-day-1-turn-turn-turninator/<h2 id="source-day-1-secret-entrance">Source: <a href="https://adventofcode.com/2025/day/1" target="_blank" rel="noopener">Day 1: Secret Entrance</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2025/src/bin/day1.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-1-secret-entrance">Source: <a href="https://adventofcode.com/2025/day/1">Day 1: Secret Entrance</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Implement a padlock with 100 values (0-99). Run each command (<code>L23</code> to turn left by 23 places) and then output the number of times you landed on zero.</p></blockquote>Advent of Code 2025https://blog.jverkamp.com/2025/12/01/advent-of-code-2025/Mon, 01 Dec 2025 00:00:01 +0000https://blog.jverkamp.com/2025/12/01/advent-of-code-2025/<p>It&rsquo;s back! (<a href="https://blog.jverkamp.com/programming/sources/advent-of-code/">Advent of Code</a>)!</p> <p>It&rsquo;s been ten years (of advent of code, I haven&rsquo;t done them all (yet)) and oh what a ten years it&rsquo;s been. This time around, there will be only 12 days instead of 25, but honestly, that means I&rsquo;m not working on these right up until Christmas. So I&rsquo;m okay with this.</p> <p>Once again, Rust! But this time, I won&rsquo;t be using <code>cargo-aoc</code>, instead I wrote my own proc macros. Mostly to see if I could. &#x1f604; See <a href="#my-very-own-aoc-macros">this section</a> for more information.</p> <p>Full solutions will once again be posted to GitHub (including previous years and possibly some I haven&rsquo;t written up yet): <a href="https://github.com/jpverkamp/advent-of-code">jpverkamp/advent-of-code</a></p>Aquarium Lid Clipshttps://blog.jverkamp.com/maker/3d-printing/2025-12-01-aquarium-lid-clips/Mon, 01 Dec 2025 00:00:00 +0000https://blog.jverkamp.com/maker/3d-printing/2025-12-01-aquarium-lid-clips/<p>Okay, here&rsquo;s another (wow, has it really been four years&hellip;)</p> <p>We&rsquo;ve been <del>slowly</del> acquiring fish tanks. In order to make custom lids which fit each tank and allow for growing plants in them, we need little clips which can hold the lid of the tank. Most of them, we get the right size for, but there&rsquo;s one tank which is a bit different.</p> <p>Rather than the 5mm side walls all the rest have, this one has 4mm on the sides and back and 3mm on the front.</p>Lost: Season 3https://blog.jverkamp.com/2025/11/30/lost-season-3/Sun, 30 Nov 2025 00:00:00 +0000https://blog.jverkamp.com/2025/11/30/lost-season-3/<p>Season 1 was all about surviving on the island.</p> <p>Season 2 was all about mysteries. More survivors. The Hatch. A monster made of smoke.</p> <p>And now we get Season 3: All about the Others.</p> <p>Oh, what a season that was.</p> <p>We learn how they live in several different guises, from the cages of <em>A Tale of Two Cities</em> to the village/barracks of <em>Stranger in a Strange Land</em>, to a sort of mass exodus.</p> <blockquote> <p>Tom: Hey, you got yourself a fish biscuit! How&rsquo;d you do that?<br> Sawyer: Figured out your complicated gizmos, thats how.<br> Tom: It only took the bears two hours.<br> [Sawyer contemplates briefly]<br> Sawyer: How many of &rsquo;em were there?</p></blockquote> <p>All sorts of medical madness, in <em>Every Man for Himself</em> and pretty much anything with Juliet.</p> <p>On top of that all, one character who <em>really</em> goes through an arc this season is Locke. He&rsquo;s lost his way&hellip; only to find it again. And lose it. And find another. Oh Locke. You&rsquo;re so very interesting, but also so hard to actually root for&hellip;</p> <blockquote> <p>Sayid: Kate, if you were looking for help to find Jack, why didn&rsquo;t you ask us?<br> Kate: Two reasons: you don&rsquo;t know where to look and you&rsquo;re not motivated. And I don&rsquo;t blame you. Why would you want to go on another trek across the island, risk more lives just to get Jack back?<br> Locke: You&rsquo;re wrong.<br> Kate: Oh, really? They why didn&rsquo;t you come after-<br> Locke: Not about the motivation, just about knowing where to look. We got a compass bearing, and I&rsquo;m pretty sure if we follow it, it&rsquo;ll lead us right to &rsquo;em.<br> Kate: How?<br> Sayid: Because of the way the sunlight hit Mr. Eko&rsquo;s stick&hellip;</p></blockquote> <p>Perhaps my continued favorite though? Desmond. Wakes up naked. Wakes up in his flat. Wakes up and buys a ring. Oh, he&rsquo;s got a complicated life, both on the island and off of it.</p> <blockquote> <p>Desmond Hume: See you in another life, brother.</p></blockquote> <p>On a less positive note, we have main-character-who-have-obviously-been-there-all-along Nikki and Paulo. I mean, it worked well enough for Desmond and seems to be working okay for Juliet. So why not someone else? But they come out of nowhere and get all <em>Expose</em>d by the end. So it goes.</p> <p>All that&hellip; to go <em>Through the Looking Glass</em>&hellip;</p> <p>Man, this is a fun show.</p>Carl's Doomsday Scenariohttps://blog.jverkamp.com/2025/11/23/carls-doomsday-scenario/Sun, 23 Nov 2025 00:00:00 +0000https://blog.jverkamp.com/2025/11/23/carls-doomsday-scenario/<blockquote> <p>Now, if you’ve never had a flaming, skull-faced bear on roller skates barreling at you full speed, you don’t know what you’re missing.</p></blockquote> <p>And so Carl and Princess Donut descend to the third floor. With a choice of race (of course Donut will choose Cat, was there ever any doubt?) and class.</p> <blockquote> <p>NecroBard This unusual class combines one of the most-loved occupations with one of the most reviled.</p></blockquote> <p>Right.</p> <p>Things are going to get worse (of course) even as they get better (or at least higher level). And now, we&rsquo;re getting the first hints of life in teh rest of the universe&ndash;outside of the Dungeon!</p> <blockquote> <p>“If that’s true,” I said, “then you’re all in that same pot.” I turned to look at the audience. “All of you. If a government is afraid of what its people say, then maybe there’s a reason for it.”</p></blockquote> <p>Politics, yo.</p> <p>I&rsquo;m fully expecting more of that as the series goes on!</p> <p>Overall, a worthy successor to the first one and I&rsquo;m still interested to see where in the <em>world</em> this series can even go from here.</p> <p>Onward!</p>Wickedhttps://blog.jverkamp.com/2025/11/23/wicked/Sun, 23 Nov 2025 00:00:00 +0000https://blog.jverkamp.com/2025/11/23/wicked/<blockquote> <p>Munchkinland Kid: But, Miss Glinda?<br> Glinda: Yes?<br> Munchkinland Kid: Why does wickedness happen?<br> Glinda: That&rsquo;s a good question, one many people find confusifying. Are people born wicked? Or do they have wickedness thrust upon them? After all, The Wicked Witch had a childhood. She had a father, who, by the way, had been appointed governor of Munchkinland. And she had a mother, as so many do.</p></blockquote> <p>The story of the Wicked Witch of the West (who wasn&rsquo;t always so Wicked), her time at university (which, for some reason, is called Shiz), and her unlikely friendship with Galinda (before she was Glinda).</p> <p>It&rsquo;s basically the Broadway play writ silver screen and you know, it actually works pretty well. There is room for a lot of visuals you can&rsquo;t <em>really</em> pull off on a stage, along with some face work and camera shots likewise.</p> <p>Storywise, it&rsquo;s a fairly classic (at this point), &lsquo;what if the villan wasn&rsquo;t evil, how did they get here?&rsquo; sort of story.</p> <blockquote> <p>Fiyero: I&rsquo;ll say this much, she doesn&rsquo;t give a twig what anyone thinks. Glinda: Of course she does. She just pretends not to.</p></blockquote> <p>Mix all that with a sassy Elphaba (who&rsquo;s supposed to be the Wicked one) and a somewhat clueless entirely self centered Glinda (who&rsquo;s supposed to be the Good one)&hellip;</p> <blockquote> <p>Elphaba: Fine, let&rsquo;s get this over with: no, I am not seasick; no, I did not eat grass as a child; and yes, I&rsquo;ve always been green.<br> Glinda: Well, I, for one, am&hellip; So sorry, that you have been forced to live with&hellip; this.<br> Elphaba: Is that so?<br> Glinda: Yes! And it is my intention to major in sorcery. So, if at some point, you wanted to address the, um&hellip; Problem&hellip;<br> Elphaba: Problem.<br> Glinda: &hellip; perhaps I could help.<br> [the whole Shiz students clap and praise her, while Elphaba analyzes the reaction]<br> Elphaba: Offering to help someone that you don&rsquo;t know with skills that you don&rsquo;t have, I&rsquo;m sure everyone is duly impressed.<br> Glinda: I could care less what others think.<br> Elphaba: Couldn&rsquo;t.<br> Glinda: What?<br> Elphaba: You couldn&rsquo;t care less what other people think. Though, I&hellip; I doubt that.</p></blockquote> <p>I wouldn&rsquo;t really expect anything new and interesting, but it&rsquo;s solidly done. And hey, some great songs!</p> <p>And best of all? By finally watching it now, part 2 is already out. Onward!</p>KPop Demon Huntershttps://blog.jverkamp.com/2025/11/17/kpop-demon-hunters/Mon, 17 Nov 2025 00:00:00 +0000https://blog.jverkamp.com/2025/11/17/kpop-demon-hunters/<blockquote> <p>Better sit down for the show &lsquo;cause I&rsquo;m gonna show you How it&rsquo;s done, done, done</p></blockquote> <p>Well that was a delightful surprise.</p> <p>I’ve of course <em>heard</em> of KPop Demon Hunters, but I hadn’t really paid that much attention to it.</p> <p>And then one of the songs was suggested to me on YouTube.</p> <p>And another.</p> <p>And they got stuck in my head.</p> <blockquote> <p>Rumi: It is annoyingly catchy, though.</p></blockquote> <p>And then I finally watched it.</p>Dungeon Crawler Carlhttps://blog.jverkamp.com/2025/11/15/dungeon-crawler-carl/Sat, 15 Nov 2025 00:00:00 +0000https://blog.jverkamp.com/2025/11/15/dungeon-crawler-carl/<blockquote> <p>Goddammit Donut!</p></blockquote> <p>This book has no right to be quite so fun as it is. Billions of people die in the first chapter, it’s full of blood and gore and formerly-living-detritus, and the entire thing feels like a video game—menus, inventory, levels, and loot boxes included.</p> <blockquote> <p>New achievement! You’ve killed an armed mob with your bare fucking hands! Holy crap, dude. That’s kinda fucked up. Reward: You’ve received a Bronze Weapon Box!</p>The Abysshttps://blog.jverkamp.com/2025/11/06/the-abyss/Thu, 06 Nov 2025 00:00:00 +0000https://blog.jverkamp.com/2025/11/06/the-abyss/<p>So James Cameron has been doing that whole water thing for quite a while, eh?</p> <p>I actually thought this was a horror movie. Taking a look at the marketing material and the cover, I think you might see why. And really, there’s a lot of tension to it. A crew trapped deep under the ocean. The darkness and the pressure barely held at bay, readying to come in and crush them all given a chance.</p> <p>It’s terrifying enough, even without any deep see monsters or whatnot.</p> <blockquote> <p>Bud: When it comes to the safety of these people, there&rsquo;s me and then there&rsquo;s God, understand?</p></blockquote> <p>Throw into that mankind’s worst enemy—mankind itself?</p> <p>And that’s quite the adventure/thriller. It’s just not a horror movie.</p> <p>I love the setting, the characters give you reasons to care, and the stakes are a lot of fun. The ending does get a bit woohoo/cheesy, but I suppose it had to go somewhere.</p> <p>This definitely goes on the long list of ‘there’s a reason why people still remember/recommend this movie almost 40 years later’. It’s a solid underwater sci fi classic and I’m glad to have watched it.</p> <p>Onward!</p>Dune: Part Twohttps://blog.jverkamp.com/2025/11/03/dune-part-two/Mon, 03 Nov 2025 00:00:00 +0000https://blog.jverkamp.com/2025/11/03/dune-part-two/<blockquote> <p>You are not prepared for what is to come.</p></blockquote> <p>Dune: Part Two is a lot like <a href="https://blog.jverkamp.com/2021/11/20/dune-movie/">the first half</a>. It&rsquo;s visually stunning and there are some intense scenes&hellip; but it still doesn&rsquo;t feel like a complete movie, even if this one actually does have a decent ending compared to the first. On to part 3 I suppose!</p> <p>Scenewise, I love seeing the deserts. The sandworms. The Fremen&rsquo;s homes in the sand.</p>Lost: Season 2https://blog.jverkamp.com/2025/10/30/lost-season-2/Thu, 30 Oct 2025 00:00:00 +0000https://blog.jverkamp.com/2025/10/30/lost-season-2/<blockquote> <p>John Locke: [screaming] What am I supposed to do?</p></blockquote> <p>And so my third watch of Lost continues!</p> <p>Season 1 was all about the crash on the island. About survival, with only the beginnings of weirdness around the edges.</p> <p>In Season 2? Now we&rsquo;re really getting into it.</p> <p>In <em>Orientation</em>, we get our first hints of the Hatch. Desmond is such a fun character, even if (<em>spoilers</em>!) he&rsquo;s not in as much of this seasons as later ones. And oh, later on, we have <em>Lockdown</em>. Now <em>that</em> is a wonderful mystery of an episode. And the whole season does have an excellent dynamic between Jack and Locke. Man of Science. Man of Faith. (And really, which is which?)</p> <blockquote> <p>John Locke: Why do you find it so hard to believe?!</p> <p>Jack Shephard: Why do you find it so easy?!</p> <p>John Locke: It&rsquo;s never been easy!</p></blockquote> <p>We get a few new characters from the tail section (<em>The Other 48 Days</em>). Mr. Eko is such an intense foil to Locke in particular. And the</p> <p>We do also get two amazing Hugo backstory centered episodes: <em>Everybody Hates Hugo</em> and <em>Dave</em>.</p> <blockquote> <p>Hugo: Did either of you see a bald guy in slippers with a coconut come through here?</p> <p>Charlie: No. But I did see a polar bear on roller skates with a mango.”</p></blockquote> <p>He&rsquo;s such a fun character, in spite (because?) of everything.</p> <p>In <em>Maternity Leave</em>, we get a bit more about the medical mystery.</p> <p>And then in the end&hellip; we <em>Live Together, Die Alone</em>.</p> <p>Oh, I&rsquo;m looking forward to Season 3!</p>Demon's Bluffhttps://blog.jverkamp.com/2025/10/28/demons-bluff/Tue, 28 Oct 2025 00:00:00 +0000https://blog.jverkamp.com/2025/10/28/demons-bluff/<blockquote> <p>It was the witches who had suffered, not the demons. All because, in their fear, the witches had broken the most important rule: first, do no harm.</p></blockquote> <p>And so now, we get a story all about the fallout of <a href="https://blog.jverkamp.com/2025/10/09/demons-of-good-and-evil/">Demons of Good and Evil</a>…</p> <p>Nah, just kidding. It’s a time travel story.</p> <blockquote> <p>I could be home in an hour if all went well.</p></blockquote> <p><em>record scratch</em></p> <blockquote> <p>[Announcer voice]: She was not, in fact, home in an hour.</p>Amongst Our Weaponshttps://blog.jverkamp.com/2025/10/26/amongst-our-weapons/Sun, 26 Oct 2025 00:00:00 +0000https://blog.jverkamp.com/2025/10/26/amongst-our-weapons/<p>Things I <em>still</em> love about this series?</p> <p>The whole concept of an ‘Everyman’ cop, thrown into a magical world and doing his best to apply a scientific mindset to the whole thing. He’s discovering magic and we’re discovering it along with him. And even after 9 books now, it still hasn’t gotten old!</p> <blockquote> <p>That some magical phenomena that seem visible to the naked eye don’t register either on chemical film or a photosensor array is something we’ve known for some time. Our current theory – that is, mine and my cousin Abigail’s – is that no photons are being emitted or bouncing off the ghost, or the unicorn or the burning spear of a vengeful angel. What we think we see is, in fact, our brain’s interpretation of input from different senses – the one with which we ‘sense’ vestigia and ghosts, et cetera. We’ve even run up a tentative experimental protocol and one day, when we have time, we might even get to carry it out.</p>Doctor Who: Season 3https://blog.jverkamp.com/2025/10/16/doctor-who-season-3/Thu, 16 Oct 2025 00:00:00 +0000https://blog.jverkamp.com/2025/10/16/doctor-who-season-3/<p>And so I slowly continue re-watching Doctor Who.</p> <p>It starts out strong with Jadoon on the Moon in <a href="#1-smith-and-jones">Smith and Jones</a>, we have more of the Face of Bo (<a href="#3-gridlock">Gridlock</a>) and the Daleks (<a href="#4-daleks-in-manhattan">Daleks in Manhattan</a>; plus, that one has Andrew Garfield!), several wonderfully creepy episodes (<a href="#7-42">42</a> and <a href="#9-the-family-of-blood">Family of Blood</a>), and a finale that was certainly spectacular even if it finally veered too much &lsquo;magic&rsquo; and not enough science for me.</p> <p>Oh, and of course this is the one with <a href="#10-blink">Blink</a>.</p> <p>There&rsquo;s a reason this is the highest rated Doctor Who episode from the revival&ndash;despite minimal time with the Doctor himself.</p> <p>A solid season. And now it&rsquo;s time for Donna!</p> <hr>Kyana Woodstock: One More Day of Peace and Musichttps://blog.jverkamp.com/2025/10/15/kyana-woodstock-one-more-day-of-peace-and-music/Wed, 15 Oct 2025 00:00:00 +0000https://blog.jverkamp.com/2025/10/15/kyana-woodstock-one-more-day-of-peace-and-music/<blockquote> <p>Suppose the proverbial &ldquo;greatest book of all time&rdquo; is The Bible (and/or the Quran?). These collections contain a series of sometimes random, rambling stories, yet they all reinforce a key overarching theme. Debates continue as to whether The Bible is pure fact—a series of &ldquo;memoirs&rdquo; documenting events around that central theme—or fictionalized to reinforce the same message.</p> <p>Harry Potter, by many accounts, comes in second as one of the greatest books ever written. There’s no debate about this one; it was crafted purely as a work of fiction. But again, it’s a series of stories that follow close friends as they navigate their life journeys.</p></blockquote> <p>That &hellip; is quite a book.</p> <p>On one hand, it&rsquo;s a memior of Andrew Verkamp&ndash;a boy who <del>grew</del> threw up in rural southern Indiana. And to read it, it&rsquo;s honestly a bit of a surprise he made it this far. From a runaway chainsaw to a cabin in the woods, from childhood drinking to biting a head off a turkey. And that&rsquo;s just the beginning.</p> <p>I don&rsquo;t know how many of these stories will translate well if you didn&rsquo;t grow up in that particular time and place, but at the very least it&rsquo;s just like a train crash&ndash;in all the best ways. You know, for some reason, that you perhaps shouldn&rsquo;t be enjoying this quite so much&ndash;but it&rsquo;s hard to look away.</p> <blockquote> <p>EDITOR&rsquo;S NOTE: I assume any legal implications from that evening have long since exceeded the statute of limitations, and this public confession has no legal basis. If it does, just forget I said anything. It was a snowy night, and obviously, I was safe at home cuddled up in bed that night (just ask Mom and Dad). That&rsquo;s the story, and I am sticking to it.</p></blockquote> <p>On the other, it&rsquo;s the story of Kyana Woodstock&ndash;25 years of a local mirror of that famous concert now itself more than half a century gone. Growing from a TV in the backyard to a 30&rsquo;+ screen, hundreds of guests, live music, and entirely too many fireworks to a professional venue with licensing fees, insurance worries, and seats for 1500.</p> <p>It&rsquo;s structurally a strange book, taking half the time to even get to the title&rsquo;s point. It&rsquo;s a touch &lsquo;stream of consciousness&rsquo; at times and you&rsquo;re never quite sure where (or when) the next story is going to take you.</p> <blockquote> <p>This isn&rsquo;t your average blah, blah, blah book. Instead, it&rsquo;s a random &ldquo;kamikaze&rdquo; style of seemingly unrelated &ldquo;pukes&rdquo; of brain thoughts, all weaving into a &lsquo;sorta&rsquo; seamless collection of recollections. Four books in one.</p></blockquote> <p>But oh, is it a ride alone the way.</p> <p>Disclaimer: You might be able to guess from author&rsquo;s name (and the fact that I&rsquo;m <em>in the book</em>) that this is my father. I also helped a bit to edit the book and read an earlier version before this one. Heck, I even wrote one of the chapters (apparently). So take this all with a <del>grain</del> heaping spoonful of salt. But like I said&ndash;once you get start, it&rsquo;s a hard book to put down.</p>Starship's Magehttps://blog.jverkamp.com/2025/10/14/starships-mage/Tue, 14 Oct 2025 00:00:00 +0000https://blog.jverkamp.com/2025/10/14/starships-mage/<blockquote> <p>This place is always awe-inspiring to me,” Jenna said quietly from the edge of the room, and Damien glanced up from the impossibly perfect model of the ship to look at her. “I don’t understand any of how what you do works, but this room…this is the key to the stars.”</p> <p>“That was the Compact,” Damien half-whispered, reveling in the power pulsing around him. “Peace between Mage and Mundane, between Mars and Earth…and in exchange, we gave you the stars.”</p></blockquote> <p>On one hand, Starship&rsquo;s Mage is (surprisingly?) hard sci fi. You have starship&rsquo;s dealing with spin induced gravity, limits on acceleration so as not to crush your crew, and no<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> faster than light communication.</p> <p>On the other hand, you have magic.</p> <blockquote> <p>“Um, sir, what is that plaque supposed to do?” he asked, intentionally changing the subject.</p> <p>“It’s a security spell,” the Captain explained, seizing on the topic change. “It detects if anyone enters the office with hostile intent.”</p> <p>Damien traced the flow of energy through the runes and shook his head again. “You might want to have your senior Mage look at it,” he told the Captain. “The scribe used future imperative tenses instead of future-probabilistic. It’s actually slightly encouraging the chance of violence, not predicting it.”</p></blockquote> <p>It&rsquo;s laced throughout the story in a relatively light way&ndash;especially considering that one of the main characters <em>is</em> a mage. But right where it counts? In the ability to actually <em>travel</em> faster than light? Well, that&rsquo;s where magic comes into play.</p> <p>It&rsquo;s a weirdly fascinating idea and makes me want more of it. Just how many hijinks can you get up to, mixing scifi and fantasy?</p> <p>Storywise, it&rsquo;s quite the adventure, starting with pirates and a crew on the run and only escalating from there. The final three way chase/showdown is quite spectacular&ndash;only to drop one heck of a cliffhanger. It&rsquo;s the sort that you could leave off and (mostly) have a solid standalone book, but at the same time leaves you wanting more. Which I <em>do</em> appreciate.</p> <p>One gotcha that at first I thought I was going to be annoyed about was the idea that Damien was a special/one of a kind/chosen one mage. He could do things no other mage could do. I won&rsquo;t go too far into it&ndash;spoilers!&ndash;but suffice it to say that he&rsquo;s not the only &lsquo;impossible&rsquo; thing in this universe&hellip; and the sequels promise more!</p> <p>Overall, a fun story with some fascinating world building. And it&rsquo;s for that alone that I want to read more. It turns out that there are already 18 books in this series (with another <em>60</em> from the other over the last decade and change). So we&rsquo;ll have to see where it goes next!</p> <p>Onward!</p>Demons of Good and Evilhttps://blog.jverkamp.com/2025/10/09/demons-of-good-and-evil/Thu, 09 Oct 2025 00:00:00 +0000https://blog.jverkamp.com/2025/10/09/demons-of-good-and-evil/<p>Well that&rsquo;s amusing. We went right from her birthday to his in just a few books.</p> <p>And now we have to deal with the fallout<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> of not only Hodin but also that werewolf cursed idol from <a href="https://blog.jverkamp.com/2025/04/19/a-fistful-of-charms/">oh so long ago</a>. And the return of that <em>other</em> demon born witch&ndash;Lee. Remember when Rachel sold him out to Al to save her own skin? And also (again) vampire politics and weres. And Trent&rsquo;s elf politics and daughters. And Al&rsquo;s part versus Hodin last book.</p> <p>Oh, what a complicated life they weave.</p> <p>Overall, another solid adventure! And oh man does the fall out of this book hit hard for some reason. I do enjoy a book where you realize it&rsquo;s possible that some characters might die (even if <em>generally</em> not main characters (<em>cough</em> Kistin <em>cough</em>)), but oy does it hurt sometimes.</p> <p>One thought (since it&rsquo;s been on my mind): this is yet another book where &rsquo;never killing&rsquo; versus Rachel&rsquo;s more &lsquo;creative&rsquo; solutions comes up front and center.</p> <blockquote> <p>“I’m sorry it came to this,” Cassie whispered, and the wolf’s remaining ear swiveled. There was intelligence in her gaze, but it was that of a wolf. <span class="spoiler">Parker</span> was no more.</p></blockquote> <p>That&rsquo;s&hellip; a touch even <em>more</em> permanent than Constance or Hodin, no? And those were bad enough.</p> <p>I&rsquo;m curious if/when Rachel is going to actually cross that &rsquo;never killed&rsquo; line. It feels like it&rsquo;s coming.</p> <p>It&rsquo;s crazy to think that (as of now), there&rsquo;s only one more. I don&rsquo;t even know what I&rsquo;ll be listening to next! Perhaps a few one offs, rather than entire 18 book series&hellip;</p> <p>Onward!</p>Lost: Season 1https://blog.jverkamp.com/2025/10/07/lost-season-1/Tue, 07 Oct 2025 00:00:00 +0000https://blog.jverkamp.com/2025/10/07/lost-season-1/<p>Lost.</p> <p>Man this show was huge when it first came out. I watched it then and once since, so this will be my third watch. And this time around I&rsquo;m watching it with someone who (somehow) has never seen it before. To experience all the twists and turns anew with someone? Oh, I&rsquo;m looking forward to that.</p> <p>The first season is awesome. We don&rsquo;t get quite as much mystery and the larger story as later seasons&ndash;but that&rsquo;s exactly what we need. Instead, the first season is all about survival&ndash;they did just crash onto a island far <em>far</em> away from land after all&ndash;and introducing our cast. And oh, they did that in spades.</p> <p>The Pilot was, of course<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> awesome. And I do love the first season giving each main character a flashback episode. Locke&rsquo;s (Walkabout) in particular was quite a twist. And oh Hurley&rsquo;s.</p> <p>I love the characters. It&rsquo;s amazing, with a main cast of over a dozen, how they managed to give each of them (well, most of them) their own over the top backstories and room to breath. I suppose part of that is a side effect of an older style TV season&ndash;when you have over 20 episodes, you have room to actually <em>build</em> to something.</p> <p>Jack is great, even if he&rsquo;s got entirely too much of the perfect &lsquo;Doctor savior&rsquo; personality at times. Kate is great, even when she can&rsquo;t stop running. Sawyer is great&ndash;you love to hate him, but he might just be a good man under all that. Locke is a great mystery all around. Hurley is just great. Full stop.</p> <p>That&rsquo;s not to say I don&rsquo;t like the rest of the characters on the island. There&rsquo;s isn&rsquo;t a main cast member in the first season that I don&rsquo;t find worth watching&ndash;and some of them still have room to grow.</p> <p>Otherwise, I love the slow burn introduction of &lsquo;what is even going <em>on</em> on this Island&rsquo;. Monsters in the woods, mysterious noises, hidden structures. It has it all.</p> <p>And just when they get a chance to leave&hellip;</p>Peter Nimble and His Fantastic Eyeshttps://blog.jverkamp.com/2025/10/02/peter-nimble-and-his-fantastic-eyes/Thu, 02 Oct 2025 00:00:00 +0000https://blog.jverkamp.com/2025/10/02/peter-nimble-and-his-fantastic-eyes/<blockquote> <p>Peter stood back up. &lsquo;Well, that was a perfectly useless conversation,&rsquo; he said with a sigh.</p> <p>Now, there is a wonderful thing in this world called &lsquo;foresight.&rsquo; It is a gift treasured above all others because it allows one to know what the future holds. most people with foresight end up wielding immense power in life, often becoming great rulers or librarians.</p></blockquote> <p>Well that was a fun&ndash;if weirdly surreal at times&ndash;little adventure.</p>Trouble with the Cursedhttps://blog.jverkamp.com/2025/10/02/trouble-with-the-cursed/Thu, 02 Oct 2025 00:00:00 +0000https://blog.jverkamp.com/2025/10/02/trouble-with-the-cursed/<p>And so here we are, the third (already?) of the continued Hollows Universe. This time around, we&rsquo;ve got the fallout of taking over the city from the vampires, all sorts of chaos with Hodin, and (finally?) the introduction of a new Pixie to perhaps balance Jenks out a bit. Plus, I am enjoying seeing more of Pike in a (mostly) non-sexual/romantic relationship with Rachel, running the city together.</p> <p>Oh, it&rsquo;s quite a story.</p> <p>For the first, I&rsquo;ve long had an on again/off again debate about Rachel refusing to kill anyone.</p> <blockquote> <p>I smiled at my warrior-poet, wishing it was that easy. But I’d never killed anyone. At least, no one who hadn’t wanted to be dead—and I wasn’t going to start now.</p></blockquote> <p>On one hand, how <em>exactly</em> is cursing someone into a mouse any better? Especially if there&rsquo;s no plan whatsoever to return them to human form?</p> <p>This book has another example of that (I&rsquo;ll leave who and how as spoilers). And I suppose the main thing to consider is that&ndash;well, barring some magic of course&ndash;death is permanent. It&rsquo;s possible that people do in fact grow and change (we see more than enough fo that in Trent and Al), but not if they&rsquo;re dead.</p> <p>It&rsquo;s an interesting issue to grapple with.</p> <p>On the next&hellip;</p> <blockquote> <p>“Hodin—you remember him?”</p> <p>The tips of Vivian’s hair began to float as she tapped the nearest ley line. I could feel her aura tingling, and I put a few more inches between us as we slowly followed Stef. “Red eyes,” she said, pulling the petals off, one by one. “Cosmic powers. Living in your church. Looks like a skinny biker dude poet.”</p></blockquote> <p>I do enjoy Vivian and Rachel&rsquo;s relationship. And I&rsquo;m perhaps exactly as intrigued by and also annoyed by Hodin as I&rsquo;m supposed to be. So much potential to counter Al and the other demons. But in the end, it&rsquo;s not who you were born as or even what you&rsquo;ve done long past. It&rsquo;s who you are <em>now</em> that counts. And I suppose that&rsquo;s all the problem, now isn&rsquo;t it?</p> <p>And the last? Jenks has been alone for a few books now. In a pixie&rsquo;s life, that&rsquo;s practically forever. So the introduction of a new counter to him (and I fully expect eventually more)? Wonderful. And Getty can well keep him on his toes. &#x1f604;</p> <p>Overall, another solid entry!</p> <p>I&rsquo;m almost caught up now. Not sure what to think about that.</p> <p>Onward!</p>Isles of the Emberdarkhttps://blog.jverkamp.com/2025/09/20/isles-of-the-emberdark/Sat, 20 Sep 2025 00:00:00 +0000https://blog.jverkamp.com/2025/09/20/isles-of-the-emberdark/<p>A trapper, a dragon, a ghost, a feathered man, and a hive mind meet on an island no one can find in a sea that only sort of exists.</p> <p>And it&rsquo;s not even the setup for a joke, but rather a spectacular example of everything the scifi future <a href="https://blog.jverkamp.com/reviews/series/the-cosmere/">The Cosmere</a> is moving towards.</p> <p>We&rsquo;ve already seen bits and pieces of Cosmere crossovers and magic turned technology, especially in <a href="https://blog.jverkamp.com/2022/11/27/the-lost-metal/">The Lost Metal</a> and <a href="https://blog.jverkamp.com/reviews/series/the-stormlight-archive/">The Stormlight Archive</a>, but this is really the first book we&rsquo;ve gotten where the (magi)tech, interworld conflict, and mixmatched crews from many worlds are front and center&ndash;and I love it.</p> <p>At it&rsquo;s core, Isles of the Emberdark is a sequel to the short <a href="https://blog.jverkamp.com/2017/06/24/sixth-of-the-dusk/">Sixth of the Dusk</a>&ndash;which I reread in preparation, although it turns out that wasn&rsquo;t necessary. The entirety of the latter is included as flashback in the former. so it goes. An islander culture, plants and animals that want nothing more than to kill you and eat you (yes, even the plants), and the cost of being left behind as technology runs ahead.</p> <p>But this time around, in addition to Dusk, we also have the aforementioned starship crew. I love a good scifi found family story (this reminds me of the <a href="https://blog.jverkamp.com/reviews/series/wayfarers/">Wayfarers</a>) with wacky rather different crew growing together and learning to depend on one another. The more &lsquo;alien&rsquo;, the better. Emberdark has that in spades. It&rsquo;s wonderful worldbuilding and I hope a hint of even more to come.</p> <p>Characterwise, I love Dusk. Full on &lsquo;it wasn&rsquo;t actually a question, so I didn&rsquo;t feel the need to answer&rsquo; and everything. Starling (dragon<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>!) is our scifi point of view and she&rsquo;s just such a fun positive influence, in spite of everything. We don&rsquo;t get quite as much of Nazh as I&rsquo;d like (from <a href="https://blog.jverkamp.com/2017/06/24/shadows-for-silence-in-the-forests-of-hell/">Shadows for Silence</a>), but what we do is full of &lsquo;but how does <em>that</em> work. Chrysalis (a Dysian Aimian!) is a favorite &lsquo;weird&rsquo; character and a vehicle for exploring xenophobia. And that&rsquo;s not even everyone<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup><sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup><sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>! It&rsquo;s just such a mix and I think done rather well.</p> <p>Overall, this is probably my favorite Cosmere story in a while. I&rsquo;ve loved seeing how Sanderson has taken the idea of a shared universe with related, high details almost &lsquo;sciency&rsquo; hard magic and brought it forward in time&ndash;and I&rsquo;m looking forward to seeing where it can go next.</p> <p>Onward!</p>Alienshttps://blog.jverkamp.com/2025/09/19/aliens/Fri, 19 Sep 2025 00:00:00 +0000https://blog.jverkamp.com/2025/09/19/aliens/<p>Where <a href="https://blog.jverkamp.com/reviews/series/alien/">Alien</a> was a genre defining entry into scifi/horror, Aliens takes that a step in a different direction, keeping the horrifying alien monster roots and adding in a pile of action scenes. Space marines, big guns, and flamethrowers&ndash;oh my.</p> <p>On one hand, taking the (more or less) single alien of Alien and upping the ante to a whole pile of them&ndash;and then blowing at least some of them away&ndash;lessons the mystique. They&rsquo;re not unkillable perfect monsters any more. But it&rsquo;s still a good way to up the ante rather than just putting us through more of the same.</p> <p>Sigourney Weaver remains a star of the episode, this time mixing her tough surviverness with a &lsquo;save the child&rsquo; complex that I think just works. But this time around, we have a whole pile of soldiers, playing up every stereotype you can think of.</p> <blockquote> <p>Vasquez: Look, man. I only need to know one thing: where they are.<br> Drake: Go, Vasquez. Kick ass.<br> Vasquez: Anytime, anywhere, man!<br> Hudson: Right, right. Somebody said &ldquo;alien&rdquo; she thought they said &ldquo;illegal alien&rdquo; and signed up!<br> Vasquez: Fuck you, man!<br> Hudson: Anytime, anywhere.</p></blockquote> <p>And some <em>very</em> memorable lines.</p> <blockquote> <p>Private Hudson: That&rsquo;s it, man. Game over, man. Game over! What the fuck are we gonna do now? What are we gonna do?</p></blockquote> <p>(You can hear it, can&rsquo;t you? Even if you haven&rsquo;t seen the movie?)</p> <blockquote> <p>Ripley: I say we take off and nuke the entire site from orbit. It&rsquo;s the only way to be sure.</p></blockquote> <p>Overall, it&rsquo;s a different feel of movie, but every bit as good as <a href="https://blog.jverkamp.com/reviews/series/alien/">Alien</a>. I&rsquo;ve heard that Alien³ is a step down, but honestly, it would be hard to believe they could do it a <em>third</em> time in the first place. Onward!</p>Million Dollar Demonhttps://blog.jverkamp.com/2025/09/18/million-dollar-demon/Thu, 18 Sep 2025 00:00:00 +0000https://blog.jverkamp.com/2025/09/18/million-dollar-demon/<p>And&hellip; away we go!</p> <p>Through the last couple of books, we&rsquo;ve had more than a few shake ups to the power structure of Cincinnati and the Hollows. The return of the demons&ndash;and the death of one master vampire and the whole &lsquo;vampire soul&rsquo; binding mess.</p> <p>Sn now when when a new crazy (even by vampire standards) master vampire is sent to take power? Well, it just stands to reason that Rachel is going to have to get involved.</p> <p>Seeing Rachel start to stand up and actually take on the power and responsibility that she&rsquo;s been flirting with (and fighting off) for all these books is a worthwhile change. I do hope it sticks. It&rsquo;s a different level of story, but I think it&rsquo;s about time.</p> <p>In addition to that, we have the ongoing Hodin/Al hate triangle.</p> <blockquote> <p>“I don’t know how you survive your ignorance,” he muttered. “I’ve warned you once. Now I’m telling you. If you don’t want to talk to Al, fine. I don’t want to talk to him most days. But you will not take Hodin as your mentor. He is dangerous.”</p></blockquote> <p>Urban fantasy is famous for having love triangles all over the place, so this is certainly a fun inversion to that.</p> <p>I&rsquo;m really curious to see where that goes.</p> <p>Overall, another solid entry and I&rsquo;m curiously optimistic to see where Harrison takes it from here!</p>Alienhttps://blog.jverkamp.com/2025/09/15/alien/Mon, 15 Sep 2025 00:00:00 +0000https://blog.jverkamp.com/2025/09/15/alien/<blockquote> <p>That transmission—Mother&rsquo;s deciphered part of it.</p> <p>It doesn&rsquo;t look like an S.O.S.</p> <p>What is it, then?</p> <p>Well, I—It looks like a warning.</p> <p>I&rsquo;m gonna go out after them.</p> <p>What&rsquo;s the point?</p> <p>I mean, by the time it takes to get there, you&rsquo;ll—they&rsquo;ll know if it&rsquo;s a warning or not, yes?</p></blockquote> <p>It&rsquo;s been almost 50 years and it&rsquo;s impressively how well Alien hold ups.</p> <p>Don&rsquo;t get me wrong, the tech is a product of the time, looking impressively retrofuturistic, given the ways we&rsquo;ve actually advanced since then. And the pacing is a bit slow and the jump scares not quite so scary in comparison to more modern scifi horror films.</p> <p>But there&rsquo;s a reason Alien is widely thought of as a progenitor of the scifi/horror genre. It&rsquo;s just a really good film. The effects and design hold up and Sigourney Weaver&rsquo;s Ripley is a powerhouse of a performance.</p> <p>A solid movie&ndash;and I&rsquo;ve somehow managed to never watch <em>any</em> of the sequels. As they say, the second best time to do anything you&rsquo;ve been meaning to do is <em>right now</em>.</p> <p>Onward!</p>Wind and Truthhttps://blog.jverkamp.com/2025/09/12/wind-and-truth/Fri, 12 Sep 2025 00:00:00 +0000https://blog.jverkamp.com/2025/09/12/wind-and-truth/<blockquote> <p>An oath could be broken, but a promise? A promise stood as long as you were still trying. A promise understood that sometimes your best wasn’t enough. A promise cried with you when all went to Damnation. A promise came to help when you could barely stand. Because a promise knew that sometimes, being there was all you could offer.</p></blockquote> <p>And so ends the first half of <a href="https://blog.jverkamp.com/reviews/series/the-stormlight-archive/">The Stormlight Archive</a>. I first read <a href="https://blog.jverkamp.com/2015/02/06/the-way-of-kings/">The Way of Kings</a> in 2014, around when <a href="https://blog.jverkamp.com/2018/02/15/words-of-radiance/">Words of Radiance</a> came out. Since then, I&rsquo;ve re-read the series again each time (for <a href="https://blog.jverkamp.com/2018/03/02/oathbringer/">Oathbringer</a> and <a href="https://blog.jverkamp.com/2021/01/21/rhythm-of-war/">Rhythm of War</a>) and each time there are new details that I&rsquo;d missed or that didn&rsquo;t make sense until some future reveal in a later book put things together.</p> <p>It&rsquo;s <em>quite</em> the series all told, each book at over a 1000 words. Wind and Truth is over 1300. There is just so much worldbuilding&ndash;thousands of years of history&ndash;magicbuilding&ndash;probably the one thing Sanderson is best known for&ndash;and characterbuilding&ndash;you get a mental illness and <em>you</em> get a mental illness, and <strong>you</strong> get a mental illness.</p> <p>Wind and Truth takes that all up to yet another level.</p> <p>On the worldbuilding scale, we finally get a chance to visit the Spiritual Realm. I&rsquo;ll admit, I think it&rsquo;s perhaps the least interesting realm to me&ndash;the Cognitive Realm is so much cooler&ndash;but it was a piece I think we needed. And a vehicle to actually make use of flashbacks and fill in a lot of the backstory of how Roshar ended up in the mess it is in now. I think we spent a bit more time here than I would have liked, but I won&rsquo;t argue it wasn&rsquo;t interesting.</p> <p>Magicwise (and characterwise), we get Kaladin and Szeth off to collect all the <del>MacGuffins</del> Honorblades and save Sinovar. A lot of people have commented on Kaladin&rsquo;s &ldquo;I&rsquo;m his therapist&rdquo; character journey, but I think it actually works. He&rsquo;s a soldier and a healer&ndash;and this is a chance for him to grow into something more. They&rsquo;re just such a weird pairing to see though. Especially once you add in a talking sword and a law obsessed immortal&hellip;</p> <blockquote> <p>“What are you? &hellip; are you his spren? His god?”<br> “No,” Kaladin said. “I’m his therapist.”<br> “&hellip; What is that?”<br> “I honestly have no idea,” Kaladin admitted.</p></blockquote> <p>Otherwise characterwise, I think that my favorite couple this time around were Shallan and Adolin, despite getting quite a bit less&ndash;but also more (heh)&ndash;together time than one might hope. Shallan is&ndash;quite honestly&ndash;a mess, but her learning to deal with that and quite literally come to find herself is a fascinating story and I&rsquo;m glad to see that moving forward. And seeing her grow into a more confident version of herself.</p> <blockquote> <p>“Murder?” Pattern said, placing another soldier. He’d built a surprisingly tall pyramid. “Oh, you mean murder! Shallan is good at murder. Yes, mmmmm…”<br> “Pattern,” she said, “please don’t say it that way.”<br> “She is good,” Pattern corrected himself, “at making people who were once alive and threatening, unalive and unthreatening. Mmmm. Very good at it.”</p></blockquote> <p>And Adolin&ndash;to be one of the finest swordsmen in a world where gods and immortals have come to battle&ndash;well, he&rsquo;s just such a fun character. His interactions in particular with Yanagawn was great.</p> <p>And that&rsquo;s not all! I won&rsquo;t go into everything&ndash;after all, if you&rsquo;ve already read 4000 pages of this series, you&rsquo;re going to read it (or not) regardless of what I have to say&ndash;but there is just so much to this story.</p> <p>And oh&hellip; the ending.</p> <blockquote> <p>She didn’t know what terrified her more. The idea of some powerful, all-knowing deity that controlled everything—destroying her free will, yet for some reason still leaving the entire world in so much pain. Or the knowledge that there were beings who ruled the cosmere with immense power—but they had all the foibles, flaws, and limited morality of anyone else.</p></blockquote> <p>That&hellip; is going to shake things up methinks.</p> <p>It&rsquo;s kind of a bummer to realize that we won&rsquo;t get another Stormlight Archive until (currently) ~2031. But on the other hand, another era of Mistborn! And hey, if I&rsquo;m feeling Stormlight deficient, there&rsquo;s always time for another reread.</p> <blockquote> <p>“I’m a storyteller,” Wit said, with a flip of his fingers. “I have the right to redefine words.”<br> “That’s stupid.”<br> “That’s literature.”<br> “It’s confusing.”<br> “The more confusing, the better the literature.”<br> “That might be the most pretentious thing I’ve ever heard.”<br> “Aha!” Wit said, pointing. “Now you’re getting it.”</p></blockquote> <p>Onward!</p>American Demonhttps://blog.jverkamp.com/2025/09/02/american-demon/Tue, 02 Sep 2025 00:00:00 +0000https://blog.jverkamp.com/2025/09/02/american-demon/<p>So. That&rsquo;s how Harrison is going to come back to <a href="https://blog.jverkamp.com/reviews/series/the-hollows/">The Hollows</a> after that epilogue&ndash;it was <em><a href="https://tvtropes.org/pmwiki/pmwiki.php/Main/AllJustADream" target="_blank" rel="noopener">all just a dream</a></em>.</p> <p>I actually (mostly) liked that epilogue, so it&rsquo;s kind of a bummer. But if you&rsquo;re going to go back to mostly status quo, well then I suppose you have to do something. I do wonder if that actually means that anyone that showed up in the &lsquo;dream&rsquo; can actually still die off now?</p> <p>In any case, in <a href="https://blog.jverkamp.com/2025/08/19/the-witch-with-no-name/">The Witch with No Name</a> Rachel saved the world! And now she has to deal with the fallout from that. Zombies, mysterious murders, new frenemies, and once again seeing how in the <em>world</em> demons are going to re-integrate into the world, oh my?</p> <blockquote> <p>“Jesus, Rachel,” Edden coaxed, but I was having none of it. “Don’t take this personally. You can’t deny that forcing couples to kill one another is demonic.”</p> <p>&hellip;</p> <p>“What’s in it for them?” I asked, waving Ivy’s carefully assembled information. “Demons don’t do anything unless it’s for a profit.” Frustrated, I slapped the reports against his chest, and he fumbled for them. “And neither do I anymore,” I said.</p></blockquote> <p>And of course, things go sideways. Because even after everything&ndash;even after it nearly ending the world more than once&ndash;Rachel is still <em>terrible</em> at listening to the people she&rsquo;s supposed to trust and acting fully on passion first, thinking things through&hellip; sometime&ndash;maybe.</p> <p>Characterwise, one theme that we continue to seem in this series is the possibility of redemption. You have literal murderers (Trent and Al in particular), but they really are trying to be better people. So how does that work? Are they allowed to work towards a better life? Do they have to pay for what they&rsquo;ve done? What price is high enough murder and thousands of years of torture and slave trading?</p> <blockquote> <p>“It’s what we do here,” Jenks said. “All are innocent until proven guilty. Even demons.”</p> <p>Hodin’s feet scuffed the old wood floor. “How . . . quaint.”</p></blockquote> <p>But hey, Rachel and Trent are cute together. I hope they get a few books at least to be happy.</p> <blockquote> <p>“Stop,” Trent demanded again, frowning at Quen. “Everyone, stop. Relax. Rachel, you can kill me in a few minutes. I want to talk first. You like to talk, don’t you?”</p></blockquote> <p>And the girls are so cute.</p> <blockquote> <p>“Because you’re a demon princess,” Lucy said, playing with my curling hair, and from the closet came Trent’s grunt of surprise. “And demon princesses are brave.”</p></blockquote> <p>Rachel constantly worried about Trent leaving for Ellasbeth and blaming herself for all the elf politics things is growing old.</p> <p>I think my biggest negative for this entry comes in the ending. There&rsquo;s a lot of mechanical talk about what a soul is and messing with souls, but heroic or not, there&rsquo;s a sacrifice play towards the end that I&rsquo;m hoping gets resolved quickly&hellip;</p> <p>Overall, it&rsquo;s fun to keep going. I can only imagine having a fairly definite end, waiting the six years between the books and then learning you actually get more! No break for me though.</p> <p>Onward!</p> <hr>