jverkamp.comhttps://blog.jverkamp.com/Recent content on jverkamp.comHugoen-usTue, 20 Jan 2026 00:00:00 +0000Genuary 2026.20: One linehttps://blog.jverkamp.com/2026/01/20/genuary-2026.20-one-line/Tue, 20 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/20/genuary-2026.20-one-line/<p>One line&hellip; that repeatedly splits, albeit without (mostly) crossing itself.</p> <p>Fractal trees GO!</p> <ul> <li><code>splitChance</code> controls how quickly the line branches</li> <li><code>minChildren</code> / <code>maxChildren</code> controls branching</li> <li><code>angleRange</code> is how many radians the new branches can change by</li> <li><code>randomizeAngles</code> controls if child angles are random/evenly spaced</li> <li><code>spacing</code> is roughly how spread out the tree is</li> <li><code>pauseOnResetFor</code> / <code>stopOnReset</code> controls what happens when a tree is done</li> <li><code>colorMode</code> changes drawing colors</li> <li><code>anchor</code> changes where the tree starts</li> </ul> <p>It does get a bit sluggish, especially if you have a high number of children.</p>Genuary 2026.19: 16x16https://blog.jverkamp.com/2026/01/19/genuary-2026.19-16x16/Mon, 19 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/19/genuary-2026.19-16x16/<p>I&rsquo;m&hellip; not really sure where I was going with this one. &#x1f604;</p> <p>Basically, 16x16 tiny sketches that slide around like a <a href="https://en.wikipedia.org/wiki/sliding%20block%20puzzle">sliding block puzzle</a>. Although with how chaotic some of the simulations are, it&rsquo;s not always easy to see.</p>Genuary 2026.18: Unexpected pathshttps://blog.jverkamp.com/2026/01/18/genuary-2026.18-unexpected-paths/Sun, 18 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/18/genuary-2026.18-unexpected-paths/<p>I feel like the most unexpected of paths is <a href="https://en.wikipedia.org/wiki/Langton%e2%80%99s%20Ant">Langton’s Ant</a>!.</p> <p>Okay, it&rsquo;s fairly expected. And I&rsquo;ve even <a href="https://blog.jverkamp.com/2014/08/07/langtons-ant/">done it before</a>. Been a while though.</p> <p>Anyways, here we go!</p> <p>In a nutshell, you have a grid with N possible values (the length of the rule string). For each pattern, when the &lsquo;ant&rsquo; walks on that cell, the value in incremented by one and you will turn according to these rules:</p> <ul> <li><code>R</code> turn right (90° or 60° in hex)</li> <li><code>L</code> turn left (same)</li> <li><code>S</code> turn right 120° in hex mode (nothing in square)</li> <li><code>M</code> turn left 120° in hex mode</li> <li><code>U</code> turn 180° in hex mode</li> <li>anything else (<code>N</code> above), do nothing/go straight</li> </ul> <p>This ends up with some really interesting behavior for such a short ruleset. Langton&rsquo;s Ant (LR, the default) is definitely an interesting one. For 10,000 ticks, you get chaotic behavior&hellip; and then suddenly it stabilizes!</p> <p>Here are some interesting patterns:</p> <ul> <li><a href="?rule=RLR">RLR - chaotic growth</a></li> <li><a href="?rule=LLRR">LLRR - symmetric growth</a></li> <li><a href="?rule=LRRRRRLLR">LRRRRRLLR - square filling</a></li> <li><a href="?rule=LLRRRLRLRLLR">LLRRRLRLRLLR - convoluted highway</a></li> <li><a href="?rule=RRLLLRLLLRRR">RRLLLRLLLRRR - fills a triangle</a></li> <li><a href="?rule=MNNLML&amp;hexGrid=true">MNNLML - hex circular growth</a></li> <li><a href="?rule=LMNUMLS&amp;hexGrid=true">LMNUMLS - hex spiral growth</a></li> </ul> <p>You can also do some interesting things with multiple ants (they&rsquo;ll spawn in a circle):</p> <ul> <li><a href="?rule=NRL&amp;antCount=100&amp;spawnRadius=100">circular</a></li> </ul> <p>The modes are:</p> <ul> <li> <p><code>pauseMode</code> controls when the simulation will stop (note: will always pause at width * height * 100 tiles)</p> <ul> <li><code>n-tiles</code> will pause when the tile count is <code>width * height</code> (no matter where they are)</li> <li><code>one-at-edge</code> will stop when each cell is 1 pixel and any ant reaches the edge of the image</li> <li><code>all-at-edge</code> will only stop when all ants reach the edge</li> <li><code>no-pause</code> will never pause (this can get really laggy eventually)</li> </ul> </li> <li> <p><code>centerMode</code> is how the displayed part of the simulation will be centered</p> <ul> <li><code>origin</code> will stay centered at 0,0</li> <li><code>bounds</code> will center on the middle of the current overall bounds</li> <li><code>ants</code> will average the x,y of all ants</li> <li><code>tiles</code> will average the x,y of all tiles</li> <li><code>mouse</code> will allow some mouse control; left click and drag to move, right click (in theory) to reset</li> </ul> </li> </ul> <br>Genuary 2026.17: Wallpaper Groupshttps://blog.jverkamp.com/2026/01/17/genuary-2026.17-wallpaper-groups/Sat, 17 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/17/genuary-2026.17-wallpaper-groups/<blockquote> <p>Wallpaper group. There are only 17 ways to cover a plane with a repeating pattern, choose your favourite on this page: <a href="https://en.wikipedia.org/wiki/Wallpaper_group" target="_blank" rel="noopener">Wallpaper group</a></p> <p>This is a great article about <a href="https://tiled.art/en/symmetryClassification/" target="_blank" rel="noopener">Classifying Symmetries</a> that says there are actually 35 tiling patterns!</p> <p><a href="https://en.wikipedia.org/wiki/List_of_planar_symmetry_groups" target="_blank" rel="noopener">List of planar symmetry groups</a> is another Wikipedia page with a good summary of the wallpaper group.</p> </blockquote> <p>I spent waaaaay too long on this one.</p> <ul> <li><code>group</code> is the 17 groups mentioned</li> <li><code>subGroup</code> is horizontal or vertical for some of the above</li> <li><code>cellType</code> is the shape of each cell</li> <li><code>cellStyle</code> is what to fill them with</li> <li><code>debugDrawOne</code> shows what one tile looks like</li> <li><code>debugDisplay</code> prints what random values were selected</li> <li><code>pauseBuffer</code> is useful for pausing the generation (although if any of the others are random they will keep changing)</li> </ul> <p>Not all of the groups and cell types are perfectly compatible. In fact, probably half or more aren&rsquo;t. But they still produce something, and I think that&rsquo;s pretty cool!</p>Genuary 2026.16: Order vs Disorderhttps://blog.jverkamp.com/2026/01/16/genuary-2026.16-order-vs-disorder/Fri, 16 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/16/genuary-2026.16-order-vs-disorder/<blockquote> <p>Order vs Disorder</p> </blockquote> <p>So I have two kinds of agents: Order, which always moves in straight lines and Chaos which&hellip; doesn&rsquo;t!</p> <p>Settings:</p> <ul> <li><code>updateRate</code> is how fast it runs</li> <li><code>minAgentCount</code> will spawn agents until you reach this number</li> <li><code>maxAgentCount</code> will kill off agents until you&rsquo;re under this number</li> <li><code>dieOfOldAge</code> will kill off old agents</li> <li><code>maxAge</code> is the longest an agent can last</li> <li><code>agentRatio</code> of 0 is all order and 1 is all chaos</li> <li><code>spawnRate</code> is how often an agent will spawn a new agent (of the same kind)</li> <li><code>resetPercent</code> is how much of the screen can be full before resetting</li> <li><code>pauseOnReset</code> will pause on a reset to allow downloading! (change any setting include this one to unpause)</li> </ul>Genuary 2026.15: Invisible Objecthttps://blog.jverkamp.com/2026/01/15/genuary-2026.15-invisible-object/Thu, 15 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/15/genuary-2026.15-invisible-object/<blockquote> <p>Create an invisible object where only the shadows can be seen.</p> </blockquote> <p>Noise that pushes a bunch of particles around on the screen. There is 1 (or more) &lsquo;shadows&rsquo; on the screen that push the dust away.</p> <p>If the shadow runs off the screen it will come back in a bit from the opposite edge.</p> <p>Settings:</p> <ul> <li><code>dustCount</code> is how much dust</li> <li><code>dustSpeed</code> is a multiplier for how fast the dust goes per frame</li> <li><code>dustDieOff</code> is how much dust disappears each frame</li> <li><code>onlyEdgeDust</code> sets dust to only spawn on the edges, rather than anywhere (has some weird visual artifacts when the dust is a nearly horizontal / vertical)</li> <li><code>rainbowDust</code> makes the dust far more colorful</li> <li><code>windScale</code> is the scale of the noise, 1 will wiggle a lot more, 5 is closer to straight lines and slow changes</li> <li><code>fade</code> will leave trails by fading the screen; turning this off is interesting since the shadow will be much more subtle</li> <li><code>shadowCount</code> is how many shadows there are</li> <li><code>shadowForce</code> is how strongly they repel dust</li> <li><code>shadowWindIndependent</code> means the shadow doesn&rsquo;t always move with the particles</li> <li><code>shadowEdge</code> will show where the shadow shape actually is</li> <li><code>shadowsMove</code> will allow the shadows to move / stop them</li> </ul>Genuary 2026.14: Fits Perfectlyhttps://blog.jverkamp.com/2026/01/14/genuary-2026.14-fits-perfectly/Wed, 14 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/14/genuary-2026.14-fits-perfectly/<h2 id="14-fits-perfectly">14) Fits Perfectly</h2> <p>Basically, we&rsquo;ll pack as many circles in as we can!</p> <ul> <li><code>retriesPerFrame</code> is how many circles it will try to place before giving up and drawing the frame</li> <li><code>minDiameter</code> is the smallest a circle can be (this should be 1 for a &lsquo;perfect fit&rsquo;)</li> <li><code>maxDiameter</code> is the largest one can be</li> <li><code>spacing</code> is how much space to leave between circles (this should be 0 a &lsquo;perfect fit&rsquo;)</li> <li><code>borders</code> will draw a black border on each circle</li> <li><code>fillInside</code> will place circles <em>inside</em> of each other as well as outside, so long as there is still enough <code>spacing</code></li> <li><code>blackPercent</code> is how many of the circles will be black rather than bright colors</li> </ul>Genuary 2026.13: Self Portraithttps://blog.jverkamp.com/2026/01/13/genuary-2026.13-self-portrait/Tue, 13 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/13/genuary-2026.13-self-portrait/<h2 id="13-self-portrait">13) Self Portrait</h2> <p>That was surprisingly fun.</p> <p>Basically, it will take recursively divide the picture over time. Each time, it will find the node with the largest error (real image color compared to the current random color) and split it in 4, assigning each to the nearest random color from our palette.</p> <ul> <li><code>colors</code> controls how many maximum (random) colors will be chosen</li> <li><code>edges</code> will draw the boxes of the tree</li> <li><code>minimumBlock</code> is the size at which it won&rsquo;t split any more</li> <li><code>resetAfter</code> will generate new colors even this many frames</li> <li><code>evenSplit</code> will split each box into exactly 4; if this is off, each axis will randomly be 25-75%</li> <li><code>weightErrorBySize</code> will split small boxes earlier; with this off, larger boxes have more error because they are larger</li> </ul> <p>If you don&rsquo;t want to look at me any more, turning off <code>selfPortraitMode</code> will load an image from <a href="https://picsum.dev/" target="_blank" rel="noopener">picsum.dev</a>.</p>Genuary 2026.12: Boxeshttps://blog.jverkamp.com/2026/01/12/genuary-2026.12-boxes/Mon, 12 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/12/genuary-2026.12-boxes/<h2 id="12-boxes">12) Boxes</h2> <p>It&rsquo;s like <a href="https://drawabox.com/" target="_blank" rel="noopener">draw a box</a>. But somehow even more. And automatic.</p> <p>If you let it run for a while, you get some crazy abstract art!</p> <p><img src="run-for-a-while.png" alt="Boxes after running for a long time"></p>Genuary 2026.11: Quinehttps://blog.jverkamp.com/2026/01/11/genuary-2026.11-quine/Sun, 11 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/11/genuary-2026.11-quine/<h2 id="11-quine">11) Quine</h2> <p>Making a genart <a href="https://en.wikipedia.org/wiki/quine">quine</a>? That&rsquo;s&hellip; certainly a thing!</p> <p>So basically I made a very simple stack based virtual machine. You can check the source code below for what commands it can actually run. It will then run until it outputs enough code to match the input length (or times out). If it happens to output a quine? Woot!</p> <p>If not, it will randomly mutate and try again.</p> <ul> <li><code>cellSize</code> - Change how big the program is (default is 10, theoretically with <code>semi quines</code> size shouldn&rsquo;t matter)</li> <li><code>ticksPerFrame</code> - How fast the simulation will run</li> <li><code>asFastAsPossible</code> - Ignore the above and run an entire simulation per frame (it could <em>technically</em> go even faster &#x1f604;)</li> <li><code>pauseAfter</code> - Pause to see what happened after output is done or a break</li> <li><code>stopAfter</code> - When a single program has run, stop the main loop (mostly useful for debugging)</li> <li><code>randomizePercent</code> - How much of the input to randomly change for the next iteration</li> <li><code>runOutput</code> - Run the output as the next program (otherwise, randomize the input)</li> <li><code>highlightActive</code> - Highlight the parts of the program that actually ran (brighter colors)</li> <li><code>allowSemiQuine</code> - Ignore non-active parts of the program when considering a quine (if you copied the output to the program in these parts, they&rsquo;d be a quine, so I think it counts)</li> <li><code>allowReadingCode</code> - Allow (new) commands that allow reading our own source code</li> <li><code>allowWritingCode</code> - Allow (new) commands that can modify the code you were originally running</li> <li><code>debugPrint</code> - Print each command run/output to console.log for debugging</li> <li><code>debugSlow</code> - Drops the framerate to 1 fps for debugging</li> <li><code>debugStepButton</code> - Add a &lsquo;step&rsquo; button that runs one step at a time (<code>noLoop</code>) for debugging (reload the page)</li> </ul> <p>In addition, you can put in code in the box and &rsquo;load&rsquo; it to run. This will be helpful to verify quines! I have some interesting code <a href="#interesting-examples">below</a> (including a hand written quine! That uses the self reading instructions).</p> <p>If you manage to find a quine organically (or write one), I&rsquo;d <em>love</em> to hear what it was!</p>Lost: Season 5https://blog.jverkamp.com/2026/01/11/lost-season-5/Sun, 11 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/11/lost-season-5/<blockquote> <p>What lies in the shadow of the statue?</p> </blockquote> <p>Season 5 is where it really started to get obvious that the writers of the first few seasons did <em>not</em> have a plan for where all of this was going to go. It manages to hold together relatively well&ndash;and we do get a few answers, mixed in with all those questions&ndash;but man, there are a few moments which just don&rsquo;t line up with what we already thought we knew.</p> <p>I suppose that&rsquo;s what you get any time a show introduces <span class="spoiler">time travel</span> .</p> <blockquote> <p>Faraday: I studied relativistic physics my entire life. One thing emerged over and over&ndash;can&rsquo;t change the past. Can&rsquo;t do it. Whatever happened, happened. All right? But then I finally realized&hellip; I had been spending so much time focused on the constants, I forgot about the variables. Do you know what the variables in these equations are, Jack?</p> <p>Jack: No.</p> <p>Faraday: Us. We&rsquo;re the variables. People. We think. We reason. We make choices. We have free will. We can change our destiny.</p> </blockquote> <p>We have, at first, a combination of &lsquo;what is going on here&rsquo; on the Island, along with a &lsquo;we have to go back!&rsquo; off it. And man, despite the fact that there are only the &lsquo;Oceanic Six&rsquo;, there are some <em>pretty</em> complicated shifting alliances going on here.</p> <blockquote> <p>Frank Lapidus: In my experience, the people who go out of their way to tell you that they&rsquo;re good guys are the bad guys.</p> </blockquote> <p>And then, in the latter half, once the Island stabilizes a bit? Well, that&rsquo;s where all the real trouble starts. Because the might just have made it back <em>where</em> they were trying to go. But not quite <span class="spoiler">*when*</span> .</p> <blockquote> <p>Jack: If we can do what Faraday said&hellip; our plane never crashes&hellip; Flight 815 lands in Los Angeles. And everyone we lost since we got here&hellip; they&rsquo;d all be alive. Kate: And what about us? We just&hellip; go on living our life because we&rsquo;ve never met? Jack: All the misery that we&rsquo;ve been through&hellip; we&rsquo;d just wipe it clean. Never happened. Kate: It was not all misery. Jack: Enough of it was.</p> </blockquote> <p>Oh, that&rsquo;s quite the set up for season 6.</p> <p>One more to go!</p>The Bear and the Nightingalehttps://blog.jverkamp.com/2026/01/11/the-bear-and-the-nightingale/Sun, 11 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/11/the-bear-and-the-nightingale/<blockquote> <p>“All my life,” she said, “I have been told ‘go’ and ‘come.’ I am told how I will live, and I am told how I must die. I must be a man’s servant and a mare for his pleasure, or I must hide myself behind walls and surrender my flesh to a cold, silent god. I would walk into the jaws of hell itself, if it were a path of my own choosing. I would rather die tomorrow in the forest than live a hundred years of the life appointed me. Please. Please let me help you.”</p> </blockquote> <p>The Bear and the Nightingale.</p> <p>Basically, what happens if you take a Russian fairy tale and expand it to the full length of a novel while still managing to keep both the whimsical magical aspects&hellip; and all the dark bits as well.</p> <p>We go through years, watching as our main character Vasya is born (and her mother dies), up through when she&rsquo;s a teenager on the cusp of being married off&ndash;or sent to a monastery. She never quite fits in and makes for a wonderful point of view into this wordl.</p> <p>In the meantime, we see Russia &lsquo;growing up&rsquo; as well, abandoning the old gods and spirits of the forest in favor of the Church. It&rsquo;s not the only conflict of the story (or, I&rsquo;d argue, even the main one), but it does underlie the whole thing.</p> <blockquote> <p>“Nothing changes, Vasya. Things are, or they are not. Magic is forgetting that something ever was other than as you willed it.”</p> </blockquote> <p>This was a delightful, haunting sort of story.</p> <p>Side note: I did not realize this was a trilogy until writing this review! More to read!</p>Genuary 2026.10: Polar coordinateshttps://blog.jverkamp.com/2026/01/10/genuary-2026.10-polar-coordinates/Sat, 10 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/10/genuary-2026.10-polar-coordinates/<h2 id="10-polar-coordinates">10) Polar coordinates</h2> <p>CIrcles within circles within circles.</p>Brian's Hunthttps://blog.jverkamp.com/2026/01/09/brians-hunt/Fri, 09 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/09/brians-hunt/<p>Basically, this is <a href="https://blog.jverkamp.com/2026/01/08/brians-return/">Brian’s Return</a> part 2. Where he actually finishes the trip he set off on&ndash;and somehow by <em>far</em> the most tragic of the five books. It&rsquo;s a major tonal shift and there isn&rsquo;t really any time to recover from it before the book is over.</p> <p>I get it, nature is rough sometimes. People die. But these books always had the sense of &rsquo;no matter how bad it gets, you know (because it&rsquo;s a book), nothing truly terrible will happen to Brian&rsquo;. If that sounds great to you, consider skipping this book.</p> <p>Other than that, we have the first hint of Brian as teenage boy with teenage boy thoughts&ndash;but there just isn&rsquo;t time to get into it.</p> <p>And we have more hunting&ndash;again, little enough time to get into it.</p> <p>Honestly, you can stop after book 1 or 3, in my opinion. So it goes.</p> <p>If there ever happened to be a sixth book, I&rsquo;d be interested to see the story finished, but apparently (on looking it up), Gary Paulsen passed away in 2021. Such is life. I do wonder about his other works though.</p> <p>Onward!</p>Genuary 2026.09: Cellular automatahttps://blog.jverkamp.com/2026/01/09/genuary-2026.09-cellular-automata/Fri, 09 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/09/genuary-2026.09-cellular-automata/<h2 id="9-cellular-automata">9) Cellular automata</h2> <p>Just a bunch of random rules, with the ability (if you put this in p5js at least) to add them pretty easily.</p> <p>This one can do some wacky things if you randomize it. But also, it <em>might</em> crash your browser tab on some of these settings. Sorry. &#x1f604;</p> <p>Try:</p> <ul> <li>Perlin, Max, fuzz, diffuse</li> </ul>The Gate of the Feral Godshttps://blog.jverkamp.com/2026/01/09/the-gate-of-the-feral-gods/Fri, 09 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/09/the-gate-of-the-feral-gods/<blockquote> <p>Ever since that first monkey looked up into the sky and saw something twinkling up there, you meat puppets have tried to force twenty pounds of existential meaning into a ten pound sack of chaos.</p> </blockquote> <p>Holy crap things just keep escalating.</p> <p>We have another single level this time. Bubbles in space, each populated by a subset of crawlers that can&rsquo;t (initially) interact, and each of which separated into air/earth/water/underground sections with their own puzzles.</p> <p>Of course by the end Carl has done an excellent job of not being broken (more or less), saved people, killed even more people, and managed to summon and/or fight entirely too many (feral) gods.</p> <blockquote> <p>“You know what, Carl? I’ve decided something,” Donut said, finally speaking. She released Mongo, who squawked and started investigating this strange, new world. “Yeah, Donut?” “I think they’re right about you. I think you’re crazy. Like, not a little weird crazy. Not guy who eats cereal without milk crazy. But crazy, crazy. Straitjacket crazy.” I took the cat into my lap, and then I pulled her to my chest. She purred heavily into my ear.</p> </blockquote> <p>Man that ending hits hard.</p> <p>And now&hellip; based on the afterward, we&rsquo;re <em>really</em> going to have some complications next book.</p> <p>I&rsquo;m looking forward to it!</p>Brian's Returnhttps://blog.jverkamp.com/2026/01/08/brians-return/Thu, 08 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/08/brians-return/<blockquote> <p>Brian sat quietly, taken by a peace he had not known for a long time, and let the canoe drift forward along the lily pads. To his right was the shoreline of a small lake he had flown into an hour earlier. Around him was the lake itself, an almost circular body of water of approximately eighty acres surrounded by northern forest&ndash;pine, spruce, popular, and birch&ndash;and thick brush.</p> </blockquote> <p>Brian is back.</p> <p>Again.</p> <p>After a couple years, Brian doesn&rsquo;t seem to be doing overly well adapting back to &lsquo;regular life&rsquo;. So he ends up going back to the wilderness, this time at least with a few more supplies. It&rsquo;s another trip on a river (this time with a canoe) with a bunch more hunting and arrow building.</p> <p>Honestly, it ends before it really starts and I&rsquo;m not entirely sure what the point of this one is compared to the two. We don&rsquo;t <em>really</em> get into Brian&rsquo;s headspace going back. So it goes.</p> <p>It is amusing that he takes Shakespeare with him this time around though.</p> <blockquote> <p>Author&rsquo;s Note</p> <p>This is the final book about Brian, though someday I may do a nonfiction book about those parts of my life that were like Brian&rsquo;s.</p> </blockquote> <p><em>doubt</em></p>Genuary 2026.08: A cityhttps://blog.jverkamp.com/2026/01/08/genuary-2026.08-a-city/Thu, 08 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/08/genuary-2026.08-a-city/<h2 id="8-a-city">8) A city</h2> <p>Simple parallax graphics and (slowly) blinking windows. I enjoyed this one.</p>Genuary 2026.07: Boolean algebrahttps://blog.jverkamp.com/2026/01/07/genuary-2026.07-boolean-algebra/Wed, 07 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/07/genuary-2026.07-boolean-algebra/<h2 id="5-boolean-algebra">5) Boolean algebra</h2> <p>So the basic idea here is to recursively divide the space. The black squares are the randomly chosen values. Then, for each level of the tree, combine the children using one of the selected functions (and/or/xor/etc), drawing a border if the result of that combination is true.</p> <p>Try various combinations of settings!</p>Genuary 2026.06: Lights on/offhttps://blog.jverkamp.com/2026/01/06/genuary-2026.06-lights-on/off/Tue, 06 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/06/genuary-2026.06-lights-on/off/<h2 id="5-lights-onoff">5) Lights on/off</h2> <p>&#x1f604;</p> <p>(<a href="?flicker=true">Turn on flickering.</a>)</p> <p>(<a href="?flicker=true&amp;flickerPercent=1">If you dare.</a>)</p>Genuary 2026.05: Write 'genuary'https://blog.jverkamp.com/2026/01/05/genuary-2026.05-write-genuary/Mon, 05 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/05/genuary-2026.05-write-genuary/<h2 id="5-write-genuary">5) Write &lsquo;genuary&rsquo;</h2> <p>Yeah, this one got weird and recursive. But it&rsquo;s only sort of font data, so I think it works.</p>Genuary 2026.04: lowreshttps://blog.jverkamp.com/2026/01/04/genuary-2026.04-lowres/Sun, 04 Jan 2026 00:00:10 +0000https://blog.jverkamp.com/2026/01/04/genuary-2026.04-lowres/<h2 id="4-lowres">4) lowres</h2> <p>Perlin noise, but &hellip; really lowres? You can play with how low res or how many colors you want.</p>Brian's Winterhttps://blog.jverkamp.com/2026/01/04/brians-winter/Sun, 04 Jan 2026 00:00:05 +0000https://blog.jverkamp.com/2026/01/04/brians-winter/<blockquote> <p>Fall came on with a softness, so that Brian didn’t realize what was in store—a hard-spined north woods winter—until it was nearly too late.He had never thought he would be here this long. After the plane crash that marooned him in the wilderness he had lived day by day for fifty-four days, until he had found the survival pack in the plane. Then another thirty-five days through the northern summer, somehow living the same day-to-day pattern he had started just after the crash.</p> </blockquote> <p>So basically, &lsquo;what if Brian&rsquo; <em>wasn&rsquo;t</em> rescued at the end of <a href="https://blog.jverkamp.com/2025/12/22/hatchet/">Hatchet</a> (and thus <a href="https://blog.jverkamp.com/2025/12/29/the-river/">The River</a> also doesn&rsquo;t happen). He still gets the survival pack from the plane, but no radio for help.</p> <p>And it goes&hellip; about as you&rsquo;d expect? It&rsquo;s very cold, but he figures out skins and furs. He does improve on his hunting supplies and learns more nature stuff?</p> <p>Really, it&rsquo;s more of the same, which honestly is okay. I liked it more than <a href="https://blog.jverkamp.com/2025/12/29/the-river/">The River</a>.</p>The Grimoire Grammar School Parent Teacher Associationhttps://blog.jverkamp.com/2026/01/04/the-grimoire-grammar-school-parent-teacher-association/Sun, 04 Jan 2026 00:00:03 +0000https://blog.jverkamp.com/2026/01/04/the-grimoire-grammar-school-parent-teacher-association/<blockquote> <p>&ldquo;See? She&rsquo;ll be fine. Evander&rsquo;s charming with animals, he nad half the birds in the neighborhood following him around by the time he was three. C&rsquo;mon, you need to hit the wine and cheese table. And maybe skip the cheese.&rdquo; Moira grabbed her arm and steered her around.</p> </blockquote> <p>So&hellip; basically we have a mundane couple whose daughter is attacked (and thus turned) by a werewolf. Suddenly, they&rsquo;re thrust into the magical world alongside our own, complete with kindergarten, children&rsquo;s sports, marriage woes, talent shows, and PTAs.</p> <p>And just while everyone around is magical in someways, it&rsquo;s at times humorous and at times entirely too on the nose combination of magic and mundane that really sets this off.</p> <blockquote> <p>&ldquo;You cast an invisibility spell?&rdquo; Steve and his wife exchanged the classic &ldquo;we&rsquo;re in for it now&rdquo; look every pair of parents perfects. &ldquo;I just did what Daddy does when he&rsquo;s eating Mommy&rsquo;s chips,&rdquo; the boy said guilelessly.</p> </blockquote> <p>Oh I do love the tone of this book.</p> <blockquote> <p>Vivian and Daniel exchanged a glance. &ldquo;Uh,&rdquo; Daniel said when the silence had become a hair too long, &ldquo;I don&rsquo;t actually know what skirmedge is.&rdquo;</p> <p>&ldquo;Well, it&rsquo;s a little like soccer. There&rsquo;s a ball, although the ball transforms, and depending on if it&rsquo;s in sphera or avis form, you can either hit it or catch it, until more than half the team crosses the patriam line—&rdquo; Steve said, enthusiastically.</p> <p>&ldquo;It&rsquo;s wizard soccer,&rdquo; Madhuri cut him off as she looked up from her phone.</p> <p>&ldquo;Oh, like-&rdquo;</p> <p>&ldquo;Nope, don&rsquo;t say it,&rdquo; she warned them.</p> </blockquote> <p>&#x1f604;</p> <blockquote> <p>They were heading for the illusionist&rsquo;s table, where the kids were getting adorned with butterfly wings that opened and closed, and little spaceships that orbited their shoulders, or copyrighted cartoon character heads overlaid on top of their real ones. To think that at last year&rsquo;s party for Aria, Vivian had bought a face painting kit and had been proud when she&rsquo;d turned out a half-decent cheek rainbow.</p> </blockquote> <p>Magical birthday parties yo.</p> <p>Oh, and as a side note:</p> <blockquote> <p>Dec 13 3:38 pM Get your PJs ready! The last Friday before Winter Solstice is Cozy Day. Younger students may even bring a stuffed friend with them! (Note: stuffed friends must be inanimate.) Also, last chance to contribute to the Teachers Appreciation Fund! Last year&rsquo;s blood donations were accepted in the spirit in which they were given, but we respectfully request that contributions be in a currency this year.)</p> </blockquote> <p>I love the chapter intros.</p> <p>It&rsquo;s just an all around fun book, with enough series parts to really set off the humor and enough fun world building without getting bogged down. I do wish I could stay in this world just a bit longer, but for what it is, it was a great book to start the new year off with.</p>Genuary 2026.03: Fibonacci foreverhttps://blog.jverkamp.com/2026/01/03/genuary-2026.03-fibonacci-forever/Sat, 03 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/03/genuary-2026.03-fibonacci-forever/<h2 id="3-fibonacci-forever">3) Fibonacci forever</h2> <p><a href="https://en.wikipedia.org/wiki/Fibonacci">Fibonacci</a></p> <p>This is entirely based around this Fibonacci generator function:</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-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">makeFibber</span>(<span style="color:#a6e22e">maxValue</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">1000</span>) { </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">let</span> <span style="color:#a6e22e">a</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">let</span> <span style="color:#a6e22e">b</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> () =&gt; { </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">let</span> <span style="color:#a6e22e">n</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">a</span> <span style="color:#f92672">+</span> <span style="color:#a6e22e">b</span>; </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">a</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">b</span>; </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">b</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">n</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">b</span> <span style="color:#f92672">&gt;</span> <span style="color:#a6e22e">maxValue</span>) { </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">a</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>; </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">b</span> <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:#66d9ef">return</span> <span style="color:#a6e22e">a</span>; </span></span><span style="display:flex;"><span> }; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p>Make a <code>fibber</code> and then just keep calling it for next values.</p> <p>All sorts of exciting options here!</p>Genuary 2026.02: Twelve principles of animationhttps://blog.jverkamp.com/2026/01/02/genuary-2026.02-twelve-principles-of-animation/Fri, 02 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/02/genuary-2026.02-twelve-principles-of-animation/<h2 id="2-twelve-principles-of-animation">2) Twelve principles of animation</h2> <p><a href="https://en.wikipedia.org/wiki/Twelve%20principles%20of%20animation">Twelve principles of animation</a></p> <ul> <li>Stretch and shrink</li> <li>Anticipation</li> <li>Staging</li> <li>Direct animation</li> <li>Complementary</li> <li>Accelerate and decelerate</li> <li>Arcs</li> <li>Secondary action</li> <li>Synchronization</li> <li>Exaggeration</li> <li>Solid drawing</li> <li>Attractive</li> </ul> <p>That &hellip; is a lot. And I&rsquo;m not <em>really</em> an animator. But let&rsquo;s see what we can do!</p>Genuary 2026.01: One color, one shapehttps://blog.jverkamp.com/2026/01/01/genuary-2026.01-one-color-one-shape/Thu, 01 Jan 2026 00:00:00 +0000https://blog.jverkamp.com/2026/01/01/genuary-2026.01-one-color-one-shape/<p>It&rsquo;s been a <a href="https://blog.jverkamp.com/series/genuary-2023/">couple years</a> since I last did <a href="https://genuary.art/" target="_blank" rel="noopener">Genuary</a>. Let&rsquo;s do it again. I don&rsquo;t expect to make any masterpieces, but I enjoy making tiny pretty pictures. It&rsquo;s something I&rsquo;ve been doing honestly as long as I&rsquo;ve been programming (I remember making <a href="https://en.wikipedia.org/wiki/brownian%20motion">brownian motion</a> &lsquo;bugs&rsquo; in QBasic in the 90s&hellip;).</p> <h2 id="1-one-color-one-shape">1) One color, one shape</h2>2025 Year in Reviewshttps://blog.jverkamp.com/2025/12/31/2025-year-in-reviews/Wed, 31 Dec 2025 23:59:59 +0000https://blog.jverkamp.com/2025/12/31/2025-year-in-reviews/<p>Man, time just keeps on going, doesn&rsquo;t it?</p> <p>Last year, I had reviewed 1300 books/170 movies/100 TV shows.</p> <p>This year? I&rsquo;m up to 1418 book reviews, 187 movies, and 123 seasons.</p> <p>Jeeze.</p> <p>Overall this year:</p> <ul> <li><a href="#books">Read 84 books</a></li> <li><a href="#tv">Watched 16 seasons of TV</a></li> <li><a href="#movies">Watched 16 movies</a></li> <li><a href="#board-games">Played 251 different games a total of 1807 times &ndash; 91 of them new to me</a></li> <li><a href="#steam-games">Played 38 games on steam (25 new) with 475 new achievements!</a></li> </ul> <h2 id="table-of-contents">Table of Contents</h2> <nav id="TableOfContents"> <ul> <li><a href="#table-of-contents">Table of Contents</a></li> <li><a href="#books">Books</a></li> <li><a href="#tv">TV</a></li> <li><a href="#movies">Movies</a></li> <li><a href="#board-games">Board Games</a> <ul> <li><a href="#overall">Overall</a></li> <li><a href="#two-player-games">Two player games</a></li> <li><a href="#win-rate--player-count">Win rate / player count</a></li> <li><a href="#in-person">In person</a></li> </ul> </li> <li><a href="#steam">Steam</a></li> <li><a href="#previous-years-in-review">Previous years in review</a></li> </ul> </nav>Doctor 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: Day 12: Christmas Tree Farm</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: Day 11: Reactor</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: Day 10: Factory</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: Day 9: Movie Theater</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: Day 8: Playground</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: Day 7: Laboratories</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: Day 6: Trash Compactor</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: Day 5: Cafeteria</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: Day 4: Printing Department</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: Day 3: Lobby</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>