<?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-03-30T20:04:14+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">building my todo list app</title><link href="https://rjbs.cloud/blog/2026/03/building-my-todo-list/" rel="alternate" type="text/html" title="building my todo list app" /><published>2026-03-25T12:00:00+00:00</published><updated>2026-03-25T12:00:00+00:00</updated><id>https://rjbs.cloud/blog/2026/03/building-my-todo-list</id><content type="html" xml:base="https://rjbs.cloud/blog/2026/03/building-my-todo-list/"><![CDATA[<p>For years, I’ve wanted a better daily to-do checklist.  I had a good idea what
I wanted from it, but I knew it was going to be a pain to produce.  It didn’t
have any complicated ideas, just a bunch of UI considerations, and that’s not
my area of expertise, so I’ve made do with a bunch of worse (for me) options,
which has, for me, led to worse outcomes.  I accepted the tradeoffs, but I
wasn’t thrilled.  Now I’ve finally built exactly the app I wanted, and it went
great.  I call it, for now, NerfJournal.</p>

<h2 id="project-seven-nerfjournal">Project Seven: NerfJournal</h2>

<p>That’s right, this is another “stuff Rik did with Claude” post.  This one feels
like maybe the project that had the greatest impact on me so far, and that’s in
three ways:  First, the tool I’ve produced is genuinely useful and I use it
daily.  Secondly, it made clear the ways in which the realm of coding easily
available to me was expanded by agents.  Finally, it’s been a great way to not
just <em>access</em> but also <em>learn</em> those things, which I’ll write about in a
follow-up post.</p>

<p>Anyway, the project is called NerfJournal, because it’s like a bullet journal,
but wouldn’t really hurt anybody.  Except me, if Hasbro decides to complain
about the name.</p>

<p>I try to stick to a routine in setting up my work today.  I have “work diary”,
a bit like Mark Dominus <a href="https://blog.plover.com/misc/evaluation.html">once wrote
about</a>, and which I got to see in
practice when we last worked together.  This journal is very simple.  There’s a
bunch of checkboxes of things I mean to do every day, and then there’s space
for notes on what else I actually did.  I try to add a new page to this every
day, and I’ve got a Monday template and a “rest of the week” template.  The
Monday template includes stuff I only need to do once a week.  Here’s a sample
page, not filled in:</p>

<p><img src="/assets/2026/nerfjournal/notion-agenda.webp" alt="Monday agenda in Notion" /></p>

<p>You’ll see that the 6th item on the morning routine is to post to <code class="language-plaintext highlighter-rouge">#cyr-scrum</code>.
This is the Slack channel where, every day, the Cyrus team members are each
meant to post what we did the previous day and what we’re going to do today.
While the Notion page includes “stuff I do every day, but might forget”, the
<code class="language-plaintext highlighter-rouge">#cyr-scrum</code> post is generally “stuff I won’t do again once it’s done, and
might need to carry over until tomorrow”.</p>

<p>That is: if I didn’t fill my water pitcher today, I failed, and tomorrow I’ll
get a new instance of that to do.  It’s not “still open”, it’s a new one, and
it’s interesting (well, to me) whether I kept up a streak.  On the other hand,
if I post in <code class="language-plaintext highlighter-rouge">#cyr-scrum</code> that I’m going to complete ticket CYR-1234, but I
don’t do it, I better do it tomorrow.  And if I do, there’s no reason to see it
again on the next day.</p>

<p><img src="/assets/2026/nerfjournal/cyr-scrum.webp" alt="a scrum post" /></p>

<p>A problem here is that now I have two to-do lists.  One is a real todo list
that I can tick “done” on, and the other is a post in Slack that I want to
refer back to, from time to time, to see whether I’m keeping  up with what I
said I’d do.  <a href="https://en.wikipedia.org/wiki/Getting_Things_Done">GTD</a>
rightfully tells us that “more todo lists is worse than fewer todo list”,
generally, and I wanted fewer.  But I didn’t want to make Linear tasks every
day for things like “drink water”.  And putting my scrum in Notion would be
tedious.  And CalDAV with VTODO has its own problems.</p>

<p>What I wanted was a single todo list that would be easy to use, visually simple
enough to just leave on my desktop for quick reference.  I’d been thinking
about such a program off and on (mostly off) for a year or so, and after some
so-so but encourage experience having Claude produce SwiftUI applications for
me, I thought I’d give this one a go.</p>

<p>The session took place over two days.  After a brief false start using VTODO
(well, Apple’s EventKit) as a backend, we pivoted to a custom data model and
got something working.  We iterated on that, adding features, fixing bugs, and
tweaking the design for a good while.  When I felt like it, I’d take a break to
play Xbox or read a book.  When I came back, Claude had not contexted switched.
Meanwhile, I’d had time for that diffuse cognition mode to help me “think”
about next steps.</p>

<p>The biggest shifts were about realizing that the data model was subtly wrong.
This wouldn’t have been <em>hard</em> to fix by hand, but it would have been fiddly
and <em>boring</em>.  Instead, I said, ‘Here’s the new model, do it.”  Claude asked
some useful questions, then did it.  Meanwhile, I read Wikipedia.  (I also
spent some time reading the Swift source code.)</p>

<p>As things stand now, the app seems very likely to be useful.  There are a bunch
of things I still want to add.  Some of them, I have a good picture of how to
get them.  Others, I only know the general idea.  In both cases, I feel
confident that I can get closer to what I want without too much serious effort.
Pruning development dead ends is cheap.</p>

<p>You can read the <a href="https://static.rjbs.cloud/claudelog/nerfjournal-creation.html">whole development
transcript</a>, but
it’s long.  Firefox says 400 pages.  But it’s there in case you want to look.</p>

<p>Here’s the app, loaded with test data.  (There’s a Perl program to spit out
predictable test data which can be imported into the app for testing.)</p>

<p><img src="/assets/2026/nerfjournal/diary-view.webp" alt="today's todo" /></p>

<p>Here’s today’s page, and you can see what I’ve done and haven’t.  At the
bottom, if you squint, you might see that one of my code review tasks says
“carried over - 1 day ago”, meaning that I first put it on my list yesterday,
but still haven’t done it.</p>

<p>If we go back a while, we can see what a “finished” day looks like:</p>

<p><img src="/assets/2026/nerfjournal/diary-past.webp" alt="a completed page" /></p>

<p>Now I can see all the things I did, when I marked them done, their category,
and so on.  I’m afraid I don’t have any days logged now that show some other
things that could happen: things that didn’t get done would be shown in a “not
done” section, showing that they were carried over and (maybe) done four days
later.  Some items could be shown as abandoned – I decided not to do them <em>or</em>
carry them over.  This is useful for those “fill the water” tasks.  If I didn’t
do that task on Monday, then when Tuesday starts, Monday’s todo is
automatically abandoned.  You can see the distinction in the <em>previous</em>
screenshot:  tasks that will carry over get round ticky bubbles, but tasks that
will get auto-abandoned get square ticky boxes.</p>

<p>This is all pretty good, but wasn’t this supposed to help with Scrum?  Well, it
does!  There’s a menu option to generate a “mrkdwn” (Slack’s bogus Markdown for
chat) version of the day’s todo list into the macOS clipboard.  Then I paste
that into Slack.  I can configure the report (or multiple versions of a report)
so it doesn’t include personal items, for example.  All of that: reporting,
categories, and so on, are handled in the bundle manager.</p>

<p><img src="/assets/2026/nerfjournal/bundle-manager.webp" alt="the bundle manager" /></p>

<p>The bundle manager is named for “bundles”, which are groups of tasks that I can
dump onto my list with two clicks.  I have one for the start of a sprint, and I
have another for standard work days.  I imagine that I’ll have other bundles
later for things like “prepare to travel” or “conference day”.  But when I
click “start a new day”, I get a blank page, and I know I better start with my
daily bundle.</p>

<p>…and one of the items on my daily bundle is “make the code review tasks”.
It’s got a hyperlink (you may have noticed that todo items can have a little
link icon).  The hyperlink is an <code class="language-plaintext highlighter-rouge">iterm:</code> URI that, when clicked, prompts me to
run a little Perl program.  That program fetches all the GitLab and GitHub code
review requests waiting on me, turns it into JSON, and passes it to another
little program that turns them into todos in NerfJournal.  So I click the link,
click “yes, run this program”, and then a bunch of specific-to-today tasks show
up.  Then I mark the first task done.  I am getting all my code review done
daily, just about.  It’s a big process improvement.</p>

<h2 id="wasnt-this-post-about-claude">wasn’t this post about Claude?</h2>

<p>Well, sort of.  I did all this with Claude.  I described what I wanted, and
I said I wanted it in SwiftUI, and Clade got to work building.  I’d test, find
bugs, realize that I had the wrong design, and iterate.  I spent a big hunk of
two days on this, and it has been a huge win.  I could’ve built this on my own,
for sure, but it would’ve taken weeks, at least, including “learn SwiftUI from
scratch”.  Possible, of course, but a much larger investment on a tool that, in
the end, I might not have liked!</p>

<p>Is the code bad?  I’m not sure.  I don’t think so, but I’m not a Swift expert
yet.  But also: it only runs on my machine.  I can see everything it does, and
I can see it’s safe.  I do not plan to sell it, support it, or run my business
on it.  Effectively, I summoned into existence a specialized tool that helps me
do the job at which I <em>am</em> an expert, saving my expert time for expert
problems.  I think I will end up doing a lot of this.  And hopefully I’ll pick
up some new skills, as I go, from paying close attention to the new code I’m
reading.</p>]]></content><author><name>Ricardo Signes</name></author><category term="productivity" /><category term="programming" /><category term="agents" /><summary type="html"><![CDATA[For years, I’ve wanted a better daily to-do checklist. I had a good idea what I wanted from it, but I knew it was going to be a pain to produce. It didn’t have any complicated ideas, just a bunch of UI considerations, and that’s not my area of expertise, so I’ve made do with a bunch of worse (for me) options, which has, for me, led to worse outcomes. I accepted the tradeoffs, but I wasn’t thrilled. Now I’ve finally built exactly the app I wanted, and it went great. I call it, for now, NerfJournal.]]></summary></entry><entry><title type="html">nerflearning: learning SwiftUI by not writing any</title><link href="https://rjbs.cloud/blog/2026/03/nerflearning/" rel="alternate" type="text/html" title="nerflearning: learning SwiftUI by not writing any" /><published>2026-03-25T12:00:00+00:00</published><updated>2026-03-25T12:00:00+00:00</updated><id>https://rjbs.cloud/blog/2026/03/nerflearning</id><content type="html" xml:base="https://rjbs.cloud/blog/2026/03/nerflearning/"><![CDATA[<p>I had Claude produce a complete daily to-do checklist for me – something like
a bullet journal.  The results were great, and I’ve been using the program for
weeks and it’s definitely helping me stay on track and keep an eye on what I’m
doing.  The problem was that unlikely everything else I’d had Claude write, I
was not competent to review this work.  I felt confident it wasn’t going to
cause me big problems, but what if I wanted to debug it myself?  I realized
there was a plausible solution waiting for me…</p>

<p>I gave Claude a prompt that went roughly like this:</p>

<blockquote>
  <p>We have built a really useful program here, and I am using it and enjoy it.
Next, I would like to be able to work on it directly and to think more deeply
about its architecture.  The problem is that I don’t really know Swift.</p>

  <p>I am an experienced programmer with decades of experience.  I have worked
primarily in Perl, but am well-versed in general programming concepts from
many other different languages.  It seems relevant so:  I understand
event-driven programming, observers, and MVC, in general.</p>

  <p>I would like you to prepare a syllabus for me, which will help me learn
SwiftUI, using NerfJournal as a working example.  What might be useful here
is a set of topics, starting with fundamentals and building to more complex
ones, related to how the project actually works.</p>
</blockquote>

<p>This began a back and forth that didn’t go on all that long.  (You can read
<a href="https://static.rjbs.cloud/claudelog/nerflearning-part-1.html">the transcript</a>.
Claude produced a syllabus.  I proposed that we turn the project into a
website.  We fought with Jekyll for a while.  Claude told me that I wouldn’t
need some skills I thought I might want.  (Later, I did want them.)</p>

<p>Still, in short order, I had: <strong>Unit 1: Swift as a Language</strong>.  It started like
this:</p>

<blockquote>
  <p>Before touching SwiftUI, you need the language it’s built on. Swift is
statically typed, compiled, and designed around a distinction — value types
vs. reference types — that will shape every decision in the units that
follow.</p>

  <p>This unit covers the language features you’ll see constantly in NerfJournal’s
source: structs, enums, optionals, protocols, extensions, modules, closures,
and computed properties. None of this is SwiftUI-specific; it’s just Swift.</p>

  <p>The single most important idea in this unit is that structs are value types.
Everything else makes more sense once that has settled in.</p>
</blockquote>

<p>I felt that the text was <em>good</em>.  It wasn’t confusing.  It wasn’t unclear.  It
also didn’t captivate me or lead me to imagine I was reading a lost work of
Edward Gibbon.  But I didn’t need that, I just needed something to
systematically help me learn SwiftUI, with an eye to working on the project I’d
summoned into existence.  On that front, the text was <em>good</em>.</p>

<p>Eventually, I <em>did</em> end up creating some skills and standing instructions.
First, the standing instruction:</p>

<blockquote>
  <p>When the user asks a question about Swift or SwiftUI during a learning
discussion, log it to learning/questions.md under the appropriate unit
heading, then commit it. Do this automatically without being prompted.</p>
</blockquote>

<p>As I read the content, I’d do all the things I’d normally do when reading a
programming book:  I’d close my eyes and think hard.  I’d fiddle with the
source code to see how things changed.  I’d go consult the authoritative
documentation.  But sometimes, I’d also (or instead), ask Claude to elaborate
on something.</p>

<p>At some point, the text said that extensions were “module-scoped”.  I had no
idea what a module was.  The text didn’t say.  Rather than consult the docs, I
just asked Claude:  “You refer to module scope.  What is a module?  Is this
going to be explained later?  If so, no problem.”</p>

<p>Claude said that no, its plan hadn’t included modules, and really they belonged
in unit one.  It provided me a clear and useful explanation and then, without
prompting, <a href="https://github.com/rjbs/NerfJournal/commit/fa6a06b2fd30ab7d19beaac46e9362fa2d8b477b">wrote a
commit</a>
to add the explanation to the Q&amp;A appendix of the book.  More questions like
this came up, and Claude would populate the Q&amp;A section.</p>

<p>Later, I added a skill, ‘next-chapter’:</p>

<blockquote>
  <p>Write the next unit of NerfLearning.</p>

  <p>First, rebase this branch on <code class="language-plaintext highlighter-rouge">main</code>.</p>

  <p>Review the changes between the state of this branch before rebasing and
after.  If changes to the project suggest that <code class="language-plaintext highlighter-rouge">learning/SYLLABUS.md</code> should
be updated for future chapters, make those changes and commit it.</p>

  <p>Then review the file <code class="language-plaintext highlighter-rouge">learning/questions.md</code>, which reflects questions from
the reader during the last unit.  Merge the material from the questions into
the unit they came from.  Remove the now-merged questions from the questions
file.  Commit that.</p>

  <p>Then write the next unit from the syllabus.  When doing so, reflect on the
question-and-answers content you just merged into the previous unit.  That
reflects the kind of thing that the reader felt was missing from the text.</p>

  <p>Commit the new unit.</p>
</blockquote>

<p>I asked Claude to write Unit 2, and it did so.  “It seems like the user wants
more implementation details,” it mused, “I should make sure to cover how
<code class="language-plaintext highlighter-rouge">@ViewBuilder</code> actually works.”  Then it spit out another unit.  Was the unit
actually better because of those instructions?  How the heck should I know!?
But it remained <em>good</em>.</p>

<p>I’m up to unit six now, where I’m stalled mostly due to other things taking my
time.  I actually feel like I can read the whole program and pretty much follow
along what it’s doing, how the syntax works, how the SwiftUI “magic” is
suffused through the system, and how I’d change things in significant ways.
I’m no expert.  At best, I’m a beginner, but I have been given a huge boost in
my learning process.</p>

<p>Of course this sort of process could go haywire.  I would not want to learn a
foreign language or culture this way and then go on a diplomatic mission.
Software learning is much more forgiving, because so much of it can be
trivially verified by checking authoritative sources or performing experiments.
Also, I’ve got a lot of experience to draw on.  But even so, it’s clear that
this has been valuable and I’ll do something like this again.</p>

<p>There is sometimes an argument that “why will anybody learn anything anymore if
the computer can do the work?”  I don’t get this argument.  Sure, some people
will try to get by on the minimum, but that’s already the case.  Now there are
some longer levers for just skating by.  But the same levers can be used to
learn more, to achieve more, and to experiment more.  I don’t think any of this
is an unvarnished good, but it’s also clearly not just spicy autocorrect.</p>

<p>I’m hoping to get back to SwiftUI in a week or two.  I’m piling up a number of
little features I’d like to implement, and might try a few by hand.</p>

<p>You can read <a href="https://nerfjournal.rjbs.cloud/">NerfLearning</a>, up to wherever
I’ve gotten to, if you like… but it’s targeting a pretty darn small audience.</p>]]></content><author><name>Ricardo Signes</name></author><category term="programming" /><category term="agents" /><summary type="html"><![CDATA[I had Claude produce a complete daily to-do checklist for me – something like a bullet journal. The results were great, and I’ve been using the program for weeks and it’s definitely helping me stay on track and keep an eye on what I’m doing. The problem was that unlikely everything else I’d had Claude write, I was not competent to review this work. I felt confident it wasn’t going to cause me big problems, but what if I wanted to debug it myself? I realized there was a plausible solution waiting for me…]]></summary></entry><entry><title type="html">experiments with claude, part ⅳ: dzilification of MIME-Lite</title><link href="https://rjbs.cloud/blog/2026/03/claude-iv/" rel="alternate" type="text/html" title="experiments with claude, part ⅳ: dzilification of MIME-Lite" /><published>2026-03-19T12:00:00+00:00</published><updated>2026-03-19T12:00:00+00:00</updated><id>https://rjbs.cloud/blog/2026/03/claude-iv</id><content type="html" xml:base="https://rjbs.cloud/blog/2026/03/claude-iv/"><![CDATA[<p>Is all my 2026 blogging going to be about doing more random stuff with Claude?
No, I promise.  But I’m still working through my backlog of “and the <em>next</em>
thing I tried to put it through its paces”, so here it comes.  This time, more
drudgery.</p>

<h2 id="project-four-mime-lite-to-distzilla">Project Four: MIME-Lite to Dist::Zilla</h2>

<p>Here’s a quick one before I post beefy Project Five tomorrow.</p>

<p>A couple weeks ago, I got a pull request against MIME-Lite.  That’s a pretty
popular Perl email library that I maintain, and which Fastmail uses at least a
little.  The contributor had supplied a patch to <a href="https://github.com/rjbs/MIME-Lite/pull/18/changes">use GitHub Actions to run the
tests</a> on every PR.  Great!</p>

<p>Thing was, I already have a standard way of doing that, and I didn’t really
want to pick up another way.  The other thing was, my standard way relies on
the distribution being built with <a href="https://dzil.org/">Dist::Zilla</a>.
It’s not hard to convert from not using Dist::Zilla to using it, but it’s not
<em>trivial</em>.  And I don’t love MIME::Lite, so I wasn’t keen to spend a bunch of
time on it.</p>

<p>I fired up Claude, pretty certain that I was going to get a crappy result.</p>

<div class="chat-transcript">
<div class="chat-line" style="--speaker-color: #710193"><span class="chat-speaker-name">rjbs</span><span class="chat-text">Convert this distribution to building with Dist::Zilla, in the fashion of most RJBS-authored distributions, like Email::MIME.</span></div>
<div class="chat-line" style="--speaker-color: #ea580c"><span class="chat-speaker-name">claude</span><span class="chat-text">I’ll explore both the current MIME-Lite distribution and Email::MIME as a reference for the Dist::Zilla conversion pattern.</span></div>
</div>

<p>In about 20 minutes, it was done.  Now, when I say “it”, I mean Claude.  Claude
wrote <a href="https://github.com/rjbs/MIME-Lite/commit/df4e9c4da9f42fbd03e682782942a35b89e925ae">a big
commit</a>
that wasn’t good enough.  MIME-Lite had a bunch of little quirks, like optional
dependencies and a slightly not-rjbs-standard documentation structure.  I spent
just a few minutes polishing things up and it was good to go.</p>

<p>This was a good example of needing some expert involvement.  Understanding
exactly what to do was going to require way too much context that couldn’t be
found in the repository or in “understanding” of published copies of things.
But some exploration of MIME-Lite and Email-MIME let Claude do a bunch of the
work so I didn’t have to grumble my way through it.  As I’ve seen a few times,
it also did work I would not have bothered with, like converting the changelog
to a more consistent format.</p>

<p>One funny nit… the original changelog had:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>=item Version 1.101   (1997/03/01)

Baseline code.
Originally created: 11 December 1996.  Ho ho ho.
</code></pre></div></div>

<p>The new one:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1.101     1997-03-01
        - Baseline code. Originally created: 11 December 1996.
</code></pre></div></div>

<p>I guess Claude is part of the war on Christmas.</p>

<p>Claude also hallucinated author names weirdly and screwed up the Copyright.
<em>You can’t just let it do whatever it wants with no oversight!</em>  It was pretty
bad, and I can definitely see somebody getting into hot water this way.  This
was probably the worst Claude experience I had that didn’t end in scrapping
things.  I think I probably could’ve done this one myself faster and with fewer
errors.  As the world’s leading Dist::Zilla expert… probably shouldn’t be a
surprise.</p>

<p>With the conversion done, I dropped the standard CI workflow in place and…
found problems in my conversion.  Just what CI is for.  Now it’s all sorted and
happy and any new PRs will get test runs.</p>

<p>You can read my <a href="https://static.rjbs.cloud/claudelog/mime-lite-to-dzil.html">transcript of this
conversation</a>, but
it’s a bit odd.  I stopped and resumed the session at one point, and Claude
waited at a permission prompt for 12 hours while I slept or something.</p>]]></content><author><name>Ricardo Signes</name></author><category term="programming" /><category term="perl" /><category term="agents" /><summary type="html"><![CDATA[Is all my 2026 blogging going to be about doing more random stuff with Claude? No, I promise. But I’m still working through my backlog of “and the next thing I tried to put it through its paces”, so here it comes. This time, more drudgery.]]></summary></entry><entry><title type="html">experiments with claude, part ⅴ: ClaudeLog</title><link href="https://rjbs.cloud/blog/2026/03/claude-v/" rel="alternate" type="text/html" title="experiments with claude, part ⅴ: ClaudeLog" /><published>2026-03-19T12:00:00+00:00</published><updated>2026-03-19T12:00:00+00:00</updated><id>https://rjbs.cloud/blog/2026/03/claude-v</id><content type="html" xml:base="https://rjbs.cloud/blog/2026/03/claude-v/"><![CDATA[<p>Originally, this was going to be the last in my series of stuff I did with
Claude that I found compelling, but… the news, good or bad, is that I’ll be
posting at least one more soon.  This one, though, is definitely the piece of
work that convinced me that Claude was useful for more than mechanical
transformation.</p>

<h2 id="project-five-claudelog">Project Five: ClaudeLog</h2>

<p>In some of my previous posts, I posted links to transcripts of my chats with
Claude, including its internal monologue, its tools used, and other stuff that
you won’t see if you just copy text out of the viewer.  Those transcripts were
generated by a tool that I built with Claude, which I’m going to talk about,
now.</p>

<p>I think that the experience of using Claude in its current form (as opposed to
what we saw from coding agents a year ago) is fairly stunning.  It sometimes
screws up, it sometimes makes errors, it sometimes takes four passes at doing
things that any normal person would routinely do in one… but on the other hand,
it can generate large, complex, readable, correct pieces of software from a
standing start.  Saying “it’s real good, folks” is not sufficient.  I think
that to understand what it can do, you should see for yourself.  This is not to
say that there are no reasons to hesitate or to worry about the serious impact
that LLMs are having, and will continue to have.  But one criticism I continue
to see is “these things spew out unmaintainable nonsense”, which is not claim
that really stands up to much real use.</p>

<p>Also, one friend recently said to me, “I want to be a programmer, not a copy
editor.”  I had to explain that while, yes, you do need to read and think about
possible errors in agent-generated code, the experience is much more one of
design and construct than of proof reading.</p>

<p>Since not everybody is going to say, “Hey, Rik, let’s pair and look at Claude,”
and because I am not going to pair with every rando who <em>might</em> ask, I thought
it would be good to provide a thorough transcript.  I knew that Claude keeps a
detailed log of its sessions (even though, amusingly, Claude claimed it knew of
no such thing).</p>

<p>I had looked through the JSONL files in which sessions were stored, and the
data looked a bit messy, but probably sufficient.  Without giving it too much
investigation, I opened up Claude Code and said…</p>

<blockquote>
  <p>I want to provide transcripts of my interactions with Claude to colleagues
who are learning to use the system. I understand that my ~/.claude directory
contains transcripts of the chat sessions. Please build a TUI application
that:</p>

  <ol>
    <li>lets me drill down through projects to individual sessions, showing
previews of the sessions as I go</li>
    <li>lets me select a session to be transcribed for my use</li>
    <li>produces a Markdown summary of the session that I can embed in a document</li>
  </ol>

  <p>While your general instructions say to prefer Perl, in this case I would like
you to use whatever language you believe will achieve the results most
successfully with a pleasant terminal interface.</p>
</blockquote>

<p>You can, of course, read <a href="https://static.rjbs.cloud/claudelog/claudelog-creation.html">the transcription of this whole
conversation</a>,
produced by the program that the conversation eventually led to.  There’s a lot
of experimentation, a fair bit of stumbling, and overall you can see how I
discover what it is I want while I’m building it.  This is normal development,
but…</p>

<p>In normal development with such a significant “discovery” aspect, it’s very
common to spend a lot of time upshifting and downshifting.  That is, first I
imagine that general structure of what I want.  I write a pseudo-code outline
of the high-level code.  Then I begin converting individual pieces into real
code.  Almost continuously, I’m shifting between design thinking and
implementation.  These are (for me, and I suspect for others) distinct ways of
thinking, and while it’s not “context switching”, there is, I think, an
analogous overhead.</p>

<p>Using Claude, I am <em>really</em> focusing on one of those angles at a time.  I
started with “here is a very rough outline” and within 20 minutes, <em>I had a
working program</em>.  I never, ever had to switch into implementation thinking, to
get there.  Then I had many tight, quick exchanges in the form, “This is wrong,
change it” or “I’m ready to describe the next feature”.</p>

<p>At the top of the transcript, you’ll see this line:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Duration: 7h 50m (3h active)
</code></pre></div></div>

<p>This means that from the first to last event in the transcript, about eight
hours passed on the clock, but I was only engaged in the chat for about three.
Probably I took a long lunch in there, or maybe worked on something more
pressing for a while.  Or I just stopped and thought about it, or spent time
reading transcripts and thinking about what could be better.</p>

<p>By the end of the day, I had a really useful program.  The HTML it was
generating was definitely fit for purpose.  On the other hand, I made the
mistake of looking at the code…</p>

<p>Look, it wasn’t absolutely impenetrable.  It just felt very, very amateurish.
It got the job done, and I could read it, but there was very little
abstraction.  There was nearly no separation of concerns.  There were no real
“layers” to speak of.  And when layers did exist, they often duplicated work.</p>

<p>Hardly surprising:  if you imagine Clade as often analogous to a junior
programmer (not a great analogy, but often useful), and you imagine me as the
lousy boss who kept saying, “Implement this feature immediately and I don’t
care about code quality”, of course there was a ton of debt.  And of course it
racked up fast, because I was racking up features fast.  The question I needed
to answer was <strong>Will Claude’s code always be unmaintainable after a short
while?</strong></p>

<p>I decided to answer that the next day.  Instead of adding more features, I’d
just look at fixing the code.  It was already clear to me how the code
should’ve been structured.  I just didn’t tell Claude about it, because I was
focused on features.  Why didn’t Claude architect it well from the beginning?
Because nobody asked it to.  This seems sort of stupid, but it’s often how this
stuff works.</p>

<p>So, the next day, I started a new session.  There were two key parts of this:</p>

<blockquote>
  <p>I am very happy with the output of this program. I would now like to begin
some serious refactoring for maintainability. The first step should be fairly
simple. I would like you to split out the code that takes a session JSONL
file and emits HTML. Put that in its own module, so that the “build HTML from
JSONL” can be called without the session browser being involved.</p>
</blockquote>

<p>…and…</p>

<blockquote>
  <p>Next, I would like to separate out the generation of HTML from the
interpretation of the JSONL file. I propose the following:</p>

  <ul>
    <li>a SessionFile object that represents the log itself, and is created with a
static method like <code class="language-plaintext highlighter-rouge">session_file = SessionFile.from_path(filepath)</code></li>
    <li>a SessionLog object that represents a sequence of SessionTurn</li>
    <li>a SessionFile has a SessionLog, which is computed lazily when requested</li>
    <li>a SessionTurn is either a UserTurn, a ClaudeTurn, a SystemTurn, or an IdleTurn</li>
    <li>non-IdleTurn turns have a sequence of TurnEvents, which are things like
the chat, the tool use, the thinking, and so on</li>
    <li>the HTML generator is passed an already-computed SessionLog, which it then
just formats, rather than formatting and event-aggregating all at once</li>
  </ul>

  <p>This is a significant change. Make a plan, think hard, and ask me any
questions you need to ask up front.</p>
</blockquote>

<p>There’s a bunch of other stuff that went on, but these are the big ones.  <a href="https://static.rjbs.cloud/claudelog/claudelog-refactor.html">You
can read the whole refactoring
transcript</a>.</p>

<p>Claude thought for a while, then asked me some (very reasonable) questions.  I
answered them, and Claude produced a plan.  Pretty soon, <em>it all worked</em>.  The
program still did just what it did before, but now the code made sense, and it
was much easier to add some new features, because they could be added as small
changes to a few layers, instead of changes to the one big ball of mud.</p>

<p>Part of what made this easy was that up front I said, “save a copy of input and
output now, so that while you refactor, you can keep checking you didn’t change
the output”.  Claude did this, checking the output repeatedly as it worked.</p>

<p>Again, a lot of other stuff went on, but I think this is an accurate summary.</p>

<p>One way of looking at this as a two-stage process is “Rik should’ve made sure
Claude did it right to start”, and that’s an okay position, but it brings back
some of that upshifting and downshifting that I mentioned.</p>

<p>Another option is, “Rik should’ve given Claude standing instructions to pay
more attention to architecture.”  Yes, probably that would be useful, but also
then I’d probably be spending more time thinking about its architecture,
because <em>it</em> would be talking about its architecture.</p>

<p>I think the best view might be:  because fixing the design later is at least
sometimes not as costly (in time, not to mention morale), the human is given
more freedom to choose the approach that they will find more satisfying or
pleasant.  In the end, we want the code to be correct, reliable, readable, and
maintainable.  The path we take to get there isn’t necessarily all that
relevant.  (But please leave a good git history.)</p>

<p>I’ll publish the code for CladeLog at some point.</p>]]></content><author><name>Ricardo Signes</name></author><category term="programming" /><category term="agents" /><summary type="html"><![CDATA[Originally, this was going to be the last in my series of stuff I did with Claude that I found compelling, but… the news, good or bad, is that I’ll be posting at least one more soon. This one, though, is definitely the piece of work that convinced me that Claude was useful for more than mechanical transformation.]]></summary></entry><entry><title type="html">experiments with claude, part ⅲ: JMAP-Tester coverage</title><link href="https://rjbs.cloud/blog/2026/03/claude-iii/" rel="alternate" type="text/html" title="experiments with claude, part ⅲ: JMAP-Tester coverage" /><published>2026-03-16T12:00:00+00:00</published><updated>2026-03-16T12:00:00+00:00</updated><id>https://rjbs.cloud/blog/2026/03/claude-iii</id><content type="html" xml:base="https://rjbs.cloud/blog/2026/03/claude-iii/"><![CDATA[<p>Here’s another post in which I fiddle around with Claude Code and determine
that it is not just spewing out nonsense and bugs, but instead is doing <em>kinda</em>
what I would’ve done, at least enough to reduce my total effort.  This time,
writing tests.</p>

<h2 id="project-three-jmap-tester-test-coverage">Project Three: JMAP-Tester test coverage</h2>

<p>Okay, I progressed from <a href="{ post_url
2026-03-10-experiments-with-claude-i }">code I’d throw away</a> to <a href="{ post_url 2026-03-13-experiments-with-claude-ii }">code I would keep but not look
at</a>.  I was progressing up
the totem pole of how much cultural value we put on code.  What was the next
least respected code?  Tests, of course.</p>

<p>Now, I actually love tests, and like treating them like first-class code, and
building libraries to make testing better.  One of those libraries is
JMAP::Tester, which we use in tons of our testing.  Until pretty recently, it
didn’t have all that much testing of its own.  That is: JMAP-Tester was used to
test things, but was not itself tested.  In December, as part of adding some
features to JMAP::Tester, I started to expand its test coverage.  This was
rewarding and useful, but I didn’t get to 100% coverage.  I used to strive for
100% (well, 95% coverage) on my code, but these days… well, who has the time?</p>

<p>Turns out, Claude has the time.  This one was pretty darn impressive.  You can
read <a href="https://static.rjbs.cloud/claudelog/jmap-tester-coverage.html">the whole
transcript</a>, but
here’s an accurate summary:</p>

<div class="chat-transcript">
<div class="chat-line" style="--speaker-color: #710193"><span class="chat-speaker-name">rjbs</span><span class="chat-text">This project is a CPAN distribution.  Produce a coverage report, which you can do with “dzil cover”.  Find low-hanging fruit to add test coverage and draft the tests.</span></div>
<div class="chat-direction">time passes</div>
<div class="chat-line" style="--speaker-color: #ea580c"><span class="chat-speaker-name">claude</span><span class="chat-text">I’ve increased test coverage from about 50% to about 95%.</span></div>
</div>

<p>That was it!  You can read <a href="https://github.com/fastmail/JMAP-Tester/pull/59">the pull
request</a>.</p>

<p>Well, there were a couple more bits, mostly me saying, “Make it look like how
I’d have written it” (literally), and some git faff.  I did go through and
tweak the code to be more readable and better organized.  I could’ve given
Claude clearer instructions to avoid most of that, or had standing instructions
about it… but really, it was a good way to keep my mind engaged while I
reviewed that the code was testing what it should be, <em>anyway</em>.</p>

<p>If “write more coverage tests” was the only thing I could get out of Claude,
it’d still be huge, but obviously there’s more.  I’ll keep posting…</p>]]></content><author><name>Ricardo Signes</name></author><category term="programming" /><category term="perl" /><category term="agents" /><summary type="html"><![CDATA[Here’s another post in which I fiddle around with Claude Code and determine that it is not just spewing out nonsense and bugs, but instead is doing kinda what I would’ve done, at least enough to reduce my total effort. This time, writing tests.]]></summary></entry><entry><title type="html">experiments with claude, part ⅱ: my personal site</title><link href="https://rjbs.cloud/blog/2026/03/experiments-with-claude-ii/" rel="alternate" type="text/html" title="experiments with claude, part ⅱ: my personal site" /><published>2026-03-13T12:00:00+00:00</published><updated>2026-03-13T12:00:00+00:00</updated><id>https://rjbs.cloud/blog/2026/03/experiments-with-claude-ii</id><content type="html" xml:base="https://rjbs.cloud/blog/2026/03/experiments-with-claude-ii/"><![CDATA[<p>I’ve been trying more things with Clade Code, and I want to keep some notes on
how it went.  This is the second post in a probably-short series about early
adventures with the tool.</p>

<h2 id="project-two-rjbscloudtalks">Project Two: rjbs.cloud/talks</h2>

<p>I felt good about how the Cassandane subroutine signature replacement went, and
I wanted to do some more experimentation.  This time, I wanted to use Claude to
generate code that I <em>wouldn’t</em> just go delete. I wanted something low stakes,
where I wouldn’t have any reason to feel annoyed by Claude’s choices in
implementation.  I also wanted to be able to say “yeah good enough” when <em>I</em>
thought it was good enough, without asking anybody else to accept that the work
was good enough for the repo.  That is:  I wanted an isolated test case where
only I was taking on any risk.  Easy: my personal web page!</p>

<p>Sure, in theory this was using company resources (my Claude subscription) for
personal use, but I already got Fastmail’s $20 worth out of Claude in
Cassandane.  And it was professional development.  Yup, felt like a great idea!</p>

<p>Did I mention I was in Belgium at the time?  I was.  I was at FOSDEM, I’d just
given <a href="https://www.youtube.com/watch?v=aCbr8xIR2vU">a talk on JMAP</a>, and I was
going to put it on my “talks I’ve given page”, but that page of my site was
still on my old website, where it was manually-written HTML.  My current site
is Jekyll, built by GitHub Pages, the definition of “good enough”.  By hand, I
got the talks page into Jekyll, as a horrible hybrid of Markdown and the old
HTML.  You can read the state I got it into in <a href="https://github.com/rjbs/rjbs.github.io/commit/a59e08cc4fa5a410dc0b227ab5bb7b901bebcf6a">the last
commit</a>
before I invited Claude to the party.</p>

<p>I prompted Claude with this:</p>

<blockquote>
  <p>The file <code class="language-plaintext highlighter-rouge">talks/index.md</code> contains two lists of conference presentations. One
is a Markdown bullet list of links, generally to YouTube. The other is HTML
with thumbnail images linked to SpeakerDeck. Convert this to a data-driven
grid rendered by Jekyll, presumably using a collection. Each entry should be
able to contian a text description, title, and image asset.</p>
</blockquote>

<p>If you want, you can read <a href="https://static.rjbs.cloud/claudelog/talks-page-import.html">the entire, highly-detailed transcript of this
session with
Claude</a>.  The short
version is that I spend about 20 minutes engaged with Claude.  (There are some
hours-long waits in there while I did things like “go to dinner”.)  Claude very
quickly updated my repo to do just what I asked.  It looked pretty good, too,
and produced <a href="https://github.com/rjbs/rjbs.github.io/commit/f049dc1d3644f9972984527ea16462a521144e83">a pretty straightforward
commit</a>.
The commit message is crap: I wrote it, with an audience of “myself”.</p>

<p>The commit adds a bunch of CSS (SCSS), which very plausibly contains pointless
crap or is doing in a goofy way.  I don’t know because (a) I’m not a CSS expert
and (b) I could not care less.  This kind of “could not care less” echos my
feelings about the construction of the throwaway subroutine-signature-adder.
This code (the CSS) would stick around, but I wasn’t going to have to think
about it.  The real content was the YAML file, and if the CSS got too
complicated later, I could throw it all away, start over, or whatever.  It was
not for human consumption, and posed roughly no risk.  (I did <em>read</em> it,
because no LLM-generated code is obviously safe and correct.)</p>

<p>With that done, things got more interesting, in that there was more faffing
about.  For a talk with slides and an image, I was going to have to do this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/_data/talks.yaml   # &lt;- add an entry
/asset/talk-name/preview.jpg
/asset/talk-name/slides.pdf
</code></pre></div></div>

<p>Ugh, there was too much chance of anomaly there.  I asked for a fix, Claude
said “What if we use a collection?” and I said, “<em>That’s what I suggested to
start with!</em>”  Still, Claude went ahead and converted the talks.yaml file into
a bunch of individual Markdown files for me, so all was forgiven.  Then there
was a big back and forth about how to make preview image discoverable, where
Clade was definitely confused about how things worked.</p>

<div class="chat-transcript">
<div class="chat-line" style="--speaker-color: #710193"><span class="chat-speaker-name">rjbs</span><span class="chat-text">How sure are you that files from a collection are part of <code class="language-plaintext highlighter-rouge">static_files</code>?</span></div>
<div class="chat-line" style="--speaker-color: #ea580c"><span class="chat-speaker-name">claude</span><span class="chat-text"><em>(thinking to itself)</em> The user is asking me to be honest about my certainty level again.  And they’re right to push - I’ve been making assumptions. I’m not actually certain that static files within a collection directory appear in <code class="language-plaintext highlighter-rouge">site.static_files</code>. They might be in a different collection-specific variable, or might need to be accessed differently.</span></div>
</div>

<p>This was really frustrating, but only about 70% because of Claude.  The Jekyll
docs are beautiful but lousy.  They sort of vaguely describe how things work in
many cases, but they’re hardly comprehensive.  We got there in the end, but it
was tedious:  I took over, made changes by hand, pushed, and checked what
happened.</p>

<h3 id="project-two--rjbscloudtalks-refactoring">Project Two ½: rjbs.cloud/talks refactoring</h3>

<p>After the previous day’s mix of success and annoyance, I went back for round
two.  I did a few things.  I cleaned up some old posts, I reworked how the talk
source files were laid out… but the main thing was I got a local build running.
This was never going to be <em>hard</em>, because I’d done it before, but I didn’t
want to futz around.  I asked Claude how I could get a local build going and it
said “like this” and dumped out a little shell script.  I didn’t like it and
asked for a few improvements.  Within minutes, I had a local build-and-serve
script committed.</p>

<p>You can read <a href="https://static.rjbs.cloud/claudelog/talks-page-refactor.html">the whole
transcript</a>,
boring bits and all.  Also, of course the commits are all in my repo.</p>

<p>Was this safe to run on my laptop?  Well, I think so.</p>

<p>Claude’s general tool-running security is pretty lousy.  It says it won’t touch
stuff outside the project directory, and tries to ask for permission, but it’s
pretty unintelligent.  When in doubt, throw it all in a container.  Anthropic
<a href="https://code.claude.com/docs/en/devcontainer">offers some</a>.  But there’s also
<strong>sandbox mode</strong>.  In sandbox mode, Claude uses bubblewrap or seatbelts, which
are effectively process namespacing tools.  In sandbox mode, you can tell
Claude to go ahead and try whatever it wants.  If the kernel prevents it, then
it will ask permission.  This isn’t a foolproof system, but it’s suitable for
“hackin’ on my personal website”.</p>

<h3 id="project-two--rjbscloud-hacking-on-the-web">Project Two ¾: rjbs.cloud hacking on the web</h3>

<p>Last bit about using Claude for my personal site!</p>

<p>My friend David is much more of a power user of Claude than I am.  The other
day, he said he was kicking off some bugfixes from a taxi.  I said, “How does
that work?”  It’s like this:  Just like you can chat with Claude in your
browser and ask it to explain how an octocoupler works, you can code with
Claude and ask it to make changes to your software.  It’s like an IDE, but
there’s no human-operable editor.  (Kind of like emacs, heyooooooo!)</p>

<p>You give Claude permission to access your GitHub repos, and it runs its edits
and other tool use inside Anthropic’s compute cloud.  When it’s done, it can
create PRs for you.</p>

<p>I am not enthusiastic about this setup, although “fire off a worker to get
started on a problem” is not a bad idea.  It’s mostly that Claude Code on the
Web is pretty limited and I don’t think it will be suitable for my primary work
any time soon.  Also, I’m less clear on the entire security model of delegated
GitHub access through Claude.  I need to really read the docs, here.</p>

<p>On the <em>other hand</em>, I fixed a bit of styling on my blog from a chat on my
tablet.  This all fell under “pretty neat, worked great, not interested”.</p>

<p><img src="/assets/2026/claude-code-on-the-web.webp" alt="Claude Code on the Web" /></p>]]></content><author><name>Ricardo Signes</name></author><category term="programming" /><category term="agents" /><summary type="html"><![CDATA[I’ve been trying more things with Clade Code, and I want to keep some notes on how it went. This is the second post in a probably-short series about early adventures with the tool.]]></summary></entry><entry><title type="html">experiments with claude, part ⅰ: signatures</title><link href="https://rjbs.cloud/blog/2026/03/experiments-with-claude-i/" rel="alternate" type="text/html" title="experiments with claude, part ⅰ: signatures" /><published>2026-03-10T12:00:00+00:00</published><updated>2026-03-10T12:00:00+00:00</updated><id>https://rjbs.cloud/blog/2026/03/experiments-with-claude-i</id><content type="html" xml:base="https://rjbs.cloud/blog/2026/03/experiments-with-claude-i/"><![CDATA[<p>I’ve been slowly ramping up my use of Claude for coding issues.  I’ve been
meaning to write a bit more about how I use it, and had been putting that off
until I finished a few things.  With some of those done, I thought I’d write up
some notes on how it’s gone, finally.  Over the next little while, I’ll post
some actual work I’ve done.  Later, I’ll try to write some more sort of general
thoughts: other things I might try, what general tactics have felt useful,
places where I think things are particularly problematic, and so on.</p>

<p>I started out fairly negative on “agentic coding”, and I still have a lot of
opinions, but they now include that (a) coding agents are not going anywhere
and (b) the resulting code can be of sufficient quality to be worth using in
real work.</p>

<h2 id="project-one--cassandane-signatures">Project One:  Cassandane Signatures</h2>

<p>I work on <a href="https://cyrusimap.org/dev">Cyrus IMAP</a>, an open-source JMAP, IMAP,
CalDAV and CardDAV server.  Cassandane is the Cyrus test suite’s largest
component.  It’s a big pile of Perl, around 200k LOC.  In general, each test is
a separate subroutine stored in its own file.  The whole thing has upsides and
downsides.  One of the smaller, but noticeable, downsides: basically none of
that code used subroutine signatures.  I try to always use subroutine
signatures in new Perl code.  I’d begun using them in some new Cassandane code,
but it was just a drop in the ocean.  I wanted them everywhere, and to be the
clear default.  My existing “convert subs to use signatures” code munging
program I had lying didn’t cut it, for a variety of boring reasons, including
that it didn’t cope with Perl subroutine attributes, which Cassandane uses
extensively.</p>

<p>I wanted to, in one swoop, convert all of Cassandane’s tests to use subroutine
signatures.  I considered futzing with my old code for this, but then I
thought, “This seems like a nice simple job to test out Claude”.  I gave
Anthropic $20, installed Claude Code, and fired it up.</p>

<p>Claude strategy was a lot like mine:  rather than go edit every file, it wrote
a program that would edit all the files.  It was sort of terrible, around 300
lines of code.  Later I tried to write my own version.  It never quite worked
(after five to ten minutes of work, anyway), but it was close, and under 50
lines.  But the good news is that <em>Claude’s worked, and then I could delete
it</em>.  If I was building a program to use and maintain, I would never have
accepted that thing.  But I didn’t need to.  I could run the program and look
at the git diff.  There wasn’t even a security concern.  It all lived in a
container.</p>

<p>Claude needed help.  Its first go was so-so.  Claude couldn’t check its own
work because it didn’t know how to use the Docker-driven build-and-test system
I use for Cyrus, and so Claude couldn’t run the tests.  It could compile-test
the tests, though, which went a long way.  It iterated for an hour or so.
Sometimes I’d hop in and tell it what it was doing wrong, or that it could stop
worrying about some issue.</p>

<p>When it was done, I had a diff that was thousands of lines long and touched
1,500+ files.  I spent a long time (several shifts of 15 minutes each)
reviewing the diff.  The diff was so close to perfectly uniform as to be
mind-numbing.  But it was my job to make sure I wasn’t sending bogus changes
for review to a colleague without vetting it first.  (After all, had I written
my own code-transforming program entirely by hand and run that, I wouldn’t have
sent <em>its</em> output along for code review without a careful reading!)</p>

<p>I found some minor bugs and fixed them in separate commits.  You can read the
<a href="https://github.com/cyrusimap/cyrus-imapd/pull/5695/commits">whole changeset</a>
if you want.  You’ll see it’s six commits by me, one by Claude.</p>

<p>If this was the only value I got out of the $20, it would’ve been well worth
it, but I went on to get a lot more done on those $20.  I’ll write more about
some other, more interesting work, over the next few days.</p>]]></content><author><name>Ricardo Signes</name></author><category term="programming" /><category term="agents" /><category term="perl" /><summary type="html"><![CDATA[I’ve been slowly ramping up my use of Claude for coding issues. I’ve been meaning to write a bit more about how I use it, and had been putting that off until I finished a few things. With some of those done, I thought I’d write up some notes on how it’s gone, finally. Over the next little while, I’ll post some actual work I’ve done. Later, I’ll try to write some more sort of general thoughts: other things I might try, what general tactics have felt useful, places where I think things are particularly problematic, and so on.]]></summary></entry><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></feed>