<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><id>https://kvibber.com/</id><title>Kelson Vibber: New Posts</title><updated>2026-04-14T12:00:02.963191+00:00</updated><author><name>Kelson Vibber</name><email>kelson@pobox.com</email></author><link href="https://kvibber.com/" rel="alternate"/><link href="https://kvibber.com/feed.xml" rel="self"/><generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator><subtitle>Blog entries, tech tips, reviews and more by Kelson Vibber.</subtitle><entry><id>https://kvibber.com/tech-tips/debian-nocloud-minimal-user-setup/</id><title>Minimal User Setup for Debian Cloud</title><updated>2026-04-12T16:28:00+00:00</updated><author><name>Kelson Vibber</name><email>techtips@kvibber.com</email></author><content type="html">&lt;p&gt;Debian offers &lt;a href="https://cloud.debian.org/images/cloud/"&gt;cloud images&lt;/a&gt; that you can plug into a hosting provider and run instead of spending time going through the installer. Most of them assume you’re going to use the host’s system to set up the your login credentials.&lt;/p&gt;
&lt;p&gt;There’s also a “nocloud” image intended to run on a local setup, so you can toss a qcow2 image onto Qemu (directly or with or your favorite GUI wrapper like &lt;a href="https://kvibber.com/reviews/software/utm/"&gt;UTM&lt;/a&gt; or &lt;a href="https://kvibber.com/reviews/software/boxes/"&gt;Boxes&lt;/a&gt;). It ships with a &lt;strong&gt;passwordless root user&lt;/strong&gt; to get you started quickly.&lt;/p&gt;
&lt;p&gt;You don’t want to &lt;em&gt;keep&lt;/em&gt; running it as root. &lt;em&gt;Especially&lt;/em&gt; without a password!&lt;/p&gt;
&lt;p&gt;So here’s a set of quick steps to set up a regular user for admin and put a password on root. (Why am I writing this down? Because I always forget which Linux distributions  use &lt;code&gt;useradd&lt;/code&gt; and which use &lt;code&gt;adduser&lt;/code&gt;.)&lt;/p&gt;
&lt;h2&gt;Optional: Set a Hostname&lt;/h2&gt;
&lt;p&gt;Debian 11 ships with the name set to “debian,” but it’s not set in the hosts file. Sudo will complain that it can’t find this “debian” machine when you run it, though it will run.&lt;/p&gt;
&lt;p&gt;So if you’re setting up a new oldoldstable for some reason, you probably want to start by setting a hostname and adding it to &lt;code&gt;/etc/hosts&lt;/code&gt; (on the same line as localhost).&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;hostname HOSTNAME
nano /etc/hostname
nano /etc/hosts
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can of course use &lt;code&gt;vi&lt;/code&gt; instead, or install another text editor like &lt;code&gt;emacs&lt;/code&gt; using &lt;code&gt;apt&lt;/code&gt;, assuming the image connected to the network.&lt;/p&gt;
&lt;p&gt;Debian 12 doesn’t set a hostname in the cloud images, so it doesn’t have this problem, though of course you’ll probably want to set one anyway if you plan on keeping the machine around!&lt;/p&gt;
&lt;h2&gt;Set Up The User&lt;/h2&gt;
&lt;p&gt;Next, create the user, add them to the sudoers group, and set their password.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;useradd -m -s /bin/bash USERNAME
usermod -aG sudo        USERNAME
passwd                  USERNAME
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Some notes on the options used here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can of course choose a different shell than bash here.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;useradd -m&lt;/code&gt; will also create the home directory.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;usermod -aG&lt;/code&gt; will &lt;em&gt;add&lt;/em&gt; a group to the user’s list of groups, rather than moving them entirely.&lt;/li&gt;
&lt;li&gt;Debian pre-configures a “sudo” group and gives its members permission to run &lt;code&gt;sudo&lt;/code&gt; with their own password, which is exactly what I want here.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other distros vary in whether they set up a group and what they call it (ex. Red Hat/Fedora call it “wheel”), or whether you need to set up access manually using &lt;code&gt;visudo&lt;/code&gt; or putting something in &lt;code&gt;/etc/sudoers.d&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now you can set a password for root.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;passwd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Congratulations! You should be able to log out of root now, log in with your regular user, and use sudo when needed.&lt;/p&gt;
&lt;h2&gt;Bonus: Lock Out Root&lt;/h2&gt;
&lt;p&gt;Once you’ve logged in with your regular user and verified that it can sudo, lock the root account so no one can log into it in the first place. It’ll still be there running things behind the scenes, but it won’t be &lt;em&gt;open&lt;/em&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo passwd -l root
&lt;/code&gt;&lt;/pre&gt;
&lt;footer&gt;This post by &lt;a class="p-author h-card" href="https://kvibber.com" rel="author"&gt;Kelson Vibber&lt;/a&gt; originally appeared &lt;a class="u-url" href="https://kvibber.com/tech-tips/debian-nocloud-minimal-user-setup/"&gt;on KV Tech Tips&lt;/a&gt;&lt;/footer&gt;</content><link href="https://kvibber.com/tech-tips/debian-nocloud-minimal-user-setup/"/><summary>The quickest way to set up a sudo-capable user on a Debian cloud (or nocloud) image with useradd, usermod and the sudo group.</summary><category term="linux"/><category term="howto"/><category term="techtips"/><category term="debian"/><category term="sudo"/><category term="virtualization"/><category term="self-hosting"/><category term="cloud-hosting"/></entry><entry><id>https://kvibber.com/reviews/moved/</id><title>Reviews have moved to KVibber.com</title><updated>2026-04-09T15:01:21+00:00</updated><author><name>Kelson Vibber</name><email>kelson@pobox.com</email></author><content type="html">&lt;p&gt;Administrative note: I’ve moved these reviews from my &lt;a class="skipGemini" href="https://hyperborea.org"&gt;old site at Hyperborea.org&lt;/a&gt; to &lt;a href="https://kvibber.com"&gt;KVibber.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I up the newer site as an &lt;a href="https://indieweb.org"&gt;IndieWeb&lt;/a&gt;-style profile a while back, and this year I decided to move past the name I &lt;a href="https://hyperborea.org/whatisit.html"&gt;picked for a mythical location&lt;/a&gt; in a half-remembered 50-year-old movie 25 years ago. (The full move is still in progress, but this section’s done.)&lt;/p&gt;
&lt;p&gt;Old links will keep redirecting to the new one as long as I hang onto the domain name.&lt;/p&gt;
&lt;!-- SKIP_GEMINI --&gt;
&lt;ul&gt;
&lt;li&gt;If you subscribe to the RSS feed, you may want to update it to &lt;a href="https://kvibber.com/reviews/feed.xml"&gt;https://kvibber.com/reviews/feed.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;If you have a site that links here, I’d appreciate it if you update your links to point to the new location.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- END_SKIP_GEMINI --&gt;
&lt;p&gt;Thanks for reading!&lt;/p&gt;

	
    &lt;footer&gt;This post by &lt;a class="p-author h-card" href="https://kvibber.com" rel="author"&gt;Kelson Vibber&lt;/a&gt; originally appeared &lt;a class="u-url" href="https://kvibber.com/reviews/moved/"&gt;on Kelson Reviews Stuff&lt;/a&gt;&lt;/footer&gt;</content><link href="https://kvibber.com/reviews/moved/"/><summary>I finally decided to move beyond the site I named after a mythical location in a 50-year-old movie 25 years ago.</summary><category term="review"/><category term="web"/><category term="site-updates"/></entry><entry><id>https://kvibber.com/reviews/tv/mrs-davis/</id><title>Mrs. Davis</title><updated>2026-04-02T01:59:37+00:00</updated><author><name>Kelson Vibber</name><email>kelson@pobox.com</email></author><content type="html">&lt;p&gt;&lt;abbr class="p-rating" title="5 stars out of 5" value="5"&gt;★★★★★&lt;/abbr&gt;&lt;/p&gt;
    &lt;p&gt;&lt;em&gt;Mrs. Davis&lt;/em&gt; arrived at the perfect time: just as the Chat-GPT-fueled “AI” hype machine was shifting into high gear, here was a story of a surly nun battling a world-dominating AI with a folksy name.&lt;/p&gt;
&lt;p&gt;Except…that’s not the story.&lt;/p&gt;
&lt;p&gt;Considering the number of times it swerves to reveal that what you &lt;em&gt;thought&lt;/em&gt; was going on is actually part of something &lt;em&gt;completely different&lt;/em&gt; than you assumed? That’s appropriate!&lt;/p&gt;
&lt;p&gt;Since the swerves are part of the fun, I’ll try not to reveal too much when I say it’s:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A…let’s say &lt;em&gt;unique&lt;/em&gt; take on the Holy Grail mythology. (To put it mildly.)&lt;/li&gt;
&lt;li&gt;A poignant tale about our modern dependence on technology.&lt;/li&gt;
&lt;li&gt;The lengths people will go to feel appreciated.&lt;/li&gt;
&lt;li&gt;The interplay between religion and spirituality.&lt;/li&gt;
&lt;li&gt;The magic of misdirection (and vise-versa).&lt;/li&gt;
&lt;li&gt;The difference between asserting your free will and just rebelling.&lt;/li&gt;
&lt;li&gt;Ridiculously wacky, but in a way that makes sense.&lt;/li&gt;
&lt;li&gt;Seriously absurd, and sometimes absurdly serious.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To give you an idea of what to expect, it opens with a castaway named Schrödinger and his cat being rescued from a deserted island, during which time no one knew if they were alive or not.&lt;/p&gt;
&lt;p&gt;Betty Gilpin is riveting as Simone. Her co-stars and the ensemble cast rise to the challenge of an absurdity that takes itself seriously enough that it comes right back around to ridiculous again.&lt;/p&gt;
&lt;p&gt;At the time, I thought Mrs. Davis “herself” was less an AI than a souped-up voice assistant/chatbot…but of course, that’s exactly what the “AI” industry has rolled out over the last three years in the form of various LLM services. She’s further advanced in that she’s &lt;em&gt;actually&lt;/em&gt; self-aware and has her own motivations (unlike today’s chatbots), but she doesn’t &lt;em&gt;control&lt;/em&gt; the world, just responds to questions.&lt;/p&gt;
&lt;p&gt;People just assume Mrs. Davis has the right answer &lt;em&gt;and go with it&lt;/em&gt;. Like following Google Maps, even when it sends you off onto a dirt road that ends in a collapsed bridge that was never updated on the map. Or a bunch of people going along with a prompt for a flash mob out of FOMO. Or a vibe coder assuming that the generated code is actually running and passing the tests, not just reporting that it did because that’s what logs should look like.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Speaking of apparently-self-aware chatbots, it’s been pointed out that people have a tendency to antropomorphize them through the same process that we tend to fall for &lt;a href="https://softwarecrisis.dev/letters/llmentalist/"&gt;cold-reading fake psychics&lt;/a&gt;…which brings us right back to stage magic.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;You never see a UI, never hear her voice directly. It’s always a conversation with a real person with a cell phone and earbuds who’s agreed to relay her words as a proxy for a minute or two. It makes her seem slightly more human, and the humans slightly more robotic.&lt;/p&gt;
&lt;p&gt;Ultimately the question isn’t whether the technology is dangerous. (Unlike, say, &lt;a href="https://kvibber.com/reviews/tv/discovery-s2/"&gt;Discovery Season 2&lt;/a&gt;.) It’s about finding the line between using technology and just offloading our thinking to it.&lt;/p&gt;
&lt;p&gt;And I’ll never look at a coupon for “free wings” the same way again.&lt;/p&gt;

	&lt;p&gt;
    More info at &lt;a href="https://www.imdb.com/title/tt14759574/"&gt;Mrs. Davis&lt;/a&gt;.
    
    &lt;/p&gt;
    &lt;footer&gt;This post by &lt;a class="p-author h-card" href="https://kvibber.com" rel="author"&gt;Kelson Vibber&lt;/a&gt; originally appeared &lt;a class="u-url" href="https://kvibber.com/reviews/tv/mrs-davis/"&gt;on Kelson Reviews Stuff&lt;/a&gt;&lt;/footer&gt;</content><link href="https://kvibber.com/reviews/tv/mrs-davis/"/><summary>★★★★★ - A friendly world-dominating AI vs. a surly nun. A tale of our dependence on technology and the lengths people will go to feel appreciated, wrapped in the weirdest take on the Holy Grail I've ever seen. Seriously absurd, and occasionally absurdly serious.</summary><category term="review"/><category term="tv"/><category term="science-fiction"/><category term="religion"/><category term="holy-grail"/><category term="dependence"/><category term="magic"/><category term="artificial-intelligence"/><category term="ai"/><category term="big-tech"/><category term="fomo"/></entry><entry><id>https://hyperborea.org/journal/?p=134794</id><title>Fun With Copper! (And System Clocks)</title><updated>2026-04-01T20:01:23+00:00</updated><author><name>Kelson</name></author><content type="html">&lt;p&gt;Last night the whole family got into a multiplayer Minecraft game for the first time in a while. Weirdly enough, *one* system was showing way to many materials as copper. Even stuff like snow. WTF?&lt;/p&gt;
&lt;p&gt;Well, we realized it was after 7 PM local time, which meant on UTC time it was already April 1, so it must be this year&amp;#8217;s April Fool&amp;#8217;s joke for Minecraft. (Or in this case, &lt;a href="https://github.com/LunaPixelStudios/Better-MC/issues/2430"&gt;one of the mods&lt;/a&gt;.) But why only on one computer?&lt;/p&gt;
&lt;p&gt;Then it hit me: The host was a Windows machine, which means the hardware clock is set to local time (instead of being set to UTC and just displaying local time). I was connecting from a Linux box that dual-boots, so I&amp;#8217;d long since set the hardware clock to local time so Windows wouldn&amp;#8217;t fight with it. The one showing all copper, all the time, was a Mac, which doesn&amp;#8217;t dual boot, and uses Unix under the hood, so its hardware was set to UTC, and it was the only computer of the three that was already running in April 1.&lt;/p&gt;
&lt;p&gt;The post &lt;a href="https://hyperborea.org/journal/2026/04/fun-with-copper-and-system-clocks/" rel="nofollow"&gt;Fun With Copper! (And System Clocks)&lt;/a&gt; first appeared on &lt;a href="https://hyperborea.org/journal" rel="nofollow"&gt;K-Squared Ramblings&lt;/a&gt;&lt;/p&gt;</content><link href="https://hyperborea.org/journal/2026/04/fun-with-copper-and-system-clocks/"/><summary type="html">&lt;p&gt;Last night the whole family got into a multiplayer Minecraft game for the first time in a while. Weirdly enough, *one* system was showing way to many materials as copper. Even stuff like snow. WTF? Well, we realized it was after 7 PM local time, which meant on UTC time it was already April 1, [&amp;#8230;]&lt;/p&gt;
&lt;p&gt;The post &lt;a href="https://hyperborea.org/journal/2026/04/fun-with-copper-and-system-clocks/" rel="nofollow"&gt;Fun With Copper! (And System Clocks)&lt;/a&gt; first appeared on &lt;a href="https://hyperborea.org/journal" rel="nofollow"&gt;K-Squared Ramblings&lt;/a&gt;&lt;/p&gt;</summary><category term="Games"/><category term="April Fools"/><category term="Minecraft"/><category term="time"/><category term="timezone"/></entry><entry><id>https://kvibber.com/reviews/games/proverbs/</id><title>Proverbs</title><updated>2026-03-31T02:44:04+00:00</updated><author><name>Kelson Vibber</name><email>kelson@pobox.com</email></author><content type="html">&lt;p&gt;&lt;abbr class="p-rating" title="5 stars out of 5" value="5"&gt;★★★★★&lt;/abbr&gt;&lt;/p&gt;
    &lt;p&gt;&lt;em&gt;Proverbs&lt;/em&gt; is like a giant board of Minesweeper, only instead of marking explosives (and tiggering sudden death when you make a mistake), you slowly uncover a giant pixellated painting adapted from Bruegel the Elder’s &lt;a href="https://en.wikipedia.org/wiki/Netherlandish_Proverbs"&gt;Netherlandish Proverbs&lt;/a&gt; (1559). And when I say giant, I mean &lt;em&gt;giant&lt;/em&gt;. I’ve logged almost 15 hours since I first picked it up, and I’ve cleared less than half of the painting.&lt;/p&gt;
&lt;p&gt;Calming, and weirdly addictive. It’s divided into sections based on the image, and as you complete each section the details will fill in, unlocking the specific proverb being illustrated. It auto-saves your progress at the pixel level, so you can fire it up for 5 minutes at a time, a half hour, or find yourself in the zone for longer than you intended and stop when you realize you haven’t actually refilled the glass of water on your desk even though you meant to 20 minutes ago…&lt;/p&gt;

	
    &lt;footer&gt;This post by &lt;a class="p-author h-card" href="https://kvibber.com" rel="author"&gt;Kelson Vibber&lt;/a&gt; originally appeared &lt;a class="u-url" href="https://kvibber.com/reviews/games/proverbs/"&gt;on Kelson Reviews Stuff&lt;/a&gt;&lt;/footer&gt;</content><link href="https://kvibber.com/reviews/games/proverbs/"/><summary>★★★★★ - Like a calming, but weirdly addictive giant board of Minesweeper, only instead of marking explosives, you're slowly uncovering a giant pixellated painting.</summary><category term="review"/><category term="games"/><category term="puzzle"/><category term="minesweeper"/><category term="painting"/><category term="art"/></entry><entry><id>https://kvibber.com/reviews/books/wind-sweeps-stars/</id><title>The Wind that Sweeps the Stars</title><updated>2026-03-17T03:55:35+00:00</updated><author><name>Kelson Vibber</name><email>kelson@pobox.com</email></author><content type="html">&lt;p&gt;Greg Keyes&lt;/p&gt;
    &lt;p&gt;&lt;abbr class="p-rating" title="4 stars out of 5" value="4"&gt;★★★★☆&lt;/abbr&gt;&lt;/p&gt;
    &lt;p&gt;One of the things I like about Greg Keyes’ books is that he doesn’t stick to the ISO Standard European Medieval Fantasy setting. (In fact, the first time I read &lt;a href="https://hyperborea.org/journal/2006/08/offline-in-crotheny/"&gt;&lt;em&gt;The Briar King&lt;/em&gt;&lt;/a&gt; I was disappointed that it &lt;em&gt;was&lt;/em&gt; so clearly Renaissance Europe.) &lt;em&gt;The Wind that Sweeps the Stars&lt;/em&gt; is high fantasy, but the setting, cultures and mythology are inspired by a mix of southwest indigenous American mythology and a vaguely Aztec-like empire.&lt;/p&gt;
&lt;p&gt;Yash and Chej are an appealing pair of viewpoint characters: She’s matter-of-fact, a highly trained assassin sent to secure an alliance through marriage if the empire honors it, or take revenge if not. (The betrayal takes all of about five minutes: The empire is invading her country by page one.) He’s a hapless, but well-meaning prince who discovers just how little regard the rest of the aristocracy has for him.&lt;/p&gt;
&lt;p&gt;The book’s a series of fights, some mostly physical (and very bloody), some mostly magical. Yash sets out to kill as many of her captors as she can before she’s discovered. (One of the back-cover blurbs compares it to &lt;em&gt;Die-Hard&lt;/em&gt; with wizards. I’d also compare it to a dungeon crawl game.) Chej struggles to reconcile his loyalties to an empire that never really had much use for him and his new wife, who does.&lt;/p&gt;
&lt;p&gt;Between fights we get brief conversations in which Yash and Chej attempt to catch their breath, some personal flashbacks, and fragments of mythological history. And every once in a while we get a glimpse of other people in the empire who, despite being thoroughly enmeshed in the imperial war machine, might have different priorities if circumstances were different.&lt;/p&gt;
&lt;p&gt;It quickly becomes clear that the origin myths are true in the context of the book, as Yash has a second mission in addition to straight-forward vengeance. Her people’s land is in danger, and would still be even if the empire had honored their alliance. To save her future, she needs to take out the captive spirits the empire has used to secure its magical superiority. Not only does that need a different approach than simply killing as many magicians as possible, it turns out to be much bigger than anyone expected.&lt;/p&gt;
&lt;h2&gt;Spoilers&lt;/h2&gt;
&lt;details&gt;Mythological
&lt;p&gt;Early on there's a reference to fossils in the context of the world's mythology. That comes back rather spectacularly near the end. It's also adds another layer (pun not intended) to the fact that the empire's power is derived by stealing the essense of others' land.&lt;/p&gt;
&lt;/details&gt;
&lt;details&gt;Gender
&lt;p&gt;The empire's strict patriarchy and rigid gender roles are contrasted more and more strongly over the course of the book against Zeltah's more open sense of identity.&lt;/p&gt;
&lt;p&gt;Chej thinks he's still alive because he's kept his secret, but they all know: they just don't want the scandal of admitting one of the royal family is gay, and they've been waiting for an excuse to kill him in a way that will turn his death to political advantage.&lt;/p&gt;
&lt;p&gt;Yash, meanwhile, takes advantage of their dismissal of women as potentially dangerous, and is able to stay under the radar longer than she might otherwise. She also turns out to be gender-fluid (her body actually shifts physically, though the book continues referring to her as "she" when it does), but there's never any suggestion that her masculine aspect has anything to do with her ability to deal out violence. In fact, it's only as a man that she's captured at one point.&lt;/p&gt;
&lt;p&gt;Among Yash's people, women and men can be leaders or warriors as they choose, and her changing is seen as just how she is. She's utterly baffled as to how Chej has absorbed so much self-loathing from his own culture.&lt;/p&gt;
&lt;p&gt;By the end of the night the empire's rigidity is revealed as a weakness, and Chej has started to accept himself a bit more. Not much, but a start.&lt;/p&gt;
&lt;/details&gt;

	
    &lt;footer&gt;This post by &lt;a class="p-author h-card" href="https://kvibber.com" rel="author"&gt;Kelson Vibber&lt;/a&gt; originally appeared &lt;a class="u-url" href="https://kvibber.com/reviews/books/wind-sweeps-stars/"&gt;on Kelson Reviews Stuff&lt;/a&gt;&lt;/footer&gt;</content><link href="https://kvibber.com/reviews/books/wind-sweeps-stars/"/><summary>★★★★☆ - Greg Keyes: Betrayed by an empire, Yash has one night to assassinate as many magicians as possible, set in a fantasy world inspired by southwest indigenous American mythology.</summary><category term="review"/><category term="books"/><category term="fantasy"/><category term="greg-keyes"/><category term="magic"/><category term="war"/><category term="gender"/><category term="imperialism"/></entry><entry><id>https://kvibber.com/tech-tips/mac-nextcloud-cal-card/</id><title>Connect macOS Calendar, Contacts and Reminders to NextCloud</title><updated>2026-03-13T00:39:43+00:00</updated><author><name>Kelson Vibber</name><email>techtips@kvibber.com</email></author><content type="html">&lt;p&gt;&lt;a href="https://kvibber.com/reviews/software/nextcloud-calendar/"&gt;Nextcloud Calendar&lt;/a&gt; and Contacts are solid cross-platform alternatives to iCloud’s equivalents, and Tasks is good enough I’ve been using it for several years.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;The main problem with Nextcloud Tasks is its &lt;a href="https://kvibber.com/tech-tips/nextcloud-tasks/"&gt;flaky handling of recurring tasks&lt;/a&gt;, though if you use an app like Reminders that &lt;em&gt;does&lt;/em&gt; understand repeating, the server can (mostly) handle it.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;&lt;strong&gt;On macOS, System Settings &amp;gt; Internet Accounts&lt;/strong&gt; manages logins for all the built-in applications like &lt;a href="https://kvibber.com/reviews/software/apple-mail/"&gt;Apple Mail&lt;/a&gt;, Calendar, Reminders and Contacts. Setting these up with Nextcloud is easy, but it’s not &lt;em&gt;intuitive&lt;/em&gt;, because Apple has been optimizing the setup process for all-in-one services like iCloud, Google or Microsoft.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;The Nextcloud desktop app isn’t used for this, since it mainly handles file sync.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2&gt;Option 1: Download a Device Profile&lt;/h2&gt;
&lt;p&gt;On your Nextcloud server’s website, open your account settings, then go to the &lt;strong&gt;Mobile &amp;amp; Desktop&lt;/strong&gt; section. Below the app store links, look for &lt;strong&gt;“Download macOS/iOS configuration profile.”&lt;/strong&gt; That link will download a config with all the info except your password. (You &lt;a href="https://kvibber.com/tech-tips/nextcloud-sync-token/"&gt;should generate an app-specific one&lt;/a&gt;, but it’s not necessary.)&lt;/p&gt;
&lt;p&gt;On your Mac, open &lt;strong&gt;System Settings&lt;/strong&gt;, go to &lt;strong&gt;General &amp;gt; Device Management&lt;/strong&gt; and approve the Nextcloud profile. It’ll ask for the password twice because you’re still technically logging into two services, one for calendar and one for contacts.&lt;/p&gt;
&lt;h2&gt;Option 2: Add the Accounts Manually&lt;/h2&gt;
&lt;p&gt;If you don’t want to use Device Management, or run into trouble getting it to work, you can still set up the accounts in &lt;strong&gt;System Settings &amp;gt; Internet Accounts&lt;/strong&gt;. The process is simple, if a little misleading.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;First:&lt;/strong&gt; Starting with macOS 26 (Tahoe), it only asks you for an &lt;em&gt;email address&lt;/em&gt; when you press Add Account. To add a contacts/calendar account:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Click on &lt;strong&gt;“choose from a list.”&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Scroll down and click on &lt;strong&gt;“Add other account…”&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Now&lt;/em&gt; you can add a &lt;strong&gt;CalDAV&lt;/strong&gt; (Calendar/Reminders) or &lt;strong&gt;CardDAV&lt;/strong&gt; (Contacts) account.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Alternatively:&lt;/strong&gt; go through the Apple Calendar or Contacts apps’ settings and add the account there. It’ll still get added to the central set of accounts.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;This is &lt;em&gt;not&lt;/em&gt; the Accounts item on the application menu, which just brings up System Settings/Internet Accounts and puts you right back where we started, but the Accounts tab inside the applications’ Settings window.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;&lt;strong&gt;Second:&lt;/strong&gt; It &lt;em&gt;still&lt;/em&gt; asks you for an email address when you tell it to add one of those account types!&lt;/p&gt;
&lt;p&gt;You can switch from &lt;strong&gt;Automatic to Manual&lt;/strong&gt; in the dropdown, and it’ll ask for a username and server… or you can just enter the equivalent of &lt;code&gt;username@server.example.com&lt;/code&gt; (even if it isn’t a real email address) and your (&lt;a href="https://kvibber.com/tech-tips/nextcloud-sync-token/"&gt;preferably app-specific&lt;/a&gt;) password, and it’ll find the right details for your server.&lt;/p&gt;
&lt;p&gt;Easy, but not obvious!&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;The last time I did this was a few macOS versions back, and I vaguely recall having to look up at least one of the specific URLs. Though it’s possible I’m just getting that mixed up with old versions of &lt;a href="https://kvibber.com/reviews/software/thunderbird/"&gt;Thunderbird&lt;/a&gt;.&lt;/p&gt;
&lt;/aside&gt;
&lt;footer&gt;This post by &lt;a class="p-author h-card" href="https://kvibber.com" rel="author"&gt;Kelson Vibber&lt;/a&gt; originally appeared &lt;a class="u-url" href="https://kvibber.com/tech-tips/mac-nextcloud-cal-card/"&gt;on KV Tech Tips&lt;/a&gt;&lt;/footer&gt;</content><link href="https://kvibber.com/tech-tips/mac-nextcloud-cal-card/"/><summary>Current versions of macOS hide the options to add a CalDAV or CardDAV account behind a couple of 'more...' links, and it still asks for an email address when you get there. Or you can download a Device Management profile if you know where to look.</summary><category term="apple-mac"/><category term="howto"/><category term="techtips"/><category term="nextcloud"/><category term="macos"/><category term="calendar"/><category term="contacts"/><category term="to-do-list"/><category term="productivity"/><category term="self-hosting"/></entry><entry><id>https://kvibber.com/reviews/books/farthest-shore/</id><title>The Farthest Shore</title><updated>2026-03-09T19:32:32+00:00</updated><author><name>Kelson Vibber</name><email>kelson@pobox.com</email></author><content type="html">&lt;p&gt;Ursula K. Le Guin&lt;/p&gt;
    &lt;p&gt;&lt;abbr class="p-rating" title="4 stars out of 5" value="4"&gt;★★★★☆&lt;/abbr&gt;&lt;/p&gt;
    &lt;p&gt;Magic is failing, and a young prince sails the islands with Ged, now older and the Archmage of Earthsea, to seek the cause and resolve the crisis…if it &lt;em&gt;can&lt;/em&gt; be resolved.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ursulakleguin.com/the-farthest-shore"&gt;&lt;source type="image/avif" /&gt;&lt;source type="image/webp" /&gt;&lt;img alt="Drawing of a robed man with reddish skin holding his arms up, his left arm holding a staff. A younger man with lighter skin, wearing a medieval-looking coat with hood (thrown back) and metal studs, stands next to him, one arm up, though the drawing is creased and flaking at that edge, making it unclear what he's doing with his hands. They both face something out of frame with a lot of claws and a sinuous tail. The upper right corner is torn off, revealing rough yellowing paper behind it." class="cover right" height="1000" src="https://kvibber.com/reviews/img/farthest-shore-paperback-150w.jpeg" width="598" /&gt;&lt;/a&gt;&lt;em&gt;The Farthest Shore&lt;/em&gt; is my least favorite of the original &lt;em&gt;Earthsea&lt;/em&gt; trilogy. Part of it is that Arren isn’t as interesting a main character as &lt;a href="https://kvibber.com/reviews/books/wizard-of-earthsea/"&gt;Ged (in book one)&lt;/a&gt; or &lt;a href="https://kvibber.com/reviews/books/tombs-of-atuan/"&gt;Tenar (in book two)&lt;/a&gt;. Part of it is that I was already tired of the &lt;a href="https://reactormag.com/the-farthest-shore-the-return-of-the-king/"&gt;return-of-the-king trope&lt;/a&gt; when I first read it. And part of it is that the problem is so vaguely defined.&lt;/p&gt;
&lt;p&gt;But it’s still quite good (I rated it four stars, after all!), and this time through I appreciated it a lot more than on previous reads. Maybe it’s that I’m more &lt;a href="https://reactormag.com/a-heroic-journey-inward-ursula-k-le-guins-the-farthest-shore/"&gt;familiar with depression&lt;/a&gt; than I was at twelve. Maybe it’s that I’m closer to Sparrowhawk’s age. Or maybe I’m just seeing more connections, now that &lt;a href="https://kvibber.com/reviews/tag/ursula-k-le-guin/"&gt;I’ve read more of Le Guin’s work&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And there’s &lt;em&gt;so much&lt;/em&gt; in this one! The people who live on huge rafts, following the ocean currents. Speaking with dragons. Journeying through the land of the dead. Ged being literally the most appropriate person to undo the damage that has been done, not because of the strength of his magic (which is necessary, but not sufficient), but because of what he did and learned in the first novel: The willingness to temper his ambition with full acceptance of who he is.&lt;/p&gt;
&lt;p&gt;And this exchange, which has stuck in my head for years:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“The first lesson on Roke, and the last, is: &lt;em&gt;Do what is needful&lt;/em&gt;. And no more!”&lt;/p&gt;
&lt;p&gt;“The lessons in between, then, must consist in learning what is needful.”&lt;/p&gt;
&lt;p&gt;“They do.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In the first book, we see Ged’s thirst for knowledge and power lead him astray. By this time he’s gained real wisdom, and it’s that wisdom that can save the archipelago.&lt;/p&gt;
&lt;p&gt;It’s a fitting capstone on the trilogy, and the heroic phase of Ged’s life. And I can see why some readers would want to stop there. But I think it benefits from the perspective gained in the later books.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;The Studio Ghibli adaptation &lt;em&gt;Tales from Earthsea&lt;/em&gt; (not to be confused with the story collection) draws most of its plot from this one, though it removes the sea and pulls in Tenar and Therru from &lt;em&gt;Tehanu&lt;/em&gt;. I don’t remember it much, aside from it being neither particularly good or bad.&lt;/p&gt;
&lt;/aside&gt;

	&lt;p&gt;
    More info at &lt;a href="https://www.ursulakleguin.com/the-farthest-shore"&gt;The Farthest Shore&lt;/a&gt;.
    
    &lt;/p&gt;
    &lt;footer&gt;This post by &lt;a class="p-author h-card" href="https://kvibber.com" rel="author"&gt;Kelson Vibber&lt;/a&gt; originally appeared &lt;a class="u-url" href="https://kvibber.com/reviews/books/farthest-shore/"&gt;on Kelson Reviews Stuff&lt;/a&gt;&lt;/footer&gt;</content><link href="https://kvibber.com/reviews/books/farthest-shore/"/><summary>★★★★☆ - Ursula K. Le Guin: Magic is failing, and a young prince sails with the Archmage of Earthsea to seek out the cause and resolve the crisis. It's my least favorite of the original trilogy, but that's not a euphemism. It's still quite good, and there's so much in it worth reading.</summary><category term="review"/><category term="books"/><category term="ursula-k-le-guin"/><category term="earthsea"/><category term="fantasy"/><category term="identity"/><category term="depression"/><category term="magic"/><category term="death"/><category term="dragons"/><category term="ocean"/><category term="sailing"/></entry><entry><id>https://kvibber.com/tech-tips/half-stars/</id><title>Using Unicode Half-Stars Symbols in Ratings</title><updated>2026-03-03T01:01:17+00:00</updated><author><name>Kelson Vibber</name><email>techtips@kvibber.com</email></author><content type="html">&lt;p&gt;When I started &lt;a href="https://kvibber.com/reviews/"&gt;collecting reviews in one section&lt;/a&gt; of my website, I decided to stick with the goals I had here on the Tech Tips section: Keep the pages small, avoid loading scripts or extra images where styles or font symbols would do. So I kept using emoji for category icons, and used the outlined and filled star symbols (☆★) for ratings. They’ve been in Unicode forever, so they’re supported almost everywhere.&lt;/p&gt;
&lt;h2&gt;Halfway There&lt;/h2&gt;
&lt;p&gt;Every once in a while, I really want to rate something &lt;em&gt;between&lt;/em&gt; a whole number of stars. I let it round down for a while until I went looking to see if there were half-filled star symbols. And there are! Half-stars and half-filled stars (in both directions) were &lt;a href="https://www.righto.com/2016/10/inspired-by-hn-comment-four-half-star.html"&gt;proposed in 2016&lt;/a&gt; and &lt;a href="https://www.unicode.org/charts/PDF/Unicode-11.0/U110-2B00.pdf"&gt;added to Unicode 11 in 2018&lt;/a&gt;. You can see them here:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;⯨⯩⯪⯫&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;…or maybe you can’t, because even after eight years, font support for them is &lt;em&gt;still&lt;/em&gt; spotty.&lt;/p&gt;
&lt;p&gt;As of March 2026:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows 11 shows the symbols.&lt;/li&gt;
&lt;li&gt;Linux distros might, depending on what fonts are installed. Modern distros at least &lt;em&gt;have&lt;/em&gt; fonts that support these symbols, in packages like noto-fonts (Arch), fonts-noto-core (Debian) or google-noto-sans-symbols-2-fonts (Fedora), but whether they’re installed by default seems to vary.&lt;/li&gt;
&lt;li&gt;Windows 10, macOS/iOS 26 and Android don’t, even though they include newer emoji than Unicode 11.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So if you’re trying to use these on a web page, it’s really hit and miss whether your readers will be able to see the half-star symbols or not.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;It would be nice if you could, in HTML, &lt;a href="https://notes.kvibber.com/@kelson/statuses/01JRKBPXDMXTDKRREVBXKWAKAK"&gt;provide a fallback for font glyphs&lt;/a&gt; that aren’t available (like how &lt;code&gt;alt&lt;/code&gt; was originally supposed to replace an image entirely if the image couldn’t be loaded), but as near as I can that’s never been seriously proposed.&lt;/p&gt;
&lt;/aside&gt; 
&lt;p&gt;The good news is, you can embed a font on your page (or app) that &lt;em&gt;does&lt;/em&gt; support the missing symbols! &lt;a href="https://fonts.google.com/noto/specimen/Noto+Sans+Symbols+2/"&gt;Noto Sans Symbols 2&lt;/a&gt; contains the full set, and can be used freely. Embedding that font and using it for the ratings solves the problem.&lt;/p&gt;
&lt;blockquote class="stars"&gt; ⯨⯩⯪⯫&lt;/blockquote&gt;
&lt;p&gt;That said, it &lt;em&gt;is&lt;/em&gt; an extra 200 KB or so, which is a bit overkill for adding one very simple bit of line art. (See the &lt;a href="https://kvibber.com/tech-tips/half-stars/#alternatives"&gt;Alternatives&lt;/a&gt; section below.)&lt;/p&gt;
&lt;h2&gt;Adding Font Support&lt;/h2&gt;
&lt;p&gt;The simplest thing to do, if you’re not worried about Google potentially tracking visitors to your site (see &lt;a href="https://kvibber.com/tech-tips/half-stars/#self-hosting"&gt;self-hosting&lt;/a&gt; below for an alternative), is just embed the font from Google by putting this in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; section of your page:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;
&amp;lt;link rel=&amp;quot;preconnect&amp;quot; href=&amp;quot;https://fonts.googleapis.com&amp;quot;&amp;gt;
&amp;lt;link rel=&amp;quot;preconnect&amp;quot; href=&amp;quot;https://fonts.gstatic.com&amp;quot; crossorigin&amp;gt;
&amp;lt;link href=&amp;quot;https://fonts.googleapis.com/css2?family=Noto+Sans+Symbols+2&amp;amp;display=swap&amp;quot; rel=&amp;quot;stylesheet&amp;quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then in your stylesheet, write something like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;.stars {font-family: &amp;quot;Noto Sans Symbols 2&amp;quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And you can write your star ratings like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;span class="stars"&amp;gt;&lt;span class="stars"&gt;★★★⯪☆&lt;/span&gt;&amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;&lt;span class="stars"&gt;★★★⯪☆&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;I actually go a bit further on mine for accessibility and &lt;a href="https://microformats.org/wiki/h-review"&gt;microformats&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;abbr class="stars p-rating"
  title="3.5 stars out of 5"
  aria-label="3.5 stars out of 5."
  value="3.5"&amp;gt;&lt;span class="stars"&gt;★★★⯪☆&lt;/span&gt;&amp;lt;/abbr&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;&lt;abbr class="stars p-rating" title="3.5 stars out of 5" value="3.5"&gt;★★★⯪☆&lt;/abbr&gt;&lt;/blockquote&gt;
&lt;h2&gt;&lt;a name="html-codes"&gt;&lt;/a&gt;HTML Codes&lt;/h2&gt;
&lt;p&gt;If you’re writing on a system that doesn’t support all the star characters natively, you can use numeric HTML entities. It’ll be just as unreadable as the tofu, but you’ll be able to tell them apart from each other.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;#9733;&lt;/code&gt; or &lt;code&gt;&amp;amp;#x2605;&lt;/code&gt;	&lt;span class="stars"&gt;★&lt;/span&gt;	Black star&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;#9734;&lt;/code&gt; or &lt;code&gt;&amp;amp;#x2606;&lt;/code&gt;	&lt;span class="stars"&gt;☆&lt;/span&gt;	White Star&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;#11240;&lt;/code&gt; or &lt;code&gt;&amp;amp;#x2BE8;&lt;/code&gt;	&lt;span class="stars"&gt;⯨&lt;/span&gt;	Left half black star&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;#11241;&lt;/code&gt; or &lt;code&gt;&amp;amp;#x2BE9;&lt;/code&gt;	&lt;span class="stars"&gt;⯩&lt;/span&gt;	Right half black star&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;#11242;&lt;/code&gt; or &lt;code&gt;&amp;amp;#x2BEA;&lt;/code&gt;	&lt;span class="stars"&gt;⯪&lt;/span&gt;	Star with left half black&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;#11243;&lt;/code&gt; or &lt;code&gt;&amp;amp;#x2BEB;&lt;/code&gt;	&lt;span class="stars"&gt;⯫&lt;/span&gt;	Star with right half black&lt;/li&gt;
&lt;/ul&gt;
&lt;aside&gt;&lt;p&gt;Unicode naming schemes are rooted in print, so a filled-in star is a black star, and an outline is a white star, assuming black ink on a white page.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2&gt;&lt;a name="self-hosting"&gt;&lt;/a&gt;Self-Hosting the Font&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://developers.google.com/fonts/faq/privacy"&gt;Google Fonts Privacy Policy&lt;/a&gt; states that they don’t do any tracking on the font requests and keep them completely separate from any account-related traffic. But if you want to be &lt;em&gt;absolutely certain&lt;/em&gt;, or need to comply with regulations like GDPR, you can host your own copy.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;The Noto fonts are licenced for free reuse and embedding, and the Google Fonts site explicitly says you can self-host (but would rather you didn’t).&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;They don’t make it &lt;em&gt;easy&lt;/em&gt;, though.&lt;/p&gt;
&lt;h3&gt;Option 1: Download and Convert from TTF&lt;/h3&gt;
&lt;p&gt;If you download the font from Google Fonts, you get the complete TrueType font, which in this case is about 6 times as big as the WOFF2 font for web embedding. The .zip at &lt;a href="https://github.com/notofonts/symbols"&gt;the font’s GitHub page&lt;/a&gt; also includes smaller versions, closer to 400KB, in the “hinted” and “unhinted” folders. (In this case they’re the same, but for other fonts you’ll probably want the version with hinting.)&lt;/p&gt;
&lt;p&gt;You can use an online TrueType to WOFF2 converter, or you can use an offline tool.&lt;/p&gt;
&lt;p&gt;The command-line &lt;a href="https://github.com/google/woff2"&gt;woff2_compress&lt;/a&gt; tool is available in Homebrew for macOS and various Linux distributions in the woff2 (&lt;a href="https://kvibber.com/reviews/software/debian/"&gt;Debian&lt;/a&gt;, &lt;a href="https://kvibber.com/reviews/software/alpine-linux/"&gt;Alpine&lt;/a&gt;, Homebrew, etc) or woff2-tools (&lt;a href="https://kvibber.com/reviews/software/fedora/"&gt;Fedora&lt;/a&gt;) packages.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;woff2_compress NotoSansSymbols2-Regular.ttf
&lt;/code&gt;&lt;/pre&gt;
&lt;aside&gt;&lt;p&gt;These days, &lt;a href="https://caniuse.com/woff2"&gt;WOFF2 is effectively baseline&lt;/a&gt; across modern web browsers, so you don’t need to include any fallback formats anymore.&lt;/p&gt;
&lt;/aside&gt;
&lt;h3&gt;Option 2: Find a Pre-Built WOFF2 file&lt;/h3&gt;
&lt;p&gt;Or you can grab a copy of the WOFF2 file from Google Fonts. The simplest way is to open their font stylesheet (the one in the third &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; above) directly, scroll down to the &lt;code&gt;/* symbols */&lt;/code&gt; section, copy the URL from that, and save the .woff2 file. Preferably giving it a name you can recognize later on.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;All the sections point to the same font file right now, but if they ever split up the hosted file, you’ll want to make sure you get the one with general symbols.&lt;/p&gt;
&lt;/aside&gt;
&lt;h3&gt;Embedding Your Copy&lt;/h3&gt;
&lt;p&gt;You won’t need the entire set of font definitions and Unicode ranges, because you’re using it in narrow circumstances. And you won’t need the &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; elements pointing to Google. Though you may need to keep the &lt;code&gt;&amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;/code&gt; depending on your hosting setup. In any case, you’ll want to add this to your stylesheet:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@font-face {
  font-family: &amp;quot;Noto Sans Symbols 2&amp;quot;;
  font-display: swap;
  src: url(/path/to/your/copy/of/NotoSansSymbols2-Regular.woff2);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;font-display: swap&lt;/code&gt; tells browsers to keep rendering the page if it takes a while to load the font, and swap it in when it’s ready.&lt;/p&gt;
&lt;p&gt;On larger pages especially, you may also want to &lt;a href="https://kvibber.com/tech-tips/webfont-doubled/"&gt;preload the font&lt;/a&gt; so the browser will start downloading it as soon as it can, instead of waiting until it’s downloaded and parsed the stylesheet.&lt;/p&gt;
&lt;h2&gt;&lt;a name="alternatives"&gt;&lt;/a&gt;Alternatives&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use images instead of font symbols. (PNGs or SVGs would be tiny.)&lt;/li&gt;
&lt;li&gt;Use an icon font like &lt;a href="https://fontawesome.com/icons/star-half-stroke?f=classic&amp;amp;s=solid"&gt;Font Awesome&lt;/a&gt; that provides its own symbols. (Download size is comparable to embedding Noto Sans Symbol 2, but you can also use their icons as SVGs, which can be a &lt;em&gt;lot&lt;/em&gt; smaller if you only need a handful.)&lt;/li&gt;
&lt;li&gt;Create a subset of the font (Either Noto or FontAwesome) that leaves out everything but the symbols needed.&lt;/li&gt;
&lt;li&gt;Embed the font, but only on the individual pages that need it. (That’s what I’ve done for this page.)&lt;/li&gt;
&lt;li&gt;Use a more widely-supported symbol like ½ instead. (This is what I initially did on my reviews.)&lt;/li&gt;
&lt;li&gt;Use a fraction symbol, and then use JavaScript to check whether the half-star is supported in the current font, and swap it in if it’s available. (Or the other way around, but this is more backward compatible.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then again, ~200 KB is a fraction of the &lt;a href="https://www.pingdom.com/blog/webpages-are-getting-larger-every-year-and-heres-why-it-matters/"&gt;average page size&lt;/a&gt; these days. More than a drop in the bucket, but hardly a dealbreaker. Even if it is 10 times the size &lt;em&gt;this&lt;/em&gt; page would be without it.&lt;/p&gt;
&lt;footer&gt;This post by &lt;a class="p-author h-card" href="https://kvibber.com" rel="author"&gt;Kelson Vibber&lt;/a&gt; originally appeared &lt;a class="u-url" href="https://kvibber.com/tech-tips/half-stars/"&gt;on KV Tech Tips&lt;/a&gt;&lt;/footer&gt;</content><link href="https://kvibber.com/tech-tips/half-stars/"/><summary>Filled and outlined stars have been in Unicode forever. Half-stars have been available since Unicode 11 (2018), but font support is still spotty. Fortunately you can embed a font on your website that *does* support the symbols and rate something four and a half stars.</summary><category term="web-development"/><category term="howto"/><category term="techtips"/><category term="css"/><category term="fonts"/></entry><entry><id>https://kvibber.com/reviews/software/simplenote/</id><title>Simplenote</title><updated>2026-03-02T20:10:22+00:00</updated><author><name>Kelson Vibber</name><email>kelson@pobox.com</email></author><content type="html">&lt;p&gt;&lt;abbr class="p-rating" title="4 stars out of 5" value="4"&gt;★★★★☆&lt;/abbr&gt;&lt;/p&gt;
    &lt;p&gt;Back when I used it, Simplenote was a solid alternative to Google Keep (cross-platform, but complicated) and iCloud Notes (simple, but only Apple platforms). It supports the basics (notes and tagging), syncs across multiple platforms (including mobile and desktop), and it’s run by a medium-tech platform rather than a big-tech platform. That said, you’re still trusting a cloud platform to not read your data. (It’s not encrypted at rest, only in transit.) I moved from Simplenote to &lt;a href="https://kvibber.com/reviews/software/nextcloud-notes/"&gt;Nextcloud Notes&lt;/a&gt; back in 2020 (where &lt;em&gt;does&lt;/em&gt; the time go?) as part of my shift toward &lt;a href="https://kvibber.com/reviews/tag/self-hosting/"&gt;self-hosting&lt;/a&gt; as much as I can.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;At one point I had Simplenote, Skype and Shazam all on my phone. Bad enough that so many apps still use (almost?) the same light-blue-and white color scheme, but I kept &lt;a href="https://wandering.shop/@KelsonV/101977207826594044"&gt;tapping the wrong&lt;/a&gt; blue-and-white stylized S!&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;Simplenote’s future is cloudy, though. Automattic &lt;a href="https://forums.simplenote.com/forums/topic/customer-update-on-simplenote"&gt;stopped developing new features&lt;/a&gt; last year, and they haven’t made any statement on how long they plan to continue maintaining the software or the sync service. On the plus side, the design goals were mostly met, although end-to-end encryption would have been nice.&lt;/p&gt;

	&lt;p&gt;
    More info at &lt;a href="https://simplenote.com/"&gt;Simplenote&lt;/a&gt;.
    
    &lt;/p&gt;
    &lt;footer&gt;This post by &lt;a class="p-author h-card" href="https://kvibber.com" rel="author"&gt;Kelson Vibber&lt;/a&gt; originally appeared &lt;a class="u-url" href="https://kvibber.com/reviews/software/simplenote/"&gt;on Kelson Reviews Stuff&lt;/a&gt;&lt;/footer&gt;</content><link href="https://kvibber.com/reviews/software/simplenote/"/><summary>★★★★☆ - A simple, but solid alternative to Google Keep or Apple Notes that syncs across multiple platforms. Downsides are that it's not end-to-end encrypted, and Automattic has stopped developing new features, so it's not clear how long they plan to maintain the software - or the service.</summary><category term="review"/><category term="software"/><category term="notes"/><category term="automattic"/><category term="degoogling"/><category term="cloud"/><category term="android"/><category term="macos"/><category term="windows"/><category term="linux"/><category term="ios"/></entry><entry><id>https://kvibber.com/reviews/software/hex-fiend/</id><title>Hex Fiend</title><updated>2026-02-28T00:53:08+00:00</updated><author><name>Kelson Vibber</name><email>kelson@pobox.com</email></author><content type="html">&lt;p&gt;&lt;abbr class="p-rating" title="5 stars out of 5" value="5"&gt;★★★★★&lt;/abbr&gt;&lt;/p&gt;
    &lt;p&gt;I’m impressed: Hex Fiend &lt;em&gt;instantly&lt;/em&gt; opened an 8.5 &lt;em&gt;gigabyte&lt;/em&gt; file I needed to extract some data from. No trouble searching for the starting bytes, no slowdown selecting or deleting multi-gigabyte section, no problem saving the multi-gigabyte result. Yes, this is on a machine with lots of RAM, but even here I’m used to apps choking on files this size. Even &lt;a href="https://kvibber.com/reviews/software/bbedit/"&gt;BBEdit&lt;/a&gt; gets slow when you hand it something that big.&lt;/p&gt;

	&lt;p&gt;
    More info at &lt;a href="https://hexfiend.com"&gt;Hex Fiend&lt;/a&gt;.
    Available from 
      &lt;a href="https://hexfiend.com"&gt;Hex Fiend (Installer)&lt;/a&gt;,
      &lt;a href="https://github.com/HexFiend/HexFiend"&gt;GitHub (Source)&lt;/a&gt;,
      &lt;a href="https://apps.apple.com/us/app/hex-fiend/id1342896380?mt=12"&gt;App Store (Old)&lt;/a&gt;.
    &lt;/p&gt;
    &lt;footer&gt;This post by &lt;a class="p-author h-card" href="https://kvibber.com" rel="author"&gt;Kelson Vibber&lt;/a&gt; originally appeared &lt;a class="u-url" href="https://kvibber.com/reviews/software/hex-fiend/"&gt;on Kelson Reviews Stuff&lt;/a&gt;&lt;/footer&gt;</content><link href="https://kvibber.com/reviews/software/hex-fiend/"/><summary>★★★★★ - Handled opening, searching, editing and saving an 8GB file without breaking a sweat.</summary><category term="review"/><category term="software"/><category term="hex-editor"/><category term="macos"/><category term="development-tools"/><category term="tools"/><category term="floss"/></entry><entry><id>https://kvibber.com/reviews/software/virtualbox/</id><title>VirtualBox</title><updated>2026-02-27T05:19:53+00:00</updated><author><name>Kelson Vibber</name><email>kelson@pobox.com</email></author><content type="html">&lt;p&gt;&lt;abbr class="p-rating" title="4 stars out of 5" value="4"&gt;★★★★☆&lt;/abbr&gt;&lt;/p&gt;
    &lt;h2&gt;Good&lt;/h2&gt;
&lt;p&gt;Reliable, fast virtualization that runs on Windows, Mac, Linux, and Solaris(!) hosts, and can run lots of different guest operating systems. You can adjust the virtual hardware in a lot more detail than you can with Boxes.&lt;/p&gt;
&lt;p&gt;It supports 3D hardware acceleration, and runs Windows 10/11 VMs on Linux hosts much faster than the native KVM system (&lt;a href="https://kvibber.com/reviews/software/boxes/"&gt;Boxes&lt;/a&gt;, &lt;a href="https://kvibber.com/reviews/software/virt-manager/"&gt;Virt Manager&lt;/a&gt;, etc) can. (I can’t even get a Windows 11 guest to &lt;em&gt;run&lt;/em&gt; on KVM.) It’s still not as fast at running Windows games as Steam/&lt;a href="https://kvibber.com/reviews/software/wine/"&gt;Proton&lt;/a&gt;, but Minecraft (Bedrock Edition) is actually playable in a Windows 11 VM on my Linux host!&lt;/p&gt;
&lt;p&gt;I’ve mainly used the &lt;a href="https://rpmfusion.org"&gt;RPMFusion packages&lt;/a&gt; on &lt;a href="https://kvibber.com/reviews/software/fedora/"&gt;Fedora&lt;/a&gt;, and it’s been solid. And unlike &lt;a href="https://kvibber.com/reviews/software/vmware-fusion/"&gt;VMWare&lt;/a&gt;, I can actually &lt;em&gt;find&lt;/em&gt; it.&lt;/p&gt;
&lt;h2&gt;Bad&lt;/h2&gt;
&lt;p&gt;It’s &lt;em&gt;Oracle&lt;/em&gt;. That’s &lt;a href="https://kvibber.com/reviews/software/oracle/"&gt;another whole post&lt;/a&gt;, but thankfully the core application started out as Free Software under the GPL. That makes it easy to package for Linux, hard for Oracle to completely enclose, and legal to use without giving money one of my least favorite tech companies.&lt;/p&gt;
&lt;p&gt;Also, it can’t emulate different hardware architectures, and from what I can tell, it’s x86_64 only except on macOS, where it’ll run on either Apple Silicon or Intel (for now).&lt;/p&gt;
&lt;h2&gt;Ugly&lt;/h2&gt;
&lt;p&gt;The user interface.&lt;/p&gt;
&lt;p&gt;Mouse integration works perfectly until it doesn’t (I had to turn it off for Minecraft, for instance), and then you have to look up the host key (&lt;code&gt;Right-Ctrl&lt;/code&gt; by default) to get out of it again.&lt;/p&gt;
&lt;p&gt;Some features, like virtual USB devices and disk encryption, require an extension pack, which is licensed separately, either as a paid add-on for commercial use or free for personal use.&lt;/p&gt;
&lt;h2&gt;Weird, but OK&lt;/h2&gt;
&lt;p&gt;“Seamless Mode” is supposed to display the guest’s apps as windows directly on your main desktop, instead of putting the entire guest desktop in a window. (Similar to &lt;a href="https://kvibber.com/reviews/software/parallels/"&gt;Parallels’ Coherence&lt;/a&gt; or &lt;a href="https://kvibber.com/reviews/software/vmware-fusion/"&gt;VMWare’s Unity&lt;/a&gt;.) It doesn’t work that way on my system, probably because I’m running Wayland, and instead it works as an &lt;em&gt;almost&lt;/em&gt; full-screen view, but with the GNOME top bar still visible. It makes it a lot easier to switch between guest and host than running it full screen.&lt;/p&gt;

	&lt;p&gt;
    More info at &lt;a href="https://www.virtualbox.org"&gt;VirtualBox&lt;/a&gt;.
    
    &lt;/p&gt;
    &lt;footer&gt;This post by &lt;a class="p-author h-card" href="https://kvibber.com" rel="author"&gt;Kelson Vibber&lt;/a&gt; originally appeared &lt;a class="u-url" href="https://kvibber.com/reviews/software/virtualbox/"&gt;on Kelson Reviews Stuff&lt;/a&gt;&lt;/footer&gt;</content><link href="https://kvibber.com/reviews/software/virtualbox/"/><summary>★★★★☆ - Reliable virtualization that runs on Windows, Mac and Linux, and can actually run a Windows 11 guest on my Linux host. The core app is Free, but Oracle charges for add-ons.</summary><category term="review"/><category term="software"/><category term="virtualization"/><category term="compatibility"/><category term="macos"/><category term="windows"/><category term="floss"/><category term="oracle"/><category term="solaris"/><category term="linux"/><category term="tools"/></entry><entry><id>https://kvibber.com/reviews/software/oracle/</id><title>The Trouble With Oracle</title><updated>2026-02-27T05:01:29+00:00</updated><author><name>Kelson Vibber</name><email>kelson@pobox.com</email></author><content type="html">&lt;p&gt;My first impression of Oracle, back in the 1990s, came when the web and Java were new. They were &lt;em&gt;already&lt;/em&gt; talking up the idea of replacing the general-purpose personal computer with a &lt;a href="https://en.wikipedia.org/wiki/Thin_client"&gt;thin client&lt;/a&gt; and setting up what we now call software as a service. As I got more involved in actually &lt;em&gt;working&lt;/em&gt; with computers and client-server applications, I became aware of their flagship database software, which always struck me as overcomplicated.&lt;/p&gt;
&lt;p&gt;And they keep buying things I like or use, and messing them up.&lt;/p&gt;
&lt;p&gt;You can imagine how thrilled I &lt;em&gt;wasn’t&lt;/em&gt; when they bought Sun in order to take over MySQL. That same acquisition brought them OpenOffice, Solaris, and Java. They squandered OpenOffice so badly that by the time they handed it off to Apache, most Linux distributions had already switched to the &lt;a href="https://kvibber.com/reviews/software/libreoffice/"&gt;brand-new fork LibreOffice&lt;/a&gt;…and to MariaDB, an equally new fork of MySQL. (MySQL still has the name recognition, but it’s not what gets bundled with Linux distros anymore.) They also squandered Solaris, but it’s technically still around, and it’s not as if AIX or HP-UX or any of the other commercial Unixes have done better.&lt;/p&gt;
&lt;p&gt;Don’t even get me &lt;em&gt;started&lt;/em&gt; on &lt;a href="https://www.theregister.com/2026/02/10/oracle_java_licensing/"&gt;Java licensing&lt;/a&gt;, or their &lt;a href="https://en.wikipedia.org/wiki/Google_LLC_v._Oracle_America,_Inc."&gt;copyright lawsuit against Google over programming APIs&lt;/a&gt;. (On the plus side, a decade later we finally got a Supreme Court ruling that programming to match an API is fair use, because &lt;em&gt;that’s what APIs are for&lt;/em&gt;.)&lt;/p&gt;
&lt;p&gt;There’s the poor usability of their website. The security alerts that consist of essentially “there’s a security alert, now go log into your account so you can find out if you’re using anything affected.” It’s one of those B2B companies that does some consumer business as almost an afterthought, like &lt;a href="https://kvibber.com/reviews/software/vmware-fusion/"&gt;Broadcom&lt;/a&gt;. Their cloud service has &lt;a href="https://www.reddit.com/r/oraclecloud/comments/14qbvkw/comment/jqogtkk/"&gt;multiple complaints&lt;/a&gt; of them &lt;a href="https://duckduckgo.com/?q=oracle+free+tier+cloud+terminated"&gt;arbitrarily canceling&lt;/a&gt; accounts in their free tier.&lt;/p&gt;
&lt;p&gt;And then there’s Larry Ellison, who bought an entire Hawaiian island to be his personal resort. (OK, technically he &lt;a href="https://en.wikipedia.org/wiki/L%C4%81na%CA%BBi"&gt;“only” bought 98% of Lānaʻi&lt;/a&gt;, but I couldn’t help think of it when reading &lt;a href="https://kvibber.com/reviews/books/invasive/"&gt;&lt;em&gt;Invasive&lt;/em&gt;&lt;/a&gt;.) And who bought CBS/Paramount (and now Warner Bros/Discovery) to give his son something to do and, judging by its editorial interference, to &lt;a href="https://en.wikipedia.org/wiki/Inside_CECOT"&gt;suppress news coverage&lt;/a&gt; critical of the Trump administration.&lt;/p&gt;
&lt;p&gt;Sure, they’re hardly the only tech company that’s on board with undermining democracy if it helps them turn a bigger profit, but even Google and Microsoft have &lt;em&gt;some&lt;/em&gt; redeeming qualities.&lt;/p&gt;

	
    &lt;footer&gt;This post by &lt;a class="p-author h-card" href="https://kvibber.com" rel="author"&gt;Kelson Vibber&lt;/a&gt; originally appeared &lt;a class="u-url" href="https://kvibber.com/reviews/software/oracle/"&gt;on Kelson Reviews Stuff&lt;/a&gt;&lt;/footer&gt;</content><link href="https://kvibber.com/reviews/software/oracle/"/><summary>I've disliked Oracle since they were trying to push thin clients and what we now call Software as a Service back in the 1990s. And they keep buying things I like or use, and messing them up.</summary><category term="review"/><category term="software"/><category term="corporatism"/><category term="java"/><category term="mysql"/><category term="solaris"/><category term="oracle"/><category term="programming"/><category term="hawaii"/></entry><entry><id>https://kvibber.com/tech-tips/select-all/</id><title>Select All of a Code Sample Using Minimal JS</title><updated>2026-02-25T15:43:15+00:00</updated><author><name>Kelson Vibber</name><email>techtips@kvibber.com</email></author><content type="html">&lt;p&gt;I’ve got a lot of code samples on here, plus the &lt;a href="https://kvibber.com/tech-tips/bookmarklets/"&gt;bookmarklets collection&lt;/a&gt;. It’s not hard so select the whole block with a mouse, but it’s not exactly &lt;em&gt;easy&lt;/em&gt; either. (You can triple-click to select a paragraph, but code samples are rarely paragraphs.)&lt;/p&gt;
&lt;p&gt;You can do this with various JavaScript frameworks, but one of my goals on this site is to keep the bandwidth and processing minimal. One HTML file per article, one shared CSS file. I figured  I should be able to do this with vanilla JavaScript now.&lt;/p&gt;
&lt;p&gt;Turns out it’s pretty simple, and if you only want to use it with mouse clicks and touch taps, it’s only 4 lines of JavaScript (plus closing braces/parentheses). Here I’m setting it on all code elements that are inside pre blocks.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-JavaScript"&gt;const codeSamples = document.querySelectorAll(&amp;quot;pre code&amp;quot;);
codeSamples.forEach( (sample) =&amp;gt; {
  sample.addEventListener(&amp;quot;click&amp;quot;, (e) =&amp;gt; {
    window.getSelection().selectAllChildren(e.target);
  });
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That doesn’t take care of keyboard users, though. You can add a “keypress” event, but &lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt; isn’t normally focusable by tab. Fortunately it’s easy enough to add an element to the tab order in JavaScript (zero means let the browser decide where to put it), and we already have it looping through the nodes we want to modify.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-JavaScript"&gt;  sample.setAttribute(&amp;quot;tabindex&amp;quot;,0);
  sample.addEventListener(&amp;quot;keypress&amp;quot;, (e) =&amp;gt; {
    window.getSelection().selectAllChildren(e.target);
  });
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So the full code fragment is 7 lines of actual code, plus closing braces and comments.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-JavaScript"&gt;// Select the entire contents of a code sample.
const codeSamples = document.querySelectorAll(&amp;quot;pre code&amp;quot;);
codeSamples.forEach( (sample) =&amp;gt; {
  
  // Select everything when clicked.
  sample.addEventListener(&amp;quot;click&amp;quot;, (e) =&amp;gt; {
    window.getSelection().selectAllChildren(e.target);
  });
  
  // Add to tab list and select when a key is pressed.
  sample.setAttribute(&amp;quot;tabindex&amp;quot;,0);
  sample.addEventListener(&amp;quot;keypress&amp;quot;, (e) =&amp;gt; {
    window.getSelection().selectAllChildren(e.target);
  });
  
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This approach works in modern Chromium, WebKit and Gecko-based web browsers. I haven’t tested how it interacts with screen readers or other accessibility features yet.&lt;/p&gt;
&lt;footer&gt;This post by &lt;a class="p-author h-card" href="https://kvibber.com" rel="author"&gt;Kelson Vibber&lt;/a&gt; originally appeared &lt;a class="u-url" href="https://kvibber.com/tech-tips/select-all/"&gt;on KV Tech Tips&lt;/a&gt;&lt;/footer&gt;</content><link href="https://kvibber.com/tech-tips/select-all/"/><summary>A short (~10 lines) JavaScript fragment to select an entire code snippet when someone clicks, taps, or presses a key on it.</summary><category term="web-development"/><category term="howto"/><category term="techtips"/><category term="usability"/><category term="accessibility"/><category term="javascript"/></entry><entry><id>https://kvibber.com/reviews/books/heavens-vault/</id><title>Heaven's Vault (Novels)</title><updated>2026-02-19T05:04:09+00:00</updated><author><name>Kelson Vibber</name><email>kelson@pobox.com</email></author><content type="html">&lt;p&gt;Jon Ingold&lt;/p&gt;
    &lt;p&gt;&lt;abbr class="p-rating" title="4 stars out of 5" value="4"&gt;★★★★☆&lt;/abbr&gt;&lt;/p&gt;
    &lt;p&gt;There are many paths through the Nebula, and many ways to reach a destination. The novels based on &lt;a href="https://kvibber.com/reviews/games/heavens-vault/"&gt;&lt;em&gt;Heaven’s Vault&lt;/em&gt;&lt;/a&gt;, by the same writer as the game’s narrative, tell the story of one such path, and what comes after (and before).&lt;/p&gt;
&lt;p&gt;&lt;source type="image/avif" /&gt;&lt;source type="image/webp" /&gt;&lt;img alt="Three book covers, each showing a line drawing of a face in profile, sketched in white on a dark background, as if glowing. The first is bald, with vague features. The second and third are more detailed, showing two different women: the second has long hair blowing past her face, and the same jawline and head shape as the first. The third has a clearly different shape to her head and jaw, and is wearing a scarf that drapes over the top and back of her head and over her shoulders." class="center" height="437" src="https://kvibber.com/reviews/img/heavens-vault-books-1-3-150w.jpeg" width="900" /&gt;&lt;/p&gt;
&lt;p&gt;The first two books, &lt;em&gt;The Loop&lt;/em&gt; and &lt;em&gt;The Vault&lt;/em&gt;, follow archaeologist Aliya and her robot Six through a story close to, but not &lt;em&gt;quite&lt;/em&gt; the same as a play-through of the game. Side quests are left out, some incidents are rearranged, and flashbacks tell the story of El and Oroi exploring the decaying buildings of Elboreth as orphan children, and how Aliya found the &lt;em&gt;Nightingale&lt;/em&gt;. You get to meet a couple of her older robots, including the very talkative Three, and a (thematically appropriate) seventh robot from before Iox.&lt;/p&gt;
&lt;p&gt;They’re different enough from an actual playthrough that it still feels like you’re experiencing something new if you’ve played the game, and tell a solid enough narrative that you don’t &lt;em&gt;need&lt;/em&gt; to have played the game to read them (though I imagine the target audience is mainly people who &lt;em&gt;have&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;The second book diverges further from the game in details. In part it’s because a linear story can only have one path, so I think the author was trying to combine elements of different paths through the game that block each other out. (This is one reason the game is so replayable: you want to see what would have happened if you’d made a different choice.)&lt;/p&gt;
&lt;p&gt;Sailing the rivers is much more physical than the calm, flow-state experience in the game, more like actually sailing a small boat. Aliya strains muscles, the boat crashes into the occasional rock (and moon), she gets injured, the boat needs to be repaired.&lt;/p&gt;
&lt;h2&gt;Translating Ancient&lt;/h2&gt;
&lt;p&gt;Ancient writing is woven throughout the books. Fragments introduce some chapters, along with the numerals. Scene breaks use the glyph for separation.&lt;/p&gt;
&lt;p&gt;The experience of actively translating is, well, translated to prose by showing Aliya and Six puzzling out the meaning based on how the glyphs combine. Some bits are translated completely, others partially, some left as extras for the reader. At one point in book three Aliya spends several pages trying to work out whether it’s even &lt;em&gt;possible&lt;/em&gt; to translate names from written Ancient to modern Ioxian or Elborethian, aside from the one name, Mazwai, that has survived the ages with context intact.&lt;/p&gt;
&lt;p&gt;Occasionally a chapter is introduced with passages from Mazai’s writings, credited here as being translated by Huang or Aliya.&lt;/p&gt;
&lt;h2&gt;Before and After&lt;/h2&gt;
&lt;p&gt;The third book, &lt;em&gt;The Flood&lt;/em&gt;, gets weird.&lt;/p&gt;
&lt;p&gt;It picks up in the aftermath of one of the endgame choices (you can probably guess which one from the title), as the moons are cut off from each other, and Aliya and the people of Elboreth attempt to deal with their new reality of too much water instead of too little.&lt;/p&gt;
&lt;p&gt;A secondary story thread follows Mazwai herself in another age. It gets into some of the bigger questions about the Loop: Is it real? If so, is time a literal loop in which the future becomes the past, or is it linear, but with similar events recurring? Are people really reborn time and time again in different ages? And just what does a robot’s Ethical Core &lt;em&gt;mean&lt;/em&gt;, anyway?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://store.steampowered.com/news/app/774201/view/527614642864786115"&gt;Book four is coming later this year&lt;/a&gt;. I’m looking forward to reading it. For now, I’m &lt;a href="https://kvibber.com/reviews/games/heavens-vault/"&gt;playing through the game&lt;/a&gt; for the third time.&lt;/p&gt;

	&lt;p&gt;
    
    Available from 
      &lt;a href="https://inklestudios.myshopify.com"&gt;Inkle Bookstore&lt;/a&gt;.
    &lt;/p&gt;
    &lt;footer&gt;This post by &lt;a class="p-author h-card" href="https://kvibber.com" rel="author"&gt;Kelson Vibber&lt;/a&gt; originally appeared &lt;a class="u-url" href="https://kvibber.com/reviews/books/heavens-vault/"&gt;on Kelson Reviews Stuff&lt;/a&gt;&lt;/footer&gt;</content><link href="https://kvibber.com/reviews/books/heavens-vault/"/><summary>★★★★☆ - Jon Ingold: Aliya and the robot sail the Nebula, seeking clues to its history and future. The first two novels tell a story similar to the game, just different enough to feel new. Ancient writing appears throughout, sometimes translated and sometimes left for the reader. Book three picks up both after the game and long before, exploring a changed Nebula and the Loop.</summary><category term="review"/><category term="books"/><category term="science-fiction"/><category term="space"/><category term="archaeology"/><category term="ruins"/><category term="sailing"/><category term="language"/><category term="identity"/><category term="time-loop"/><category term="inkle"/><category term="nebula"/><category term="media-adaptation"/></entry></feed>