<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://rjbs.cloud/feed.xml" rel="self" type="application/atom+xml" /><link href="https://rjbs.cloud/" rel="alternate" type="text/html" /><updated>2026-02-27T00:17:37+00:00</updated><id>https://rjbs.cloud/feed.xml</id><title type="html">rjbs forgot what he was saying</title><subtitle>blathering blatherskite</subtitle><author><name>Ricardo Signes</name></author><entry><title type="html">Horror Movie Month 2024</title><link href="https://rjbs.cloud/blog/2026/01/horror-movie-month-2024/" rel="alternate" type="text/html" title="Horror Movie Month 2024" /><published>2026-01-01T21:12:00+00:00</published><updated>2026-01-01T21:12:00+00:00</updated><id>https://rjbs.cloud/blog/2026/01/horror-movie-month-2024</id><content type="html" xml:base="https://rjbs.cloud/blog/2026/01/horror-movie-month-2024/"><![CDATA[<p>Yesterday, I posted about the books I read in 2025, which made me remember that
I never posted about the (horror) movies we watched in October 2024.  So, I
thought I’d get around to that.  Of course this will be short and lossy, right?
It’s been over a year.</p>

<p>Here’s what we watched for Horror Movie Month in 2024, at least according to my
notes!</p>

<h3 id="october-1-raw-2016">October 1: <a href="https://letterboxd.com/film/raw-2016/">Raw (2016)</a></h3>

<p>Girl goes to college, finally lets loose by becoming a cannibal.  This movie
was French and you’d know it even if you watched it dubbed.  It was okay.  It
was worth my time.</p>

<h3 id="october-2-tragedy-girls-2017">October 2: <a href="https://letterboxd.com/film/tragedy-girls/">Tragedy Girls (2017)</a></h3>

<p>Two high school girls who are interested in death try to make more of it
happen.  It was a horror-comedy, and it was fun.  Brianna Hildebrand, who you
may remember as Negasonic Teenage Warhead, was in it.</p>

<h3 id="october-4-vhsbeyond-2024">October 4: <a href="https://letterboxd.com/film/v-h-s-beyond/">V/H/S/Beyond (2024)</a></h3>

<p>Honestly, apart from the 2025 one, most of the V/H/S movies are about the same
to me:  mixed bags, but usually not quite worth the whole watch.  This one was
that too.  It had its moments.</p>

<h3 id="october-5-humanist-vampire-seeking-consenting-suicidal-person-2023">October 5: <a href="https://letterboxd.com/film/humanist-vampire-seeking-consenting-suicidal-person/">Humanist Vampire Seeking Consenting Suicidal Person (2023)</a></h3>

<p>Honestly, I’d watch just for “Want to see a French-Canadian horror movie?”</p>

<p>A young woman in a family of vampires <em>really</em> doesn’t want to go hunt for
blood, but her parents have reluctantly become insistent.  She decides she’ll
look for somebody who’d be willing to donate.</p>

<p>It was good, and sort of a horror-comedy.  It didn’t feel like every other
movie, which was good.</p>

<h3 id="october-6-onyx-the-fortuitous-and-the-talisman-of-souls-2023">October 6: <a href="https://letterboxd.com/film/onyx-the-fortuitous-and-the-talisman-of-souls/">Onyx the Fortuitous and the Talisman of Souls (2023)</a></h3>

<p>I liked this the least of everybody in my household, I think.  It was sometimes
pretty funny, but the main character got on my nerves.  I got the impression he
is a YouTube character with some following, maybe?  Like Ernest P. Worrell or
other over the top “originally in small doses” characters, he was just too much
here.</p>

<p>That said, we still make references to the guy’s catch phrase, so it stuck with
us.</p>

<h3 id="october-6-cuckoo-2024">October 6: <a href="https://letterboxd.com/film/cuckoo-2024/">Cuckoo (2024)</a></h3>

<p>This was one of the big hits of “general horror movies of 2024”, so I was glad
we got to watch it.  I liked it!  It wasn’t perfect, but it did well at being
one of those “Why can’t everybody else see how messed up this lovely place
really is?” movies.</p>

<h3 id="october-7-let-the-wrong-one-in-2021">October 7: <a href="https://letterboxd.com/film/let-the-wrong-one-in/">Let the Wrong One In (2021)</a></h3>

<p>This movie was really stupid and I liked it.  First off, there was a character
named Deco, which made me think of The Commitments, which won points.  Also,
Anthony Stewart Head.</p>

<p>Basically it’s sort of a slapstick farcical vampire movie set in Ireland.
Honestly, “What if [some successful movie] but the protagonists were idiots?”
is a pretty good formula.</p>

<h3 id="october-8-the-witches-of-eastwick-1987">October 8: <a href="https://letterboxd.com/film/the-witches-of-eastwick/">The Witches of Eastwick (1987)</a></h3>

<p>Still a classic.</p>

<p>Sure, it’s kind of a mess here and there, but it’s got a great cast and it
<em>just goes for it</em>.  I read recently that there was talk about casting other
people (other than Jack Nicholson) as Daryl Van Horne, which seems like it
could only have been worse.  One name mentioned was Bill Murray.  What?!  This
was a nearly perfect vehicle for Jack Nicholson doing comedy, and Cher, Susan
Sarandon, and Michelle Pfeiffer were a lot of fun, too.</p>

<p>The cherry scene!</p>

<h3 id="october-9-courtney-gets-possessed-2023">October 9: <a href="https://letterboxd.com/film/courtney-gets-possessed/">Courtney Gets Possessed (2023)</a></h3>

<p>I barely remember this one.  I think it was funny enough?  Demonic hijinks at a
bachelorette party.</p>

<h3 id="october-10-theres-something-wrong-with-the-children-2023">October 10: <a href="https://letterboxd.com/film/theres-something-wrong-with-the-children/">There’s Something Wrong with the Children (2023)</a></h3>

<p>Two parents, their two kids, and an adult friend take a camping trip.  The kids
wander off in the woods and when they come back, they are… off.  Things keep
getting worse.</p>

<p>This was good.  It wasn’t great, but it was good.  You want to yell, “Wake up,
people, your kids are <em>busted</em>!”</p>

<h3 id="october-12-645-2021">October 12: <a href="https://letterboxd.com/film/6-45/">6:45 (2021)</a></h3>

<p>It took me a while to remember this one.  It was okay.  A couple take a
ill-advised holiday to an island town, which leads to a deadly time loop.  It
was okay, but there are many better movies to watch instead.  (Look, maybe it’s
better than I remember, but given I barely remember it…)</p>

<h3 id="october-13-oddity-2024">October 13: <a href="https://letterboxd.com/film/oddity-2024/">Oddity (2024)</a></h3>

<p>I didn’t remember this until reading the synopsis, but it was quite good.  So
maybe my “it’s bad because I don’t remember it” take above is wrong!</p>

<p>A woman is murdered at her secluded fixer-upper in the countryside.  Later, her
twin sister shows up and is <em>really</em> weird.  What’s going on?  You should just
watch it, probably.  Not a comedy.</p>

<h3 id="october-14-mr-crocket-2024">October 14: <a href="https://letterboxd.com/film/mr-crocket-2024/">Mr. Crocket (2024)</a></h3>

<p>This is sort of like “what if there was a haunted video tape that showed you a
cutesy TV show for kids, but also it was evil?”  I wanted to like it, but it
was just ugly.  It wasn’t fun or funny, just dark.  It wasn’t darkly funny,
although <em>maybe</em> that was the goal.</p>

<h3 id="october-15-evil-dead-ⅱ-1987">October 15: <a href="https://letterboxd.com/film/evil-dead-ii/">Evil Dead Ⅱ (1987)</a></h3>

<p>I think we watched this because Marty hadn’t seen it.  Look, it’s fine.  It’s a
lot better than the first version.  I think it’s just not exactly my bag.  (I
really like Bruce Campbell, though!)</p>

<h3 id="october-16-cube-2021">October 16: <a href="https://letterboxd.com/film/cube-2021-1/">Cube (2021)</a></h3>

<p>I really liked Cube!  This is not that movie, though, it’s a 2021 <em>remake</em> from
Japan.  Don’t bother.  It is worse in every way.  Maybe it’s <em>okay</em>, but it’s
not significantly different, so go with the original.</p>

<h3 id="october-18-zombie-town-2023">October 18: <a href="https://letterboxd.com/film/zombie-town-2023/">Zombie Town (2023)</a></h3>

<p>A reclusive movie director releases one more movie, and it turns everybody in
town into zombies.  Kids fight back.</p>

<p>This kind of movie could’ve been fun, but it wasn’t.  It had two of the Kids in
the Hall in it!  What a waste.</p>

<h3 id="october-19-the-finale-2023">October 19: <a href="https://letterboxd.com/film/the-finale/">The Finale (2023)</a></h3>

<p>Oh yeah, this one.</p>

<p>Murders start happening at a summer theater camp.  Everybody has a motive.  Who
did it?</p>

<p>Well, look, I think this was maybe better than the related Stage Fright, but it
was bad.  It was way too long.  It was sometimes nonsensical.  I do not
recommend it.</p>

<h3 id="october-19-invitation-to-hell-1984">October 19: <a href="https://letterboxd.com/film/invitation-to-hell/">Invitation to Hell (1984)</a></h3>

<p>This gets huge points from me for “picked a weird premise and didn’t back
down.”  Wes Craven directs.  A family moves to a new planned town where the
father has taken a great new job.  Everybody is obsessed with the local country
club and its manager.  Like, weirdly obsessed.  What the heck is going on in
town?  Also, Robert Urich and Susan Lucci?  Wild.</p>

<p>Not great, but I am glad I watched it.</p>

<h3 id="october-20-corporate-animals-2019">October 20: <a href="https://letterboxd.com/film/corporate-animals/">Corporate Animals (2019)</a></h3>

<p>A bunch of coworkers on a team-building exercise end up trapped in a cave.
Demi Moore?!  We had fun.  It was stupid in a good way.  The company
specialized in edible cutlery, which paid off a few ways.</p>

<h3 id="october-20-stranger-in-our-house-1978">October 20: <a href="https://letterboxd.com/film/stranger-in-our-house/">Stranger in Our House (1978)</a></h3>

<p>Wes Craven again, this time with Linda Blair.  It wasn’t great, sadly, and the
concept has been done a bunch of times.  Orphaned kid moves in with other
family, and only one family member realizes that maybe this is a bad idea.  It
was… fine.</p>

<h3 id="october-24-little-evil-2017">October 24: <a href="https://letterboxd.com/film/little-evil/">Little Evil (2017)</a></h3>

<p>Adam Scott becomes the step-dad to the Antichrist and really tries to make
things work.  This was not amazing, but it was much better than I expected.
I don’t mind having watched it, but I wouldn’t watch it again.</p>

<p>Good job casting the really creepy kid, though!</p>

<h3 id="october-25-deer-camp-86-2022">October 25: <a href="https://letterboxd.com/film/deer-camp-86/">Deer Camp ‘86 (2022)</a></h3>

<p>A bunch of guys go hunting and get into trouble.  I remember <em>nothing</em>.</p>

<h3 id="october-26-the-day-of-the-beast-1995">October 26: <a href="https://letterboxd.com/film/the-day-of-the-beast/">The Day of the Beast (1995)</a></h3>

<p>A priest figures out how to predict the exact birth of the Antichrist, and
enlists the help of a headbanger and a TV occultist to save the world.  Was
this a comedy on purpose?  I just don’t know.  It was weird, and unpredictable,
and so I liked it.</p>

<h3 id="october-27-the-strangers-2008">October 27: <a href="https://letterboxd.com/film/the-strangers/">The Strangers (2008)</a></h3>

<p>What a lousy movie to end on.  It’s a boring, tedious home invasion movie.  I
see it was 86 minutes long, but I remember it feeling much longer.  Also, I
think they remade it into a three part movie?  I can’t imagine.</p>

<p>I just didn’t care about anyone or anything in this movie.</p>]]></content><author><name>Ricardo Signes</name></author><category term="horror-movie-month" /><category term="movies" /><summary type="html"><![CDATA[Yesterday, I posted about the books I read in 2025, which made me remember that I never posted about the (horror) movies we watched in October 2024. So, I thought I’d get around to that. Of course this will be short and lossy, right? It’s been over a year.]]></summary></entry><entry><title type="html">the books I read in 2025</title><link href="https://rjbs.cloud/blog/2025/12/things-i-read-in-2025/" rel="alternate" type="text/html" title="the books I read in 2025" /><published>2025-12-31T23:00:00+00:00</published><updated>2025-12-31T23:00:00+00:00</updated><id>https://rjbs.cloud/blog/2025/12/things-i-read-in-2025</id><content type="html" xml:base="https://rjbs.cloud/blog/2025/12/things-i-read-in-2025/"><![CDATA[<p>I don’t take the Goodreads “reading challenge” too seriously, but I did hit my
target last year, and it felt good.  I thought I’d try again this year and I
did get it done – only just, though, as I finished my last <em>three</em> books in
the last two days of the year.  I think I would’ve liked to read a bit more
through the year, but sometimes I just wasn’t feeling it.  So it goes!  I think
this is a “structure your time” problem, but also it’s not the most pressing
thing on my agenda, you know?</p>

<p>So, here’s what I read, not in order, and some brief notes.</p>

<h2 id="greg-egan">Greg Egan</h2>

<p>Last year, I read <em>five</em> Greg Egan books.  This year, just two.  First, I read
<a href="https://www.gregegan.net/ALLSKIES/AllSkies.html">The Book of All Skies</a>, which
I enjoyed.  It’s the story of a group of people investigating the frontiers of
their very weirdly-shaped world.  As with many Egan books, there’s a lot of
very weird math and physics under the hood, but it wasn’t critical to think too
hard about them, and I think that made the story more enjoyable for me.  In
this book, they would’ve gotten in the way.  That said, when I finished the
book I went and read a bunch of Egan’s notes on the underlying ideas, which
were interesting (insofar as I understood them).</p>

<p>Later, I read <a href="https://www.gregegan.net/SCHILD/SCHILD.html">Schild’s Ladder</a>,
which was roughly the opposite.  That is, it was one of the most physics-heavy
Egan books I’ve read.  More than once, I wanted to take photos of the page
because it was a wall of thick jargon.  I did not enjoy the book.  At the
beginning, I said, “Oh, this is going to be Egan’s take on Cat’s Cradle!”  That
would’ve been very interesting, especially because Egan and Vonnegut are so, so
different.  Or: maybe it <em>was</em> that, but I didn’t care to think about the
comparison by the end.  It reminded me of Vinge, too, but not in a way that
excited me.  Anyway, look, I’ve read a lot of Egan, and I will read more.  This
just didn’t hit home.</p>

<h2 id="effectiveness">Effectiveness</h2>

<p>“Effectiveness” is my shelf (or label or tag or whatever they call it now) in
Goodreads for books on productivity and management.  I have a lot of books in
that queue, but I only make slow progress, for many reasons.</p>

<p>My favorite of the ones I read this year, by a long way, was <a href="https://www.headhousebooks.com/book/9781250235374">Radical
Candor</a>.  This is one of
those books that I’d read <em>about</em> many times.  It sounded not bad, but not
amazing.  But, of course, I’d only been seeing the shadows on the wall.  It was
great, and I hope I will go back to it in the future to try to puzzle out more
ways to do better at my job.  It really resonated with me, and I’ve brought it
up over and over when talking to other managers, this year.</p>

<p>I also read <a href="https://www.headhousebooks.com/book/9781982140113">Laziness Does Not
Exist</a>, which I didn’t love.
It was okay.  I feel the author would probably just give me a knowing “don’t
you hear yourself??” look, but I kept wanting to say, “Yes, don’t work yourself
sick, but <em>honestly</em> you are going too far.”  I think the issue is that an
indictment of a society-wide problem requires a massive-scaled critique.  But
“the Laziness Lie has you in its grip!”, over and over, was too much for me.
(It was also funny that I finished this book just today, December 31st, and it
had text saying “Don’t get worked up trying to meet your Goodreads goals”!)</p>

<p>Finally, as I wanted to get a bit more handle on some of my team’s rituals, I
read <a href="https://www.headhousebooks.com/book/9781680501636">Liftoff: Start and Sustain Agile
Teams</a>.  I found it totally
unremarkable, so I have no remarks.</p>

<h2 id="boss-fight-books">Boss Fight Books</h2>

<p><a href="https://bossfightbooks.com/">Boos Fight Books</a> publishes short books about
influential or otherwise important video games.  The books are written by
people who found the books to be important to them.</p>

<p>The first one I read was <a href="https://bossfightbooks.com/products/animal-crossing-by-kelsey">Animal
Crossing</a> by
Kelsey Lewin.  I’ve played all the main Animal Crossing games and have enjoyed
them all.  (Well, no, the iOS one was awful.)  This book, at a pleasing 2⁸
pages, talked about the origin of the game, its weird launch history starting
with the Nintendo64 DD, how it changed over time, and how the author enjoyed it
(or didn’t) over time.  I enjoyed the book, and felt like I’d read more like
this – but it was also clear that a lot of the book was about the author’s
life, which wasn’t really what I wanted.  So, it wasn’t a bad book, it just
wasn’t exactly what I wanted.</p>

<p><a href="https://bossfightbooks.com/products/parappa-the-rapper-by-mike-sholars">PaRappa the
Rapper</a>
and <a href="https://bossfightbooks.com/products/zzt-by-anna-anthropy">ZZT</a> books,
which were similarly a mix of “I am very interested!” and “I am not
particularly interested”.  I knew what I was getting into, though, so I had no
complaint for the authors.  I just sort of wish there were more books about
these games, focused more exclusively on the history and technology behind
them.</p>

<p>I was surprised by how few of my peers remembered ZZT.  I remember it being
both impressive and influential.  I was <em>also</em> surprised to learn how
programmable its world builder was, <em>and</em> that ZZT (the game)’s author was
<em>that</em> Tim Sweeney.  (The book’s author was <a href="https://en.wikipedia.org/wiki/Anna_Anthropy">Anna
Anthropy</a>, which was one of the
reasons I wanted to read this book.)</p>

<p>Finally, I read the book on
<a href="https://bossfightbooks.com/products/spelunky-by-derek-yu">Spelunky</a>.  I almost
didn’t, but then I saw that the author was Derek Yu, also the primary creator
of Spelunky itself!  This book was by far closest to what I’d want from these
books, if I was in charge.  I got a copy for my nephews, too, who I introduced
to the game a few years ago.</p>

<h2 id="stephen-king">Stephen King</h2>

<p>I read three Stephen King books this year, all story collections.  I’ve been
trying to catch up on reading all his story collections, and I’m very nearly
done, now.</p>

<p>First, <a href="https://en.wikipedia.org/wiki/Four_Past_Midnight">Four Past Midnight</a>,
from 1990.  It contains four novellas, all of which I liked okay.  I read it in
part because I’d been doing some idle research into King’s repeated setting of
Castle Rock, and saw that The Sun Dog (a story in this collection) was in some
ways tied up with Needful Things.</p>

<p>After that, I read <a href="https://en.wikipedia.org/wiki/Hearts_in_Atlantis">Hearts in
Atlantis</a>.  This was a
frustrating experience, because I kept thinking that maybe I’d read it already,
twenty years ago, but I couldn’t be sure.  This was <em>extra</em> frustrating because
it seemed to me like one of King’s best books.  Structurally and textually, it
was excellent.  I would recommend this to somebody who wasn’t sure they wanted
to read Stephen King.</p>

<p>Finally, <a href="https://en.wikipedia.org/wiki/You_Like_It_Darker">You Like It
Darker</a>.  This is a
collection of short stories published just last year.  It was good!  I enjoyed
just about all of it, <em>maybe</em> most especially the final three stories.  One of
these was a sequel to Cujo, which I definitely did not expect to be reading!</p>

<h2 id="technical-books">Technical Books</h2>

<p>This year, I’ve become the full-time lead of Fastmail’s Cyrus team.  A big part
of my team’s work is maintaining the open source <a href="https://www.cyrusimap.org/">Cyrus
IMAP</a> server.  It’s written in C.  My C is
miserable, and was probably at its best in 1992.  I need to get better.  I read
two C books this year: <a href="https://nostarch.com/effective-c-2nd-edition">Effective
C</a> and <a href="https://learning.oreilly.com/library/view/understanding-and-using/9781449344535/">Understanding and Using C
Pointers</a>.
I think both were fine, but it’s hard to say.  I’m not writing much C, day to
day, so probably some of what I learned has already faded away.  Still, I
thought they were both clear and explained a bunch of topics that I hadn’t
understood or only barely understood.  Hard to judge, but definitely not bad.
I can imagine going back to them later, when doing real work.</p>

<p>I already read <a href="https://pragprog.com/titles/bhtmux3/tmux-3/">tmux 3</a>, a book
about <a href="https://github.com/tmux/tmux/wiki">tmux</a>.  I like tmux quite a lot, and
this isn’t the first little book I’ve read about it.  It’s hard for me to say
what I thought of it.  I think it was a bit of a mish-mash for me.  I was
coming to it with a pretty long history with tmux, so lots of things were old
hat and not worth my time.  But as with many complex tools, even among the
fundamentals there were lots of things I didn’t know.  Here’s my biggest praise
for the book:  After I read it, I went back to a few sections I’d flagged and
worked through my <code class="language-plaintext highlighter-rouge">.tmux.conf</code>, making improvements based on what the book
taught me.</p>

<h2 id="slough-house">Slough House</h2>

<p>Okay, so my biggest category of books was the <a href="https://en.wikipedia.org/wiki/Slough_House_(novel_series)">Slough House
series</a> by Mick
Herron.  A full third of the books I read this year were these books.</p>

<p>Here are the titles:</p>

<ul>
  <li>Dead Lions</li>
  <li>Real Tigers</li>
  <li>Standing by the Wall</li>
  <li>Spook Street</li>
  <li>Nobody Walks</li>
  <li>London Rules</li>
  <li>Joe Country</li>
  <li>Slough House</li>
  <li>Bad Actors</li>
  <li>The Secret Hours</li>
  <li>Reconstruction</li>
  <li>Clown Town</li>
</ul>

<p>Look, they’re all very good.  That’s why I read them!  The only notable
exception, I think, is Reconstruction.  It’s fine.  It’s just the least Slough
House-y book, really tied in only by one character, and structured very
differently from the rest.  I’d almost recommend skipping it.  It was a bit of
a bummer that it was the last one I read for months.  The last one I read,
Clown Town, was only released this year, and I read it roughly immediately.
(Thanks, Gloria, for giving me a surprise copy!)</p>

<h2 id="other-fiction">Other Fiction</h2>

<p>I read <a href="https://en.wikipedia.org/wiki/Thorns_(novel)">Thorns</a> by Robert
Silverberg, which was a 1967 nominee for the Nebula and Hugo.  I can’t remember
why I read it.  I <em>think</em> it got onto my reminders list ages ago, and then it
was on deep discount.  I would’ve done better to just not read it.  In 1967, it
may have been interesting, but it didn’t age well.</p>

<p>I read <a href="https://en.wikipedia.org/wiki/How_Long_%27til_Black_Future_Month%3F">How Long ‘til Black Future
Month?</a> by
N.K. Jemisin, whose massively successful Broken Earth series I enjoyed a few
years ago.  This is a short story collection, and I’m a sucker for a good short
story collection.  And this was good.  I’m told that LeVar Burton read <em>two</em> of
these stories on his podcast <a href="https://en.wikipedia.org/wiki/LeVar_Burton_Reads">LeVar Burton
Reads</a>, and I look forward to
listening to them.</p>

<p>A few years ago, I <em>finally</em> read A Fire Upon the Deep, by Vinge.  It was
excellent, with a sprawling scope, a complex <em>and</em> coherent setting, and a
whole mess of interesting ideas that all slotted together.  Mark Dominus told
me that the sequel, <a href="https://en.wikipedia.org/wiki/A_Deepness_in_the_Sky">A Deepness in the
Sky</a>, was even better, but
“very lonesome”.  I agree!  Vinge’s ability to spin so many plates, each one
interesting on its own, and then to land them all into one neat pile was
impressive and satisfying.</p>

<p>I read <a href="https://en.wikipedia.org/wiki/Ship_Breaker">Ship Breaker</a> and its
sequel, The Drowned Cities, by Paolo Bacigalupi.  They were okay, but I didn’t
bother with the third book.  Bacigalupi’s sci-fi work for adults is very good,
and I’ve re-read a bunch of it.  (I don’t think I re-read Pump 6 in its
<em>entirety</em> this year, but I re-read a bunch of it.)  The Ship Breaker books are
young adult fiction, and all I could see on the page was all the depth and
nuance <em>missing</em> compared to his other work.  It probably would’ve been better
when I was twelve.  Given that it’s a book for that audience, who am I to
complain?</p>

<p>I read <a href="https://en.wikipedia.org/wiki/Dungeon_Crawler_Carl">Dungeon Crawler
Carl</a> because Bryan was
reading it and said it sounded fun.  It <em>was</em> fun, but I think too long for me.
Everything about it was just a bit <em>much</em>.  That could’ve been fun for two
short books or so, but it was the first book in a <em>seven</em> book series, with
books topping six hundred pages.  I tapped out, and will probably read a
summary some day.</p>

<p>Finally, I read <a href="https://en.wikipedia.org/wiki/Virtual_Unrealities">Virtual
Unrealities</a>, a sci-fi story
collection by the great Alfred Bester.  I think I picked it up because I wanted
to read Fondly Farenheit, which was good.  I read it in the first week of
January, so it’s been a while and I don’t remember it terribly well.  My
recollection was that I thought it was okay, but on the whole not anywhere near
as good as The Demolished Man or The Stars My Destination.  That’s the problem
with writing massive, incredible successes, I guess!</p>

<h2 id="other-nonfiction">Other Nonfiction</h2>

<p><a href="https://en.wikipedia.org/wiki/The_Society_of_the_Spectacle">The Society of the
Spectacle</a> is the
longest 150 page book I’ve ever read.  According to Goodreads, I spent almost
nine years reading it.  It’s a <em>lot</em>, but it’s very good, and I think I will
re-read parts of it again, probably several times.  It’s one of the key texts
of Situationism, a movement in post-WWII European socialism.  The book is made
up of 221 numbered paragraphs, which construct and explain the concept of “the
spectacle”, a 20th (and, I’d say, 21st) conception of the problems of
capitalism and, to an extent, imagined solutions.  It’s short, but each
paragraph deserves a good long think.  You can’t just sit down and read the
book in an afternoon the way you could a 150 page book about Animal Crossing.</p>

<p>For a long time, I have wanted to read more detailed writing on the <a href="https://en.wikipedia.org/wiki/Noble_Eightfold_Path">Noble
Eightfold Path</a>, so I
finally did.  I read <a href="https://www.accesstoinsight.org/lib/authors/bodhi/waytoend.html">The Noble Eightfold Path: Way to the End of
Suffering</a> by
Bhikku Bodhi.  I’m glad I did, but it’s not easy to recommend generally.
First, you need to be interested in Buddhism in general.  Then, you need to
have read enough about it (I think) that you want to read what is almost a
technical manual about some of the core tenets.  It’s a bit like reading a
catechism, in which serious religious, metaphysical, and practical questions
are answered in great and careful detail for the dedicated lay reader.  I wish
it had been a bit more focused on description and less on instruction.  That
is: I wanted to read analysis of and relationship between the eight practices,
rather than a book intended to convince me of their importance.  Still, this
got close and I’m glad I read it.</p>

<h2 id="whats-next">What’s next?</h2>

<p>I have no idea!  Well, not much of an idea.  Goodreads reminds me that I’m
currently reading books about
<a href="https://en.wikipedia.org/wiki/Eiffel_(programming_language)">Eiffel</a>, Rust,
and WebAssembly.  I received a few books for Christmas, and of course I already
have a huge backlog of owned and unread books.  There are just a few Egan
novels I haven’t read yet.  Lots of books remain on my “effectiveness” shelf.
We’ll see where the year takes me.</p>

<p>One thing is seeming increasingly likely, though.  I’ve read Gene Wolfe’s <a href="https://en.wikipedia.org/wiki/The_Book_of_the_New_Sun">Book
of the New Sun</a> three (I
think) times, now.  These books get better as you re-read them and try to work
out the many mysteries within them.  Last time I read them, I thought, “When I
read these again, it will be with a notebook for taking notes.”  I think this
is the year.  I might also finally listen to <a href="https://rereadingwolfe.podbean.com/">ReReading
Wolfe</a> an epic-length podcast that
goes through the books chapter-by-chapter, just for people who are <em>re</em>-reading
the books, so spoilers a-plenty.  I’ve been thinking about trying to find old
hardback copies of the books to mark up, but it seems like most of them are
quite expensive!</p>

<p>At any rate, maybe in a year I’ll write another blog post like this one.  If I
do, I hope it will be able to mention at least 36 books I’ve read in 2026.</p>]]></content><author><name>Ricardo Signes</name></author><category term="books" /><summary type="html"><![CDATA[I don’t take the Goodreads “reading challenge” too seriously, but I did hit my target last year, and it felt good. I thought I’d try again this year and I did get it done – only just, though, as I finished my last three books in the last two days of the year. I think I would’ve liked to read a bit more through the year, but sometimes I just wasn’t feeling it. So it goes! I think this is a “structure your time” problem, but also it’s not the most pressing thing on my agenda, you know?]]></summary></entry><entry><title type="html">Horror Movie Month 2025</title><link href="https://rjbs.cloud/blog/2025/12/horror-movie-month-2025/" rel="alternate" type="text/html" title="Horror Movie Month 2025" /><published>2025-12-05T02:11:00+00:00</published><updated>2025-12-05T02:11:00+00:00</updated><id>https://rjbs.cloud/blog/2025/12/horror-movie-month-2025</id><content type="html" xml:base="https://rjbs.cloud/blog/2025/12/horror-movie-month-2025/"><![CDATA[<p>It’s December, and I should’ve posted this in early November, but I didn’t.  I
did other stuff.  Now, though, I’m on a long plane flight, so I guess it’s time
to write a bit of bloggery.  (Did I really never write up 2024?  Well, maybe
later.)</p>

<p>Here’s what we watched for Horror Movie Month this year!</p>

<h3 id="october-1-heart-eyes-2025">October 1: <a href="https://letterboxd.com/film/heart-eyes/">Heart Eyes (2025)</a></h3>

<p>This is “what if a rom-com was also a slasher?”  It was a bit uneven, and
didn’t quite nail either part – understandable, but still, you hope for
excellence, right?  It was novel and fun enough that I’m glad to have watched
it.  It’s from Josh Ruben, who did some other stuff I also liked.</p>

<h3 id="october-2-the-borderlands-2012">October 2: <a href="https://letterboxd.com/film/the-borderlands/">The Borderlands (2012)</a></h3>

<p>Hey, this was surprisingly decent.  Vatican-sponsored ghost hunters are
investigating a haunting.  Is it bunk or not?  There was nothing particularly
special about this movie, except that it was well done.  Good cast, good
pacing.  It’s nice to find a new competent, enjoyable, unexpected movie like
this!</p>

<h3 id="october-3-departing-seniors-2023">October 3: <a href="https://letterboxd.com/film/departing-seniors/">Departing Seniors (2023)</a></h3>

<p>There’s a murderer at a high school, and somebody can see the murders coming in
visions.  It wasn’t good.  It wasn’t terrible, but it was retreading old
material, and there were lots of little problems.  Why was the school always so
empty?  If it’s nearly graduation day, why are people wearing big coats?</p>

<p>Watch <a href="https://letterboxd.com/film/its-a-wonderful-knife-2023/">It’s a Wonderful
Knife</a> instead, maybe.</p>

<h3 id="october-5-vhshalloween">October 5: <a href="https://letterboxd.com/film/v-h-s-halloween/">V/H/S/Halloween</a></h3>

<p>I think this was my favorite V/H/S movie so far.  They’re all sort of uneven
messes, but this one had the most <em>fun</em> I can remember.  I especially enjoyed
the weird framing story about the soft drink focus group.  Also, <em>Fun Size</em> was
fun and weird.  More like this one, please, V/H/S people!</p>

<h3 id="october-5-bring-her-back-2025">October 5: <a href="https://letterboxd.com/film/bring-her-back/">Bring Her Back (2025)</a></h3>

<p>I saw this as “best new horror of 2025” a bunch of places.  It was a very well
made movie, well written, well-acted.  It was a good film.  It was also just so
grim, for much of it.  It was a movie full of desperation.  Also, it had
“people in authority do bad things to kids”, which I don’t like watching.
Still, I’m glad I saw it, and yeah, it was good, but I think we usually are
looking for something more fun in Horror Movie Month.</p>

<h3 id="october-6-presence-2024">October 6: <a href="https://letterboxd.com/film/presence-2024/">Presence (2024)</a></h3>

<p>Remember in The Menu, how the chef is making this extremely high-technique food
that is hard to criticize for any lack of technical merit, but which sparks no
joy?  That’s this movie.  It’s a well-made haunted house movie, but I didn’t
care about what happened to anybody in it.</p>

<h3 id="october-7-ick-2024">October 7: <a href="https://letterboxd.com/film/ick/">Ick (2024)</a></h3>

<p>This movie reminded me of <a href="https://letterboxd.com/film/detention-2011/">Detention
(2011)</a> and that’s a good thing.
Brandon Routh plays a guy who was a high school football star and is now sort
of washed up.  There’s a weird black fungus that grows all over everything, and
has been there for decades, and nobody cares.  It’s just there.  Then, one day,
things change.  It was weird and fun and unexpected.  It wasn’t as <em>good</em> as
Detention, but I liked it a lot.</p>

<h3 id="october-8-somnium-2024">October 8: <a href="https://letterboxd.com/film/somnium-2024-1/">Somnium (2024)</a></h3>

<p>Big change in gears here from the previous movie.  This was a slow-paced, moody
movie about a would-be actor in LA who gets a job at some kind of weird dream
therapy place.  It looks right out of an early 80s Cronenberg movie.  She walks
around the place at three in the morning, surrounded by sleeping people in
wood-paneled rooms.  I liked it!  I also liked that it was very happy to have a
simple moral.</p>

<h3 id="october-9-the-collector-2009">October 9: <a href="https://letterboxd.com/film/the-collector-2009/">The Collector (2009)</a></h3>

<p>This was pitched as “Would you like to see a movie that’s kind of like Saw but
has been mostly forgotten?”  It wasn’t as smart as the original Saw trilogy,
and went on way too long.  It’s sort of “Home Alone, with adults, and lots of
blood.”</p>

<h3 id="october-10-found-footage-the-making-of-the-patterson-project-2025">October 10: <a href="https://letterboxd.com/film/found-footage-the-making-of-the-patterson/">Found Footage: The Making of the Patterson Project (2025)</a></h3>

<p>This little indie movie was a mess, but I had fun.  There’s a guy who wants to
make an indie horror movie, and is not a skilled filmmaker.  His crew have a
lot of heart, but are sort of hopeless.  They send a guy in a bigfoot costume
out into the woods in hunting season.  Also, the set might be haunted?  I
enjoyed it.</p>

<h3 id="october-11-i-know-what-you-did-last-summer-2025">October 11: <a href="https://letterboxd.com/film/i-know-what-you-did-last-summer-2025/">I Know What You Did Last Summer (2025)</a></h3>

<p>This could’ve been a <em>lot</em> worse.  If you have any fond memories of the
original, go for it.  Otherwise, eh.</p>

<h3 id="october-11-rec-apocalypse">October 11: <a href="https://letterboxd.com/film/rec-apocalypse/">[REC]⁴ Apocalypse</a></h3>

<p>Gloria and I had seen the previous REC movies, but I don’t think we’d seen this
one.  It was good!  With Satanic zombies back on the mainland, a bunch of
people are aboard a ship trying to study the problem.  So: people in an
enclosed space, at sea, with a zombie out break.  You can imagine the rest,
mostly.  It brought back the newscaster from the first two movies, which was
fun.  (The original REC is definitely worth watching!)</p>

<h3 id="october-13-how-to-kill-monsters-2024">October 13: <a href="https://letterboxd.com/film/how-to-kill-monsters/">How to Kill Monsters (2024)</a></h3>

<p>A police station is taken over by monsters and demons and the riff raff inside
have to save themselves.  There’s a fun framing device where the movie starts
at the end of a horrible bloodbath and then you’re sort of figuring out how it
all fits together.  Like a bunch of other movies on this list, it was
enjoyable, but not great.</p>

<h3 id="october-14-psycho-therapy-the-shallow-tale-of-a-writer-who-decided-to-write-about-a-serial-killer-2024">October 14: <a href="https://letterboxd.com/film/psycho-therapy-the-shallow-tale-of-a-writer/">Psycho Therapy: The Shallow Tale of a Writer Who Decided to Write About a Serial Killer (2024)</a></h3>

<p>Every year we end up with one or two movies that we <em>thought</em> were going to be
sort of horror-y, or maybe just creepy thrillers, but don’t work out that way.
This was one, this year, and no regrets!  Steve Buscemi plays a retired serial
killer who approaches a struggling writer to pitch a collaboration on memoirs.
But after a little bit of farce, he’s roped into pretending to be a marriage
councelor for the writer and his wife.  Really weird, and who doesn’t want to
see more Steve Buscemi?</p>

<h3 id="october-17-vicious-2025">October 17: <a href="https://letterboxd.com/film/vicious-2025/">Vicious (2025)</a></h3>

<p>Polygon suggested this would be a great pick if you liked Weapons.  It wasn’t.
I guess I was supposed to feel sympathy and horror for the protagonist, but I
didn’t care.  It was not compelling or scary.</p>

<h3 id="october-18-dark-match-2024">October 18: <a href="https://letterboxd.com/film/dark-match/">Dark Match (2024)</a></h3>

<p>Another “flawed but worth it” entry!  A group of near-nobodies in the local
professional wrestling circuit book a high-paying gig at a private party in the
woods.  Could it be that the private party is actually a horrible, horrible
place to end up?  Yes, it could.</p>

<p>Special note:  I kept thinking, “Who <em>is</em> this actor?”  Turns out he played
Bill in GTA V, and I recognized his face from his likeness in a video game.
Woah!</p>

<h3 id="october-19-together">October 19: <a href="https://letterboxd.com/film/together-2025/">Together</a></h3>

<p>This was another “best of the year” candidate, said the Internet.  It wasn’t my
favorite, but it was good.  It had some serious ideas, and was nicely creepy,
but also had a great sense of humor.  It’s hard for me to explain much without
saying too much.  There’s a couple with a long-term relationship.  They move to
the sticks for a fresh start.  Things get weird.  Great pacing in this one, I
thought, too.</p>

<h3 id="october-20-here-for-blood-2022">October 20: <a href="https://letterboxd.com/film/here-for-blood/">Here for Blood (2022)</a></h3>

<p>This was definitely one of the best movies we watched!  It reminded us of McG’s
<a href="https://letterboxd.com/film/the-babysitter-2017/">The Babysitter (2017)</a>, and
in a good way.  There’s a busy young woman who is a bunch of college classes
and maybe a couple jobs, one of which is babysitting.  She needs to cram, so
her boyfriend agrees to take one of her babysitting jobs.  Meanwhile, somebody
has planned to stage a home invasion while she’s babysitting.  They expect the
petit woman, not her massive mixed martial artist boyfriend.  It’s a trip!</p>

<h3 id="october-21-minutes-past-midnight-2016">October 21: <a href="https://letterboxd.com/film/minutes-past-midnight/">Minutes Past Midnight (2016)</a></h3>

<p>I don’t remember it well at this point.  It was an anthology.  I remember that
some of it was terrible.  On the other hand, there was one lovely and funny bit
with Arthur Darvill as a serial killer who falls in love.</p>

<h3 id="october-22-willys-wonderland-2021">October 22: <a href="https://letterboxd.com/film/willys-wonderland/">Willy’s Wonderland (2021)</a></h3>

<p>Not good, <em>per se</em>, but I think I’ll still recommend it.  It’s a rip off of
Five Nights at Freddy’s, where Nic Cage is conscripted to spend a night
cleaning an abandoned Chuck E. Cheese style place.  The animatronics are out to
get him.  He fights back.  Also, there are dying teenagers.</p>

<p>This movie is all about Nicholas Cage, who <em>has zero lines</em> and punctuates his
night of cleaning and demonocide by drinking soda and playing pinball.
Unhinged.</p>

<h3 id="october-23-cherry-falls-2000">October 23: <a href="https://letterboxd.com/film/cherry-falls/">Cherry Falls (2000)</a></h3>

<p>This got on my radar as “the most underappreciated slasher of the post-Scream
boom”.  Yeah, I could buy that.  It wasn’t <em>great</em> but it was definitely fun
and quirky.  Also, my household likes Brittany Murphy.  The premise:  a serial
killer is at work in the town of Cherry Falls.  Their schtick?  They only kill
virgins.  (The sherrif comes to this conclusion <em>incredibly</em> quickly with a
shockingly small amount of evidence.  But he is right.)</p>

<p>The town’s teenagers are urged to lose their virginity as quickly as possible.</p>

<p>If this movie had been made 15 years earlier, it would’ve featured a staggering
amount of nudity.  In 2000, though, it would have none.  I wonder just when
that changed!</p>

<h3 id="october-24-scared-shitless-2024">October 24: <a href="https://letterboxd.com/film/scared-shitless/">Scared Shitless (2024)</a></h3>

<p>A plumber enlists the help of his germaphobic son to go clean and fix some
toilets.  Little did they know that these toilets… <em>are haunted</em>!  It was short
and stupid and fun, and I am glad we watched it.</p>

<h3 id="october-25-death-of-a-unicorn">October 25: <a href="https://letterboxd.com/film/death-of-a-unicorn/">Death of a Unicorn</a></h3>

<p>I don’t know why this wasn’t good.  It felt like they overworked the dough.
Everything was there for greatness, but it didn’t pan out.  Dude hits a unicorn
with his car.  The unicorn’s parents come back for revenge.  At one point,
Richard E. Grant eats a piece of unicorn meat.  Anthony Carrigan is in it and,
as always, is great.</p>

<h3 id="october-26-grafted-2024">October 26: <a href="https://letterboxd.com/film/grafted/">Grafted (2024)</a></h3>

<p>Kind of a mess.  A young woman with a skin disorder is trying to find a new
skin graft technique so she can fit in.  But she accidentally kills a few
people and it gets worse.  It wasn’t bad, but it wasn’t great.  Some good Kiwi
accents in it, though!</p>

<h3 id="october-28-boys-from-county-hell-2020">October 28: <a href="https://letterboxd.com/film/the-boys-from-county-hell/">Boys from County Hell (2020)</a></h3>

<p>This one had been sitting in our Shudder queue for ages!  It was worth the
wait.  In a village in Ireland, there’s a cairn that attracts a very modest
number of tourists.  The claim is that it’s the grave of an Irish vampire whose
story inspired Bram Stoker to write Dracula.  The level to which anybody
believes this is unclear.  Meanwhile, the cairn has to be knocked down to make
way for a new motorway.  Could this free the evil lurking beneath?  Yes.</p>

<p>This was another case of “an unexceptional premise made really well”.  The
pacing, the casting, the sense of humor, all worked well to make a really
enjoyable little movie.</p>

<h3 id="october-29-good-boy-2025">October 29: <a href="https://letterboxd.com/film/good-boy-2025/">Good Boy (2025)</a></h3>

<p>Was this whole movie a metaphor?  I’m not sure.</p>

<p>There’s a guy who is either sick or suicidal or haunted, and he skips town to
go stay at his dead uncle’s house, which even the casual observer can tell is a
really bad idea.  His sister tells him so, but he’s a jerk and won’t listen.
He does take his dog, though.  His dog is <em>also</em> worried about him, and the
movie is entirely from the perspective of the dog – it’s not all in the dog’s
point of view, but we’re following the dog, so we have to work things out from
what the dog can see.</p>

<p>The dog was great.  The movie was only okay.</p>

<h2 id="ghosted">Ghosted</h2>

<p><strong>Oops, this is a later addition!</strong>  Sometimes we fill in some days with TV.
In the past, this was often when we’d watch American Horror Story.  This year,
we watched about half of Ghosted, a 2017 show starring Adam Scott and Craig
Robinson as an odd couple of kinda-losers who get recruited into a secret
government agency that pursues X-files.  How had I never heard of this before?
And, in fact, nearly nobody I’ve talked to has.</p>

<p>Gloria and I liked it, but it was pretty uneven.  The structure of the show
takes a hard left turn partway through, and it’s worse for sure.</p>

<h2 id="thats-it">That’s it!</h2>

<p>We watched some other things not reflected here.  Most notably, we started
watching “It: Welcome to Derry”, which was fine.</p>

<p>I think it was a decent year, and I’ll have to see if I can remember enough
about 2024’s movies to write those up too…</p>]]></content><author><name>Ricardo Signes</name></author><category term="horror-movie-month" /><category term="movies" /><summary type="html"><![CDATA[It’s December, and I should’ve posted this in early November, but I didn’t. I did other stuff. Now, though, I’m on a long plane flight, so I guess it’s time to write a bit of bloggery. (Did I really never write up 2024? Well, maybe later.)]]></summary></entry><entry><title type="html">I bought some new keyboards</title><link href="https://rjbs.cloud/blog/2025/07/new-keyboards/" rel="alternate" type="text/html" title="I bought some new keyboards" /><published>2025-07-05T12:00:00+00:00</published><updated>2025-07-05T12:00:00+00:00</updated><id>https://rjbs.cloud/blog/2025/07/new-keyboards</id><content type="html" xml:base="https://rjbs.cloud/blog/2025/07/new-keyboards/"><![CDATA[<p>I go to Melbourne a couple times a year, for work.  It’s where our HQ is, and
it’s good to have time in person with my colleagues.  It used to be that most
of this time was spent at big tables or in front of whiteboards.  There’s still
quite a lot of that, but the past two or three times I was in Australia, I
spent a much larger chunk of time at a desk, programming.  Surely not the
majority of my time, but enough time that I cared about the ergonomics.  So,
last time I was there, I dug through the spare hardware cupboard and put
together the best workstation I could.  It was… not great.  Fortunately for me
(in one sense, anyway), one of my colleagues was on leave.  I boldly
appropriated his desk, which was much better hardware than my scavenging had
gotten me.  The thing that I ended up grumbling about, though, was the mouse
and keyboard.</p>

<p>Let’s be clear: This was all on me!  I don’t need the Australian office to
stock all my favorite hardware for the 7% of the year I spend there.  On the
other hand, I did feel like I wanted to plan ahead for next time.  I keep a bag
of stuff in the Melbourne office to make the trip easier.  This is mostly
cables, adapters, and toiletries.  It’s much nicer to have my favorite Merkur
safety razor waiting for me than to spend two weeks using disposables.  My
plan was to put a keyboard and mouse in that bag.  Maybe a little USB hub.
Simple, right?  Well…</p>

<p>I’m fussy about my keyboards.  I’m not a keyboard wonk, I think.  I know just a
little bit about mechanical keyboards, and I know what I like.  Mostly, what I
like is full size (with numeric keypad) keyboards, in the traditional layout,
with clicky switches.  When I started thinking about taking a keyboard to
Australia, I owned three mechanical keyboards.  All Ducky brand, all with
Cherry MX blue switches.  Surely, I could just go order one of these, right?
Well, it didn’t seem like it.  They were backordered everywhere I looked.  The
most likely-seeming one was the Ducky One 3, which looked about right.  I
almost just ordered it, but then I remembered:  a lot of keyboards are now
configurable via software.  That sounded interesting, so I did some more
digging.</p>

<p>The short version is that there’s an open-source firmware for keyboards called
<a href="https://github.com/qmk/qmk_firmware">QMK</a>, and lots of keyboards use it.  It
lets you remap keys, program macros, and do that sort of thing.  A coworker
asked, “Why is that better than just updating your settings in macOS?”  The
answer is, basically:  If you tell your keyboard that its caps lock key should
act like a control key, it will do that on every computer you attach it to,
with no configuration required.  The longer form answer is that you can do all
sorts of weird stuff that macOS would never allow.</p>

<p>Ducky doesn’t support QMK (or other reprogramming) on most of their keyboards.
The one I <em>did</em> find with QMK is the “Ducky One X ‘Inductive Keyboard’”.  They
bill it as “the world’s first inductive keyboard”.  I don’t really understand
what an inductive switch is.  I looked into it a little.  I do know that it’s
not a clicky blue switch, though, and I know that it costs a lot more than my
usual keyboards.  Pass.</p>

<p>Now I was sort of in open territory where I didn’t want to be: picking a new
kind of keyboard.  This was agony.  I was trying to remember what other models
I’d used.  I looked into one in the US office (where most of the keyboards are
mechanical, with brown switches), and was reminded how much I dislike
clamped-in stabilizer bars.  (More on that later, maybe.)  Figuring out just
what I wanted seemed like it was going to be a pain.  <em>Also</em>, the news kept
telling me about massive impending tariffs, which were surely going to punish
me for delaying on ordering hardware from abroad.</p>

<h2 id="keyboard-1">Keyboard 1</h2>

<p>Eventually, I found myself looking at Keychron.  I knew of them only because a
few years ago I bought a four-pack of Keychron C1 mechanical keyboards for the
office for $50.  In my mind, they were some sort of Johnny-come-lately cheap-o
brand.  On the other hand, their site had an enormous variety of keyboards, and
I couldn’t find anything online that backed my view.  I decided to order a K10
Max QMK, which ticked a couple key boxes: it’s programmable with QMK and it’s
wired (but <em>also</em> works over Bluetooth <em>or</em> with its own transceiver)</p>

<p>The problem was that it didn’t have a blue switch option.  Red, Brown, or (I’m
not kidding) Super Banana.  Reds and browns, I knew, were no good for me.
Super banana, I was not sure, but I didn’t want to commit to something I might
not like.  The good news is that the K10 is hot-swappable.  That means that
after you pull the keycap off of the switch, you can pull the switch out, too,
and replace it.  I gather that some gamers put different switches in for
different keys.  I don’t really know why, but it’s something like “I want a
really low activation force for my movement keys but a really quick reset for
my trigger keys”.  I didn’t care enough to look into it.  My goal was to put in
one hundred blue switches and dump all the originals into a box.</p>

<p>I ordered the K10 along with a tube of 110 Cherry MX blue switches.  When it
arrived, I played around for a bit, but quickly got to work pulling off all the
keycaps and pulling out all the switches.  This was easy, although the
switch-pulling tool that came with the keyboard was a bit rough on my fingers.
With all the (red) switches pulled, it was time to put in the blues.  Inserting
is not as simple as pulling, sadly.  At the bottom of each switch are two stiff
wires that slide into receivers in the keyboard.  The upper part of the switch
has two little arms that snap into place when the switch is seated.  If the
wires aren’t perfectly lined up, or aren’t straight, they will buckle or bend,
and then the switch won’t form a circuit with the PCB.</p>

<p>This means that for each switch you insert, you first need to look carefuly at
the leads to make sure that they’re straight and whole.  It’s a little
slow-down, but not so bad.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54629694208/in/dateposted-ff/" title="red and blue switches"><img src="https://live.staticflickr.com/65535/54629694208_0f6202b977_c.jpg" width="600" height="800" alt="red and blue switches" /></a></p>

<p>I put on some music and got to work.  Pretty soon, I’d replaced all the
switches and put the keycaps back on.  I opened the <a href="https://launcher.keychron.com/#/keymap">Keychron
Launcher</a> to begin phase two.  The
Keychron Launcher is a web interface for managing the keyboard’s settings.  It
amazes me, because it uses a web API called WebHID, which gives your browser
access to your HID devices <em>per se</em>.  I had to use Chrome, but when I did, let
let me flash my keyboard’s firmware and update its keymap.  It also had a key
tester that let me test every single key.  When one or two didn’t work, I
pulled the switches and replaced them with spares.  Pretty soon, the whole
keyboard worked and had a mapping I liked.  I was delighted.  Sure, it was
expensive, but it has a great weight, it has the switches I like, and I could
keep tweaking the keyboard layout until I was perfectly happy.</p>

<h2 id="keyboard-2">Keyboard 2</h2>

<p>It was good enough that I went right ahead and ordered <em>another one</em>, that one
for my office.  In the week since my first order, the price had gone up $20 —
almost certainly tariff-related.  This was just the first problem.</p>

<p>I ordered that second keyboard on April 6th, and I had it in my hands on the
10th.  I stuck around a little late after work to swap out the switches.
Pretty soon I had a keyboard that worked great… except for eleven keys, as seen
here.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54629774880/in/dateposted-ff/" title="a keyboard with switches not working"><img src="https://live.staticflickr.com/65535/54629774880_378a253562_c.jpg" width="800" height="284" alt="a keyboard with switches not working" /></a></p>

<p>Many of the keys worked if I replaced my aftermarket blue switches with the
original reds that were included, so my first theory was that I had quite a lot
of busted blue switches.  I know the failure rate on switches is high, so I
went with that theory and ordered more.  Unfortunately, when they arrived, it
didn’t help.  The reds still worked and the blues didn’t.  Except, sometimes
the reds didn’t.  Mostly it was centered around one part of the board, and if I
pressed hard, they would start or stop working.  I called on my friend Jesse,
established member of the <a href="https://shop.keyboard.io/pages/about">keyboard-industrial
complex</a>.  He worked with me for a while,
prompting me to do stuff I never would’ve done, like close circuits with a wire
lead.  Eventually, he was having me send close-up photos of the printed circuit
board that all the keys slot into.  He said, “Oh, look at those sockets!
They’re at a bit too much of an angle, you’re not going to get good connections
with those at all, they need re-soldering correctly.”</p>

<p>Here’s a photo from around that time.  Is it a bad socket?  I’m not sure, I had
a hard time seeing it, but Jesse seemed convinced, and I believe him.  But this
might be an unrelated photo.  My point is, this is what I was stuck thinking
about!</p>

<p><a href="https://www.flickr.com/photos/rjbs/54629480041/in/dateposted-ff/" title="one wonky socket"><img src="https://live.staticflickr.com/65535/54629480041_292e945618_c.jpg" width="800" height="600" alt="one wonky socket" /></a></p>

<p>Friends, I did not spent $190 on a pre-assembled keyboard just to be stripping
things down to the PCB and re-soldering them!  I’m not <em>that kind</em> of computer
nerd!  Frustrated, I wrote in to Keychron, who said they’d send me another PCB.
Not as good as another keyboard, but I could do this.  Eventually, the package
came.  I carefully disassembled my keyboard:  I removed the keycaps, then the
switches, then the top case, then the plate, then then PCB.  I attached the new
PCB, put on the top case, and put in the switches.  I was not bold enough to
put on all the keycaps, though.  I fired up the Keychron Launcher and entered
key test mode.  <em>Almost</em> perfect.  Everything worked except for one key that
I’d hardly need: <code class="language-plaintext highlighter-rouge">t</code>.</p>

<p>Probably I could key in a whole paragraph, using only such glyphs as remained
available.  I mean, I had a double dozen symbols under my fingers, plus one!
Only one member of our language’s ABCs was missing.  Sadly, my keyboard was
here for work, and my job is hardly one focused on producing source code
lipogram.  If I was gonna use my new device, I would need all 101 keys working.</p>

<p>I took the keyboard apart again to see how things looked.  They didn’t look
good.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54629694168/in/dateposted-ff/" title="broken socket"><img src="https://live.staticflickr.com/65535/54629694168_0c2e961b7e_c.jpg" width="800" height="600" alt="broken socket" /></a></p>

<p>Look at this a little while and you’ll see one of those black shapes isn’t in
line with the others.  It’s not just bent, it’s totally disconnected.  It had
fallen off the PCB and was sitting under it inside the keyboard.  That’s the
socket, and it’s how the keyswitch connects to the circuit so that, when
pressed, the switch closes the circuit.  If the socket falls off, the key
absolutely will not work.</p>

<p>“What do I do now?” I asked Jesse.</p>

<p>“You solder it,” he said.  “Good luck.”</p>

<p>Fortunately, I had a soldering iron, never used.  I got in the <a href="https://shop.keyboard.io/blogs/news/box-of-crap-november-2023-dubious-treasures-from-the-markets-of-shenzhen">2023 Bag of
Crap</a>
from Jesse’s company.  He reported its original price as $2.60.  After trying
to use it, I’m sorry to say that it was closer to $0 in value.  Mine did not
heat up at all when plugged in.  It probably could’ve been used as an awl, but
what I needed was a <em>very hot</em> metal point, and I didn’t want to heat it up on
coals.  I moaned and wailed in the office, and my coworker Kurt said he’d bring
in a proper soldering iron for me to use.  I was still pretty frustrated at
being in this position, but if it was going to get my keyboard working, fine.</p>

<p>He brought in a soldering iron and magnifiers, and I got to work.  Five or six
times, on three or four distinct days, I tried to solder that socket back on.
I couldn’t get it done.  On one hand, it’d been decades since I last soldered
anything.  On the other hand, I felt sort of incompetent.</p>

<p>I emailed Keychron again:  Look, I said, the new PCB is at least as bad off as
the old one.  I tried hard to not ask you for more, because I’m sure the
tariffs are a problem, but at this point I think I’ve done enough.  Can you
just ship me a new complete keyboard so I am not forced to perform work on
yet another replacement part?</p>

<p>“No problem,” they said.  “We’ll send you a new printed circuit board.”</p>

<p>Steam came from my ears, and Kurt pitied me.  “Let’s fix that,” he said.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54629677584/in/dateposted-ff/" title="kurt at work"><img src="https://live.staticflickr.com/65535/54629677584_22ecb84a36_c.jpg" width="600" height="800" alt="kurt at work" /></a></p>

<p>Kurt sat down and methodically performed about a dozen steps, including the
three that I’d performed, plus another nine that probably made any part of the
job actually <em>work</em>.  With the piece soldered on, I reassembled they keyboard
and 99% of the switches worked.  I took a deep breath, pressed down on the
remainder, and then they <em>all</em> worked.  I screwed everything together and put
on the keycaps.  Everything was going great…</p>

<p>…until the very, very last keycap.  Remember at the very beginning, I said I
like to get a keyboard with a ten-key numeric keypad?  I really do, and I use
it!  The last key I was putting on was the keypad’s “Enter” key, at the far
bottom right.  They keycap went on, but it didn’t bounce up when pressed.  It
stayed down.  They Keychron keyboard had the screwed-in stabilizers like I
like, but the stabilizers on this key were now partly stuck in place.  They’d
move if pushed or pulled, but it took more force than the spring in the
keyswitch.  Here’s a demonstration:</p>

<p><a href="https://www.flickr.com/photos/rjbs/54629774990/in/dateposted-ff/" title="stuck stabs"><video src="https://www.flickr.com/photos/rjbs/54629774990/play/1080p/405daa8fab/" width="450" height="800" poster="https://live.staticflickr.com/31337/54629774990_405daa8fab_c.jpg" controls=""></video></a></p>

<p>I asked Jesse, but he didn’t have any advice that avoided disassembling the
dang thing again.  I really, <em>really</em> wanted to avoid that.  I’d had this thing
for two months, and I just wanted to have it in place and working.  I searched
the internet, I wiggled at the crossbar of the stabilizer, but nothing helped.</p>

<p>Here’s the thing about stabilizers:  the wider or longer the key, the more
important the stabilizer is, and the closer to the edge you his the key, the
more important the stabilizer is.  The keypad’s enter key is pretty short, at
2u, and I’d mostly hit it toward the middle, anyway.  I didn’t need a
stabilizer!  Taking the stabilizer out would be a keyboard-disassembling task.
On the other hand, I could mangle the keycap so that it wouldn’t snap onto the
stabilizer, and would only connect to the switch.  I got a spare keypad enter
key, I got a pair of pliers, and I fixed that keyboard.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54629476981/in/dateposted-ff/" title="brute force solution"><img src="https://live.staticflickr.com/65535/54629476981_7b01185114_c.jpg" width="600" height="800" alt="brute force solution" /></a></p>

<p>Now I have working, clicky, programmable, lovely keyboards on my desks at work
and at home.  I’m pleased with them.  On the other hand, this was a stupid
amount of work, given the cost of the things.  I think I’d be happy to buy
another Keychron, and certainly I’d like my next keyboard (if I ever have to
buy another) to be programmable with something like QMX.  On the other hand, I
only wanted hot-swappable keys for the sake of getting blues.  I think my next
keyboard will have to come preassembled with blue switches, preferably soldered
right on by somebody else.</p>

<p>After this was all over, I took Kurt out for some beers as thanks, which came
with the bonus of getting me the pleasure of his company for a couple hours.
Next time, I’ll also do <em>that</em> without all the soldering.</p>]]></content><author><name>Ricardo Signes</name></author><category term="hardware" /><category term="keyboard" /><summary type="html"><![CDATA[I go to Melbourne a couple times a year, for work. It’s where our HQ is, and it’s good to have time in person with my colleagues. It used to be that most of this time was spent at big tables or in front of whiteboards. There’s still quite a lot of that, but the past two or three times I was in Australia, I spent a much larger chunk of time at a desk, programming. Surely not the majority of my time, but enough time that I cared about the ergonomics. So, last time I was there, I dug through the spare hardware cupboard and put together the best workstation I could. It was… not great. Fortunately for me (in one sense, anyway), one of my colleagues was on leave. I boldly appropriated his desk, which was much better hardware than my scavenging had gotten me. The thing that I ended up grumbling about, though, was the mouse and keyboard.]]></summary></entry><entry><title type="html">rjbs in Rio, part ⅲ</title><link href="https://rjbs.cloud/blog/2025/07/rjbs-in-rio-part-iii/" rel="alternate" type="text/html" title="rjbs in Rio, part ⅲ" /><published>2025-07-02T12:00:00+00:00</published><updated>2025-07-02T12:00:00+00:00</updated><id>https://rjbs.cloud/blog/2025/07/rjbs-in-rio-part-iii</id><content type="html" xml:base="https://rjbs.cloud/blog/2025/07/rjbs-in-rio-part-iii/"><![CDATA[<p>I’d had four days in Rio so far (and one in Miami, better left unmentioned).  I
had covered lots of ground for things I wanted to see, and also lots of things
I didn’t know I should see.  I had eaten so, so much cassava.  I had lots of
things left unseen, lots of food left uneaten, and just about two days left to
fill.  I think I made good use of my time, but I definitely left things to
do… next time?</p>

<h2 id="monday">Monday</h2>

<p>Monday, I was on my own again for most of the day.  This is not a complaint.
Breno and Barbara were <em>incredibly</em> generous with their time!  Also, even
though I usually enjoy touring around <em>with</em> people, it can be good to wander
alone, with no worry about whether you’re bring a frightful bore to your
companion.  I had a handful of things on my potential agenda for the day, but I
only ended up visiting two of them:  Parque Lage and the Botanical Garden.</p>

<p>Many, many times, I had to remind myself that <a href="https://en.wikipedia.org/wiki/Parque_Lage">Parque
Lage</a> is not Portguese for “Lake
Park”.  It’s named after Henrique Lage.  I don’t know much about him, but he
seems to have been a very wealth industrialist in the early 20th century, so
I’m okay not knowing more, I think.  Now, the land around his mansion is a
large public park with lots of tree cover and plenty of interesting features.
When I was there, I don’t think the building was open for visiting — or at
least I couldn’t find an open entrance.  Instead, I walked around the grounds,
looked at ponds, hiked through overgrown paths, and took a <em>lot</em> of photos.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618774599/in/album-72177720327189278" title="Parque Lage"><img src="https://live.staticflickr.com/65535/54618774599_eb63e78d8c_c.jpg" width="800" height="600" alt="Parque Lage" /></a></p>

<p><a href="https://www.flickr.com/photos/rjbs/54617685397/in/album-72177720327189278" title="Parque Lage"><img src="https://live.staticflickr.com/65535/54617685397_79d3d7dc1d_c.jpg" width="800" height="600" alt="Parque Lage" /></a></p>

<p>I was there for a good two hours, just walking and looking around.  It’s a
little odd that I don’t have more to say, but I think it’s all in the photos.
Once in a while I sat down and read a chapter or two of a book.  I took a photo
for an older couple walking together.  At one point, I accidentally walked the
wrong way, left the path, wandered through the woods for a while, and found a
surprise view of the city through the trees:</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618771929/in/album-72177720327189278" title="Parque Lage"><img src="https://live.staticflickr.com/65535/54618771929_62b940ab7b_c.jpg" width="800" height="600" alt="Parque Lage" /></a></p>

<p>What else is there to say?  If I lived nearby, I’d go there often to sit and
read and make take a little lunch with me.</p>

<p>Afterward, I had meant to walk a little south to <a href="https://en.wikipedia.org/wiki/Rodrigo_de_Freitas_Lagoon">the
lagoon</a> and walk south
along it to the city’s botanical garden.  I forgot, though, and just walked
straight down R. Jardim Botânico, which was sort of a boring walk.  It wasn’t
bad, and I did some people watching, but mostly it was uninteresting.
Eventually, though, I came to the garden, which was <em>not</em> uninteresting.  I
spent four hours walking through the gardens, only <em>partly</em> because I had such
a hard time navigating them.</p>

<p>If I ran the botanical garden, I’d be pushing Apple and Google to add a bunch
more detail to their maps, because the paper map they handed out did not cut
it.  I had a hard time finding almost everything, but in the end it all worked
out.  I’ll try to summarize some of the best things I saw:</p>

<p>There was a “biblical garden”, full of plants mentioned in the Bible.  The
plaque for each one provided a chapter and verse for where to find them.</p>

<p>There was a primitive hut among a bunch of trees, and all I could think of was
the botanical gardens in The Shadow of the Torturer, where the narrator
encountered a similar (also seemingly South American) hut.</p>

<p>There was an orchid house with many kinds of orchid in bloom.</p>

<p>There was a garden of only medicinal plants, including notes on what cultures
used them, and for what purposes.</p>

<p>There was a big section of cacti, with a surprising amount of diversity.</p>

<p>There were the obligatory Japanese garden and rose garden.</p>

<p>Also, there were <em>monkeys</em>.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54617662247/in/album-72177720327189278" title="the Botanical Garden in Rio"><img src="https://live.staticflickr.com/65535/54617662247_ef63cef333_c.jpg" width="800" height="600" alt="the Botanical Garden in Rio" /></a></p>

<p><a href="https://www.flickr.com/photos/rjbs/54618857010/in/album-72177720327189278" title="the Botanical Garden in Rio"><img src="https://live.staticflickr.com/65535/54618857010_d38e83f4fb_c.jpg" width="800" height="600" alt="the Botanical Garden in Rio" /></a></p>

<p><a href="https://www.flickr.com/photos/rjbs/54617663052/in/album-72177720327189278" title="the Botanical Garden in Rio"><img src="https://live.staticflickr.com/65535/54617663052_a79a5b9105_c.jpg" width="800" height="600" alt="the Botanical Garden in Rio" /></a></p>

<p>Probably there are people who know how to write compelling, detailed,
informative notes on a visit to a place like this.  I’m not one of them,
though.  I’ll say this:  I enjoyed the place enough that I spent four hours
there and might have stayed longer if I didn’t have anywhere to be.  Oh, and if
the food was better.  I had a pretty mediocre salad there, which was absolutely
my own fault.  I should’ve eaten something on the walk.</p>

<p>After the garden, I headed back to my apartment, cooled off a little, and did a
quick bout of shopping.  My plan was to meet Breno nearby for dinner and
drinks.  We went to Boteco Belmonte and hung out for a good while, trying small
plates and having a few drinks.  The food was good, and the company was better.
Despite my small lunch and all my walking, I wasn’t terribly hungry, or I
would’ve kept exploring the menu.  I had my last caipirinha of the trip, but I
also decided to try their Moscow Mule.  It was a strange one, with the ginger
added as a sort of creamy foam on top.  I’m not sure I’d order it often, but it
was fun as a weird surprise.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618796213/in/album-72177720327189278" title="Moscow mule"><img src="https://live.staticflickr.com/65535/54618796213_df6b57f812_c.jpg" width="800" height="600" alt="Moscow mule" /></a></p>

<p>I had meant to see some other things on Monday, but I was pretty happy with the
hours spent just looking at the outdoors.  In retrospect, I just wish I’d
gotten one more caipirinha, to go.  Or maybe on the way back to my apartment.</p>

<h2 id="tuesday">Tuesday</h2>

<p>Tuesday was my last day!  My flight out of Rio was at 23:00, and I had to leave
my apartment around eleven.  Barbara and Breno graciously invited me to come
by, leave my bags, and spend the day.  I spent the morning packing, running a
few more errands, and finishing off most of my groceries.</p>

<p>On my way to their place, my phone ran out of data.  I’d bought an eSIM with
<a href="https://www.airalo.com/">Airalo</a>, which was mostly just fine.  (Actually, the
service I got in Brazil was not as good as what I’d gotten elsewhere, but it
was totally adequate.)  I’d even topped it off the previous day, but I think
that all my roaming in the parks had me using more data than I thought.  As my
Uber got me closer to their place, I realized that the map wasn’t updating, and
Discord was offline.  I knew their address, and I <em>thought</em> I remembered how to
contact them, but once I was out of the car, I was stumped.  Eventually, I
received an SMS from Breno, and I went back to his place and got in.  I had
misremembered how to ring him from the front gate!</p>

<p>Inside, I bought more data.  More importantly, I got a tour of their place, had
some chit chat, and then it was time for lunch.  Lunch was homemade vegan
<a href="https://en.wikipedia.org/wiki/Moqueca">moqeueca</a>, with plantains replacing the
fish.  It was <em>delicious</em>.  I’m pretty sure that my grandmother sometimes made
a similar fish stew, but I haven’t yet confirmed this with my siblings.
Anyway, it was great, and was followed by a dessert of passionfruit and
condensed milk.  Yum!</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618782799/in/album-72177720327189278" title="vegan moqueca"><img src="https://live.staticflickr.com/65535/54618782799_5e340b1e43_c.jpg" width="800" height="600" alt="vegan moqueca" /></a></p>

<p>After lunch, Breno and I dropped his daughter at school and stopped into <a href="https://casarobertomarinho.org.br/">Casa
Roberto Marinho</a>, a large house that’s been
converted into a gallery space.  It was good, and was the <em>nth</em> place I’ve seen
in the past few years featuring art depicting
<a href="https://en.wikipedia.org/wiki/Laoco%C3%B6n">Laocoön</a>.  Weird?  I don’t know.</p>

<p>From there, the plan was to see the one absolute must-see thing in Rio: the
giant <a href="https://en.wikipedia.org/wiki/Christ_the_Redeemer_(statue)">Christ the
Redeemer</a> statue.
The statue is 98’ tall, atop a 26’ pedestal, atop a 2,300’ mountain.  You can
see it from all sorts of places in the city.  I saw it from Sugarloaf.  I saw
it from the beach.  I saw it from the highway while the police searched my
bags.  It was everywhere!  Also, it was going to have an incredible view of the
city.</p>

<p>The problem is… the weather was absolutely miserable.  Every day until Tuesday
had been sunny and clear, but Tuesday it was cloudy, windy, and raining.  We
hoped it would clear up before we went up, but it didn’t.  I wasn’t too fussed,
really.  From up close, I knew I’d see the whole statue.  Still, it was not the
ideal weather for it.  Breno was a sport and drove us up the mountain, where we
caught a train to the top.</p>

<p>Here’s a view of the weather taken near where we caught the train:</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618757619/in/album-72177720327189278" title="Christ the Redeemer"><img src="https://live.staticflickr.com/65535/54618757619_2efd31575a_c.jpg" width="800" height="600" alt="Christ the Redeemer" /></a></p>

<p>An aside:  I had called this train a
“<a href="https://en.wikipedia.org/wiki/Funicular">funicular</a>” when talking to friends,
but further research tells me that it isn’t one.  It is a “<a href="https://en.wikipedia.org/wiki/Rack_railway">rack
railway</a>”, where the train is
driven by a cog along a toothed rail.  This allows for much steeper gradients
than a normal rail line.  It was pretty cool, and from inside the train, you
could definitely see and feel the slope at which the train was traveling.  This
particular railway is the <a href="https://en.wikipedia.org/wiki/Corcovado_Rack_Railway">Corcovado Rack
Railway</a>, and I will
definitely be reading more about it later.</p>

<p>Once we got to the top, the situation was both better and worse than I’d
imagined.  In <em>some</em> directions, we could see quite a ways, and I could
recognize places I’d been or had heard of.  In others, there was just a dense
fog.  It was pretty obvious that on a good day, you’d be able to see forever,
and that the view of the city would be absolutely gorgeous.  I wasn’t even
disappointed, though.  The view was still great, and the statue was really
impressive.  I was also delighted to find out the pedestal on which the Christ
stands house a tiny, tiny church.  We stepped inside briefly to get out of the
wind, but we didn’t stay long, and I didn’t get a photo.  It seemed a little
uncouth to do so.</p>

<p>The weather up there wasn’t great.  It was probably 55 or 60ºF, rainy, and
windy.  Breno was <em>clearly</em> miserable, and also seemed sort of baffled that I
wasn’t.  What can I say?  Back here in Philly, we get way down below freezing,
so 55ºF and windy is merely annoying.  If the view had been better, I might’ve
stuck around while he got out of the rain and off to pick up his kid.  As it
was, I saw everything there was to see pretty quickly, and we both got out of
there and onto the train.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618552271/in/album-72177720327189278" title="Christ the Redeemer"><img src="https://live.staticflickr.com/65535/54618552271_34317d848b_c.jpg" width="600" height="800" alt="Christ the Redeemer" /></a></p>

<p><a href="https://www.flickr.com/photos/rjbs/54618770318/in/album-72177720327189278" title="Christ the Redeemer"><img src="https://live.staticflickr.com/65535/54618770318_441760ebcd_c.jpg" width="800" height="600" alt="Christ the Redeemer" /></a></p>

<p>Back at their place, we had good while to sit around, talk, and have dinner.
“We’ll order pizza,” they said, “but it’s going to be terrible compared to
anything in the states.”  I didn’t lie and say it wouldn’t be.  I’ve had pizza
outside the states, I know how it goes.  (It was actually tasty, it just wasn’t
good pizza.)  After that, it was time to finally leave Rio.  I got an Uber, got
to the airport, and eventually flew home with no difficulty.  I had plenty of
things left in Rio that I could’ve stayed to do, but as always, it was really
good to get home to my people.</p>

<p>I had meant to bring <em>something</em> for Barbara and Breno.  I didn’t know they’d
be such exemplary hosts, but either way it would’ve been gracious.  I at least
remembered to bring something for their daughter: Gritty.  What better thing to
bring as an ambassador from Philadelphia?  Fortunately, he was well received,
and I felt some civic pride at Gritty’s continued ability to make life a little
better.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618795973/in/album-72177720327189278" title="me, Eva, Gritty"><img src="https://live.staticflickr.com/65535/54618795973_6158d68d85_c.jpg" width="530" height="800" alt="me, Eva, Gritty" /></a></p>

<p>Anyway, if I go again, I’ll remember to bring a bottle of Malört or something!</p>

<p>As for whether I’ll go again… it’s hard to know.  I’m surprised I went at all,
honestly.  There isn’t much natural pressure to visit South America.  Work
doesn’t send me there, conferences haven’t tried to entice me.  It’s expensive
to get to, even if it’s cheap to spend time there.  Now that I’ve been, I could
imagine spending more time there and enjoying it.  On the other hand, there is
a <em>lot</em> of the planet left that I haven’t even seen once.  I think I’ll have to
play it by ear.</p>

<p>In the meantime, I’ll be looking for the best caipirinha in Philadelphia.  Wish
me luck.</p>]]></content><author><name>Ricardo Signes</name></author><category term="travel" /><summary type="html"><![CDATA[I’d had four days in Rio so far (and one in Miami, better left unmentioned). I had covered lots of ground for things I wanted to see, and also lots of things I didn’t know I should see. I had eaten so, so much cassava. I had lots of things left unseen, lots of food left uneaten, and just about two days left to fill. I think I made good use of my time, but I definitely left things to do… next time?]]></summary></entry><entry><title type="html">rjbs in Rio, part ⅱ</title><link href="https://rjbs.cloud/blog/2025/07/rjbs-in-rio-part-ii/" rel="alternate" type="text/html" title="rjbs in Rio, part ⅱ" /><published>2025-07-01T12:00:00+00:00</published><updated>2025-07-01T12:00:00+00:00</updated><id>https://rjbs.cloud/blog/2025/07/rjbs-in-rio-part-ii</id><content type="html" xml:base="https://rjbs.cloud/blog/2025/07/rjbs-in-rio-part-ii/"><![CDATA[<p>After a rocky start, I had two great days in Rio, leaving me about four days of
vacation.  This meant lots more walking around, a little more beach, a bunch
more food (70% cassava, 20% pork, 10% other), more forró music, and not enough
caipirinhas.  If you didn’t read “<a href="/blog/2025/06/rjbs-in-rio-part-i/">rjbs in Rio, part ⅰ</a>”, you should start there.</p>

<h2 id="saturday">Saturday</h2>

<p>Friday, I ended my day by watching the sunset, having a beer, and listening to
two different bands on the way back to my apartment.  How would I top that?</p>

<p>Fortunately, I had help.  Breno and Barbara were back on the scene to show me
around to cool things I would never have done on my own.  I had a lazy morning
of scrambed eggs and orange juice, and some amount of walking around the
neighborhood.  By this point, I’d decided that all the fearmongering around
getting mugged in Rio was wildly overblown, but it did seem like I should pay
attention to where I wandered, so I didn’t head too far in unknown directions.
I did see a bunch more shops, including things that I probably should’ve tried
eating, but didn’t.  A little after ten, though, I headed to the farmer’s
market at General Glicério street.  I was interested in lots of the things, but
stuck to the suggestions: a <em>pastel</em> (sort of like an empanada), a <em>tapioca</em>
(like a taco or crêpe made with cassava), and <em>caldo de cana</em> (sugarcane
juice).  I posted a lot of photos in Flickr, but I’ll highlight this one, the
tapioca:</p>

<p><a href="https://www.flickr.com/photos/rjbs/54617669272/in/album-72177720327189278" title="farmer&#x27;s market"><img src="https://live.staticflickr.com/65535/54617669272_783ddc26ac_c.jpg" width="600" height="800" alt="farmer&#x27;s market" /></a></p>

<p>It doesn’t look like much, but it was delicious.  Breno and his daughter had
one with nutella and banana — a classic pairing to stuff into anything.  I had
the more traditional cheese and coconut, which seemed weird but tasted great.
I was also simultaneously pleased and weirded out by the shell.  It was soft
and chewy, and had a subtle flavor that I can’t describe.  I would eat many
more, with many different fillings.</p>

<p>We ran into a bunch of their friends and their friends’ kids, which made for a
good farmer’s market experience.  Who doesn’t like watching little kids play in
a crowded but basically safe space?  Eventually, though, we headed out toward
<a href="https://www.instagram.com/tacaca_do_norte/">Tacaca do Norte</a>.  I don’t know
anything about this place other than it was billed as <em>the</em> place to get açai.
Also, Brazil had already been billed as <em>the</em> place to get açai, so this was
meant to be the best of the best.  I had actually never had the stuff, although
it’s definitely been sort of everywhere here.  It just seemed like it would be
some boring fruity health food.</p>

<p>There was some debate over whether I should get a huge order or a tiny order.
We settled on tiny (I was so full already!), but what we got seemed pretty big
to me!  If you haven’t had an açai bowl (or maybe if you’ve only had whatever
it is we serve in the US), I guess I’d say it’s a bit like frozen yogurt or
mashed frozen bananas, like a cold, sweet, stiff pudding.  It came with two
little pots, one of tapioca beads and one of granola.  I love putting granola
into goo, so that was great.  Even so, I couldn’t eat more than half of it.
Even if I’d been very hungry, I’m not sure I could’ve.  Meanwhile, people all
around me were eating it by the liter.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618578706/in/album-72177720327189278" title="my first açai"><img src="https://live.staticflickr.com/65535/54618578706_de81a7396a_c.jpg" width="800" height="600" alt="my first açai" /></a></p>

<p>After that, we split up.  Breno and I continued on alone to
<a href="https://crab.sebrae.com.br/">CRAB</a>, a museum of local and indigenous crafts.
This was very cool, and had both traditional-style objects and contemporary
reinterpretations.  I’m pretty sure that a few of the things I saw were also in
my grandmother’s house.  Did she ever visit Brazil?  I have no idea.</p>

<p>Rather than any photos of CRAB, though, here’s one of <em>Central do Biscoito</em>
(Biscuit Central), a cookie store with a weirdly compelling mascot:</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618889270/in/album-72177720327189278" title="Biscuit Central!"><img src="https://live.staticflickr.com/65535/54618889270_6fcb79737c_c.jpg" width="800" height="600" alt="Biscuit Central!" /></a></p>

<p>After that, I think there was some sort of general walking around, but it led
us toward the <a href="https://en.wikipedia.org/wiki/Candel%C3%A1ria_Church">Candelária
Church</a>, a beautiful (but
slightly dilapidated) church.  Across the street, there were June Festival
celebrations, and that’s where we were headed.  One of Breno’s friends was
going to be part of the celebration, as a stilt walker.  This event was good
value.  We watched a bunch of stilt walking, heard a bunch of music, saw some
unexpected <a href="https://en.wikipedia.org/wiki/Capoeira">Capoeira</a>, and even ran
into Breno’s brother and family!  We saw the thing that had been the Olympic
torch when Rio hosted.  Also, critically, we got caipirinhas.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618793963/in/album-72177720327189278" title="Festa Junina happenings"><img src="https://live.staticflickr.com/65535/54618793963_4edd2f58aa_c.jpg" width="800" height="600" alt="Festa Junina happenings" /></a></p>

<p><a href="https://www.flickr.com/photos/rjbs/54618576036/in/album-72177720327189278" title="Festa Junina happenings"><img src="https://live.staticflickr.com/65535/54618576036_1f2fd8049b_c.jpg" width="800" height="600" alt="Festa Junina happenings" /></a></p>

<p>We lingered a good long while, but eventually we were pretty beat (or maybe <em>I</em>
was beat and Breno was polite) and we headed out.  I think this was my first
time riding the Rio Metrô, the subway.  I picked up a subway pass as a
souvenir.  These are great souvenirs: they’re cheap, they don’t take up space,
and they’re unambiguously associated with the place you went.  This one was
even better.  It’s called a <em>RioCard</em>, which is an anagram of <em>Ricardo</em>.</p>

<p>The subway was clean, easy to ride, and felt safe.  I rode it again alone a
couple times, and have no complaints.  Breno and I chatted the whole time, even
as he overshot his stop by accident and accompanied me to mine on purpose.
When I got back to my apartment, I took off my shoes, called home, and zoned
out until it was time to sleep.</p>

<p>Also, here’s a picture of Breno’s niece wearing my hat.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618780754/in/album-72177720327189278" title="Festa Junina happenings"><img src="https://live.staticflickr.com/65535/54618780754_5f99e556b8_c.jpg" width="600" height="800" alt="Festa Junina happenings" /></a></p>

<h2 id="sunday">Sunday</h2>

<p>I have no recollection or photos of Sunday morning.  I think that’s when I
explored a street market near my apartment.  It was pretty cool, and I bought a
nice aloha shirt.  The seller told me I should go a size smaller, and I didn’t
listen, but I think she was right.  Gloria suggests it should be easy to have
shortened, so I might just do that!  I also hit the grocery store (my local
<em>Zona Sul</em>) and picked up some soap and shampoo, so I could get cleaner.  I
felt a little weird about buying so much for my three remaining days, but I
felt better about not being gross.</p>

<p>I met Breno and his daughter near Biscuit Central, and we headed to the
<a href="https://en.wikipedia.org/wiki/Rio_de_Janeiro_Cathedral">Metropolitan Cathedral of Saint
Sebastian</a>.  Coming to
Rio, I knew that this was one of my top priorities to see.  The photos made it
clear that I’d be happy with it.  In person, it was even better.  It was
beautiful.  It made great use of the light while still providing a somber
space.  It felt like it really fit into the place it was, and it was still
clearly a cathedral.  I have seen many cathedrals, and even the best are often
just very well constructed versions of “yet another cathedral”.  This wasn’t
that.  Also, as we approached I could still smell the frankinsence from the
morning’s mass.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618549986/in/album-72177720327189278" title="Rio&#x27;s Metropolitan Cathedral"><img src="https://live.staticflickr.com/65535/54618549986_b045f73594_c.jpg" width="800" height="600" alt="Rio&#x27;s Metropolitan Cathedral" /></a></p>

<p><a href="https://www.flickr.com/photos/rjbs/54618550006/in/album-72177720327189278" title="Rio&#x27;s Metropolitan Cathedral"><img src="https://live.staticflickr.com/65535/54618550006_060fa62cd8_c.jpg" width="800" height="600" alt="Rio&#x27;s Metropolitan Cathedral" /></a></p>

<p><a href="https://www.flickr.com/photos/rjbs/54618860780/in/album-72177720327189278" title="Rio&#x27;s Metropolitan Cathedral"><img src="https://live.staticflickr.com/65535/54618860780_7c2c34c690_c.jpg" width="800" height="600" alt="Rio&#x27;s Metropolitan Cathedral" /></a></p>

<p>I want to learn more about the place, including what required aspects of
cathedral design it fulfilled in unusual ways.  That seems certain to be a
thing.  Seeing my photos, Mark Dominus said, “A solid refutation of the people
who complain about Brutalism.”</p>

<p>The plan had been to take the old fashioned tram from the cathedral to the
way-uphill Bohemian neighborhood of Santa Teresa, but the line for the tram was
two and a half hours long, which didn’t seem worth it.  We got an Uber.  Up in
Santa Teresa, we looked around shops and watched trams go by, which was a
pretty decent substitute for actually riding the thing.  Eventually, Barbara
met us and we got lunch: <a href="https://en.wikipedia.org/wiki/Feijoada">feijoada</a>.</p>

<p>Feijoada is (I am told) the national dish of Brazil.  It originates in
Portugal, but let’s get real:  it’s meat, beans, and rice, so it’s something
people eat everywhere.  It was served with collard greens and tapioca flour,
and it was <em>great</em>.  Could I have eaten our three person order?  Yes, probably,
but it’s surely also good that I didn’t try to.  (Also, it would’ve been rude.)
There is no photographic evidence, but I think I had a caipirinha there.  We
went to Bar Simplesmente, which apparently is a great place to go for feijoada.
It certainly seemed like it to me!</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618882695/in/album-72177720327189278" title="getting feijoada in Santa Teresa in Rio"><img src="https://live.staticflickr.com/65535/54618882695_b25eeaec2c_c.jpg" width="800" height="600" alt="getting feijoada in Santa Teresa in Rio" /></a></p>

<p>The other notable part of the meal was the fried hunks of cassava.  At first I
said, “Hey these potatoes are great!”  Almost as soon as I said it, I realized
it wasn’t potato, and Barbara said, “This is cassava.”  I said, “This is just
like the yuca fries they used to serve at the Cuban place we liked.”  Barbara
politely explained that cassava and yuca are the same thing, and my mind was
totally blown.  I feel like I really should’ve know this, but I didn’t.  Then
again, I don’t live in a place where every single meal contains cassava!</p>

<p>From there, we walked a bit more and got some coffee.  I usually only drink
mocha lattes, but these weren’t commonly on offer in Rio, so mostly I just had
tea.  Here, though, I got a cappucino, which was good!  (I’ve had them before
and not liked them.)  We saw a small exhibit of a fashion designer’s work in a
cool gallery space with a great view.  Soon, though, we came to the <a href="https://en.wikipedia.org/wiki/Escadaria_Selar%C3%B3n">Escadaria
Selarón</a>.</p>

<p>The Escadaria Selarón is a (pretty long!) outdoor staircase.  If asked, I’d say
they led from Santa Teresa “all the way down” to Lapa, but I’m not really sure.
At the bottom, we could see the huge, defunct aqueduct that the tram rides
across.  The point isn’t the destination, though, it’s the stairs themselves.
They’re covered in tiles, and the work was done over twenty years by Jorge
Selarón, an artist who lived in the area.</p>

<p>The steps were pretty popular, with lots of other tourists there to see, but
they weren’t crowded or annoying, and we took our time wandering down and
looking at the tiles.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618882555/in/album-72177720327189278" title="Escadaria Selarón"><img src="https://live.staticflickr.com/65535/54618882555_1c97b82485_c.jpg" width="800" height="600" alt="Escadaria Selarón" /></a></p>

<p><a href="https://www.flickr.com/photos/rjbs/54618796358/in/album-72177720327189278" title="the aqueducts"><img src="https://live.staticflickr.com/65535/54618796358_8337768a0a_c.jpg" width="800" height="600" alt="the aqueducts" /></a></p>

<p>After the steps, Breno and I carried on alone, heading to Glória market and the
nearby June Festival celebration.  Breno was very keen on me trying a bunch of
sweets, so he bought a bag and we sat around drinking beer and eating candy.
This was better than it sounds.  I think the best thing we had was <a href="https://en.wikipedia.org/wiki/P%C3%A9_de_moleque">pé de
moleque</a>.  As far as I’m
concerned this is just shiny peanut brittle (the best kind of peanut brittle),
but is weirdly pitched as being a local thing for Brazil.  The one we got here
was actually soft, sort of like a Pay Day bar, but much nicer.  My only photo
of the sweets is pretty bad, so I won’t put it in here.  Instead, here’s me
with Glória station, which made me think of Gloria every time I saw it, of
course.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618782939/in/album-72177720327189278" title="rjbs and Glória"><img src="https://live.staticflickr.com/65535/54618782939_06e869f981_c.jpg" width="600" height="800" alt="rjbs and Glória" /></a></p>

<p>We’d meant to take a bike ride after this, but instead we sat around talking
until it was dark and we were beat.  This was good!  Breno and I (and Barbara,
on other occasions) spent a lot of time talking about this and that.  Often
this was work, sometimes politics, and sometimes movie, TV, and books.  Most
notably, though, I got a lot of Brazilian history, which was all interesting
and valuable as I explored the place.  More than once, I saw a monument or
building that I understood much better because of a bit of history I’d learned
earlier in the week.</p>

<p>From Glória station, Breno went home and I went back to my apartment in
Ipanema, where I called home and caught up, then stared at the wall for a while
until it was time to sleep.</p>

<p>Every night, I was watching a little <a href="https://en.wikipedia.org/wiki/Resident_Alien_(TV_series)">Resident
Alien</a>.  It was good
travel TV.  Not too stressful, sort of funny, and easy to stop watching when
vacation was over.  If I couldn’t sleep, I’d watch one more episode.  Sunday
night, as I wrapped up one last episode, I got a message from my sister that my
dad had gone to the hospital.  (He’s fine now.)  I waited up to get more
information, and while doing that decided to floss my teeth again.  Doing
<em>that</em>, I managed to pop the crown off one of my molars, which led to another
hour or so awake, searching the web for “dental adhesive brands Brazil”.
Eventually, I just cleaned everything involved and jammed it back in my mouth.
It stayed put until I got home, but it meant I avoided peanut brittle until I
got back!</p>

<p>Monday, I was on my own, so it was no problem to sleep in, and so staying up
too late thinking about my teeth was no problem.  More on the last two days in
another post.</p>]]></content><author><name>Ricardo Signes</name></author><category term="travel" /><summary type="html"><![CDATA[After a rocky start, I had two great days in Rio, leaving me about four days of vacation. This meant lots more walking around, a little more beach, a bunch more food (70% cassava, 20% pork, 10% other), more forró music, and not enough caipirinhas. If you didn’t read “rjbs in Rio, part ⅰ”, you should start there.]]></summary></entry><entry><title type="html">rjbs in Rio, part ⅰ</title><link href="https://rjbs.cloud/blog/2025/06/rjbs-in-rio-part-i/" rel="alternate" type="text/html" title="rjbs in Rio, part ⅰ" /><published>2025-06-30T12:00:00+00:00</published><updated>2025-06-30T12:00:00+00:00</updated><id>https://rjbs.cloud/blog/2025/06/rjbs-in-rio-part-i</id><content type="html" xml:base="https://rjbs.cloud/blog/2025/06/rjbs-in-rio-part-i/"><![CDATA[<p>So, I went to Rio de Janeiro!  It was great, and it’ll probably take me several
entries to sufficiently cover the trip.  Here we go!</p>

<h2 id="background">Background</h2>

<p>The background for this trip is worth mentioning.  For years, I’ve been seeing
my friend Breno at the annual Perl Toolchain Summit.  He was also a regular in
an online D&amp;D game I ran.  All the time, he’d say, “Look, man, you’ve <em>gotta</em>
come visit Brazil.  It’d be so great!”  I would say, “I bet it would, but I
really mostly travel where work sends me, and I can’t see a work trip to Brazil
happening <em>any</em> time in the near future.”</p>

<p>Then, early last year, I got an email from a frequent flyer program telling me
that if I didn’t use my reward miles, I’d lose them.  I managed to not lose
them immediately, but it seemed like this was a sign.  I tried to think of
where I might go, and I remembered all of Breno’s exhortations.  I looked it
up, and I could definitely get to Rio and back on miles.  I emailed him and
said, “Okay, when would be good?”  He wrote back with a long enthusiastic
analysis of the year, including this:</p>

<blockquote>
  <p>The Festas Juninas are probably less known outside Brazil but also very
typical and popular, happening all over the country in June/July, usually in
the afternoon or at dusk. it’s less crowded and “partyesque” but there is
dancing and fire and costumes and very typical food and drinks that are
harder to find the rest of the year.</p>
</blockquote>

<p>Sounded perfect!  I decided to make plans.</p>

<h2 id="getting-there">Getting there</h2>

<p>Over the course of the next year, this went from vague idea to definite plan,
and I started to put together a list of things I’d like to see or do.  I read a
lot of “what you must see in Rio” pages, plus ones that covered more obscure
topics.  I asked Breno and Barbara (Breno’s wife, also a friend) to tell me
whether my list was any good.  By the time the trip was upon me, I had what
felt like a great set of things to do.  Even better, Barbara provided a
suggested day-by-day agenda, which would’ve been a pain for me.  It included a
bunch of “and then we’ll take you to something we think is really worth it.”
Who could ask for more?</p>

<p>Meanwhile, though, the articles I read kept saying, “You’re going to love Rio!
It’s so wonderful!  You are <em>definitely</em> at high risk of getting mugged,
though!”  Mostly I shrug this stuff off.  I live in Philly, and I’m used to
people talking about my home like it’s a warzone.  Still, I got a little
anxious.  Breno reassured me, I decided to keep my phone in my purse, and I
tried to put aside any fears.  Then, on the 18th, I got my bag and headed to
the airport.  It was going to be a bit of a long trip, but I’m used to going to
Australia.  This would be no big deal.</p>

<p>Really, it mostly wasn’t.  The only complication was that instead of a 6 hour
layover between flights, I had a 6 hour layover plus a 16 hour delay.  It was
mostly overnight, so I didn’t get to tool around Miami.  I mostly sat around
the lounge and the Holiday Inn and watched TV.  It was fine, but I didn’t love
losing a day.</p>

<p>Eventually, I landed at GIG.  (Did you know that Rio’s international airport is
named after <a href="https://en.wikipedia.org/wiki/Ant%C3%B4nio_Carlos_Jobim">the guy who wrote <em>The Girl from
Ipanema</em></a>?  It is!).
Instead of landing at 8:00 in the morning, I landed around 1:00 in the morning,
and then I had to get through immigration and customs and find a cab.  Then the
cab got pulled over by the police, who ordered me out of the car at gunpoint
and searched all my stuff.  Honestly, I might have been more nervous if I
wasn’t so tired.</p>

<h2 id="thursday">Thursday</h2>

<p>I feel a bit badly about beginning my trip story this way, but it’s how it
began.  The good news (spoilers!) is that it was the only remotely worrying
event of my trip, and I wan’t even really worried at any point.  We were let go
pretty quickly, and then I was in my apartment and asleep.  The next day, I was
on the beach and everything was good.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618778888/in/album-72177720327189278" title="the beach at Ipanema"><img src="https://live.staticflickr.com/65535/54618778888_99f61d3201_c.jpg" width="800" height="600" alt="the beach at Ipanema" /></a></p>

<p>My first day was supposed to be Wednesday, which I would’ve spent exploring the
beaches and maybe finding one of the nearby art museums, but that was shot.  It
was Thursday, and that meant lunch with Breno and Babs and their daughter.  We
had “angu”, which I’d describe as something like a polenta-and-offal stew.  It
was great, right up my alley!</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618796488/in/album-72177720327189278" title="angu at Angu do Gomes"><img src="https://live.staticflickr.com/65535/54618796488_4cd40bf854_c.jpg" width="800" height="600" alt="angu at Angu do Gomes" /></a></p>

<p>Then it was on to the Museum of Tomorrow (the architecture was great, but we
mostly coasted through the exhibits), and then São Cristóvão Fair, which I
later described as “what if Philly’s Reading Terminal Market was in Brazil and
had three competing live music acts at all times”.  It was great, although a
little loud.  We had a bunch more delicious food (lots of photos on Flickr),
and I had my second <a href="https://en.wikipedia.org/wiki/Caipirinha">caipirinha</a> of
the day.  If I have one regret of the trip, it’s not drinking more of those.  I
suspect it’ll be hard to find or make a good one at home, but we’ll see.</p>

<p>A caipirinha is a bit like a daquiri.  It’s made with cachaça, which is a bit
like white rum.  Then sugar, lime, and ice.  It seems like <em>the</em> drink of
Brazil, or at least Rio.  (Brazil is huge.  If you sort of vaguely agree that
Brazil isn’t very small, go look it up.  It’s the fifth largest country in the
world, smaller than the USA and larger than Australia.  I don’t want to get
accused of saying something like “the mint julep is <em>the</em> drink of the US”.)
Anyway, I had probably four or five across the trip, and I could’ve done with
more like eight.</p>

<p>The music at the fair was foreshadowing.  There was lots of live music all over
the place, and it didn’t seem like a tourist gimmick.  It was always pretty
upbeat, and everybody sang along and danced with everything.  “Oh, this is a
very famous song,” was definitely one of the things Breno said to me the most.</p>

<p>Also notable: the ice cream.  Breno pointed at the menu – and I’m sorry to say
I didn’t get a photo!  “On the right,” he said, “are all the boring flavors you
know.  Chocolate, vanilla, mint.  Who cares?  On the <em>left</em>, though, it’s all
fruit flavors, and I won’t bother translating, because you don’t have words in
English for any of these.  They’re all South American fruits.”  I had
<a href="https://en.wikipedia.org/wiki/Jabuticaba">jaboticaba</a>.  The ice cream was very
good, but the exciting thing was this list of weird fruits that I’d never heard
of.  Weirder, jaboticaba fruit grow right on the trunk of the tree?  Just
weird.</p>

<p>There was at least one fruit on the list that I <em>did</em> know: pineapple.  I was
surprised and pleased to learn, though, that in Brazil they <em>don’t</em> call
pineapple <em>ananás</em>, as they do in Portugal and nearly everywhere else.  They
call it <em>abacaxi</em>.  Rejecting the worldwide standard name for that fruit made
the people of Brazil seem even more like my brothers and sisters.  Too bad they
still use the metric system.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54617692667/in/album-72177720327189278" title="Feira de São Cristóvão"><img src="https://live.staticflickr.com/65535/54617692667_d26d836796_c.jpg" width="800" height="600" alt="Feira de São Cristóvão, a caipirinha" /></a></p>

<p>After the fair, Breno dropped me off at my apartment.  There’s only an hour of
time difference from home to Rio, but I was beat.  I wasn’t ready to collapse
into sleep, but I was no good for any kind of conversation by the end of the
night.  I zoned out and eventually crashed.</p>

<h2 id="friday">Friday</h2>

<p>Friday was my first day on my own, and I had a plan:
<a href="https://en.wikipedia.org/wiki/Sugarloaf_Mountain">Sugarloaf</a>!  Sugarloaf
Mountain is a 1300’ mountain at the mouth of Rio’s bay.  It’s called Sugarloaf
because it looks like a sugarloaf.  A sugarloaf is how sugar was sold for
hundreds of years, well until the 19th century, so I guess at one point it was
pretty useful to say “it’s that mountain that looks like a sugarloaf!”  Now, I
think of a sugarloaf as “a compressed hunk of sugar shaped like that mountain
in Rio”.</p>

<p>I knew the mountain would have a good view of the city and the bay, but I was
mostly in it for the cable car ride.  I’m not sure why, since I’m not a huge
lover of heights, but it seemed pretty compelling.  Before I came down, Breno
had said, “the cable car!  Like in
<a href="https://en.wikipedia.org/wiki/Moonraker_(film)">Moonraker</a>!”  I had never
watched Moonraker, so I watched it on the flight down.  I don’t recommend it.
On the other hand, the cable car ride was great.  Happily, the mountain was
even better than that!</p>

<p>I’d hoped to ride up in the mid-afternoon so that I could ride down during
sunset.  In retrospect, I think I could’ve made that work, but it wasn’t a
clear win at the time.  I hadn’t been able to buy tickets online, so I’d have
to go out to the mountain and hope to get timed entry tickets for a reasonable
time.  I didn’t want to get there only to find out that I couldn’t get tickets,
so I ended up going early.  I wasn’t disappointed, and honestly I’m not sure
I’d have been any happier with sunset.</p>

<p>The cable car actually goes to two mountains.  First, to Urca Hill, then
Sugarloaf Mountain.  It’s two separate cable car rides, and you can spend as
much time as you want on Urca Hill between them.  I spent a few hours, and it
was great.  There was food (I had corn, a sausage sandwich, ice cream, and
later a beer), there were crafts, and there were amazing views in every
direction.  When I couldn’t appreciate the view any more, I sat down and read a
book for ten minutes, then got back to the view.  It was excellent.</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618760454/in/album-72177720327189278" title="Sugarloaf Mountain"><img src="https://live.staticflickr.com/65535/54618760454_c78f188730_c.jpg" width="800" height="600" alt="Sugarloaf Mountain" /></a></p>

<p>That view above is actually from Urca Hill.  In the distance, you can see
<a href="https://en.wikipedia.org/wiki/Corcovado">Corcovado</a> (“the hunchback”), the
mountain on which Rio’s giant <a href="https://en.wikipedia.org/wiki/Christ_the_Redeemer_(statue)">Christ the
Redeemer</a> statue
stands.  It was visible from all over the city, and I saw it up close and
personal later in the trip.  This was one of the cooler views of it, though.</p>

<p>From Urca Hill, I took the second cable car to Sugarloaf.  It was very cool,
and I think the views were marginally better, but it was much more
crowded-feeling in that smaller space, and the food and shops weren’t inviting.
I didn’t stay up there half as long as I was on Urca Hill.  In fact, when I got
back to Urca Hill I spend more time there, getting an ice cream cone and doing
some people-watching.</p>

<p>After that, I was ready for a break.  I got back to my apartment, zoned out for
a little bit, and then hit the grocery.  I picked up OJ, eggs, bread, and tea,
which meant that I could start every day with a little breakfast.  That meant I
wouldn’t be hungry until dinner, most days, if I kept busy, which made every
day easier.  I also picked up a packet of Globo biscuits, which are a sort of
flavorless cassava-based Funyun.  They were everywhere, in Rio, but also had
nothing much to recommend them other than the crunchiness.</p>

<p>I <em>also</em> also picked up some iced mate tea, which I enjoyed drinking most days.
I think I’m going to see if I can get any tea leaves for making it at home, but
we’ll see.</p>

<p>After I’d relaxed for a while, I headed to
<a href="https://en.wikipedia.org/wiki/Arpoador">Arpoador</a>, the peninsula between
the Ipanema and Copacabana beaches.  There’s a big rock there (Arpoador Rock),
which some people say is the best place in the world to see the sunset.  I was
skeptical, but it <em>was</em> very good.  The rock was swarming with people, but I
managed to find a place to watch the sun set.  There are lots more photos in my
trip album, but here’s one:</p>

<p><a href="https://www.flickr.com/photos/rjbs/54618760098/in/album-72177720327189278" title="the sunset at Arpoador"><img src="https://live.staticflickr.com/65535/54618760098_a82258abd1_c.jpg" width="800" height="600" alt="the sunset at Arpoador" /></a></p>

<p>After that, I walked slowly back to my apartment.  I stopped at two concerts,
both of which were great, and I had a Brahma beer, which was good, especially
for the weather.  I didn’t get to try many Brazilian beers, but I enjoyed this
one.  Looking back, I wish I’d bought one more beer to drink on the walk.  I
should try to enjoy “walk with a beer” time when traveling to places where
that’s legal.</p>

<p>Eventually, I made it back to my apartment and turned in.  More on the rest of
the trip in future posts!</p>]]></content><author><name>Ricardo Signes</name></author><category term="travel" /><summary type="html"><![CDATA[So, I went to Rio de Janeiro! It was great, and it’ll probably take me several entries to sufficiently cover the trip. Here we go!]]></summary></entry><entry><title type="html">my problems with CP2077 (and lots of RPGs)</title><link href="https://rjbs.cloud/blog/2024/09/cp2077/" rel="alternate" type="text/html" title="my problems with CP2077 (and lots of RPGs)" /><published>2024-09-28T12:00:00+00:00</published><updated>2024-09-28T12:00:00+00:00</updated><id>https://rjbs.cloud/blog/2024/09/cp2077</id><content type="html" xml:base="https://rjbs.cloud/blog/2024/09/cp2077/"><![CDATA[<p>When <a href="https://en.wikipedia.org/wiki/Cyberpunk_2077">Cyberpunk 2077</a> was
announced, I was really excited.  The teaser for it looked exactly like the
Cyberpunk 2020 RPG that I’d like so much when I was a kid.  When it came out, I
tried it and it was a mess.  Later, I heard they worked out lots of the
problems, and I went back and I’ve been playing it.  It still looks just about
perfect, and gets lots of things right.  It feels like a really good adaptation
of Cyberpunk 2020.  There are a lot of bugs and interface issues, still, but I
don’t want to write about those, because it’s boring.</p>

<p>My problem is that the world of 2077 seems to have changed zero since 2013.
From 1990 to 2013, in twenty three years: the USA collapses, space colonization
(of the moon and Mars) begins in earnest, cybernetic prosthesis and mind
uploading become practical, European nations collapse and reform, and powerful
artificial general intelligence is developed.  It’s an incredible amount of
change to the world for twenty three years.  Think back to 2001.  How much has
the world changed?  Some, for sure, but really nothing like Cyberpunk proposes.
That’s okay, because Cyberpunk is a game that proposes a world where everything
is in a state of constant upheaval.  But sixty five years later, the world
hasn’t changed any further.</p>

<p>My problem is that CP2077 keeps reminding me of something that often bugged me
about RPGs in the ’90s.  Back then, I had a mailing list with some friends who
were into RPGs.  It was called “RPG Theory”, and that’s what we talked about.
Here’s a (lightly edited) section of a post I made in August 2000, with the
subject “Metaplot, Setting, Freedom, and Flavor”:</p>

<hr />

<p>A role-playing game (RPG) is an interactive story-game created by a Game
Designer, revolving mostly (although not exclusively) around the actions of
Player Characters (PCs)  largely told and entirely adjudicated by the Game
Master (GM).</p>

<p>The game can be roughly defined by its <strong>theme</strong>, <strong>setting</strong>, and <strong>rules</strong>.</p>

<p>The game’s <strong>theme</strong> is composed of its mood, tone, and possibly an overall
moral or message.  The necessity of a particular mood to a game is hard to
define.  While slight variation is clearly possible (e.g. Vampire games
centered chiefly around Humanitas or Jyhad), it may be that vast changes are
not.  (A Vampire game centered around fighting robots from Mars, or in the
style of Paranoia.) I leave this question to the philosophers.</p>

<p>The games’s <strong>setting</strong> is the world in which the game takes place.  This world
exists in equilibrium or stasis.  It is clearly not frozen in one moment, but
it is frozen in one period.  One can look at Casablanca and see a setting that
is active, but also frozen.  From the beginning to the end of the description
(that is, the movie itself), the setting does not change.  Only the characters
change and take action.</p>

<p>Setting is the perogative of the Game Designer.  They write the game’s chief
book or books, which contain as basic description of <strong>rules</strong> and <strong>setting</strong>.</p>

<p>The perogative of the Player Character, chiefly and above all else, is
<strong>action</strong>.  Actions are easy to understand.  When a PC speaks to another PC,
shoots an NPC, or detonates a nucelar device, these are actions.  They are
undertaken by the PC as in-character (IC) tasks, generally with the implicit
permission of the Game Master, which can use IC means to stop them, but will
rarely rule out-of-hand that an attempt is impossible.</p>

<p>The perogative of the Game Master, chiefly and above all else, is <strong>motion</strong>.
Motion is action taken by the setting.  While the setting, as initially
described, is static, during the course of the game it acts.  This motion can
be subtle:  gangs working for the city’s mayor begin to muscle in on the PCs’
operation, which had in the Prelude (pre-game ‘time’) existed in equilibrium.
It can also be drastic:  all the women in America begin to grow wings.  Through
motion, the GM punctuates the equilibrium of the setting, communicates the
theme, and forces the PCs to take action.</p>

<p>That is a <strong>campaign</strong>.  (Or Chronicle, or Session, whatever.)</p>

<p><strong>Metaplot</strong> is the superimposition of the Game Designer’s campaign onto the
GM’s campaign.  (The Game Designer, in his off time, presumably is able to act
also as a GM.)  The Game Designer’s motion must be accounted for by the Game
Master, and this reduces his ability to communicate theme and act effectively.
Or, at least, this is how many GMs perceive the problem.  We could call the
metaplot “metamotion.”  (It is run by the Designer as ‘metaGM’ and stars
‘metacharacters.’)</p>

<p>The Golden Rule, “the GM can do whatever they want”, gives GMs the option to
ignore any part of the Game Designer’s ideas.  Generally this applies to
setting, but it can be extended to rules, theme, and (of course) metaplot.</p>

<p>On the other hand, the Game Designer knows that GMs are unlikely
to abandon “canon” rules.  So, the Game Designer insidiously (or blithely)
incorporates new metaplot into new rules, making it impossible for one to exist
without the other.  Or, only slightly less insidiously, they release books of
metaplot which also contain useful or required information that can be
discounted, which merely means that the GM will pay for material that they do
want, as well as material that they do not.</p>

<hr />

<p>The Cyberpunk RPG had its own metaplot.  Books came out once in a while telling
you what was new in the world.  Night City is seized by the Metal Wars.
Elziabeth Kress becomes President of the United States.  The Fourth Corporate
Wars happen.  These books were generally of the “less insidious” type above:
the book would tell you about how Arasaka and Militech were warring over an
African land grab, and also introduce new weapons and cyberware being used
there.  You could use that story as a basis for your game, or you could ignore
it and give the players access to the cool new tech just for fun.</p>

<p>Of course, as the years go by, more and more of this metaplot builds up.  New
books are released that build on the story of the last ten books.  It’s harder
and harder to carve out <em>your</em> game’s Night City from the currently canonical
one.  Cyberpunk was hardly the worst offender (if you consider this an offense)
in this area.  I wrote my post about White Wolf’s World of Darkness, which
started off by describing the game world as a moment in time, and ended up
releasing an enormous list of books detailing monumental in-game events that
crowded out the Game Master’s own ideas.</p>

<p>Anyway, Cyberpunk 2077 feels enormously encumbered by this problem.  Johnny
Silverhand has been part of the Cyberpunk story since the original Cyberpunk
RPG (set in 2013).  His activities help define the setting, not just in the
setting’s past, but in its present and future.  His actions are so significant
as to constrain the motion of the game.</p>

<p>This just becomes bizarre when we’re not thinking about the seven years from CP
2013 to CP 2020, but the 57 years from CP 2020 to CP 2077.  Johnny blows up
Arasaka tower in 2022, and then vanishes for fifty years.  When he shows up
again, <em>nothing has changed</em>.  The world of 2077 is, I would say, literally
indistinguishable from that of 2022.  It’s not because Johnny isn’t there to do
stuff, but because it’s not an option to really decontextualize Johnny by
having the setting change out from under him.</p>

<p>Johnny complains about some fan of his from fifty years ago who’s living in the
past, but actually nothing has changed since then.  Johnny isn’t a creature of
the past, he’s just as relevant in 2077 as he was in 2022.  This world of
constant upheaval and instability has become incredibly reliable.  In sixty
years, nothing really changed.  The protagonist can’t really change anything,
either.  They’re just there to experience the show.</p>

<p>I wish the game had been set in 2022.  They could’ve just let us play as Johnny
Silverhand, carrying out the raid on Arasaka.  But this would’ve given us
agency over a character whose actions belong to the game designer, or maybe one
of their friends in the canonical campaign of the game.  They couldn’t let us
have that agency, so they gave us the lesser agency of V, who lets us see that
Johnny’s actions had no consequence, and neither will ours.</p>

<p>All of this is why I basically always throw away the setting that comes with an
RPG.  Anything that limits my ability to create a dynamic world of my own is
antithetical to my idea of being a game master.  The way that CP 2077 reflects
a world defined by the game designer’s favorite NPCs and their millieu just
makes me sad.</p>]]></content><author><name>Ricardo Signes</name></author><category term="games" /><category term="rpg" /><category term="videogames" /><summary type="html"><![CDATA[When Cyberpunk 2077 was announced, I was really excited. The teaser for it looked exactly like the Cyberpunk 2020 RPG that I’d like so much when I was a kid. When it came out, I tried it and it was a mess. Later, I heard they worked out lots of the problems, and I went back and I’ve been playing it. It still looks just about perfect, and gets lots of things right. It feels like a really good adaptation of Cyberpunk 2020. There are a lot of bugs and interface issues, still, but I don’t want to write about those, because it’s boring.]]></summary></entry><entry><title type="html">tweaking my 1Password library to bug me less</title><link href="https://rjbs.cloud/blog/2024/08/onepassword-library-tweaks/" rel="alternate" type="text/html" title="tweaking my 1Password library to bug me less" /><published>2024-08-18T12:00:00+00:00</published><updated>2024-08-18T12:00:00+00:00</updated><id>https://rjbs.cloud/blog/2024/08/onepassword-library-tweaks</id><content type="html" xml:base="https://rjbs.cloud/blog/2024/08/onepassword-library-tweaks/"><![CDATA[<p>A few months ago, I wrote about <a href="/blog/2024/05/onepassword-cli-library/">a new 1Password library for Perl</a>, which I was using to stop putting
sensitive information into my environment.  I was pretty happy with this!  It
meant I could put a pointer to my credentials in my configuration, instead of
the credentials themselves.</p>

<p>After a few days of use, though, I realized there was pretty annoying problem:
the URL-like strings that 1Password’s <code class="language-plaintext highlighter-rouge">op</code> tool uses to find things don’t
include account names.  The tool doesn’t search all your accounts for a given
item.  It just checks the “current” one.  (You can toggle which is “current”
with <code class="language-plaintext highlighter-rouge">op signin</code>, but ugh.)  I have more than one 1Password account, and I
wanted to have both personal and work credentials available on my laptop while
doing work.  This was going to mean having a second environment variable, like
<code class="language-plaintext highlighter-rouge">APPNAME_CREDENTIAL_ACCOUNT</code> in addition to the first variable that stored the
<code class="language-plaintext highlighter-rouge">op://vault/item/field</code> string.  It’s just one more field, but it’s one more
field all over the place, and it meant complicating the library that was meant
to just get a password from a string.  It bugged me.</p>

<p>I finally fixed this in the new version.  Now, there’s another format of string
you can specify:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  opcli:a=${Account}:v=${Vault}:i=${Item}:f=${Field}
</code></pre></div></div>

<p>You don’t have to specify everything, so you can still skip the vault and field
names to fetch a complete item (as long as the item locator is unambiguous).
On the other hand, now you <em>can</em> specify the account name.</p>

<p>With this finally done, I think I’ll be updating a bunch of little programs to
fetch credentials from 1Password!</p>]]></content><author><name>Ricardo Signes</name></author><category term="perl" /><category term="programming" /><category term="security" /><summary type="html"><![CDATA[A few months ago, I wrote about a new 1Password library for Perl, which I was using to stop putting sensitive information into my environment. I was pretty happy with this! It meant I could put a pointer to my credentials in my configuration, instead of the credentials themselves.]]></summary></entry><entry><title type="html">I still like printing code listings</title><link href="https://rjbs.cloud/blog/2024/07/printing-code-listings/" rel="alternate" type="text/html" title="I still like printing code listings" /><published>2024-07-12T12:00:00+00:00</published><updated>2024-07-12T12:00:00+00:00</updated><id>https://rjbs.cloud/blog/2024/07/printing-code-listings</id><content type="html" xml:base="https://rjbs.cloud/blog/2024/07/printing-code-listings/"><![CDATA[<p>I used to program on paper, then type it in later.  Not all the time, but
sometimes.  Sometimes I’d write pseudocode.  Sometimes I wrote just the code I
would type in later.  Sometimes just flow charts and subroutine signatures.
These days, I only really do the last version, because I always have a computer
nearby now.  I’m not stuck in a boring lecture, for example, with only a legal
pad.</p>

<p>Back then, and later, I’d also review code on paper.  This was before I was
doing formal “code review” for work.  Sometimes I just wanted to look at my own
code, out of the context of my computer, and think about it.  Sometimes I
wanted to look at somebody else’s code.  Either way, putting it on paper was
really useful.  I could read it away from the rest of the distractions of my
computer, and I could draw circles and arrows in a bunch of different colors.</p>

<p>The way I did it, then, was to use Vim’s <code class="language-plaintext highlighter-rouge">:hardcopy</code> command.  Like the rest of
Vim, it has <a href="https://vimdoc.sourceforge.net/htmldoc/print.html">slightly strange but actually very good
documentation</a>.  I worked on
Windows in the early 2000s, and I could enter <code class="language-plaintext highlighter-rouge">:ha</code> and get a printout.
Sometimes, though, I’d use <a href="https://www.gnu.org/software/a2ps/">the <code class="language-plaintext highlighter-rouge">a2ps</code>
program</a> instead.  That was a bit more work
to use, but it produced better listings (as I recall), especially because it
would print two pages of code on one piece of paper, while remaining quite
legible.</p>

<p>Over time, I printed code less often.  This was partly, but not entirely,
because I was coding less.  Lately, I’ve been coding a bit more.  On top of
that, I do a lot of it sitting not twenty feet from <a href="https://blog.plover.com/">Mark
Dominus</a>, who seems to print out nearly every hunk of
code he reviews.  This has brought back memories of how much I got out of
printing code.  It also led to him asking me a question or two about <code class="language-plaintext highlighter-rouge">a2ps</code>
that left me a little surprised and embarrassed that I had forgotten how to use
it well.</p>

<p>Over the last twenty four hours, I’ve tried to get back up to speed, and to
find (and simplify) a method for printing code listings on demand.  This blog
post is a bit of a recounting of that work, and what I found.</p>

<h2 id="postscript">PostScript</h2>

<p>I wanted to start with <code class="language-plaintext highlighter-rouge">a2ps</code> but I have to write a prelude about PostScript.</p>

<p>The “a” in <code class="language-plaintext highlighter-rouge">a2ps</code> stands for “any”.  The idea is that you feed it basically any
kind of source code (or plain text) and it will build a PostScript file for
printing.  <a href="https://en.wikipedia.org/wiki/PostScript">PostScript</a> is a
programming language created by Adobe and used (mostly but not entirely) to
drive printers.  It’s a bit of a weird language, but it’s postfix and
stack-based, so I have a soft spot in my heart for it.  You can see three books
on PostScript on shelf three in my <a href="/blog/2024/01/bookshelf-snapshot/">post about my technical bookshelf</a>.  Ten years ago, showing the kid
different kinds of programming, <a href="/blog/2015/03/notes-on-drawing-programming-for-children/">we wrote this program</a>:</p>

<div class="language-postscript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">/text</span> <span class="p">{</span>
  <span class="nv">/Times-Roman</span> <span class="nb">findfont</span> <span class="nb">exch</span> <span class="nb">scalefont</span> <span class="nb">setfont</span>
<span class="p">}</span> <span class="nb">def</span>

<span class="nb">newpath</span> <span class="mf">24</span> <span class="nf">text</span> <span class="mf">200</span> <span class="mf">400</span> <span class="nb">moveto</span>
        <span class="s">(You're standing on my neck!)</span> <span class="nb">show</span>

<span class="nb">newpath</span> <span class="mf">284</span> <span class="mf">284</span> <span class="mf">72</span> <span class="mf">0</span> <span class="mf">360</span> <span class="nb">arc</span> <span class="nb">stroke</span>
<span class="nb">newpath</span> <span class="mf">265</span> <span class="mf">300</span> <span class="mf">12</span> <span class="mf">0</span> <span class="mf">360</span> <span class="nb">arc</span> <span class="nb">fill</span>
<span class="nb">newpath</span> <span class="mf">303</span> <span class="mf">300</span> <span class="mf">12</span> <span class="mf">0</span> <span class="mf">360</span> <span class="nb">arc</span> <span class="nb">fill</span>
<span class="nb">newpath</span> <span class="mf">250</span> <span class="mf">225</span> <span class="nb">moveto</span> <span class="mf">275</span> <span class="mf">225</span> <span class="nb">lineto</span>
        <span class="mf">275</span> <span class="mf">200</span> <span class="nb">lineto</span> <span class="mf">250</span> <span class="mf">200</span> <span class="nb">lineto</span>
        <span class="mf">250</span> <span class="mf">225</span> <span class="nb">lineto</span> <span class="nb">stroke</span>
<span class="nb">newpath</span> <span class="mf">275</span> <span class="mf">225</span> <span class="nb">moveto</span> <span class="mf">300</span> <span class="mf">225</span> <span class="nb">lineto</span>
        <span class="mf">300</span> <span class="mf">200</span> <span class="nb">lineto</span> <span class="mf">275</span> <span class="mf">200</span> <span class="nb">lineto</span>
        <span class="mf">275</span> <span class="mf">225</span> <span class="nb">lineto</span> <span class="nb">stroke</span>

<span class="nb">newpath</span> <span class="mf">300</span> <span class="mf">225</span> <span class="nb">moveto</span> <span class="mf">325</span> <span class="mf">225</span> <span class="nb">lineto</span>
        <span class="mf">325</span> <span class="mf">200</span> <span class="nb">lineto</span> <span class="mf">300</span> <span class="mf">200</span> <span class="nb">lineto</span>
        <span class="mf">300</span> <span class="mf">225</span> <span class="nb">lineto</span> <span class="nb">stroke</span>
</code></pre></div></div>

<p>It draws <a href="/assets/2015/03/ps-skull.png">a skull with the caption “You’re standing on my
neck!”</a>.  Try it!</p>

<p>But how?  Well, in theory you can send it directly to your printer with <code class="language-plaintext highlighter-rouge">lp</code>,
but on current macOS (unlike older versions) you will get this error:
<strong>Unsupported document-format “application/postscript”.</strong></p>

<p>I’m not sure exactly where the problem lies.  My suspicion is that it’s in the
CUPS service that serves as the mediator between the user and the printer on
macOS.  Probably I could get around this by using mDNS and
<a href="https://en.wikipedia.org/wiki/Internet_Printing_Protocol">IPP</a>, and honestly I
am tempted to go learn more.  But there was a simpler solution:  <code class="language-plaintext highlighter-rouge">ps2pdf</code>
converts a PostScript program to a PDF file.  It’s shipped with
<a href="https://www.ghostscript.com/">Ghostscript</a> and is easy to get from
<a href="https://brew.sh/">Homebrew</a>.</p>

<p>PDF is actually based on PostScript, but I don’t know the details.  PostScript
has also been used for rendering graphical displays, using a system called
Display PostScript (DPS), which was developed by both Adobe and NeXT, and later
became the basis for the MacOS X display system.  So, why doesn’t macOS support
PostScript well anymore?  Honestly, I don’t know.</p>

<p>Anyway: lots of the things I tried using for printing output PostScript, which
is meant to be easy to send on to the printer.  With <code class="language-plaintext highlighter-rouge">ps2pdf</code> installed,
printing these files isn’t so hard.  It’s just a drag that they can’t be send
right to the <code class="language-plaintext highlighter-rouge">lp</code> command.</p>

<h2 id="a2ps">a2ps</h2>

<p>Right, back to a2ps!  Given a piece of source code, it will spit out a
PostScript program representing a nice code listing.  Unfortunately, running it
out of the box produced something pretty awful, and I had to fumble around a
good bit before I got what I wanted.  I didn’t save a copy, so if you want to
see it, you can try to reproduce it on your own.  The problems included being
off center, running off the page margins, using a mix of different typefaces in
one source listing, using awful colors, and probably other stuff.  So, I had to
consult the manual.  Unfortunately, I started doing that by running <code class="language-plaintext highlighter-rouge">man a2ps</code>,
immediately hitting the problem that has infuriated geeks for decades:  I got a
pretty mediocre man page with a footnote saying the real docs were in Texinfo.
And <code class="language-plaintext highlighter-rouge">info</code> isn’t installed.</p>

<p>Eventually I found myself reading the <a href="https://www.gnu.org/software/a2ps/manual/a2ps.pdf">a2ps manual as a
PDF</a> on the web.  With that
(and with some help from Mark), I found that much of what I needed would come
down to putting this in <code class="language-plaintext highlighter-rouge">~/.a2ps/a2psrc</code>:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Options: --medium=letter
Options: --line-numbers 1
Options: --prologue color
</code></pre></div></div>

<p>This set my paper size, turned on line numbering on every line, and said that I
wanted highlighting to be expressed as color, not just font weight.</p>

<p>There were two problems that I could not get over:</p>

<ol>
  <li>Typeface mixing!  Everything was in fixed text except for literal strings,
which were (to my horror) represented in a proportional font.</li>
  <li>Awful colors.  For example, subroutine names were printed in black on a
bright yellow background.  Probably some people think this is fine.  I did
not.  (The a2ps manual admits: “It is pretty known that satisfying the
various human tastes is an NEXPTIME-hard problem.”)</li>
</ol>

<p>So, how to fix it?  By hacking on a PostScript file!</p>

<p>a2ps combines (roughly) two things to build the final PostScript program: the
prologue, and the program.  (There’s also the header (“hdr”), but that’s
included directly by the prologue.  Let’s not split hairs.)</p>

<p>The program is a series of PostScript instructions that will print out your
listing.  The prologue is a set of function definitions that the program will
used.  The <code class="language-plaintext highlighter-rouge">a2ps</code> binary (written in C) reads your source document, tokenizes
it for syntax highlighting, and then emits a program.  For example, here’s a
hunk of output for the Perl code that I’ll be using in all the samples in this
post.</p>

<div class="language-postscript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="mf">0</span> <span class="nf">T</span> <span class="s">()</span> <span class="nf">S</span>
<span class="s">(sub)</span> <span class="nf">K</span>
<span class="s">( )</span> <span class="nf">p</span>
<span class="s">(richsection)</span> <span class="nf">L</span>
<span class="s">( </span><span class="se">\(</span><span class="s">@elements</span><span class="se">\)</span><span class="s"> {)</span> <span class="nf">p</span> <span class="nf">n</span>
<span class="s">(185)</span> <span class="nf">#</span> <span class="s">(  Slack::BlockKit::Block::RichText::Section-&gt;new</span><span class="se">\(</span><span class="s">{)</span> <span class="nf">N</span>
<span class="mf">0</span> <span class="nf">T</span> <span class="s">(    elements =&gt; _rtextify</span><span class="se">\(</span><span class="s">@elements</span><span class="se">\)</span><span class="s">,)</span> <span class="nf">N</span>
<span class="mf">0</span> <span class="nf">T</span> <span class="s">(  }</span><span class="se">\)</span><span class="s">;)</span> <span class="nf">N</span>
<span class="mf">0</span> <span class="nf">T</span> <span class="s">(})</span> <span class="nf">N</span>
<span class="mf">0</span> <span class="nf">T</span> <span class="s">()</span> <span class="nf">N</span>
<span class="s">(190)</span> <span class="nf">#</span> <span class="s">()</span> <span class="nf">S</span>
</code></pre></div></div>

<p>The parentheses are string delimiters, and because PostScript is a postfix
language, when you see <code class="language-plaintext highlighter-rouge">(richsection) L</code> it’s calling the function <code class="language-plaintext highlighter-rouge">L</code> with the
string “richsection” on the stack.  True, there may be other things on the
stack, but I happen to know that <code class="language-plaintext highlighter-rouge">L</code> is a one-argument function.  It looks like
this:</p>

<div class="language-postscript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">/L</span> <span class="p">{</span>
  <span class="mf">0</span> <span class="mf">0</span> <span class="mf">0</span> <span class="nf">FG</span>
  <span class="mf">1</span> <span class="mf">1</span> <span class="mf">0</span> <span class="kc">true</span> <span class="nf">BG</span>
  <span class="kc">false</span> <span class="nf">UL</span>
  <span class="kc">false</span> <span class="nf">BX</span>
  <span class="nf">fCourier-Bold</span> <span class="nf">bfs</span> <span class="nb">scalefont</span> <span class="nb">setfont</span>
  <span class="nf">Show</span>
<span class="p">}</span> <span class="nb">bind</span> <span class="nb">def</span>
</code></pre></div></div>

<p>This prints the string on the stack to the current position on the page <em>in
black on bright yellow</em>.  Yuck.  This function comes from the “color” prologue,
which is installed in <code class="language-plaintext highlighter-rouge">share/a2ps/ps</code>.  There’s no way to change parameters to
it, so the recommended practice is to copy it into <code class="language-plaintext highlighter-rouge">~/.a2ps</code> and edit that.
This would be more horrifying if there were new version of a2ps coming out with
notable changes, but there aren’t, so it’s … fine.</p>

<p>I hacked up a copy of <code class="language-plaintext highlighter-rouge">color.pro</code> and changed the prologue option in my
configuration file to <code class="language-plaintext highlighter-rouge">rjbs.pro</code>.  I renewed my PostScript programmer
credentials!  While doing this, I also fixed the typefaces, replacing
Times-Roman with Courier in the definition of <code class="language-plaintext highlighter-rouge">str</code>, the string literal
display function.</p>

<p>This got me some pretty decent output, shown here, and linked to a PDF:</p>

<p><a href="/assets/2024/07/a2ps.pdf"><img src="/assets/2024/07/a2ps.png" alt="a page of code from a2ps" /></a></p>

<p>By the way, all the samples in this post will be from formatting <a href="https://github.com/rjbs/Slack-BlockKit/blob/0.002/lib/Slack/BlockKit/Sugar.pm">this copy of
Slack::BlockKit::Sugar</a>.</p>

<p>This was fine, but I had two smaller problems:</p>

<ol>
  <li>The syntax highlighting is a bit anemic (but not so bad).</li>
  <li>The line spacing is a little tight for me.</li>
</ol>

<p>Fixing the first one means editing the “style sheet” for Perl.  This isn’t like
CSS at all. It doesn’t define the style, it defines how to mark up tokens as
being one thing or another.  The functions in the prologue will do the styling.
I looked at what might be worth putting here as a sample, but I think if you
want to see what they look like, you should check out <a href="https://github.com/akimd/a2ps/blob/master/sheets/perl.ssh">the perl.ssh file
itself</a>.  It’s fine,
but it’s also obvious that making it better would be an ordeal.  I bailed.</p>

<p>Fixing line spacing felt like it should be easy, though.  Surely there’d be an
option for that, right?  Sadly, no.  I decided to use my PostScript expertise
to work.  Here’s the <code class="language-plaintext highlighter-rouge">N</code> function, which renders a line and moves to the next
position:</p>

<div class="language-postscript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">/N</span> <span class="p">{</span>
  <span class="nf">Show</span>
  <span class="nv">/y0</span> <span class="nf">y0</span> <span class="nf">bfs</span> <span class="nb">sub</span> <span class="nf">store</span>
  <span class="nf">x0</span> <span class="nf">y0</span> <span class="nb">moveto</span>
<span class="p">}</span> <span class="nb">bind</span> <span class="nb">def</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">bfs</code> is the “body font size”.  We’re moving a little down the page by reducing
the <code class="language-plaintext highlighter-rouge">y</code> position of the cursor by the font size.  What if we did this?</p>

<div class="language-postscript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">/y0</span> <span class="nf">y0</span> <span class="nf">bfs</span> <span class="mf">1.1</span> <span class="nb">mul</span> <span class="nb">sub</span> <span class="nf">store</span>
</code></pre></div></div>

<p>That should add a 10% line spacing increase, right?  Well, yes, but the problem
is this: remember how the <code class="language-plaintext highlighter-rouge">a2ps</code> binary is responsible for spitting out the
PostScript program?  That’s where it computes how many lines per page.  By
mucking with the vertical spacing, we start running off the end of the page.
We need to change the number of lines that <code class="language-plaintext highlighter-rouge">a2ps</code> puts on the page.  No
problem, we’d just tweak this code:</p>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">job</span><span class="o">-&gt;</span><span class="n">status</span><span class="o">-&gt;</span><span class="n">linesperpage</span> <span class="o">=</span>
  <span class="p">(</span><span class="kt">int</span><span class="p">)</span> <span class="p">((</span><span class="n">printing_h</span> <span class="o">/</span> <span class="n">job</span><span class="o">-&gt;</span><span class="n">fontsize</span><span class="p">)</span> <span class="o">-</span> <span class="n">BOTTOM_MARGIN_RATIO</span><span class="p">);</span>
</code></pre></div></div>

<p>…at which point I realized I had to install <code class="language-plaintext highlighter-rouge">automake</code>.  I did, and I went a
few steps further, and finally gave up.  It was too annoying for a Saturday.</p>

<p>What if instead I changed the default style?  I won’t bore you with the
PostScript, but I made a new function, <code class="language-plaintext highlighter-rouge">vbfs</code>, defined as 0.9 of <code class="language-plaintext highlighter-rouge">bfs</code>.  I
updated all the rendering functions to use that value for size, but the full
value was still used for line spacing.  This worked!  But changing the font
size mean that I was ending up with horizontal dead space. I was scaling
everything down, when all I wanted to scale up was the <em>vertical space</em>.  It
was unsatisfactory, and I decided to settle for the tight line spacing.</p>

<p>…for about five minutes.  And then I decided to try the <em>other</em> GNU program for
turning source code into PostScript.</p>

<h2 id="enscript">enscript</h2>

<p><a href="https://www.gnu.org/software/enscript/">GNU Enscript</a> bills itself as “a free
replacement for Adobe’s enscript program”.  I don’t know what that was, but I
can tell you that <code class="language-plaintext highlighter-rouge">enscript</code> is basically “<code class="language-plaintext highlighter-rouge">a2ps</code>, except different”.  It
serves the same function.  I fed it the same hunk of code, but not before
reading the manual and finding <code class="language-plaintext highlighter-rouge">--baselineskip</code>, which is exactly what I
wanted: a way to control line spacing.  I used this invocation:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>enscript lib/Slack/BlockKit/Sugar.pm \
  --columns=2       \
  --baselineskip=2  \
  --landscape       \
  --color           \
  --highlight       \
  --line-numbers    \
  --output Sugar.ps
</code></pre></div></div>

<p>It looked pretty good at first, when looking at the first page of output (not
pictured here).  On the other hand, here’s page three:</p>

<p><a href="/assets/2024/07/enscript.pdf"><img src="/assets/2024/07/enscript.png" alt="a page of code from enscript" /></a></p>

<p>The line spacing is nice (and maybe nicer when cranked up), and the colors
aren’t offensive.  But they’re all wrong.  Part of the issue is that this
source is using <code class="language-plaintext highlighter-rouge">=func</code> as if it was a real Pod directive, which it isn’t.  On
the other hand, it’s real enough that Perl will ignore the enclosed
documentation.  Syntax highlighting should start at <code class="language-plaintext highlighter-rouge">=func</code> and end at <code class="language-plaintext highlighter-rouge">=cut</code>.
The syntax definition for Perl in <code class="language-plaintext highlighter-rouge">enscript</code> is very strict, and so this is
wrong.  And that means that the documentation’s syntax highlighting ends up all
wrong all over the place.  It’s unusable.</p>

<p>Syntax highlighting in <code class="language-plaintext highlighter-rouge">enscript</code> is different than <code class="language-plaintext highlighter-rouge">a2ps</code>’s style sheets.
Instead, it’s programmed with a little “state” language.  You can read the
<a href="http://git.savannah.gnu.org/gitweb/?p=enscript.git;a=blob;f=states/hl/perl.st;h=161dae131a7850e9a591ec2a1a94ccab35b1e84d;hb=refs/heads/master">Perl state
program</a>,
but I’m not sure I recommend it.  It’s relatively inscrutable, or at least it
is written in terms of some other functionality that doesn’t seem well
documented.  Fixing the Pod thing seemed trivial, but all I could imagine was
an endless stream of further annoyance.  Maybe this isn’t fair, but it’s where
I ended up.</p>

<p>At this point, settling on <code class="language-plaintext highlighter-rouge">a2ps</code> might have been a good idea, but instead I
moved on to Vim.</p>

<h2 id="vim-hardcopy">Vim :hardcopy</h2>

<p>Way up at the top of this post, I mentioned that I had used Vim in the past.
So, why not now?  Well, reasons.  The first one is that I didn’t remember how,
and I knew that “it didn’t work anymore”.  But I was in for way more than a
penny by now, so I went further down the rabbit hole.</p>

<p>It turned out that “it didn’t work anymore” was trivial.  I was getting this
error:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>E365: Failed to print PostScript file
</code></pre></div></div>

<p>Right.  Because <code class="language-plaintext highlighter-rouge">lp</code> doesn’t handle PostScript anymore.  I could just write the
PostScript file to a file, then apply <code class="language-plaintext highlighter-rouge">ps2pdf</code>.  I did so, and it was bad.
The good news was that getting from bad to <em>okay</em> wasn’t so hard.  I had to set
some <code class="language-plaintext highlighter-rouge">printoptions</code> in Vim.</p>

<div class="language-vim highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">set</span> <span class="nb">printoptions</span><span class="p">=</span>paper<span class="p">:</span>letter<span class="p">,</span><span class="k">number</span><span class="p">:</span><span class="k">y</span><span class="p">,</span><span class="k">left</span><span class="p">:</span><span class="m">5</span><span class="k">pc</span>
</code></pre></div></div>

<p>This sets my paper size (which I’d already had in my <code class="language-plaintext highlighter-rouge">.vimrc</code> actually!), turns
on line numbering, and reduces the left margin to 5%.  The default left margin
was 10%, which was just way too much.  It’s nice to have space to write, but I
usually do that in the whitespace on the right side of the code.  To print to a
file in Vim, you can execute <code class="language-plaintext highlighter-rouge">:hardcopy &gt; filename.ps</code>.  With these settins, I
got this output:</p>

<p><a href="/assets/2024/07/vim-1.pdf"><img src="/assets/2024/07/vim-1.png" alt="a page of code from Vim" /></a></p>

<p>The main problem here is that it’s one-up.  Only one page of code per sheet of
paper.  It’s easy to read, but it takes twice as much paper.  It’s a waste, and
also leads to more desk clutter than necessary.  My desk is enough of a mess as
it is.</p>

<p>Fortunately, there’s a solution for this!  The slightly obscure <code class="language-plaintext highlighter-rouge">mpage</code> command
reads a PostScript document in, then spits out another one that’s multiple
pages per sheet.  It hasn’t quite fallen off the web, but it’s not extremely
well published.  Here’s <a href="https://www.cs.cmu.edu/~mbz/personal/xnix/mpage1.html">a link to its man
page</a> hosted at a fairly
random-seeming location at CMU.  Fortunately, it’s in Homebrew.  I could take
the PDF above and run this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mpage -2 -bLetter -S Sugar.ps &gt; Sugar2.ps &amp;&amp; ps2pdf Sugar2.ps
</code></pre></div></div>

<p>The <code class="language-plaintext highlighter-rouge">-S</code> option there is fairly critical.  It says “allow non-square scaling”.
In theory this might introduce some distortion, but I can’t notice it, and it
gets a better use of space on the page.  I also go back to my <code class="language-plaintext highlighter-rouge">printoptions</code> in
Vim and set <em>all</em> the margins to <code class="language-plaintext highlighter-rouge">0pc</code>.  Since <code class="language-plaintext highlighter-rouge">mpage</code> will be adding a margin
when it produces the two-up pages, I don’t need any margin on the pages it’s
combining.  I get four more lines per page, plus more space on the right of
each listing.</p>

<p>Here’s what we get:</p>

<p><a href="/assets/2024/07/vim.pdf"><img src="/assets/2024/07/vim.png" alt="a page of code from Vim, sent through mpage" /></a></p>

<p>I wasn’t sure how to get a better set of colors.  I’m pretty sure it’s
possible, but I’ll have to think about it and play around.  There is a
<strong>very large benefit</strong> here, though.  The syntax highlighting that I get in the
PDF will be based on the same syntax highlighting that I’m used to seeing every
day in Vim.  I know nothing is critically wrong, and if there <em>was</em>, I’d be
very motivated to fix it, because I’d be seeing it every day in my editor!</p>

<p>The real problem, for fixing the colors, is that I use a dark-background color
scheme in Vim.  Printing tries to emulate your color scheme, but has to correct
for the fact that it’s going to print on white paper.  The real answer is to
have an alternate color scheme ready for printing.</p>

<p>Still, I’m pretty happy with this.  All that remained was to make it really
easy.  So, I wrote a <a href="https://github.com/rjbs/rjbs-vim-dots/blob/main/bin/libexec/vim-print-helper">stupid little Perl
program</a>
that finds a PostScript file on disk, runs it through <code class="language-plaintext highlighter-rouge">mpage</code>, then <code class="language-plaintext highlighter-rouge">ps2pdf</code>,
then puts it on the Desktop and opens it in Preview.  Then I updated my Vim
configuration to make <code class="language-plaintext highlighter-rouge">:hardcopy</code> send print jobs to that instead of <code class="language-plaintext highlighter-rouge">lp</code>.  It
looks like this:</p>

<div class="language-vim highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">set</span> <span class="nb">printexpr</span><span class="p">=</span>ByzantinePrintFile<span class="p">()</span>
<span class="k">function</span> ByzantinePrintFile<span class="p">()</span>
  <span class="k">call</span> <span class="nb">system</span><span class="p">(</span><span class="s2">"/Users/rjbs/bin/libexec/vim-print-helper "</span>
<span class="se">    \</span><span class="p">..</span> <span class="k">v</span><span class="p">:</span>fname_in
<span class="se">    \</span><span class="p">..</span> <span class="s2">" "</span>
<span class="se">    \</span><span class="p">..</span> <span class="nb">shellescape</span><span class="p">(</span><span class="nb">expand</span><span class="p">(</span><span class="s1">'%:t'</span><span class="p">))</span>
<span class="se">  \</span><span class="p">)</span>
  <span class="k">call</span> <span class="k">delete</span><span class="p">(</span><span class="s2">"v:fname_in"</span><span class="p">)</span>
  <span class="k">return</span> <span class="k">v</span><span class="p">:</span>shell_error
endfunc
</code></pre></div></div>

<p>Vim script is still weird.</p>

<p>This is where I’ll stop, feeling content and full of PostScript.  I think for
many people, all this PostScript nonsense would leave a bad aftertaste.  For
them, there’s another option…</p>

<h2 id="vim-2htmlvim">Vim 2html.vim</h2>

<p>Vim ships with a helper file called <code class="language-plaintext highlighter-rouge">2html.vim</code>, which exports the current
buffer as HTML, using the settings and colors currently in use.  You can enter
this in your Vim command line:</p>

<div class="language-vim highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">runtime</span><span class="p">!</span> <span class="nb">syntax</span>/<span class="m">2</span>html<span class="p">.</span><span class="k">vim</span>
</code></pre></div></div>

<p>…and you’ll get a new Vim buffer full of HTML.  The parity with the Vim display
is impressive.</p>

<p><a href="/assets/2024/07/vim-html.png"><img src="/assets/2024/07/vim-html.png" alt="HTML output and Vim side by side" /></a></p>

<p>The problem is that so far, I’ve found going from HTML to a two-up PDF is too
much of a pain.  Possibly there’s some weird route from HTML to PostScript to
piping through <code class="language-plaintext highlighter-rouge">mpage</code> but I think I’ll leave that adventure for another day or
another dreamer.  Me, I’ve got printing to do.</p>]]></content><author><name>Ricardo Signes</name></author><category term="programming" /><summary type="html"><![CDATA[I used to program on paper, then type it in later. Not all the time, but sometimes. Sometimes I’d write pseudocode. Sometimes I wrote just the code I would type in later. Sometimes just flow charts and subroutine signatures. These days, I only really do the last version, because I always have a computer nearby now. I’m not stuck in a boring lecture, for example, with only a legal pad.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://rjbs.cloud/assets/2024/07/vim.png" /><media:content medium="image" url="https://rjbs.cloud/assets/2024/07/vim.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>